From e7b90956552bc129935e7b8dec947eb3e30f3c29 Mon Sep 17 00:00:00 2001 From: Shyam Seshadri Date: Tue, 10 Aug 2010 19:10:43 -0700 Subject: Change repeater dsl to collect and return an array of string contents based on match --- src/scenario/DSL.js | 39 ++++++++++++++++++------------ test/scenario/DSLSpec.js | 63 +++++++++++++++++++++++++++++++++--------------- 2 files changed, 67 insertions(+), 35 deletions(-) diff --git a/src/scenario/DSL.js b/src/scenario/DSL.js index 96447aaf..2dd37250 100644 --- a/src/scenario/DSL.js +++ b/src/scenario/DSL.js @@ -43,6 +43,8 @@ angular.scenario.dsl.input = function(selector) { }; }, +angular.scenario.dsl.NG_BIND_PATTERN =/\{\{[^\}]+\}\}/; + angular.scenario.dsl.repeater = function(selector) { var namePrefix = "repeater '" + selector + "'"; return { @@ -51,23 +53,30 @@ angular.scenario.dsl.repeater = function(selector) { done(this.testDocument.find(selector).size()); }); }, - collect: function() { - return $scenario.addFuture(namePrefix + ' collect', function(done) { + collect: function(collectSelector) { + return $scenario.addFuture( + namePrefix + " collect '" + collectSelector + "'", + function(done) { var self = this; var doCollect = bind(this, function() { - var repeaterArray = []; + var repeaterArray = [], ngBindPattern; + var startIndex = collectSelector.search( + angular.scenario.dsl.NG_BIND_PATTERN); + if (startIndex >= 0) { + ngBindPattern = collectSelector.substring( + startIndex + 2, collectSelector.length - 2); + collectSelector = '*'; + + } this.testDocument.find(selector).each(function() { - var element = angular.extend(self.jQuery(this), - {bindings: [], - boundTo: function(name) { return this.bindings[name]; }} - ); - element.find('*').each(function() { - var bindName = self.jQuery(this).attr('ng:bind'); - if (bindName) { - element.bindings[bindName] = self.jQuery(this).text(); - } + var element = self.jQuery(this); + element.find(collectSelector). + each(function() { + var foundElem = self.jQuery(this); + if (foundElem.attr('ng:bind') == ngBindPattern) { + repeaterArray.push(foundElem.text()); + } }); - repeaterArray[index] = element; }); return repeaterArray; }); @@ -86,9 +95,9 @@ angular.scenario.dsl.element = function(selector) { boundTo: function(name) { return this.bindings[name]; } }); element.find('*').each(function() { - var bindName = self.jQuery(elem).attr('ng:bind'); + var bindName = self.jQuery(this).attr('ng:bind'); if (bindName) { - element.bindings[bindName] = self.jQuery(elem).text(); + element.bindings[bindName] = self.jQuery(this).text(); } }); done(element); diff --git a/test/scenario/DSLSpec.js b/test/scenario/DSLSpec.js index 62de9d6c..f414db6d 100644 --- a/test/scenario/DSLSpec.js +++ b/test/scenario/DSLSpec.js @@ -42,6 +42,27 @@ describe("DSL", function() { describe('repeater', function() { var repeater = angular.scenario.dsl.repeater; + var html; + beforeEach(function() { + html = "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "
" + + "John Marston" + + "" + + "Red Dead Redemption" + + "
" + + "Nathan Drake" + + "" + + "Uncharted" + + "
"; + }); it('should count', function() { var future = repeater('.repeater-row').count(); expect(future.name).toEqual("repeater '.repeater-row' count"); @@ -55,29 +76,31 @@ describe("DSL", function() { expect(future.value).toEqual(2); }); - it('should collect', function() { - var future = repeater('.epic').collect(); - expect(future.name).toEqual("repeater '.epic' collect"); - executeFuture(future, - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "
John MarstonRed Dead Redemption
Nathan DrakeUncharted 2
", - function(value) { - future.fulfill(value); + function assertFutureState(future, expectedName, expectedValue) { + expect(future.name).toEqual(expectedName); + executeFuture(future, html, 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'); + expect(future.value).toEqual(expectedValue); + } + it('should collect bindings', function() { + assertFutureState(repeater('.epic').collect('{{hero}}'), + "repeater '.epic' collect '{{hero}}'", + ['John Marston', 'Nathan Drake']); + assertFutureState(repeater('.epic').collect('{{game}}'), + "repeater '.epic' collect '{{game}}'", + ['Red Dead Redemption', 'Uncharted']); + }); + it('should collect normal selectors', function() { + assertFutureState(repeater('.epic').collect('.hero-name'), + "repeater '.epic' collect '.hero-name'", + ['John Marston', 'Nathan Drake']); + assertFutureState(repeater('.epic').collect('.game-name'), + "repeater '.epic' collect '.game-name'", + ['Red Dead Redemption', 'Uncharted']); }); + it('should collect normal attributes', function() {}); }); describe('element', function() { -- cgit v1.2.3 From 567341c10fc7f74d5333f27514bb2201f1dbee42 Mon Sep 17 00:00:00 2001 From: Shyam Seshadri Date: Wed, 11 Aug 2010 10:54:11 -0700 Subject: modify element dsl to understand angular bindings and return jquery object for further checking --- src/scenario/DSL.js | 23 +++++++++++------------ test/scenario/DSLSpec.js | 25 ++++++++++++++----------- 2 files changed, 25 insertions(+), 23 deletions(-) diff --git a/src/scenario/DSL.js b/src/scenario/DSL.js index 2dd37250..3b049dc6 100644 --- a/src/scenario/DSL.js +++ b/src/scenario/DSL.js @@ -89,17 +89,16 @@ angular.scenario.dsl.repeater = function(selector) { angular.scenario.dsl.element = function(selector) { var nameSuffix = "element '" + selector + "'"; return $scenario.addFuture('Find ' + nameSuffix, function(done) { - var self = this; - var element = angular.extend(this.testDocument.find(selector), { - bindings: [], - boundTo: function(name) { return this.bindings[name]; } - }); - element.find('*').each(function() { - var bindName = self.jQuery(this).attr('ng:bind'); - if (bindName) { - element.bindings[bindName] = self.jQuery(this).text(); - } - }); - done(element); + var self = this, repeaterArray = [], ngBindPattern; + var startIndex = selector.search(angular.scenario.dsl.NG_BIND_PATTERN); + if (startIndex >= 0) { + ngBindPattern = selector.substring(startIndex + 2, selector.length - 2); + var element = this.testDocument.find('*').filter(function() { + return self.jQuery(this).attr('ng:bind') == ngBindPattern; + }); + done(element); + } else { + done(this.testDocument.find(selector)); + } }); }; diff --git a/test/scenario/DSLSpec.js b/test/scenario/DSLSpec.js index f414db6d..c8e30917 100644 --- a/test/scenario/DSLSpec.js +++ b/test/scenario/DSLSpec.js @@ -100,7 +100,9 @@ describe("DSL", function() { "repeater '.epic' collect '.game-name'", ['Red Dead Redemption', 'Uncharted']); }); - it('should collect normal attributes', function() {}); + it('should collect normal attributes', function() { + //TODO(shyamseshadri) : Left as an exercise to the user + }); }); describe('element', function() { @@ -118,24 +120,25 @@ describe("DSL", function() { '' + ''; }); + function timeTravel(future) { + executeFuture(future, html, function(value) { future.fulfill(value); }); + expect(future.fulfilled).toBeTruthy(); + } 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(); + timeTravel(future); 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(); + it('should find elements with angular syntax', function() { + var future = element('{{report.description}}'); + expect(future.name).toEqual("Find element '{{report.description}}'"); + timeTravel(future); + expect(future.value.text()).toEqual('Details...'); + expect(future.value.attr('ng:bind')).toEqual('report.description'); }); }); }); -- cgit v1.2.3 From b27fb8a6448b7c8d59b533fe2df9497170fbaa70 Mon Sep 17 00:00:00 2001 From: Shyam Seshadri Date: Wed, 11 Aug 2010 11:42:04 -0700 Subject: Fix toEqual matcher to use angular.equals instead of simple == comparison, which breaks down for arrays and objects --- jsTestDriver.conf | 2 +- src/scenario/Matcher.js | 2 +- test/scenario/MatcherSpec.js | 8 ++++++++ test/testabilityPatch.js | 15 +++++++++------ 4 files changed, 19 insertions(+), 8 deletions(-) diff --git a/jsTestDriver.conf b/jsTestDriver.conf index bcd01694..c7d74b75 100644 --- a/jsTestDriver.conf +++ b/jsTestDriver.conf @@ -8,9 +8,9 @@ load: - src/Angular.js - src/JSON.js - src/*.js + - test/testabilityPatch.js - src/scenario/Runner.js - src/scenario/*.js - - test/testabilityPatch.js - test/angular-mocks.js - test/scenario/*.js - test/*.js diff --git a/src/scenario/Matcher.js b/src/scenario/Matcher.js index 62f094c8..a9c86571 100644 --- a/src/scenario/Matcher.js +++ b/src/scenario/Matcher.js @@ -18,4 +18,4 @@ Matcher.addMatcher = function(name, matcher) { }; }; -Matcher.addMatcher('toEqual', function(a,b) { return a == b; }); +Matcher.addMatcher('toEqual', angular.equals); diff --git a/test/scenario/MatcherSpec.js b/test/scenario/MatcherSpec.js index c47f0c25..2eddd2bc 100644 --- a/test/scenario/MatcherSpec.js +++ b/test/scenario/MatcherSpec.js @@ -27,4 +27,12 @@ describe('Matcher', function () { expect(e).toEqual('Expected 456 but was 123'); } }); + it('should correctly match arrays', function() { + var future = $scenario.addFuture('Calculate first future', function(done) { + done(['a', 'b']); + }); + matcher = new Matcher(this, future); + matcher.toEqual(['a', 'b']); + executeFutures(); + }); }); \ No newline at end of file diff --git a/test/testabilityPatch.js b/test/testabilityPatch.js index 5d0df780..e9a88b67 100644 --- a/test/testabilityPatch.js +++ b/test/testabilityPatch.js @@ -35,22 +35,25 @@ function childNode(element, index) { } extend(angular, { - 'bind': bind, + 'element': jqLite, 'compile': compile, + 'scope': createScope, 'copy': copy, - 'element': jqLite, 'extend': extend, + 'equals': equals, 'foreach': foreach, + 'noop':noop, + 'bind':bind, + 'toJson': toJson, + 'fromJson': fromJson, 'identity':identity, 'isUndefined': isUndefined, 'isDefined': isDefined, - 'isObject': isObject, 'isString': isString, 'isFunction': isFunction, + 'isObject': isObject, 'isNumber': isNumber, - 'isArray': isArray, - 'noop':noop, - 'scope': createScope + 'isArray': isArray }); -- cgit v1.2.3 From 946b5284cdcfde587bedf059e9beadee7da9f91b Mon Sep 17 00:00:00 2001 From: Shyam Seshadri Date: Wed, 11 Aug 2010 13:33:21 -0700 Subject: fix the other jstest driver conf --- jsTestDriver-jquery.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jsTestDriver-jquery.conf b/jsTestDriver-jquery.conf index e5dac727..ed58d269 100644 --- a/jsTestDriver-jquery.conf +++ b/jsTestDriver-jquery.conf @@ -8,9 +8,9 @@ load: - src/Angular.js - src/JSON.js - src/*.js + - test/testabilityPatch.js - src/scenario/Runner.js - src/scenario/*.js - - test/testabilityPatch.js - test/angular-mocks.js - test/scenario/*.js - test/*.js -- cgit v1.2.3 From 577ddaa5392dfad3b984515de0ad9262764a8721 Mon Sep 17 00:00:00 2001 From: Shyam Seshadri Date: Fri, 13 Aug 2010 09:31:06 -0700 Subject: Pull in Rajat's changes to add click and url checking dsl --- src/scenario/DSL.js | 50 ++++++++++++++++++++++++++++++++++++------------ test/scenario/DSLSpec.js | 45 +++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 81 insertions(+), 14 deletions(-) diff --git a/src/scenario/DSL.js b/src/scenario/DSL.js index 3b049dc6..ca944014 100644 --- a/src/scenario/DSL.js +++ b/src/scenario/DSL.js @@ -1,5 +1,6 @@ angular.scenario.dsl.browser = { navigateTo: function(url){ + var location = this.location; return $scenario.addFuture('Navigate to: ' + url, function(done){ var self = this; this.testFrame.load(function(){ @@ -15,8 +16,22 @@ angular.scenario.dsl.browser = { this.testFrame[0].contentWindow.location.reload(); } else { this.testFrame.attr('src', url); + location.setLocation(url); } }); + }, + location: { + href: "", + hash: "", + toEqual: function(url) { + return (this.hash == "" ? (url == this.href) : + (url == (this.href + "/#/" + this.hash))); + }, + setLocation: function(url) { + var urlParts = url.split("/#/"); + this.href = urlParts[0] || ""; + this.hash = urlParts[1] || ""; + } } }; @@ -88,17 +103,28 @@ angular.scenario.dsl.repeater = function(selector) { angular.scenario.dsl.element = function(selector) { var nameSuffix = "element '" + selector + "'"; - return $scenario.addFuture('Find ' + nameSuffix, function(done) { - var self = this, repeaterArray = [], ngBindPattern; - var startIndex = selector.search(angular.scenario.dsl.NG_BIND_PATTERN); - if (startIndex >= 0) { - ngBindPattern = selector.substring(startIndex + 2, selector.length - 2); - var element = this.testDocument.find('*').filter(function() { - return self.jQuery(this).attr('ng:bind') == ngBindPattern; - }); - done(element); - } else { - done(this.testDocument.find(selector)); + return { + find: function() { + return $scenario.addFuture('Find ' + nameSuffix, function(done) { + var self = this, repeaterArray = [], ngBindPattern; + var startIndex = selector.search(angular.scenario.dsl.NG_BIND_PATTERN); + if (startIndex >= 0) { + ngBindPattern = selector.substring(startIndex + 2, selector.length - 2); + var element = this.testDocument.find('*').filter(function() { + return self.jQuery(this).attr('ng:bind') == ngBindPattern; + }); + done(element); + } else { + done(this.testDocument.find(selector)); + } + }); + }, + click: function() { + var self = this; + return $scenario.addFuture('Click ' + nameSuffix, function(done) { + _jQuery(self).click(); + done(); + }); } - }); + }; }; diff --git a/test/scenario/DSLSpec.js b/test/scenario/DSLSpec.js index c8e30917..9bf6d31d 100644 --- a/test/scenario/DSLSpec.js +++ b/test/scenario/DSLSpec.js @@ -6,10 +6,12 @@ describe("DSL", function() { setUpContext(); executeFuture = function(future, html, callback) { lastDocument = _jQuery('
' + html + '
'); + lastFrame = _jQuery(''); _jQuery(document.body).append(lastDocument); var specThis = { testWindow: window, testDocument: lastDocument, + testFrame: lastFrame, jQuery: _jQuery }; future.behavior.call(specThis, callback || noop); @@ -39,6 +41,38 @@ describe("DSL", function() { }); }); + describe('browser', function() { + var browser = angular.scenario.dsl.browser; + it('shoud return true if location with empty hash provided is same ' + + 'as location of the page', function() { + browser.location.href = "http://server"; + expect(browser.location.toEqual("http://server")).toEqual(true); + }); + it('shoud return true if location with hash provided is same ' + + 'as location of the page', function() { + browser.location.href = "http://server"; + browser.location.hash = "hashPath"; + expect(browser.location.toEqual("http://server/#/hashPath")) + .toEqual(true); + }); + it('should return true if the location provided is the same as which ' + + 'browser navigated to', function() { + var future = browser.navigateTo("http://server/#/hashPath"); + expect(future.name).toEqual("Navigate to: http://server/#/hashPath"); + executeFuture(future, ''); + expect(browser.location.toEqual("http://server/#/hashPath")) + .toEqual(true); + expect(browser.location.toEqual("http://server/")) + .toEqual(false); + + future = browser.navigateTo("http://server/"); + expect(future.name).toEqual("Navigate to: http://server/"); + executeFuture(future, ''); + expect(browser.location.toEqual("http://server/")) + .toEqual(true); + }); + }); + describe('repeater', function() { var repeater = angular.scenario.dsl.repeater; @@ -125,7 +159,7 @@ describe("DSL", function() { expect(future.fulfilled).toBeTruthy(); } it('should find elements on the page and provide jquery api', function() { - var future = element('.reports-detail'); + var future = element('.reports-detail').find(); expect(future.name).toEqual("Find element '.reports-detail'"); timeTravel(future); expect(future.value.text()). @@ -134,11 +168,18 @@ describe("DSL", function() { toEqual('Description : Details...'); }); it('should find elements with angular syntax', function() { - var future = element('{{report.description}}'); + var future = element('{{report.description}}').find(); expect(future.name).toEqual("Find element '{{report.description}}'"); timeTravel(future); expect(future.value.text()).toEqual('Details...'); expect(future.value.attr('ng:bind')).toEqual('report.description'); }); + it('should be able to click elements', function(){ + var future = element('.link-class').click(); + expect(future.name).toEqual("Click element '.link-class'"); + executeFuture(future, html, function(value) { future.fulfill(value); }); + expect(future.fulfilled).toBeTruthy(); + // TODO(rajat): look for some side effect from click happening? + }); }); }); -- cgit v1.2.3 From 2767d7773f2e480552e9968eded31bd2b08bec71 Mon Sep 17 00:00:00 2001 From: Shyam Seshadri Date: Fri, 13 Aug 2010 09:45:56 -0700 Subject: Revert click dsl, since what is returned by element is a jquery object --- src/scenario/DSL.js | 35 ++++++++++++----------------------- test/scenario/DSLSpec.js | 7 ------- 2 files changed, 12 insertions(+), 30 deletions(-) diff --git a/src/scenario/DSL.js b/src/scenario/DSL.js index ca944014..a64f8548 100644 --- a/src/scenario/DSL.js +++ b/src/scenario/DSL.js @@ -103,28 +103,17 @@ angular.scenario.dsl.repeater = function(selector) { angular.scenario.dsl.element = function(selector) { var nameSuffix = "element '" + selector + "'"; - return { - find: function() { - return $scenario.addFuture('Find ' + nameSuffix, function(done) { - var self = this, repeaterArray = [], ngBindPattern; - var startIndex = selector.search(angular.scenario.dsl.NG_BIND_PATTERN); - if (startIndex >= 0) { - ngBindPattern = selector.substring(startIndex + 2, selector.length - 2); - var element = this.testDocument.find('*').filter(function() { - return self.jQuery(this).attr('ng:bind') == ngBindPattern; - }); - done(element); - } else { - done(this.testDocument.find(selector)); - } - }); - }, - click: function() { - var self = this; - return $scenario.addFuture('Click ' + nameSuffix, function(done) { - _jQuery(self).click(); - done(); - }); + return $scenario.addFuture('Find ' + nameSuffix, function(done) { + var self = this, repeaterArray = [], ngBindPattern; + var startIndex = selector.search(angular.scenario.dsl.NG_BIND_PATTERN); + if (startIndex >= 0) { + ngBindPattern = selector.substring(startIndex + 2, selector.length - 2); + var element = this.testDocument.find('*').filter(function() { + return self.jQuery(this).attr('ng:bind') == ngBindPattern; + }); + done(element); + } else { + done(this.testDocument.find(selector)); } - }; + }); }; diff --git a/test/scenario/DSLSpec.js b/test/scenario/DSLSpec.js index 9bf6d31d..ccd9e32b 100644 --- a/test/scenario/DSLSpec.js +++ b/test/scenario/DSLSpec.js @@ -174,12 +174,5 @@ describe("DSL", function() { expect(future.value.text()).toEqual('Details...'); expect(future.value.attr('ng:bind')).toEqual('report.description'); }); - it('should be able to click elements', function(){ - var future = element('.link-class').click(); - expect(future.name).toEqual("Click element '.link-class'"); - executeFuture(future, html, function(value) { future.fulfill(value); }); - expect(future.fulfilled).toBeTruthy(); - // TODO(rajat): look for some side effect from click happening? - }); }); }); -- cgit v1.2.3 From 275f036c1f146d37c088027c79338d0d5209c03a Mon Sep 17 00:00:00 2001 From: Shyam Seshadri Date: Fri, 13 Aug 2010 10:11:11 -0700 Subject: Fix broken tests for element dsl --- test/scenario/DSLSpec.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/scenario/DSLSpec.js b/test/scenario/DSLSpec.js index ccd9e32b..552e6211 100644 --- a/test/scenario/DSLSpec.js +++ b/test/scenario/DSLSpec.js @@ -159,7 +159,7 @@ describe("DSL", function() { expect(future.fulfilled).toBeTruthy(); } it('should find elements on the page and provide jquery api', function() { - var future = element('.reports-detail').find(); + var future = element('.reports-detail'); expect(future.name).toEqual("Find element '.reports-detail'"); timeTravel(future); expect(future.value.text()). @@ -168,7 +168,7 @@ describe("DSL", function() { toEqual('Description : Details...'); }); it('should find elements with angular syntax', function() { - var future = element('{{report.description}}').find(); + var future = element('{{report.description}}'); expect(future.name).toEqual("Find element '{{report.description}}'"); timeTravel(future); expect(future.value.text()).toEqual('Details...'); -- cgit v1.2.3 From 675978f41fbd05a7ed3481a79b772877a59a1c15 Mon Sep 17 00:00:00 2001 From: Shyam Seshadri Date: Fri, 13 Aug 2010 12:05:50 -0700 Subject: Provide all jquery functions as futures --- src/scenario/DSL.js | 40 ++++++++++++++++++++++++++-------------- test/scenario/DSLSpec.js | 25 ++++++++++++++++--------- 2 files changed, 42 insertions(+), 23 deletions(-) diff --git a/src/scenario/DSL.js b/src/scenario/DSL.js index a64f8548..a533a5c3 100644 --- a/src/scenario/DSL.js +++ b/src/scenario/DSL.js @@ -102,18 +102,30 @@ angular.scenario.dsl.repeater = function(selector) { }; angular.scenario.dsl.element = function(selector) { - var nameSuffix = "element '" + selector + "'"; - return $scenario.addFuture('Find ' + nameSuffix, function(done) { - var self = this, repeaterArray = [], ngBindPattern; - var startIndex = selector.search(angular.scenario.dsl.NG_BIND_PATTERN); - if (startIndex >= 0) { - ngBindPattern = selector.substring(startIndex + 2, selector.length - 2); - var element = this.testDocument.find('*').filter(function() { - return self.jQuery(this).attr('ng:bind') == ngBindPattern; - }); - done(element); - } else { - done(this.testDocument.find(selector)); - } - }); + var namePrefix = "Element '" + selector + "'"; + var futureJquery = {}; + for (key in _jQuery.fn) { + (function(){ + var jqFnName = key; + var jqFn = _jQuery.fn[key]; + futureJquery[key] = function() { + var jqArgs = arguments; + return $scenario.addFuture(namePrefix + "." + jqFnName + "()", + function(done) { + var self = this, repeaterArray = [], ngBindPattern; + var startIndex = selector.search(angular.scenario.dsl.NG_BIND_PATTERN); + if (startIndex >= 0) { + ngBindPattern = selector.substring(startIndex + 2, selector.length - 2); + var element = this.testDocument.find('*').filter(function() { + return self.jQuery(this).attr('ng:bind') == ngBindPattern; + }); + done(jqFn.apply(element, jqArgs)); + } else { + done(jqFn.apply(this.testDocument.find(selector), jqArgs)); + } + }); + }; + })(); + } + return futureJquery; }; diff --git a/test/scenario/DSLSpec.js b/test/scenario/DSLSpec.js index 552e6211..f8606641 100644 --- a/test/scenario/DSLSpec.js +++ b/test/scenario/DSLSpec.js @@ -159,20 +159,27 @@ describe("DSL", function() { expect(future.fulfilled).toBeTruthy(); } 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'"); + var future = element('.reports-detail').text(); + expect(future.name).toEqual("Element '.reports-detail'.text()"); timeTravel(future); - expect(future.value.text()). + expect(future.value). toEqual('Description : Details...Date created: 01/01/01'); - expect(future.value.find('.desc').text()). - toEqual('Description : Details...'); +// expect(future.value.find('.desc').text()). +// toEqual('Description : Details...'); }); it('should find elements with angular syntax', function() { - var future = element('{{report.description}}'); - expect(future.name).toEqual("Find element '{{report.description}}'"); + var future = element('{{report.description}}').text(); + expect(future.name).toEqual("Element '{{report.description}}'.text()"); timeTravel(future); - expect(future.value.text()).toEqual('Details...'); - expect(future.value.attr('ng:bind')).toEqual('report.description'); + expect(future.value).toEqual('Details...'); +// expect(future.value.attr('ng:bind')).toEqual('report.description'); + }); + it('should be able to click elements', function(){ + var future = element('.link-class').click(); + expect(future.name).toEqual("Element '.link-class'.click()"); + executeFuture(future, html, function(value) { future.fulfill(value); }); + expect(future.fulfilled).toBeTruthy(); + // TODO(rajat): look for some side effect from click happening? }); }); }); -- cgit v1.2.3 From aa656253b9d4495264f14a76b6a80aa9a1d9a854 Mon Sep 17 00:00:00 2001 From: Shyam Seshadri Date: Fri, 13 Aug 2010 18:23:39 -0700 Subject: Fix issue with jquery not being visible in production --- src/scenario/DSL.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/scenario/DSL.js b/src/scenario/DSL.js index a533a5c3..0607238c 100644 --- a/src/scenario/DSL.js +++ b/src/scenario/DSL.js @@ -104,10 +104,10 @@ angular.scenario.dsl.repeater = function(selector) { angular.scenario.dsl.element = function(selector) { var namePrefix = "Element '" + selector + "'"; var futureJquery = {}; - for (key in _jQuery.fn) { + for (key in (jQuery || _jQuery).fn) { (function(){ var jqFnName = key; - var jqFn = _jQuery.fn[key]; + var jqFn = (jQuery || _jQuery).fn[key]; futureJquery[key] = function() { var jqArgs = arguments; return $scenario.addFuture(namePrefix + "." + jqFnName + "()", -- cgit v1.2.3