From 9c0225512c63ebfc37e6408cc155d9da1fe682c9 Mon Sep 17 00:00:00 2001 From: Misko Hevery Date: Tue, 26 Oct 2010 15:35:58 -0700 Subject: fixes IE related failures, and form submit event handling in ie --- example/personalLog/personalLog.js | 10 ++-- scenario/widgets-scenario.js | 12 ++++- scenario/widgets.html | 9 ++-- src/scenario/Scenario.js | 9 ++++ src/scenario/output/Xml.js | 36 +++++++------- src/widgets.js | 4 -- test/directivesSpec.js | 2 +- test/manual.html | 97 ++++++++++++++++++++++++-------------- test/scenario/ApplicationSpec.js | 2 +- test/scenario/dslSpec.js | 2 +- test/scenario/output/HtmlSpec.js | 4 +- test/scenario/output/jsonSpec.js | 10 ++-- test/scenario/output/objectSpec.js | 8 ++-- test/scenario/output/xmlSpec.js | 12 ++--- 14 files changed, 131 insertions(+), 86 deletions(-) diff --git a/example/personalLog/personalLog.js b/example/personalLog/personalLog.js index c0273036..da946a6f 100644 --- a/example/personalLog/personalLog.js +++ b/example/personalLog/personalLog.js @@ -1,5 +1,5 @@ /** - * @fileOverview Very simple personal log demo application to demostrate angular functionality, + * @fileOverview Very simple personal log demo application to demonstrate angular functionality, * especially: * - the MVC model * - testability of controllers @@ -46,7 +46,7 @@ function LogCtrl($cookieStore) { logs.push(log); $cookieStore.put(LOGS, logs); self.newMsg = ''; - } + }; /** @@ -56,16 +56,16 @@ function LogCtrl($cookieStore) { this.rmLog = function(msgIdx) { logs.splice(msgIdx,1); $cookieStore.put(LOGS, logs); - } + }; /** * Persistently removes all logs. */ this.rmLogs = function() { - logs.splice(0); + logs.splice(0, logs.length); $cookieStore.remove(LOGS); - } + }; } //inject diff --git a/scenario/widgets-scenario.js b/scenario/widgets-scenario.js index ba3ef3cf..7e8b8ade 100644 --- a/scenario/widgets-scenario.js +++ b/scenario/widgets-scenario.js @@ -27,12 +27,22 @@ describe('widgets', function() { expect(binding('multiselect').fromJson()).toEqual(['A', 'C']); expect(binding('button').fromJson()).toEqual({'count': 0}); + expect(binding('form').fromJson()).toEqual({'count': 0}); + element('form a').click(); expect(binding('button').fromJson()).toEqual({'count': 1}); - element('input[value="submit"]').click(); + + element('input[value="submit input"]').click(); + expect(binding('button').fromJson()).toEqual({'count': 2}); + expect(binding('form').fromJson()).toEqual({'count': 1}); + + element('button:contains("submit button")').click(); expect(binding('button').fromJson()).toEqual({'count': 2}); + expect(binding('form').fromJson()).toEqual({'count': 2}); + element('input[value="button"]').click(); expect(binding('button').fromJson()).toEqual({'count': 3}); + element('input[type="image"]').click(); expect(binding('button').fromJson()).toEqual({'count': 4}); diff --git a/scenario/widgets.html b/scenario/widgets.html index a520a326..adf2fa27 100644 --- a/scenario/widgets.html +++ b/scenario/widgets.html @@ -73,15 +73,16 @@ Buttons ng:change
ng:click - -
+ +
-
+
+
action
- button={{button}} + button={{button}} form={{form}} Repeaters diff --git a/src/scenario/Scenario.js b/src/scenario/Scenario.js index f2ebc640..14d530ac 100644 --- a/src/scenario/Scenario.js +++ b/src/scenario/Scenario.js @@ -246,6 +246,15 @@ function browserTrigger(element, type) { break; } element.fireEvent('on' + type); + if (lowercase(element.type) == 'submit') { + while(element) { + if (lowercase(element.nodeName) == 'form') { + element.fireEvent('onsubmit'); + break; + } + element = element.parentNode; + } + } } else { var evnt = document.createEvent('MouseEvents'); evnt.initMouseEvent(type, true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, element); diff --git a/src/scenario/output/Xml.js b/src/scenario/output/Xml.js index 47d98c78..cbc55ee7 100644 --- a/src/scenario/output/Xml.js +++ b/src/scenario/output/Xml.js @@ -3,10 +3,11 @@ */ angular.scenario.output('xml', function(context, runner) { var model = new angular.scenario.ObjectModel(runner); - + var $ = function(args) {return new context.init(args);}; runner.on('RunnerEnd', function() { - context.append(''); - serializeXml(context.find('> scenario'), model.value); + var scenario = $(''); + context.append(scenario); + serializeXml(scenario, model.value); }); /** @@ -17,30 +18,31 @@ angular.scenario.output('xml', function(context, runner) { */ function serializeXml(context, tree) { angular.foreach(tree.children, function(child) { - context.append(''); - var describeContext = context.find('> describe:last'); + var describeContext = $(''); describeContext.attr('id', child.id); describeContext.attr('name', child.name); + context.append(describeContext); serializeXml(describeContext, child); }); - context.append(''); - context = context.find('> its'); + var its = $(''); + context.append(its); angular.foreach(tree.specs, function(spec) { - context.append('') - var specContext = context.find('> it:last'); - specContext.attr('id', spec.id); - specContext.attr('name', spec.name); - specContext.attr('duration', spec.duration); - specContext.attr('status', spec.status); + var it = $(''); + it.attr('id', spec.id); + it.attr('name', spec.name); + it.attr('duration', spec.duration); + it.attr('status', spec.status); + its.append(it); angular.foreach(spec.steps, function(step) { - specContext.append(''); - var stepContext = specContext.find('> step:last'); + var stepContext = $(''); stepContext.attr('name', step.name); stepContext.attr('duration', step.duration); stepContext.attr('status', step.status); + it.append(stepContext); if (step.error) { - stepContext.append('' + - '' + + '' + ''); scope.$eval(); expect(scope.submitted).not.toBeDefined(); diff --git a/test/manual.html b/test/manual.html index 3b1886f3..dc491399 100644 --- a/test/manual.html +++ b/test/manual.html @@ -39,56 +39,80 @@ + + + + + + + @@ -96,7 +120,10 @@ describe('manual', function(){ diff --git a/test/scenario/ApplicationSpec.js b/test/scenario/ApplicationSpec.js index 122292c6..3e1c862d 100644 --- a/test/scenario/ApplicationSpec.js +++ b/test/scenario/ApplicationSpec.js @@ -88,7 +88,7 @@ describe('angular.scenario.Application', function() { var testWindow = { document: _jQuery('
'), angular: { - service: {}, + service: {} } }; testWindow.angular.service.$browser = function() { diff --git a/test/scenario/dslSpec.js b/test/scenario/dslSpec.js index bbba0b7d..efedeeb5 100644 --- a/test/scenario/dslSpec.js +++ b/test/scenario/dslSpec.js @@ -177,7 +177,7 @@ describe("angular.scenario.dsl", function() { expect($window.location).not.toEqual('#foo'); doc.append(''); $root.dsl.element('a').click(); - expect($window.location).toEqual('#foo'); + expect($window.location).toMatch(/#foo$/); }); it('should count matching elements', function() { diff --git a/test/scenario/output/HtmlSpec.js b/test/scenario/output/HtmlSpec.js index f5bb90b0..f973397e 100644 --- a/test/scenario/output/HtmlSpec.js +++ b/test/scenario/output/HtmlSpec.js @@ -19,7 +19,7 @@ describe('angular.scenario.output.html', function() { }; step = { name: 'some step', - line: function() { return 'unknown:-1'; }, + line: function() { return 'unknown:-1'; } }; runner = new angular.scenario.testing.MockRunner(); context = _jQuery("
"); @@ -44,7 +44,7 @@ describe('angular.scenario.output.html', function() { runner.emit('StepBegin', spec, step); runner.emit('InteractiveWait', spec, step); expect(context.find('.test-actions .test-title:first').text()).toEqual('some step'); - expect(context.find('.test-actions .test-title:last').html()).toEqual( + expect(lowercase(context.find('.test-actions .test-title:last').html())).toEqual( 'waiting for you to resume.' ); }); diff --git a/test/scenario/output/jsonSpec.js b/test/scenario/output/jsonSpec.js index b3592608..afc74a21 100644 --- a/test/scenario/output/jsonSpec.js +++ b/test/scenario/output/jsonSpec.js @@ -2,7 +2,7 @@ describe('angular.scenario.output.json', function() { var output, context; var runner, $window; var spec, step; - + beforeEach(function() { $window = {}; context = _jQuery('
'); @@ -12,22 +12,22 @@ describe('angular.scenario.output.json', function() { name: 'test spec', definition: { id: 10, - name: 'describe', + name: 'describe' } }; step = { name: 'some step', - line: function() { return 'unknown:-1'; }, + line: function() { return 'unknown:-1'; } }; }); - + it('should put json in context on RunnerEnd', function() { runner.emit('SpecBegin', spec); runner.emit('StepBegin', spec, step); runner.emit('StepEnd', spec, step); runner.emit('SpecEnd', spec); runner.emit('RunnerEnd'); - + expect(angular.fromJson(context.html()).children['describe'] .specs['test spec'].status).toEqual('success'); }); diff --git a/test/scenario/output/objectSpec.js b/test/scenario/output/objectSpec.js index c4e8d451..73c3dcf9 100644 --- a/test/scenario/output/objectSpec.js +++ b/test/scenario/output/objectSpec.js @@ -18,19 +18,19 @@ describe('angular.scenario.output.object', function() { }; step = { name: 'some step', - line: function() { return 'unknown:-1'; }, + line: function() { return 'unknown:-1'; } }; }); - + it('should create a global variable $result', function() { expect($window.$result).toBeDefined(); }); - + it('should maintain live state in $result', function() { runner.emit('SpecBegin', spec); runner.emit('StepBegin', spec, step); runner.emit('StepEnd', spec, step); - + expect($window.$result.children['describe'] .specs['test spec'].steps[0].duration).toBeDefined(); }); diff --git a/test/scenario/output/xmlSpec.js b/test/scenario/output/xmlSpec.js index 448c8d10..fbfabcc4 100644 --- a/test/scenario/output/xmlSpec.js +++ b/test/scenario/output/xmlSpec.js @@ -2,7 +2,7 @@ describe('angular.scenario.output.json', function() { var output, context; var runner, $window; var spec, step; - + beforeEach(function() { $window = {}; context = _jQuery('
'); @@ -12,22 +12,22 @@ describe('angular.scenario.output.json', function() { name: 'test spec', definition: { id: 10, - name: 'describe', + name: 'describe' } }; step = { name: 'some step', - line: function() { return 'unknown:-1'; }, + line: function() { return 'unknown:-1'; } }; }); - + it('should create XML nodes for object model', function() { runner.emit('SpecBegin', spec); runner.emit('StepBegin', spec, step); runner.emit('StepEnd', spec, step); runner.emit('SpecEnd', spec); runner.emit('RunnerEnd'); - expect(_jQuery(context).find('it').attr('status')).toEqual('success'); - expect(_jQuery(context).find('it step').attr('status')).toEqual('success'); + expect(context.find('it').attr('status')).toEqual('success'); + expect(context.find('it step').attr('status')).toEqual('success'); }); }); -- cgit v1.2.3