aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorMisko Hevery2010-08-10 11:46:37 -0700
committerMisko Hevery2010-08-10 11:46:37 -0700
commit8d635cfb876e844302f24b8d08744cf44d5e7070 (patch)
treeafa3c5531c38d81c000c69601648743878c726c5 /test
parent7673b2a2b291a4fc627e1cbdb8201f116a97b016 (diff)
parent86c2ef87d5069f0836079e171c0f33efcf2b5d24 (diff)
downloadangular.js-8d635cfb876e844302f24b8d08744cf44d5e7070.tar.bz2
Merge branch 'master' of github.com:angular/angular.js
Diffstat (limited to 'test')
-rw-r--r--test/scenario/DSLSpec.js113
-rw-r--r--test/scenario/MatcherSpec.js30
-rw-r--r--test/scenario/RunnerSpec.js181
-rw-r--r--test/scenario/TestContext.js15
4 files changed, 219 insertions, 120 deletions
diff --git a/test/scenario/DSLSpec.js b/test/scenario/DSLSpec.js
index 5aac9752..374f49c8 100644
--- a/test/scenario/DSLSpec.js
+++ b/test/scenario/DSLSpec.js
@@ -1,39 +1,37 @@
describe("DSL", function() {
- var lastStep, executeStep, lastDocument;
+ var lastDocument, executeFuture, Expect;
beforeEach(function() {
- lastStep = null;
- $scenario = {
- addStep: function(name, stepFunction) {
- lastStep = { name:name, fn: stepFunction};
- }
- };
- executeStep = function(step, html, callback) {
- lastDocument =_jQuery('<div>' + html + '</div>');
+ setUpContext();
+ executeFuture = function(future, html, callback) {
+ lastDocument = _jQuery('<div>' + html + '</div>');
_jQuery(document.body).append(lastDocument);
var specThis = {
testWindow: window,
- testDocument: lastDocument
+ testDocument: lastDocument,
+ jQuery: _jQuery
};
- step.fn.call(specThis, callback || noop);
+ future.behavior.call(specThis, callback || noop);
};
+ Expect = _window.expect;
});
describe("input", function() {
var input = angular.scenario.dsl.input;
+
it('should enter', function() {
- input('name').enter('John');
- expect(lastStep.name).toEqual("Set input text of 'name' to 'John'");
- executeStep(lastStep, '<input type="text" name="name" />');
+ var future = input('name').enter('John');
+ expect(future.name).toEqual("input 'name' enter 'John'");
+ executeFuture(future, '<input type="text" name="name" />');
expect(lastDocument.find('input').val()).toEqual('John');
});
it('should select', function() {
- input('gender').select('female');
- expect(lastStep.name).toEqual("Select radio 'gender' to 'female'");
- executeStep(lastStep,
+ var future = input('gender').select('female');
+ expect(future.name).toEqual("input 'gender' select 'female'");
+ executeFuture(future,
'<input type="radio" name="0@gender" value="male" checked/>' +
'<input type="radio" name="0@gender" value="female"/>');
expect(lastDocument.find(':radio:checked').length).toEqual(1);
@@ -41,15 +39,80 @@ describe("DSL", function() {
});
});
- describe('expect', function() {
- var dslExpect = angular.scenario.dsl.expect;
- describe('repeater', function() {
- it('should check the count of repeated elements', function() {
- dslExpect.repeater('.repeater-row').count.toEqual(2);
- expect(lastStep.name).toEqual("Expect that there are 2 items in Repeater with selector '.repeater-row'");
- var html = "<div class='repeater-row'>a</div><div class='repeater-row'>b</div>";
- executeStep(lastStep, html);
+ describe('repeater', function() {
+
+ var repeater = angular.scenario.dsl.repeater;
+ it('should count', function() {
+ var future = repeater('.repeater-row').count();
+ expect(future.name).toEqual("repeater '.repeater-row' count");
+ executeFuture(future,
+ "<div class='repeater-row'>a</div>" +
+ "<div class='repeater-row'>b</div>",
+ function(value) {
+ future.fulfill(value);
+ });
+ expect(future.fulfilled).toBeTruthy();
+ expect(future.value).toEqual(2);
+ });
+
+ it('should collect', function() {
+ var future = repeater('.epic').collect();
+ expect(future.name).toEqual("repeater '.epic' collect");
+ executeFuture(future,
+ "<table>" +
+ "<tr class='epic'>" +
+ "<td ng:bind='hero'>John Marston</td>" +
+ "<td ng:bind='game'>Red Dead Redemption</td>" +
+ "</tr>" +
+ "<tr class='epic'>" +
+ "<td ng:bind='hero'>Nathan Drake</td>" +
+ "<td ng:bind='game'>Uncharted 2</td>" +
+ "</tr>" +
+ "</table>",
+ function(value) {
+ future.fulfill(value);
});
+ expect(future.fulfilled).toBeTruthy();
+ expect(future.value[0].boundTo('hero')).toEqual('John Marston');
+ expect(future.value[0].boundTo('game')).toEqual('Red Dead Redemption');
+ expect(future.value[1].boundTo('hero')).toEqual('Nathan Drake');
+ expect(future.value[1].boundTo('game')).toEqual('Uncharted 2');
+ });
+ });
+
+ describe('element', function() {
+ var element = angular.scenario.dsl.element;
+ var html;
+ beforeEach(function() {
+ html = '<div class="container">' +
+ '<table class="reports-detail">' +
+ '<span class="desc">Description : ' +
+ '<span ng:bind="report.description">Details...</span>' +
+ '</span>' +
+ '<span>Date created: ' +
+ '<span ng:bind="report.creationDate">01/01/01</span>' +
+ '</span>' +
+ '</table>' +
+ '</div>';
+ });
+ it('should find elements on the page and provide jquery api', function() {
+ var future = element('.reports-detail');
+ expect(future.name).toEqual("Find element '.reports-detail'");
+ executeFuture(future, html, function(value) { future.fulfill(value); });
+ expect(future.fulfilled).toBeTruthy();
+ expect(future.value.text()).
+ toEqual('Description : Details...Date created: 01/01/01');
+ expect(future.value.find('.desc').text()).
+ toEqual('Description : Details...');
+ });
+ it('should know how to find ng:bind elements on page', function() {
+ var future = element('.reports-detail');
+ expect(future.name).toEqual("Find element '.reports-detail'");
+ executeFuture(future, html, function(value) { future.fulfill(value); });
+ expect(future.fulfilled).toBeTruthy();
+ expect(future.value.boundTo('report.description')).toEqual('Details...');
+ expect(future.value.boundTo('report.creationDate')).toEqual('01/01/01');
+ expect(future.value.boundTo('doesnotexist')).not.toBeDefined();
});
});
});
diff --git a/test/scenario/MatcherSpec.js b/test/scenario/MatcherSpec.js
new file mode 100644
index 00000000..c47f0c25
--- /dev/null
+++ b/test/scenario/MatcherSpec.js
@@ -0,0 +1,30 @@
+describe('Matcher', function () {
+ function executeFutures() {
+ for(var i in $scenario.currentSpec.futures) {
+ var future = $scenario.currentSpec.futures[i];
+ future.behavior.call({}, function(value) { future.fulfill(value); });
+ }
+ }
+ var matcher;
+ beforeEach(function() {
+ setUpContext();
+ var future = $scenario.addFuture('Calculate first future', function(done) {
+ done(123);
+ });
+ matcher = new Matcher(this, future);
+
+ });
+ it('should correctly match toEqual', function() {
+ matcher.toEqual(123);
+ executeFutures();
+ });
+ it('should throw an error when incorrect match toEqual', function() {
+ matcher.toEqual(456);
+ try {
+ executeFutures();
+ fail();
+ } catch (e) {
+ expect(e).toEqual('Expected 456 but was 123');
+ }
+ });
+}); \ No newline at end of file
diff --git a/test/scenario/RunnerSpec.js b/test/scenario/RunnerSpec.js
index bbdd9e8c..b12c43c6 100644
--- a/test/scenario/RunnerSpec.js
+++ b/test/scenario/RunnerSpec.js
@@ -1,40 +1,30 @@
-describe('Runner', function(){
- var scenario, runner, log, Describe, It, $scenario, body;
-
- function logger(text) {
- return function(done){
- log += text;
- (done||noop)();
- };
- }
-
- beforeEach(function(){
- log = '';
- scenario = {};
+describe('Runner', function() {
+
+ var Describe, It, BeforeEach, AfterEach, body;
+
+ beforeEach(function() {
+ setUpContext();
+ Describe = _window.describe;
+ It = _window.it;
+ BeforeEach = _window.beforeEach;
+ AfterEach = _window.afterEach;
body = _jQuery('<div></div>');
- runner = new angular.scenario.Runner(scenario, _jQuery);
- Describe = scenario.describe;
- BeforeEach = scenario.beforeEach;
- AfterEach = scenario.afterEach;
- It = scenario.it;
- $scenario = scenario.$scenario;
});
- describe('describe', function(){
- it('should consume the describe functions', function(){
+ describe('describe', function() {
+ it('should consume the describe functions', function() {
Describe('describe name', logger('body'));
-
expect(log).toEqual('body');
});
- describe('it', function(){
- it('should consume it', function(){
- Describe('describe name', function(){
+ 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.steps).toEqual([]);
+ expect(spec.futures).toEqual([]);
expect(spec.name).toEqual('describe name: it should text');
});
@@ -42,18 +32,18 @@ describe('Runner', function(){
// WRITE ME!!!!
});
- it('should create a failing step if there is a javascript error', function(){
+ it('should create a failing future if there is a javascript error', function() {
var spec;
- Describe('D1', function(){
- It('I1', function(){
+ Describe('D1', function() {
+ It('I1', function() {
spec = $scenario.currentSpec;
throw {message: 'blah'};
});
});
- var step = spec.steps[0];
- expect(step.name).toEqual('blah');
+ var future = spec.futures[0];
+ expect(future.name).toEqual('blah');
try {
- step.fn();
+ future.behavior();
fail();
} catch (e) {
expect(e.message).toEqual('blah');
@@ -63,7 +53,7 @@ describe('Runner', function(){
describe('beforeEach', function() {
it('should execute beforeEach before every it', function() {
- Describe('describe name', function(){
+ Describe('describe name', function() {
BeforeEach(logger('before;'));
It('should text', logger('body;'));
It('should text2', logger('body2;'));
@@ -73,7 +63,7 @@ describe('Runner', function(){
});
describe('afterEach', function() {
it('should execute afterEach after every it', function() {
- Describe('describe name', function(){
+ Describe('describe name', function() {
AfterEach(logger('after;'));
It('should text1', logger('body1;'));
It('should text2', logger('body2;'));
@@ -82,7 +72,7 @@ describe('Runner', function(){
});
it('should always execute afterEach after every it', function() {
- Describe('describe name', function(){
+ Describe('describe name', function() {
AfterEach(logger('after;'));
It('should text', function() {
logger('body1;')();
@@ -95,62 +85,63 @@ describe('Runner', function(){
it('should report an error if afterEach fails', function() {
var next;
- Describe('describe name', function(){
+ Describe('describe name', function() {
AfterEach(function() {
- $scenario.addStep('afterEachLog', logger('after;'));
- $scenario.addStep('afterEachThrow', function() {
+ $scenario.addFuture('afterEachLog', logger('after;'));
+ $scenario.addFuture('afterEachThrow', function() {
throw "AfterError";
});
});
It('should text1', function() {
- $scenario.addStep('step1', logger('step1;'));
+ $scenario.addFuture('future1', logger('future1;'));
});
It('should text2', function() {
- $scenario.addStep('step2', logger('step2;'));
+ $scenario.addFuture('future2', logger('future2;'));
});
});
$scenario.run(body);
- expect(log).toEqual('step1;after;step2;after;');
- expect(scenario.$testrun.results).toEqual([
+ expect(log).toEqual('future1;after;future2;after;');
+ expect(_window.$testrun.results).toEqual([
{ name : 'describe name: it should text1',
passed : false,
error : 'AfterError',
- steps : [ 'step1', 'afterEachLog', 'afterEachThrow' ] },
+ steps : [ 'future1', 'afterEachLog', 'afterEachThrow' ] },
{ name : 'describe name: it should text2',
passed : false,
error : 'AfterError',
- steps : [ 'step2', 'afterEachLog', 'afterEachThrow' ] }]);
+ steps : [ 'future2', 'afterEachLog', 'afterEachThrow' ] }]);
});
});
});
- describe('steps building', function(){
- it('should queue steps', function(){
- function step(){};
- Describe('name', function(){
- It('should', function(){
- $scenario.addStep('stepname', step);
+ describe('future building', function() {
+ it('should queue futures', function() {
+ function behavior(){};
+ Describe('name', function() {
+ It('should', function() {
+ $scenario.addFuture('futureName', behavior);
});
});
- expect($scenario.specs['name: it should'].steps).toEqual([{name:'stepname', fn:step}]);
+ expect($scenario.specs['name: it should'].futures[0].name).
+ toEqual('futureName');
});
});
- describe('execution', function(){
- it('should execute the queued steps', function(){
+ describe('execution', function() {
+ it('should execute the queued futures', function() {
var next, firstThis, secondThis, doneThis, spec;
$scenario.specs['spec'] = {
- steps: [
- {name:'step1', fn: function(done) {
- next = done;
- log += 'first;';
- firstThis = this;
- }},
- {name:'step2', fn:function(done){
- next = done;
- log += 'second;';
- secondThis = this;
- }}
+ futures: [
+ new Future('future1', function(done) {
+ next = done;
+ log += 'first;';
+ firstThis = this;
+ }),
+ new Future('future2', function(done) {
+ next = done;
+ log += 'second;';
+ secondThis = this;
+ })
]
};
@@ -174,18 +165,18 @@ describe('Runner', function(){
expect(spec.result.passed).toEqual(true);
});
- it('should handle exceptions in a step', function(){
+ it('should handle exceptions in a future', function() {
$scenario.specs['spec'] = {
- steps: [
- {name: 'first step', fn: function(done) {
+ futures: [
+ new Future('first future', function(done) {
done();
- }},
- {name:'error', fn:function(done) {
+ }),
+ new Future('error', function(done) {
throw "MyError";
- }},
- {name: 'should not execute', fn: function(done) {
+ }),
+ new Future('should not execute', function(done) {
done();
- }}
+ })
]
};
@@ -195,30 +186,30 @@ describe('Runner', function(){
expect(spec.result.failed).toEqual(true);
expect(spec.result.finished).toEqual(true);
expect(spec.result.error).toEqual("MyError");
- expect(scenario.$testrun.results).toEqual([{
+ expect(_window.$testrun.results).toEqual([{
name: 'spec',
passed: false,
error: 'MyError',
- steps: ['first step', 'error']}]);
+ steps: ['first future', 'error']}]);
});
});
- describe('run', function(){
+ describe('run', function() {
var next;
beforeEach(function() {
- Describe('d1', function(){
- It('it1', function(){ $scenario.addStep('s1', logger('s1,')); });
- It('it2', function(){
- $scenario.addStep('s2', logger('s2,'));
- $scenario.addStep('s2.2', function(done){ next = done; });
+ 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; });
});
});
- Describe('d2', function(){
- It('it3', function(){ $scenario.addStep('s3', logger('s3,')); });
- It('it4', function(){ $scenario.addStep('s4', logger('s4,')); });
+ Describe('d2', function() {
+ It('it3', function() { $scenario.addFuture('s3', logger('s3,')); });
+ It('it4', function() { $scenario.addFuture('s4', logger('s4,')); });
});
});
- it('should execute all specs', function(){
+ it('should execute all specs', function() {
$scenario.run(body);
expect(log).toEqual('s1,s2,');
@@ -226,20 +217,20 @@ describe('Runner', function(){
expect(log).toEqual('s1,s2,s3,s4,');
});
it('should publish done state and results as tests are run', function() {
- expect(scenario.$testrun.done).toBeFalsy();
- expect(scenario.$testrun.results).toEqual([]);
+ expect(_window.$testrun.done).toBeFalsy();
+ expect(_window.$testrun.results).toEqual([]);
$scenario.run(body);
- expect(scenario.$testrun.done).toBeFalsy();
- expect(scenario.$testrun.results).toEqual([
- {name: 'd1: it it1', passed: true, steps: ['s1']}
+ expect(_window.$testrun.done).toBeFalsy();
+ expect(_window.$testrun.results).toEqual([
+ {name: 'd1: it it1', passed: true, error: undefined, steps: ['s1']}
]);
next();
- expect(scenario.$testrun.done).toBeTruthy();
- expect(scenario.$testrun.results).toEqual([
- {name: 'd1: it it1', passed: true, steps: ['s1']},
- {name: 'd1: it it2', passed: true, steps: ['s2', 's2.2']},
- {name: 'd2: it it3', passed: true, steps: ['s3']},
- {name: 'd2: it it4', passed: true, steps: ['s4']}
+ 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']}
]);
});
});
diff --git a/test/scenario/TestContext.js b/test/scenario/TestContext.js
new file mode 100644
index 00000000..0c8e6143
--- /dev/null
+++ b/test/scenario/TestContext.js
@@ -0,0 +1,15 @@
+var _window, runner, log, $scenario;
+
+function logger(text) {
+ return function(done){
+ log += text;
+ (done||noop)();
+ };
+}
+
+function setUpContext() {
+ _window = {};
+ runner = new angular.scenario.Runner(_window, _jQuery);
+ $scenario = _window.$scenario;
+ log = '';
+}