aboutsummaryrefslogtreecommitdiffstats
path: root/test/scenario/RunnerSpec.js
diff options
context:
space:
mode:
Diffstat (limited to 'test/scenario/RunnerSpec.js')
-rw-r--r--test/scenario/RunnerSpec.js302
1 files changed, 80 insertions, 222 deletions
diff --git a/test/scenario/RunnerSpec.js b/test/scenario/RunnerSpec.js
index 2986add6..43d97257 100644
--- a/test/scenario/RunnerSpec.js
+++ b/test/scenario/RunnerSpec.js
@@ -1,238 +1,96 @@
-describe('Runner', function() {
-
- var Describe, It, BeforeEach, AfterEach, body;
-
+/**
+ * Mock spec runner.
+ */
+function MockSpecRunner() {}
+MockSpecRunner.prototype.run = function(ui, spec, specDone) {
+ spec.fn.call(this);
+ specDone();
+};
+
+describe('angular.scenario.Runner', function() {
+ var $window;
+ var runner;
+
beforeEach(function() {
- setUpContext();
- Describe = _window.describe;
- It = _window.it;
- BeforeEach = _window.beforeEach;
- AfterEach = _window.afterEach;
- body = _jQuery('<div></div>');
- });
-
- describe('describe', function() {
- it('should consume the describe functions', function() {
- Describe('describe name', logger('body'));
- expect(log).toEqual('body');
+ // Trick to get the scope out of a DSL statement
+ angular.scenario.dsl('dslScope', function() {
+ var scope = this;
+ return function() { return scope; };
});
-
- describe('it', function() {
- it('should consume it', function() {
- Describe('describe name', function() {
- It('should text', logger('body'));
- });
- expect(log).toEqual('body');
- var spec = $scenario.specs['describe name: it should text'];
- expect(spec.futures).toEqual([]);
- expect(spec.name).toEqual('describe name: it should text');
- });
-
- it('should complain on duplicate it', function() {
- // WRITE ME!!!!
- });
-
- it('should create a failing future if there is a javascript error', function() {
- var spec;
- Describe('D1', function() {
- It('I1', function() {
- spec = $scenario.currentSpec;
- throw {message: 'blah'};
- });
- });
- var future = spec.futures[0];
- expect(future.name).toEqual('blah');
- try {
- future.behavior();
- fail();
- } catch (e) {
- expect(e.message).toEqual('blah');
- }
- });
- });
-
- describe('beforeEach', function() {
- it('should execute beforeEach before every it', function() {
- Describe('describe name', function() {
- BeforeEach(logger('before;'));
- It('should text', logger('body;'));
- It('should text2', logger('body2;'));
- });
- expect(log).toEqual('before;body;before;body2;');
- });
+ // Trick to get the scope out of a DSL statement
+ angular.scenario.dsl('dslChain', function() {
+ return function() {
+ this.chained = 0;
+ this.chain = function() { this.chained++; return this; };
+ return this;
+ };
});
- describe('afterEach', function() {
- it('should execute afterEach after every it', function() {
- Describe('describe name', function() {
- AfterEach(logger('after;'));
- It('should text1', logger('body1;'));
- It('should text2', logger('body2;'));
- });
- expect(log).toEqual('body1;after;body2;after;');
- });
-
- it('should always execute afterEach after every it', function() {
- Describe('describe name', function() {
- AfterEach(logger('after;'));
- It('should text', function() {
- logger('body1;')();
- throw "MyError";
- });
- It('should text2', logger('body2;'));
- });
- expect(log).toEqual('body1;after;body2;after;');
- });
-
- it('should report an error if afterEach fails', function() {
- var next;
- Describe('describe name', function() {
- AfterEach(function() {
- $scenario.addFuture('afterEachLog', logger('after;'));
- $scenario.addFuture('afterEachThrow', function() {
- throw "AfterError";
- });
- });
- It('should text1', function() {
- $scenario.addFuture('future1', logger('future1;'));
- });
- It('should text2', function() {
- $scenario.addFuture('future2', logger('future2;'));
- });
- });
- $scenario.run(body);
- expect(log).toEqual('future1;after;future2;after;');
- expect(_window.$testrun.results).toEqual([
- { name : 'describe name: it should text1',
- passed : false,
- error : 'AfterError',
- steps : [ 'future1', 'afterEachLog', 'afterEachThrow' ] },
- { name : 'describe name: it should text2',
- passed : false,
- error : 'AfterError',
- steps : [ 'future2', 'afterEachLog', 'afterEachThrow' ] }]);
- });
+ $window = {};
+ runner = new angular.scenario.Runner($window);
+ });
+
+ afterEach(function() {
+ delete angular.scenario.dsl.dslScope;
+ delete angular.scenario.dsl.dslChain;
+ });
+
+ it('should publish the functions in the public API', function() {
+ angular.foreach(runner.api, function(fn, name) {
+ var func;
+ if (name in $window) {
+ func = $window[name];
+ }
+ expect(angular.isFunction(func)).toBeTruthy();
});
});
-
- describe('future building', function() {
- it('should queue futures', function() {
- function behavior(){}
- Describe('name', function() {
- It('should', function() {
- $scenario.addFuture('futureName', behavior);
+
+ it('should construct valid describe trees with public API', function() {
+ var before = [];
+ var after = [];
+ $window.describe('A', function() {
+ $window.beforeEach(function() { before.push('A'); });
+ $window.afterEach(function() { after.push('A'); });
+ $window.it('1', angular.noop);
+ $window.describe('B', function() {
+ $window.beforeEach(function() { before.push('B'); });
+ $window.afterEach(function() { after.push('B'); });
+ $window.it('2', angular.noop);
+ $window.describe('C', function() {
+ $window.beforeEach(function() { before.push('C'); });
+ $window.afterEach(function() { after.push('C'); });
+ $window.it('3', angular.noop);
});
});
- expect($scenario.specs['name: it should'].futures[0].name).
- toEqual('futureName');
});
+ var specs = runner.rootDescribe.getSpecs();
+ specs[0].fn();
+ expect(before).toEqual(['A', 'B', 'C']);
+ expect(after).toEqual(['C', 'B', 'A']);
+ expect(specs[2].definition.parent).toEqual(runner.rootDescribe);
+ expect(specs[0].definition.parent).toEqual(specs[2].definition.children[0]);
});
-
- describe('execution', function() {
- it('should execute the queued futures', function() {
- var next, firstThis, secondThis, doneThis, spec;
- $scenario.specs['spec'] = {
- futures: [
- new Future('future1', function(done) {
- next = done;
- log += 'first;';
- firstThis = this;
- }),
- new Future('future2', function(done) {
- next = done;
- log += 'second;';
- secondThis = this;
- })
- ]
- };
-
- spec = $scenario.execute('spec', function(done){
- log += 'done;';
- doneThis = this;
+
+ it('should publish the DSL statements to the $window', function() {
+ $window.describe('describe', function() {
+ $window.it('1', function() {
+ expect($window.dslScope).toBeDefined();
});
- expect(log).toEqual('first;');
- next();
- expect(log).toEqual('first;second;');
- next();
- expect(log).toEqual('first;second;done;');
- expect(spec === window).toEqual(false);
- expect(spec).toEqual(firstThis);
- expect(spec).toEqual(secondThis);
- expect(spec).toEqual(doneThis);
-
- expect(spec.result.failed).toEqual(false);
- expect(spec.result.finished).toEqual(true);
- expect(spec.result.error).toBeUndefined();
- expect(spec.result.passed).toEqual(true);
- });
-
- it('should handle exceptions in a future', function() {
- $scenario.specs['spec'] = {
- futures: [
- new Future('first future', function(done) {
- done();
- }),
- new Future('error', function(done) {
- throw "MyError";
- }),
- new Future('should not execute', function(done) {
- done();
- })
- ]
- };
-
- var spec = $scenario.execute('spec');
-
- expect(spec.result.passed).toEqual(false);
- expect(spec.result.failed).toEqual(true);
- expect(spec.result.finished).toEqual(true);
- expect(spec.result.error).toEqual("MyError");
- expect(_window.$testrun.results).toEqual([{
- name: 'spec',
- passed: false,
- error: 'MyError',
- steps: ['first future', 'error']}]);
});
+ runner.run(null/*ui*/, null/*application*/, MockSpecRunner, rethrow);
});
-
- describe('run', function() {
- var next;
- beforeEach(function() {
- Describe('d1', function() {
- It('it1', function() { $scenario.addFuture('s1', logger('s1,')); });
- It('it2', function() {
- $scenario.addFuture('s2', logger('s2,'));
- $scenario.addFuture('s2.2', function(done){ next = done; });
- });
+
+ it('should create a new scope for each DSL chain', function() {
+ $window.describe('describe', function() {
+ $window.it('1', function() {
+ var scope = $window.dslScope();
+ scope.test = "foo";
+ expect($window.dslScope().test).toBeUndefined();
});
- Describe('d2', function() {
- It('it3', function() { $scenario.addFuture('s3', logger('s3,')); });
- It('it4', function() { $scenario.addFuture('s4', logger('s4,')); });
+ $window.it('2', function() {
+ var scope = $window.dslChain().chain().chain();
+ expect(scope.chained).toEqual(2);
});
});
- it('should execute all specs', function() {
- $scenario.run(body);
-
- expect(log).toEqual('s1,s2,');
- next();
- expect(log).toEqual('s1,s2,s3,s4,');
- });
- it('should publish done state and results as tests are run', function() {
- expect(_window.$testrun.done).toBeFalsy();
- expect(_window.$testrun.results).toEqual([]);
- $scenario.run(body);
- expect(_window.$testrun.done).toBeFalsy();
- expect(_window.$testrun.results).toEqual([
- {name: 'd1: it it1', passed: true, error: undefined, steps: ['s1']}
- ]);
- next();
- expect(_window.$testrun.done).toBeTruthy();
- expect(_window.$testrun.results).toEqual([
- {name: 'd1: it it1', passed: true, error: undefined, steps: ['s1']},
- {name: 'd1: it it2', passed: true, error: undefined, steps: ['s2', 's2.2']},
- {name: 'd2: it it3', passed: true, error: undefined, steps: ['s3']},
- {name: 'd2: it it4', passed: true, error: undefined, steps: ['s4']}
- ]);
- });
+ runner.run(null/*ui*/, null/*application*/, MockSpecRunner, rethrow);
});
-
-}); \ No newline at end of file
+});