aboutsummaryrefslogtreecommitdiffstats
path: root/test/BinderSpec.js
diff options
context:
space:
mode:
authorIgor Minar2011-02-25 14:03:02 -0800
committerIgor Minar2011-03-01 17:09:25 -0800
commit945056b1667a69ecc4d557cc0f03894597250ced (patch)
tree396c0ff155fe895933cbd3301874e8799fd42b65 /test/BinderSpec.js
parent128feb267409ee45ee5225a34aab038ddf3518fa (diff)
downloadangular.js-945056b1667a69ecc4d557cc0f03894597250ced.tar.bz2
linking function should return bound scope
angular.compile()() returns {scope:scope, view:view}, this isn't useful at all and only makes tests more verbose. Instead, this change makes the linking function return scope directly and if anyone needs the linked dom there are two ways to do it documented in angular.compile. other changes: - moved angular.compile docs to the compiler so that they are closer to the compiler - fixed some typos and updated angular.compile docs with the new return value
Diffstat (limited to 'test/BinderSpec.js')
-rw-r--r--test/BinderSpec.js466
1 files changed, 232 insertions, 234 deletions
diff --git a/test/BinderSpec.js b/test/BinderSpec.js
index 80a950b0..e78980d7 100644
--- a/test/BinderSpec.js
+++ b/test/BinderSpec.js
@@ -16,7 +16,7 @@ describe('Binder', function(){
return angular.compile(element)();
};
this.compileToHtml = function (content) {
- return sortedHtml(this.compile(content).view);
+ return sortedHtml(this.compile(content).$element);
};
});
@@ -28,69 +28,69 @@ describe('Binder', function(){
it('text-field should default to value attribute', function(){
- var state = this.compile('<input type="text" name="model.price" value="abc">');
- state.scope.$eval();
- assertEquals('abc', state.scope.model.price);
+ var scope = this.compile('<input type="text" name="model.price" value="abc">');
+ scope.$eval();
+ assertEquals('abc', scope.model.price);
});
it('ChangingTextareaUpdatesModel', function(){
- var c = this.compile('<textarea name="model.note">abc</textarea>');
- c.scope.$eval();
- assertEquals(c.scope.model.note, 'abc');
+ var scope = this.compile('<textarea name="model.note">abc</textarea>');
+ scope.$eval();
+ assertEquals(scope.model.note, 'abc');
});
it('ChangingRadioUpdatesModel', function(){
- var c = this.compile('<input type="radio" name="model.price" value="A" checked>' +
+ var scope = this.compile('<input type="radio" name="model.price" value="A" checked>' +
'<input type="radio" name="model.price" value="B">');
- c.scope.$eval();
- assertEquals(c.scope.model.price, 'A');
+ scope.$eval();
+ assertEquals(scope.model.price, 'A');
});
it('ChangingCheckboxUpdatesModel', function(){
- var form = this.compile('<input type="checkbox" name="model.price" value="true" checked ng:format="boolean"/>');
- assertEquals(true, form.scope.model.price);
+ var scope = this.compile('<input type="checkbox" name="model.price" value="true" checked ng:format="boolean"/>');
+ assertEquals(true, scope.model.price);
});
it('BindUpdate', function(){
- var c = this.compile('<div ng:eval="a=123"/>');
- assertEquals(123, c.scope.$get('a'));
+ var scope = this.compile('<div ng:eval="a=123"/>');
+ assertEquals(123, scope.$get('a'));
});
it('ChangingSelectNonSelectedUpdatesModel', function(){
- var form = this.compile('<select name="model.price"><option value="A">A</option><option value="B">B</option></select>');
- assertEquals('A', form.scope.model.price);
+ var scope = this.compile('<select name="model.price"><option value="A">A</option><option value="B">B</option></select>');
+ assertEquals('A', scope.model.price);
});
it('ChangingMultiselectUpdatesModel', function(){
- var form = this.compile('<select name="Invoice.options" multiple="multiple">' +
+ var scope = this.compile('<select name="Invoice.options" multiple="multiple">' +
'<option value="A" selected>Gift wrap</option>' +
'<option value="B" selected>Extra padding</option>' +
'<option value="C">Expedite</option>' +
'</select>');
- assertJsonEquals(["A", "B"], form.scope.$get('Invoice').options);
+ assertJsonEquals(["A", "B"], scope.$get('Invoice').options);
});
it('ChangingSelectSelectedUpdatesModel', function(){
- var form = this.compile('<select name="model.price"><option>A</option><option selected value="b">B</option></select>');
- assertEquals(form.scope.model.price, 'b');
+ var scope = this.compile('<select name="model.price"><option>A</option><option selected value="b">B</option></select>');
+ assertEquals(scope.model.price, 'b');
});
it('ExecuteInitialization', function(){
- var c = this.compile('<div ng:init="a=123">');
- assertEquals(c.scope.$get('a'), 123);
+ var scope = this.compile('<div ng:init="a=123">');
+ assertEquals(scope.$get('a'), 123);
});
it('ExecuteInitializationStatements', function(){
- var c = this.compile('<div ng:init="a=123;b=345">');
- assertEquals(c.scope.$get('a'), 123);
- assertEquals(c.scope.$get('b'), 345);
+ var scope = this.compile('<div ng:init="a=123;b=345">');
+ assertEquals(scope.$get('a'), 123);
+ assertEquals(scope.$get('b'), 345);
});
it('ApplyTextBindings', function(){
- var form = this.compile('<div ng:bind="model.a">x</div>');
- form.scope.$set('model', {a:123});
- form.scope.$eval();
- assertEquals('123', form.view.text());
+ var scope = this.compile('<div ng:bind="model.a">x</div>');
+ scope.$set('model', {a:123});
+ scope.$eval();
+ assertEquals('123', scope.$element.text());
});
it('ReplaceBindingInTextWithSpan', function(){
@@ -112,82 +112,81 @@ describe('Binder', function(){
});
it('BindingOfAttributes', function(){
- var c = this.compile("<a href='http://s/a{{b}}c' foo='x'></a>");
- var attrbinding = c.view.attr("ng:bind-attr");
+ var scope = this.compile("<a href='http://s/a{{b}}c' foo='x'></a>");
+ var attrbinding = scope.$element.attr("ng:bind-attr");
var bindings = fromJson(attrbinding);
assertEquals("http://s/a{{b}}c", decodeURI(bindings.href));
assertTrue(!bindings.foo);
});
it('MarkMultipleAttributes', function(){
- var c = this.compile('<a href="http://s/a{{b}}c" foo="{{d}}"></a>');
- var attrbinding = c.view.attr("ng:bind-attr");
+ var scope = this.compile('<a href="http://s/a{{b}}c" foo="{{d}}"></a>');
+ var attrbinding = scope.$element.attr("ng:bind-attr");
var bindings = fromJson(attrbinding);
assertEquals(bindings.foo, "{{d}}");
assertEquals(decodeURI(bindings.href), "http://s/a{{b}}c");
});
it('AttributesNoneBound', function(){
- var c = this.compile("<a href='abc' foo='def'></a>");
- var a = c.view;
+ var scope = this.compile("<a href='abc' foo='def'></a>");
+ var a = scope.$element;
assertEquals(a[0].nodeName, "A");
assertTrue(!a.attr("ng:bind-attr"));
});
it('ExistingAttrbindingIsAppended', function(){
- var c = this.compile("<a href='http://s/{{abc}}' ng:bind-attr='{\"b\":\"{{def}}\"}'></a>");
- var a = c.view;
+ var scope = this.compile("<a href='http://s/{{abc}}' ng:bind-attr='{\"b\":\"{{def}}\"}'></a>");
+ var a = scope.$element;
assertEquals('{"b":"{{def}}","href":"http://s/{{abc}}"}', a.attr('ng:bind-attr'));
});
it('AttributesAreEvaluated', function(){
- var c = this.compile('<a ng:bind-attr=\'{"a":"a", "b":"a+b={{a+b}}"}\'></a>');
- var binder = c.binder, form = c.view;
- c.scope.$eval('a=1;b=2');
- c.scope.$eval();
- var a = c.view;
+ var scope = this.compile('<a ng:bind-attr=\'{"a":"a", "b":"a+b={{a+b}}"}\'></a>');
+ scope.$eval('a=1;b=2');
+ scope.$eval();
+ var a = scope.$element;
assertEquals(a.attr('a'), 'a');
assertEquals(a.attr('b'), 'a+b=3');
});
it('InputTypeButtonActionExecutesInScope', function(){
var savedCalled = false;
- var c = this.compile('<input type="button" ng:click="person.save()" value="Apply">');
- c.scope.$set("person.save", function(){
+ var scope = this.compile('<input type="button" ng:click="person.save()" value="Apply">');
+ scope.$set("person.save", function(){
savedCalled = true;
});
- browserTrigger(c.view, 'click');
+ browserTrigger(scope.$element, 'click');
assertTrue(savedCalled);
});
it('InputTypeButtonActionExecutesInScope2', function(){
var log = "";
- var c = this.compile('<input type="image" ng:click="action()">');
- c.scope.$set("action", function(){
+ var scope = this.compile('<input type="image" ng:click="action()">');
+ scope.$set("action", function(){
log += 'click;';
});
expect(log).toEqual('');
- browserTrigger(c.view, 'click');
+ browserTrigger(scope.$element, 'click');
expect(log).toEqual('click;');
});
it('ButtonElementActionExecutesInScope', function(){
var savedCalled = false;
- var c = this.compile('<button ng:click="person.save()">Apply</button>');
- c.scope.$set("person.save", function(){
+ var scope = this.compile('<button ng:click="person.save()">Apply</button>');
+ scope.$set("person.save", function(){
savedCalled = true;
});
- browserTrigger(c.view, 'click');
+ browserTrigger(scope.$element, 'click');
assertTrue(savedCalled);
});
it('RepeaterUpdateBindings', function(){
- var a = this.compile('<ul><LI ng:repeat="item in model.items" ng:bind="item.a"/></ul>');
- var form = a.view;
+ var scope = this.compile('<ul><LI ng:repeat="item in model.items" ng:bind="item.a"/></ul>');
+ var form = scope.$element;
var items = [{a:"A"}, {a:"B"}];
- a.scope.$set('model', {items:items});
+ scope.$set('model', {items:items});
- a.scope.$eval();
+ scope.$eval();
assertEquals('<ul>' +
'<#comment></#comment>' +
'<li ng:bind="item.a" ng:repeat-index="0">A</li>' +
@@ -195,7 +194,7 @@ describe('Binder', function(){
'</ul>', sortedHtml(form));
items.unshift({a:'C'});
- a.scope.$eval();
+ scope.$eval();
assertEquals('<ul>' +
'<#comment></#comment>' +
'<li ng:bind="item.a" ng:repeat-index="0">C</li>' +
@@ -204,7 +203,7 @@ describe('Binder', function(){
'</ul>', sortedHtml(form));
items.shift();
- a.scope.$eval();
+ scope.$eval();
assertEquals('<ul>' +
'<#comment></#comment>' +
'<li ng:bind="item.a" ng:repeat-index="0">A</li>' +
@@ -213,17 +212,17 @@ describe('Binder', function(){
items.shift();
items.shift();
- a.scope.$eval();
+ scope.$eval();
});
it('RepeaterContentDoesNotBind', function(){
- var a = this.compile('<ul><LI ng:repeat="item in model.items"><span ng:bind="item.a"></span></li></ul>');
- a.scope.$set('model', {items:[{a:"A"}]});
- a.scope.$eval();
+ var scope = this.compile('<ul><LI ng:repeat="item in model.items"><span ng:bind="item.a"></span></li></ul>');
+ scope.$set('model', {items:[{a:"A"}]});
+ scope.$eval();
assertEquals('<ul>' +
'<#comment></#comment>' +
'<li ng:repeat-index="0"><span ng:bind="item.a">A</span></li>' +
- '</ul>', sortedHtml(a.view));
+ '</ul>', sortedHtml(scope.$element));
});
it('DoNotOverwriteCustomAction', function(){
@@ -232,61 +231,60 @@ describe('Binder', function(){
});
it('RepeaterAdd', function(){
- var c = this.compile('<div><input type="text" name="item.x" ng:repeat="item in items"></div>');
- var doc = c.view;
- c.scope.$set('items', [{x:'a'}, {x:'b'}]);
- c.scope.$eval();
- var first = childNode(c.view, 1);
- var second = childNode(c.view, 2);
+ var scope = this.compile('<div><input type="text" name="item.x" ng:repeat="item in items"></div>');
+ scope.$set('items', [{x:'a'}, {x:'b'}]);
+ scope.$eval();
+ var first = childNode(scope.$element, 1);
+ var second = childNode(scope.$element, 2);
assertEquals('a', first.val());
assertEquals('b', second.val());
first.val('ABC');
browserTrigger(first, 'keydown');
- c.scope.$service('$browser').defer.flush();
- assertEquals(c.scope.items[0].x, 'ABC');
+ scope.$service('$browser').defer.flush();
+ assertEquals(scope.items[0].x, 'ABC');
});
it('ItShouldRemoveExtraChildrenWhenIteratingOverHash', function(){
- var c = this.compile('<div><div ng:repeat="i in items">{{i}}</div></div>');
+ var scope = this.compile('<div><div ng:repeat="i in items">{{i}}</div></div>');
var items = {};
- c.scope.$set("items", items);
+ scope.$set("items", items);
- c.scope.$eval();
- expect(c.view[0].childNodes.length - 1).toEqual(0);
+ scope.$eval();
+ expect(scope.$element[0].childNodes.length - 1).toEqual(0);
items.name = "misko";
- c.scope.$eval();
- expect(c.view[0].childNodes.length - 1).toEqual(1);
+ scope.$eval();
+ expect(scope.$element[0].childNodes.length - 1).toEqual(1);
delete items.name;
- c.scope.$eval();
- expect(c.view[0].childNodes.length - 1).toEqual(0);
+ scope.$eval();
+ expect(scope.$element[0].childNodes.length - 1).toEqual(0);
});
it('IfTextBindingThrowsErrorDecorateTheSpan', function(){
- var a = this.compile('<div>{{error.throw()}}</div>');
- var doc = a.view;
- var errorLogs = a.scope.$service('$log').error.logs;
+ var scope = this.compile('<div>{{error.throw()}}</div>');
+ var doc = scope.$element;
+ var errorLogs = scope.$service('$log').error.logs;
- a.scope.$set('error.throw', function(){throw "ErrorMsg1";});
- a.scope.$eval();
+ scope.$set('error.throw', function(){throw "ErrorMsg1";});
+ scope.$eval();
var span = childNode(doc, 0);
assertTrue(span.hasClass('ng-exception'));
assertTrue(!!span.text().match(/ErrorMsg1/));
assertTrue(!!span.attr('ng-exception').match(/ErrorMsg1/));
assertEquals(['ErrorMsg1'], errorLogs.shift());
- a.scope.$set('error.throw', function(){throw "MyError";});
- a.scope.$eval();
+ scope.$set('error.throw', function(){throw "MyError";});
+ scope.$eval();
span = childNode(doc, 0);
assertTrue(span.hasClass('ng-exception'));
assertTrue(span.text(), span.text().match('MyError') !== null);
assertEquals('MyError', span.attr('ng-exception'));
assertEquals(['MyError'], errorLogs.shift());
- a.scope.$set('error.throw', function(){return "ok";});
- a.scope.$eval();
+ scope.$set('error.throw', function(){return "ok";});
+ scope.$eval();
assertFalse(span.hasClass('ng-exception'));
assertEquals('ok', span.text());
assertEquals(null, span.attr('ng-exception'));
@@ -294,19 +292,19 @@ describe('Binder', function(){
});
it('IfAttrBindingThrowsErrorDecorateTheAttribute', function(){
- var a = this.compile('<div attr="before {{error.throw()}} after"></div>');
- var doc = a.view;
- var errorLogs = a.scope.$service('$log').error.logs;
+ var scope = this.compile('<div attr="before {{error.throw()}} after"></div>');
+ var doc = scope.$element;
+ var errorLogs = scope.$service('$log').error.logs;
- a.scope.$set('error.throw', function(){throw "ErrorMsg";});
- a.scope.$eval();
+ scope.$set('error.throw', function(){throw "ErrorMsg";});
+ scope.$eval();
assertTrue('ng-exception', doc.hasClass('ng-exception'));
assertEquals('"ErrorMsg"', doc.attr('ng-exception'));
assertEquals('before "ErrorMsg" after', doc.attr('attr'));
assertEquals(['ErrorMsg'], errorLogs.shift());
- a.scope.$set('error.throw', function(){ return 'X';});
- a.scope.$eval();
+ scope.$set('error.throw', function(){ return 'X';});
+ scope.$eval();
assertFalse('!ng-exception', doc.hasClass('ng-exception'));
assertEquals('before X after', doc.attr('attr'));
assertEquals(null, doc.attr('ng-exception'));
@@ -314,12 +312,12 @@ describe('Binder', function(){
});
it('NestedRepeater', function(){
- var a = this.compile('<div><div ng:repeat="m in model" name="{{m.name}}">' +
+ var scope = this.compile('<div><div ng:repeat="m in model" name="{{m.name}}">' +
'<ul name="{{i}}" ng:repeat="i in m.item"></ul>' +
'</div></div>');
- a.scope.$set('model', [{name:'a', item:['a1', 'a2']}, {name:'b', item:['b1', 'b2']}]);
- a.scope.$eval();
+ scope.$set('model', [{name:'a', item:['a1', 'a2']}, {name:'b', item:['b1', 'b2']}]);
+ scope.$eval();
assertEquals('<div>'+
'<#comment></#comment>'+
@@ -332,121 +330,121 @@ describe('Binder', function(){
'<#comment></#comment>'+
'<ul name="b1" ng:bind-attr="{"name":"{{i}}"}" ng:repeat-index="0"></ul>'+
'<ul name="b2" ng:bind-attr="{"name":"{{i}}"}" ng:repeat-index="1"></ul>'+
- '</div></div>', sortedHtml(a.view));
+ '</div></div>', sortedHtml(scope.$element));
});
it('HideBindingExpression', function(){
- var a = this.compile('<div ng:hide="hidden == 3"/>');
+ var scope = this.compile('<div ng:hide="hidden == 3"/>');
- a.scope.$set('hidden', 3);
- a.scope.$eval();
+ scope.$set('hidden', 3);
+ scope.$eval();
- assertHidden(a.view);
+ assertHidden(scope.$element);
- a.scope.$set('hidden', 2);
- a.scope.$eval();
+ scope.$set('hidden', 2);
+ scope.$eval();
- assertVisible(a.view);
+ assertVisible(scope.$element);
});
it('HideBinding', function(){
- var c = this.compile('<div ng:hide="hidden"/>');
+ var scope = this.compile('<div ng:hide="hidden"/>');
- c.scope.$set('hidden', 'true');
- c.scope.$eval();
+ scope.$set('hidden', 'true');
+ scope.$eval();
- assertHidden(c.view);
+ assertHidden(scope.$element);
- c.scope.$set('hidden', 'false');
- c.scope.$eval();
+ scope.$set('hidden', 'false');
+ scope.$eval();
- assertVisible(c.view);
+ assertVisible(scope.$element);
- c.scope.$set('hidden', '');
- c.scope.$eval();
+ scope.$set('hidden', '');
+ scope.$eval();
- assertVisible(c.view);
+ assertVisible(scope.$element);
});
it('ShowBinding', function(){
- var c = this.compile('<div ng:show="show"/>');
+ var scope = this.compile('<div ng:show="show"/>');
- c.scope.$set('show', 'true');
- c.scope.$eval();
+ scope.$set('show', 'true');
+ scope.$eval();
- assertVisible(c.view);
+ assertVisible(scope.$element);
- c.scope.$set('show', 'false');
- c.scope.$eval();
+ scope.$set('show', 'false');
+ scope.$eval();
- assertHidden(c.view);
+ assertHidden(scope.$element);
- c.scope.$set('show', '');
- c.scope.$eval();
+ scope.$set('show', '');
+ scope.$eval();
- assertHidden(c.view);
+ assertHidden(scope.$element);
});
it('BindClassUndefined', function(){
- var doc = this.compile('<div ng:class="undefined"/>');
- doc.scope.$eval();
+ var scope = this.compile('<div ng:class="undefined"/>');
+ scope.$eval();
assertEquals(
'<div class="undefined" ng:class="undefined"></div>',
- sortedHtml(doc.view));
+ sortedHtml(scope.$element));
});
it('BindClass', function(){
- var c = this.compile('<div ng:class="class"/>');
+ var scope = this.compile('<div ng:class="class"/>');
- c.scope.$set('class', 'testClass');
- c.scope.$eval();
+ scope.$set('class', 'testClass');
+ scope.$eval();
- assertEquals('<div class="testClass" ng:class="class"></div>', sortedHtml(c.view));
+ assertEquals('<div class="testClass" ng:class="class"></div>', sortedHtml(scope.$element));
- c.scope.$set('class', ['a', 'b']);
- c.scope.$eval();
+ scope.$set('class', ['a', 'b']);
+ scope.$eval();
- assertEquals('<div class="a b" ng:class="class"></div>', sortedHtml(c.view));
+ assertEquals('<div class="a b" ng:class="class"></div>', sortedHtml(scope.$element));
});
it('BindClassEvenOdd', function(){
- var x = this.compile('<div><div ng:repeat="i in [0,1]" ng:class-even="\'e\'" ng:class-odd="\'o\'"></div></div>');
- x.scope.$eval();
- var d1 = jqLite(x.view[0].childNodes[1]);
- var d2 = jqLite(x.view[0].childNodes[2]);
+ var scope = this.compile('<div><div ng:repeat="i in [0,1]" ng:class-even="\'e\'" ng:class-odd="\'o\'"></div></div>');
+ scope.$eval();
+ var d1 = jqLite(scope.$element[0].childNodes[1]);
+ var d2 = jqLite(scope.$element[0].childNodes[2]);
expect(d1.hasClass('o')).toBeTruthy();
expect(d2.hasClass('e')).toBeTruthy();
assertEquals(
'<div><#comment></#comment>' +
'<div class="o" ng:class-even="\'e\'" ng:class-odd="\'o\'" ng:repeat-index="0"></div>' +
'<div class="e" ng:class-even="\'e\'" ng:class-odd="\'o\'" ng:repeat-index="1"></div></div>',
- sortedHtml(x.view));
+ sortedHtml(scope.$element));
});
it('BindStyle', function(){
- var c = this.compile('<div ng:style="style"/>');
+ var scope = this.compile('<div ng:style="style"/>');
- c.scope.$eval('style={color:"red"}');
- c.scope.$eval();
+ scope.$eval('style={color:"red"}');
+ scope.$eval();
- assertEquals("red", c.view.css('color'));
+ assertEquals("red", scope.$element.css('color'));
- c.scope.$eval('style={}');
- c.scope.$eval();
+ scope.$eval('style={}');
+ scope.$eval();
});
it('ActionOnAHrefThrowsError', function(){
- var c = this.compile('<a ng:click="action()">Add Phone</a>');
- c.scope.action = function(){
+ var scope = this.compile('<a ng:click="action()">Add Phone</a>');
+ scope.action = function(){
throw new Error('MyError');
};
- var input = c.view;
+ var input = scope.$element;
browserTrigger(input, 'click');
var error = input.attr('ng-exception');
assertTrue(!!error.match(/MyError/));
assertTrue("should have an error class", input.hasClass('ng-exception'));
- assertTrue(!!c.scope.$service('$log').error.logs.shift()[0].message.match(/MyError/));
+ assertTrue(!!scope.$service('$log').error.logs.shift()[0].message.match(/MyError/));
// TODO: I think that exception should never get cleared so this portion of test makes no sense
//c.scope.action = noop;
@@ -456,48 +454,48 @@ describe('Binder', function(){
});
it('ShoulIgnoreVbNonBindable', function(){
- var c = this.compile("<div>{{a}}" +
+ var scope = this.compile("<div>{{a}}" +
"<div ng:non-bindable>{{a}}</div>" +
"<div ng:non-bindable=''>{{b}}</div>" +
"<div ng:non-bindable='true'>{{c}}</div></div>");
- c.scope.$set('a', 123);
- c.scope.$eval();
- assertEquals('123{{a}}{{b}}{{c}}', c.view.text());
+ scope.$set('a', 123);
+ scope.$eval();
+ assertEquals('123{{a}}{{b}}{{c}}', scope.$element.text());
});
it('OptionShouldUpdateParentToGetProperBinding', function(){
- var c = this.compile('<select name="s"><option ng:repeat="i in [0,1]" value="{{i}}" ng:bind="i"></option></select>');
- c.scope.$set('s', 1);
- c.scope.$eval();
- assertEquals(1, c.view[0].selectedIndex);
+ var scope = this.compile('<select name="s"><option ng:repeat="i in [0,1]" value="{{i}}" ng:bind="i"></option></select>');
+ scope.$set('s', 1);
+ scope.$eval();
+ assertEquals(1, scope.$element[0].selectedIndex);
});
it('RepeaterShouldBindInputsDefaults', function () {
- var c = this.compile('<div><input value="123" name="item.name" ng:repeat="item in items"></div>');
- c.scope.$set('items', [{}, {name:'misko'}]);
- c.scope.$eval();
+ var scope = this.compile('<div><input value="123" name="item.name" ng:repeat="item in items"></div>');
+ scope.$set('items', [{}, {name:'misko'}]);
+ scope.$eval();
- assertEquals("123", c.scope.$eval('items[0].name'));
- assertEquals("misko", c.scope.$eval('items[1].name'));
+ assertEquals("123", scope.$eval('items[0].name'));
+ assertEquals("misko", scope.$eval('items[1].name'));
});
it('ShouldTemplateBindPreElements', function () {
- var c = this.compile('<pre>Hello {{name}}!</pre>');
- c.scope.$set("name", "World");
- c.scope.$eval();
+ var scope = this.compile('<pre>Hello {{name}}!</pre>');
+ scope.$set("name", "World");
+ scope.$eval();
- assertEquals('<pre ng:bind-template="Hello {{name}}!">Hello World!</pre>', sortedHtml(c.view));
+ assertEquals('<pre ng:bind-template="Hello {{name}}!">Hello World!</pre>', sortedHtml(scope.$element));
});
it('FillInOptionValueWhenMissing', function(){
- var c = this.compile(
+ var scope = this.compile(
'<select name="foo"><option selected="true">{{a}}</option><option value="">{{b}}</option><option>C</option></select>');
- c.scope.$set('a', 'A');
- c.scope.$set('b', 'B');
- c.scope.$eval();
- var optionA = childNode(c.view, 0);
- var optionB = childNode(c.view, 1);
- var optionC = childNode(c.view, 2);
+ scope.$set('a', 'A');
+ scope.$set('b', 'B');
+ scope.$eval();
+ var optionA = childNode(scope.$element, 0);
+ var optionB = childNode(scope.$element, 1);
+ var optionC = childNode(scope.$element, 2);
expect(optionA.attr('value')).toEqual('A');
expect(optionA.text()).toEqual('A');
@@ -510,54 +508,54 @@ describe('Binder', function(){
});
it('ValidateForm', function(){
- var c = this.compile('<div id="test"><input name="name" ng:required>' +
+ var scope = this.compile('<div id="test"><input name="name" ng:required>' +
'<input ng:repeat="item in items" name="item.name" ng:required/></div>',
jqLite(document.body));
var items = [{}, {}];
- c.scope.$set("items", items);
- c.scope.$eval();
- assertEquals(3, c.scope.$service('$invalidWidgets').length);
+ scope.$set("items", items);
+ scope.$eval();
+ assertEquals(3, scope.$service('$invalidWidgets').length);
- c.scope.$set('name', '');
- c.scope.$eval();
- assertEquals(3, c.scope.$service('$invalidWidgets').length);
+ scope.$set('name', '');
+ scope.$eval();
+ assertEquals(3, scope.$service('$invalidWidgets').length);
- c.scope.$set('name', ' ');
- c.scope.$eval();
- assertEquals(3, c.scope.$service('$invalidWidgets').length);
+ scope.$set('name', ' ');
+ scope.$eval();
+ assertEquals(3, scope.$service('$invalidWidgets').length);
- c.scope.$set('name', 'abc');
- c.scope.$eval();
- assertEquals(2, c.scope.$service('$invalidWidgets').length);
+ scope.$set('name', 'abc');
+ scope.$eval();
+ assertEquals(2, scope.$service('$invalidWidgets').length);
items[0].name = 'abc';
- c.scope.$eval();
- assertEquals(1, c.scope.$service('$invalidWidgets').length);
+ scope.$eval();
+ assertEquals(1, scope.$service('$invalidWidgets').length);
items[1].name = 'abc';
- c.scope.$eval();
- assertEquals(0, c.scope.$service('$invalidWidgets').length);
+ scope.$eval();
+ assertEquals(0, scope.$service('$invalidWidgets').length);
});
it('ValidateOnlyVisibleItems', function(){
- var c = this.compile('<div><input name="name" ng:required><input ng:show="show" name="name" ng:required></div>', jqLite(document.body));
- c.scope.$set("show", true);
- c.scope.$eval();
- assertEquals(2, c.scope.$service('$invalidWidgets').length);
+ var scope = this.compile('<div><input name="name" ng:required><input ng:show="show" name="name" ng:required></div>', jqLite(document.body));
+ scope.$set("show", true);
+ scope.$eval();
+ assertEquals(2, scope.$service('$invalidWidgets').length);
- c.scope.$set("show", false);
- c.scope.$eval();
- assertEquals(1, c.scope.$service('$invalidWidgets').visible());
+ scope.$set("show", false);
+ scope.$eval();
+ assertEquals(1, scope.$service('$invalidWidgets').visible());
});
it('DeleteAttributeIfEvaluatesFalse', function(){
- var c = this.compile('<div>' +
+ var scope = this.compile('<div>' +
'<input name="a0" ng:bind-attr="{disabled:\'{{true}}\'}"><input name="a1" ng:bind-attr="{disabled:\'{{false}}\'}">' +
'<input name="b0" ng:bind-attr="{disabled:\'{{1}}\'}"><input name="b1" ng:bind-attr="{disabled:\'{{0}}\'}">' +
'<input name="c0" ng:bind-attr="{disabled:\'{{[0]}}\'}"><input name="c1" ng:bind-attr="{disabled:\'{{[]}}\'}"></div>');
- c.scope.$eval();
+ scope.$eval();
function assertChild(index, disabled) {
- var child = childNode(c.view, index);
+ var child = childNode(scope.$element, index);
assertEquals(sortedHtml(child), disabled, !!child.attr('disabled'));
}
@@ -570,15 +568,15 @@ describe('Binder', function(){
});
it('ItShouldDisplayErrorWhenActionIsSyntacticlyIncorrect', function(){
- var c = this.compile('<div>' +
+ var scope = this.compile('<div>' +
'<input type="button" ng:click="greeting=\'ABC\'"/>' +
'<input type="button" ng:click=":garbage:"/></div>');
- var first = jqLite(c.view[0].childNodes[0]);
- var second = jqLite(c.view[0].childNodes[1]);
- var errorLogs = c.scope.$service('$log').error.logs;
+ var first = jqLite(scope.$element[0].childNodes[0]);
+ var second = jqLite(scope.$element[0].childNodes[1]);
+ var errorLogs = scope.$service('$log').error.logs;
browserTrigger(first, 'click');
- assertEquals("ABC", c.scope.greeting);
+ assertEquals("ABC", scope.greeting);
expect(errorLogs).toEqual([]);
browserTrigger(second, 'click');
@@ -587,70 +585,70 @@ describe('Binder', function(){
});
it('ItShouldSelectTheCorrectRadioBox', function(){
- var c = this.compile('<div>' +
+ var scope = this.compile('<div>' +
'<input type="radio" name="sex" value="female"/>' +
'<input type="radio" name="sex" value="male"/></div>');
- var female = jqLite(c.view[0].childNodes[0]);
- var male = jqLite(c.view[0].childNodes[1]);
+ var female = jqLite(scope.$element[0].childNodes[0]);
+ var male = jqLite(scope.$element[0].childNodes[1]);
browserTrigger(female);
- assertEquals("female", c.scope.sex);
+ assertEquals("female", scope.sex);
assertEquals(true, female[0].checked);
assertEquals(false, male[0].checked);
assertEquals("female", female.val());
browserTrigger(male);
- assertEquals("male", c.scope.sex);
+ assertEquals("male", scope.sex);
assertEquals(false, female[0].checked);
assertEquals(true, male[0].checked);
assertEquals("male", male.val());
});
it('ItShouldRepeatOnHashes', function(){
- var x = this.compile('<ul><li ng:repeat="(k,v) in {a:0,b:1}" ng:bind=\"k + v\"></li></ul>');
- x.scope.$eval();
+ var scope = this.compile('<ul><li ng:repeat="(k,v) in {a:0,b:1}" ng:bind=\"k + v\"></li></ul>');
+ scope.$eval();
assertEquals('<ul>' +
'<#comment></#comment>' +
'<li ng:bind=\"k + v\" ng:repeat-index="0">a0</li>' +
'<li ng:bind=\"k + v\" ng:repeat-index="1">b1</li>' +
'</ul>',
- sortedHtml(x.view));
+ sortedHtml(scope.$element));
});
it('ItShouldFireChangeListenersBeforeUpdate', function(){
- var x = this.compile('<div ng:bind="name"></div>');
- x.scope.$set("name", "");
- x.scope.$watch("watched", "name=123");
- x.scope.$set("watched", "change");
- x.scope.$eval();
- assertEquals(123, x.scope.$get("name"));
+ var scope = this.compile('<div ng:bind="name"></div>');
+ scope.$set("name", "");
+ scope.$watch("watched", "name=123");
+ scope.$set("watched", "change");
+ scope.$eval();
+ assertEquals(123, scope.$get("name"));
assertEquals(
'<div ng:bind="name">123</div>',
- sortedHtml(x.view));
+ sortedHtml(scope.$element));
});
it('ItShouldHandleMultilineBindings', function(){
- var x = this.compile('<div>{{\n 1 \n + \n 2 \n}}</div>');
- x.scope.$eval();
- assertEquals("3", x.view.text());
+ var scope = this.compile('<div>{{\n 1 \n + \n 2 \n}}</div>');
+ scope.$eval();
+ assertEquals("3", scope.$element.text());
});
it('ItBindHiddenInputFields', function(){
- var x = this.compile('<input type="hidden" name="myName" value="abc" />');
- x.scope.$eval();
- assertEquals("abc", x.scope.$get("myName"));
+ var scope = this.compile('<input type="hidden" name="myName" value="abc" />');
+ scope.$eval();
+ assertEquals("abc", scope.$get("myName"));
});
it('ItShouldUseFormaterForText', function(){
- var x = this.compile('<input name="a" ng:format="list" value="a,b">');
- x.scope.$eval();
- assertEquals(['a','b'], x.scope.$get('a'));
- var input = x.view;
+ var scope = this.compile('<input name="a" ng:format="list" value="a,b">');
+ scope.$eval();
+ assertEquals(['a','b'], scope.$get('a'));
+ var input = scope.$element;
input[0].value = ' x,,yz';
browserTrigger(input, 'change');
- assertEquals(['x','yz'], x.scope.$get('a'));
- x.scope.$set('a', [1 ,2, 3]);
- x.scope.$eval();
+ assertEquals(['x','yz'], scope.$get('a'));
+ scope.$set('a', [1 ,2, 3]);
+ scope.$eval();
assertEquals('1, 2, 3', input[0].value);
});