aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndres Ornelas2010-06-09 16:05:51 -0700
committerAndres Ornelas2010-06-09 16:05:51 -0700
commitbbb45a7eed5264a343c191f3abfbe6f6b5d51139 (patch)
tree340453d4268200f36a7934274450502145e123cf
parent36b58b235eeca4e9580162a697d8a96c41263ebc (diff)
parentd0a468153d98c892323cb135b509cb46f67e44fd (diff)
downloadangular.js-bbb45a7eed5264a343c191f3abfbe6f6b5d51139.tar.bz2
Merge branch 'repeater'
-rw-r--r--src/scenario/DSL.js31
-rw-r--r--src/scenario/Runner.js15
-rw-r--r--test/scenario/DSLSpec.js14
-rw-r--r--test/scenario/RunnerSpec.js40
4 files changed, 82 insertions, 18 deletions
diff --git a/src/scenario/DSL.js b/src/scenario/DSL.js
index b318e99c..194a28d6 100644
--- a/src/scenario/DSL.js
+++ b/src/scenario/DSL.js
@@ -2,7 +2,7 @@ angular.scenario.dsl.browser = {
navigateTo: function(url){
$scenario.addStep('Navigate to: ' + url, function(done){
var self = this;
- self.testFrame.load(function(){
+ this.testFrame.load(function(){
self.testFrame.unbind();
self.testWindow = self.testFrame[0].contentWindow;
self.testDocument = jQuery(self.testWindow.document);
@@ -11,7 +11,7 @@ angular.scenario.dsl.browser = {
self.notifyWhenNoOutstandingRequests(done);
});
if (this.testFrame.attr('src') == url) {
- this.testWindow.location.reload();
+ this.testFrame[0].contentWindow.location.reload();
} else {
this.testFrame.attr('src', url);
}
@@ -44,17 +44,20 @@ angular.scenario.dsl.input = function(selector) {
};
};
-angular.scenario.dsl.expect = function(selector) {
- return {
- toEqual: function(expected) {
- $scenario.addStep("Expect that " + selector + " equals '" + expected + "'", function(done){
- var attrName = selector.substring(2, selector.length - 2);
- var binding = this.testDocument.find('span[ng-bind=' + attrName + ']');
- if (binding.text() != expected) {
- this.result.fail("Expected '" + expected + "' but was '" + binding.text() + "'");
+angular.scenario.dsl.expect = {
+ repeater: function(selector) {
+ return {
+ count: {
+ toEqual: function(number) {
+ $scenario.addStep("Expect that there are " + number + " items in Repeater with selector '" + selector + "'", function(done) {
+ var items = this.testDocument.find(selector);
+ if (items.length != number) {
+ this.result.fail("Expected " + number + " but was " + items.length);
+ }
+ done();
+ });
}
- done();
- });
- }
- };
+ }
+ };
+ }
};
diff --git a/src/scenario/Runner.js b/src/scenario/Runner.js
index da6e2c39..8e0cc909 100644
--- a/src/scenario/Runner.js
+++ b/src/scenario/Runner.js
@@ -8,23 +8,34 @@ angular.scenario.Runner = function(scope, jQuery){
var specs = this.specs = {};
var path = [];
- this.scope.describe = function describe(name, body){
+ this.scope.describe = function(name, body){
path.push(name);
body();
path.pop();
};
- this.scope.it = function it(name, body) {
+ var beforeEach = noop;
+ var afterEach = noop;
+ this.scope.beforeEach = function(body) {
+ beforeEach = body;
+ };
+ this.scope.afterEach = function(body) {
+ afterEach = body;
+ };
+ this.scope.it = function(name, body) {
var specName = path.join(' ') + ': it ' + name;
self.currentSpec = specs[specName] = {
name: specName,
steps:[]
};
try {
+ beforeEach();
body();
} catch(err) {
self.addStep(err.message || 'ERROR', function(){
throw err;
});
+ } finally {
+ afterEach();
}
self.currentSpec = null;
};
diff --git a/test/scenario/DSLSpec.js b/test/scenario/DSLSpec.js
index bed1f008..5aac9752 100644
--- a/test/scenario/DSLSpec.js
+++ b/test/scenario/DSLSpec.js
@@ -40,4 +40,16 @@ describe("DSL", function() {
expect(lastDocument.find(':radio:checked').val()).toEqual('female');
});
});
-}); \ No newline at end of file
+
+ 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);
+ });
+ });
+ });
+});
diff --git a/test/scenario/RunnerSpec.js b/test/scenario/RunnerSpec.js
index 35d74f51..ca6e8eb2 100644
--- a/test/scenario/RunnerSpec.js
+++ b/test/scenario/RunnerSpec.js
@@ -14,6 +14,8 @@ describe('Runner', function(){
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;
});
@@ -36,7 +38,10 @@ describe('Runner', function(){
expect(spec.name).toEqual('describe name: it should text');
});
- it('should camplain on duplicate it', angular.noop);
+ it('should complain on duplicate it', function() {
+ // WRITE ME!!!!
+ });
+
it('should create a failing step if there is a javascript error', function(){
var spec;
Describe('D1', function(){
@@ -55,6 +60,39 @@ describe('Runner', function(){
};
});
});
+
+ 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;');
+ });
+ });
+ describe('afterEach', function() {
+ it('should execute afterEach after every it', function() {
+ Describe('describe name', function(){
+ AfterEach(logger('after;'));
+ It('should text', logger('body;'));
+ It('should text2', logger('body2;'));
+ });
+ expect(log).toEqual('body;after;body2;after;');
+ });
+
+ it('should always execute afterEach after every it', function() {
+ Describe('describe name', function(){
+ AfterEach(logger('after;'));
+ It('should text', function() {
+ log = 'body;';
+ throw "MyError";
+ });
+ It('should text2', logger('body2;'));
+ });
+ expect(log).toEqual('body;after;body2;after;');
+ });
+ });
});
describe('steps building', function(){