aboutsummaryrefslogtreecommitdiffstats
path: root/test/scenario/SpecRunnerSpec.js
diff options
context:
space:
mode:
Diffstat (limited to 'test/scenario/SpecRunnerSpec.js')
-rw-r--r--test/scenario/SpecRunnerSpec.js165
1 files changed, 165 insertions, 0 deletions
diff --git a/test/scenario/SpecRunnerSpec.js b/test/scenario/SpecRunnerSpec.js
new file mode 100644
index 00000000..81b66956
--- /dev/null
+++ b/test/scenario/SpecRunnerSpec.js
@@ -0,0 +1,165 @@
+/**
+ * Mock of all required UI classes/methods. (UI, Spec, Step).
+ */
+function UIMock() {
+ this.log = [];
+}
+UIMock.prototype = {
+ addSpec: function(spec) {
+ var log = this.log;
+ log.push('addSpec:' + spec.name);
+ return {
+ addStep: function(name) {
+ log.push('addStep:' + name);
+ return {
+ finish: function(e) {
+ log.push('step finish:' + (e ? e : ''));
+ return this;
+ },
+ error: function(e) {
+ log.push('step error:' + (e ? e : ''));
+ return this;
+ }
+ };
+ },
+ finish: function(e) {
+ log.push('spec finish:' + (e ? e : ''));
+ return this;
+ },
+ error: function(e) {
+ log.push('spec error:' + (e ? e : ''));
+ return this;
+ }
+ };
+ },
+};
+
+/**
+ * Mock Application
+ */
+function ApplicationMock($window) {
+ this.$window = $window;
+}
+ApplicationMock.prototype = {
+ executeAction: function(callback) {
+ callback.call(this.$window);
+ }
+};
+
+describe('angular.scenario.SpecRunner', function() {
+ var $window;
+ var runner;
+
+ beforeEach(function() {
+ $window = {};
+ runner = angular.scope();
+ runner.application = new ApplicationMock($window);
+ runner.$become(angular.scenario.SpecRunner);
+ });
+
+ it('should bind futures to the spec', function() {
+ runner.addFuture('test future', function(done) {
+ this.application.value = 10;
+ done();
+ });
+ runner.futures[0].execute(angular.noop);
+ expect(runner.application.value).toEqual(10);
+ });
+
+ it('should pass done to future action behavior', function() {
+ runner.addFutureAction('test future', function(done) {
+ expect(angular.isFunction(done)).toBeTruthy();
+ done(10, 20);
+ });
+ runner.futures[0].execute(function(error, result) {
+ expect(error).toEqual(10);
+ expect(result).toEqual(20);
+ });
+ });
+
+ it('should pass execute future action on the $window', function() {
+ runner.addFutureAction('test future', function(done) {
+ this.test = 'test value';
+ done();
+ });
+ runner.futures[0].execute(angular.noop);
+ expect($window.test).toEqual('test value');
+ });
+
+ it('should execute spec function and notify UI', function() {
+ var finished = false;
+ var ui = new UIMock();
+ var spec = {name: 'test spec', fn: function() {
+ this.test = 'some value';
+ }};
+ runner.addFuture('test future', function(done) {
+ done();
+ });
+ runner.run(ui, spec, function() {
+ finished = true;
+ });
+ expect(runner.test).toEqual('some value');
+ expect(finished).toBeTruthy();
+ expect(ui.log).toEqual([
+ 'addSpec:test spec',
+ 'addStep:test future',
+ 'step finish:',
+ 'spec finish:'
+ ]);
+ });
+
+ it('should execute notify UI on spec setup error', function() {
+ var finished = false;
+ var ui = new UIMock();
+ var spec = {name: 'test spec', fn: function() {
+ throw 'message';
+ }};
+ runner.run(ui, spec, function() {
+ finished = true;
+ });
+ expect(finished).toBeTruthy();
+ expect(ui.log).toEqual([
+ 'addSpec:test spec',
+ 'spec error:message'
+ ]);
+ });
+
+ it('should execute notify UI on step failure', function() {
+ var finished = false;
+ var ui = new UIMock();
+ var spec = {name: 'test spec', fn: angular.noop};
+ runner.addFuture('test future', function(done) {
+ done('failure message');
+ });
+ runner.run(ui, spec, function() {
+ finished = true;
+ });
+ expect(finished).toBeTruthy();
+ expect(ui.log).toEqual([
+ 'addSpec:test spec',
+ 'addStep:test future',
+ 'step finish:failure message',
+ 'spec finish:failure message'
+ ]);
+ });
+
+ it('should execute notify UI on step error', function() {
+ var finished = false;
+ var ui = new UIMock();
+ var spec = {name: 'test spec', fn: angular.noop};
+ runner.addFuture('test future', function(done) {
+ throw 'error message';
+ });
+ runner.run(ui, spec, function() {
+ finished = true;
+ });
+ expect(finished).toBeTruthy();
+ expect(ui.log).toEqual([
+ 'addSpec:test spec',
+ 'addStep:test future',
+ 'step error:error message',
+ 'spec finish:error message'
+ ]);
+ });
+
+});