aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/AngularSpec.js31
-rw-r--r--test/BinderTest.js165
-rw-r--r--test/BrowserSpecs.js26
-rw-r--r--test/CompilerSpec.js2
-rw-r--r--test/FiltersTest.js6
-rw-r--r--test/ResourceSpec.js32
-rw-r--r--test/ScenarioSpec.js2
-rw-r--r--test/ScopeSpec.js13
-rw-r--r--test/ValidatorsTest.js6
-rw-r--r--test/angular-mocks.js1
-rw-r--r--test/delete/ScopeTest.js145
-rw-r--r--test/delete/WidgetsTest.js268
-rw-r--r--test/directivesSpec.js182
-rw-r--r--test/markupSpec.js10
-rw-r--r--test/moveToAngularCom/Base64Test.js5
-rw-r--r--test/moveToAngularCom/DataStoreTest.js616
-rw-r--r--test/moveToAngularCom/EntityDeclarationTest.js50
-rw-r--r--test/moveToAngularCom/FileControllerTest.js98
-rw-r--r--test/moveToAngularCom/MiscTest.js35
-rw-r--r--test/moveToAngularCom/ModelTest.js84
-rw-r--r--test/moveToAngularCom/ServerTest.js42
-rw-r--r--test/moveToAngularCom/UsersTest.js26
-rw-r--r--test/moveToAngularCom/miscTest.js35
-rw-r--r--test/scenario/RunnerSpec.js2
-rw-r--r--test/servicesSpec.js57
-rw-r--r--test/testabilityPatch.js5
-rw-r--r--test/widgetsSpec.js70
27 files changed, 374 insertions, 1640 deletions
diff --git a/test/AngularSpec.js b/test/AngularSpec.js
index de724f03..b4e90175 100644
--- a/test/AngularSpec.js
+++ b/test/AngularSpec.js
@@ -1,3 +1,7 @@
+beforeEach(function(){
+ compileCache = {};
+});
+
describe('Angular', function(){
xit('should fire on updateEvents', function(){
var onUpdateView = jasmine.createSpy();
@@ -50,3 +54,30 @@ describe("copy", function(){
});
});
+
+describe('equals', function(){
+ it('should return true if same object', function(){
+ var o = {};
+ expect(equals(o, o)).toEqual(true);
+ expect(equals(1, '1')).toEqual(true);
+ expect(equals(1, '2')).toEqual(false);
+ });
+
+ it('should recurse into object', function(){
+ expect(equals({}, {})).toEqual(true);
+ expect(equals({name:'misko'}, {name:'misko'})).toEqual(true);
+ expect(equals({name:'misko', age:1}, {name:'misko'})).toEqual(false);
+ expect(equals({name:'misko'}, {name:'misko', age:1})).toEqual(false);
+ expect(equals({name:'misko'}, {name:'adam'})).toEqual(false);
+ expect(equals(['misko'], ['misko'])).toEqual(true);
+ expect(equals(['misko'], ['adam'])).toEqual(false);
+ expect(equals(['misko'], ['misko', 'adam'])).toEqual(false);
+ });
+
+ it('should ignore $ member variables', function(){
+ expect(equals({name:'misko', $id:1}, {name:'misko', $id:2})).toEqual(true);
+ expect(equals({name:'misko'}, {name:'misko', $id:2})).toEqual(true);
+ expect(equals({name:'misko', $id:1}, {name:'misko'})).toEqual(true);
+ });
+
+});
diff --git a/test/BinderTest.js b/test/BinderTest.js
index ecdd506f..f38383ae 100644
--- a/test/BinderTest.js
+++ b/test/BinderTest.js
@@ -42,12 +42,12 @@ BinderTest.prototype.testChangingRadioUpdatesModel = function(){
};
BinderTest.prototype.testChangingCheckboxUpdatesModel = function(){
- var form = this.compile('<input type="checkbox" name="model.price" value="true" checked ng-format="boolean"/>');
+ var form = this.compile('<input type="checkbox" name="model.price" value="true" checked ng:format="boolean"/>');
assertEquals(true, form.scope.model.price);
};
BinderTest.prototype.testBindUpdate = function() {
- var c = this.compile('<div ng-eval="a=123"/>');
+ var c = this.compile('<div ng:eval="a=123"/>');
assertEquals(123, c.scope.$get('a'));
};
@@ -71,26 +71,26 @@ BinderTest.prototype.testChangingSelectSelectedUpdatesModel = function(){
};
BinderTest.prototype.testExecuteInitialization = function() {
- var c = this.compile('<div ng-init="a=123">');
+ var c = this.compile('<div ng:init="a=123">');
assertEquals(c.scope.$get('a'), 123);
};
BinderTest.prototype.testExecuteInitializationStatements = function() {
- var c = this.compile('<div ng-init="a=123;b=345">');
+ var c = this.compile('<div ng:init="a=123;b=345">');
assertEquals(c.scope.$get('a'), 123);
assertEquals(c.scope.$get('b'), 345);
};
BinderTest.prototype.testApplyTextBindings = function(){
- var form = this.compile('<div ng-bind="model.a">x</div>');
+ var form = this.compile('<div ng:bind="model.a">x</div>');
form.scope.$set('model', {a:123});
form.scope.$eval();
assertEquals('123', form.node.text());
};
BinderTest.prototype.testReplaceBindingInTextWithSpan = function() {
- assertEquals(this.compileToHtml("<b>a{{b}}c</b>"), '<b>a<span ng-bind="b"></span>c</b>');
- assertEquals(this.compileToHtml("<b>{{b}}</b>"), '<b><span ng-bind="b"></span></b>');
+ assertEquals(this.compileToHtml("<b>a{{b}}c</b>"), '<b>a<span ng:bind="b"></span>c</b>');
+ assertEquals(this.compileToHtml("<b>{{b}}</b>"), '<b><span ng:bind="b"></span></b>');
};
BinderTest.prototype.testBindingSpaceConfusesIE = function() {
@@ -99,16 +99,16 @@ BinderTest.prototype.testBindingSpaceConfusesIE = function() {
span.innerHTML = '&nbsp;';
var nbsp = span.firstChild.nodeValue;
assertEquals(
- '<b><span ng-bind="a"></span><span>'+nbsp+'</span><span ng-bind="b"></span></b>',
+ '<b><span ng:bind="a"></span><span>'+nbsp+'</span><span ng:bind="b"></span></b>',
this.compileToHtml("<b>{{a}} {{b}}</b>"));
assertEquals(
- '<b><span ng-bind="A"></span><span>'+nbsp+'x </span><span ng-bind="B"></span><span>'+nbsp+'(</span><span ng-bind="C"></span>)</b>',
+ '<b><span ng:bind="A"></span><span>'+nbsp+'x </span><span ng:bind="B"></span><span>'+nbsp+'(</span><span ng:bind="C"></span>)</b>',
this.compileToHtml("<b>{{A}} x {{B}} ({{C}})</b>"));
};
BinderTest.prototype.testBindingOfAttributes = function() {
var c = this.compile("<a href='http://s/a{{b}}c' foo='x'></a>");
- var attrbinding = c.node.attr("ng-bind-attr");
+ var attrbinding = c.node.attr("ng:bind-attr");
var bindings = fromJson(attrbinding);
assertEquals("http://s/a{{b}}c", decodeURI(bindings.href));
assertTrue(!bindings.foo);
@@ -116,7 +116,7 @@ BinderTest.prototype.testBindingOfAttributes = function() {
BinderTest.prototype.testMarkMultipleAttributes = function() {
var c = this.compile('<a href="http://s/a{{b}}c" foo="{{d}}"></a>');
- var attrbinding = c.node.attr("ng-bind-attr");
+ var attrbinding = c.node.attr("ng:bind-attr");
var bindings = fromJson(attrbinding);
assertEquals(bindings.foo, "{{d}}");
assertEquals(decodeURI(bindings.href), "http://s/a{{b}}c");
@@ -126,17 +126,17 @@ BinderTest.prototype.testAttributesNoneBound = function() {
var c = this.compile("<a href='abc' foo='def'></a>");
var a = c.node;
assertEquals(a[0].nodeName, "A");
- assertTrue(!a.attr("ng-bind-attr"));
+ assertTrue(!a.attr("ng:bind-attr"));
};
BinderTest.prototype.testExistingAttrbindingIsAppended = function() {
- var c = this.compile("<a href='http://s/{{abc}}' ng-bind-attr='{\"b\":\"{{def}}\"}'></a>");
+ var c = this.compile("<a href='http://s/{{abc}}' ng:bind-attr='{\"b\":\"{{def}}\"}'></a>");
var a = c.node;
- assertEquals('{"b":"{{def}}","href":"http://s/{{abc}}"}', a.attr('ng-bind-attr'));
+ assertEquals('{"b":"{{def}}","href":"http://s/{{abc}}"}', a.attr('ng:bind-attr'));
};
BinderTest.prototype.testAttributesAreEvaluated = function(){
- var c = this.compile('<a ng-bind-attr=\'{"a":"a", "b":"a+b={{a+b}}"}\'></a>');
+ var c = this.compile('<a ng:bind-attr=\'{"a":"a", "b":"a+b={{a+b}}"}\'></a>');
var binder = c.binder, form = c.node;
c.scope.$eval('a=1;b=2');
c.scope.$eval();
@@ -147,7 +147,7 @@ BinderTest.prototype.testAttributesAreEvaluated = function(){
BinderTest.prototype.testInputTypeButtonActionExecutesInScope = function(){
var savedCalled = false;
- var c = this.compile('<input type="button" ng-click="person.save()" value="Apply">');
+ var c = this.compile('<input type="button" ng:click="person.save()" value="Apply">');
c.scope.$set("person.save", function(){
savedCalled = true;
});
@@ -157,7 +157,7 @@ BinderTest.prototype.testInputTypeButtonActionExecutesInScope = function(){
BinderTest.prototype.testInputTypeButtonActionExecutesInScope2 = function(){
var log = "";
- var c = this.compile('<input type="image" ng-click="action()">');
+ var c = this.compile('<input type="image" ng:click="action()">');
c.scope.$set("action", function(){
log += 'click;';
});
@@ -168,7 +168,7 @@ BinderTest.prototype.testInputTypeButtonActionExecutesInScope2 = function(){
BinderTest.prototype.testButtonElementActionExecutesInScope = function(){
var savedCalled = false;
- var c = this.compile('<button ng-click="person.save()">Apply</button>');
+ var c = this.compile('<button ng:click="person.save()">Apply</button>');
c.scope.$set("person.save", function(){
savedCalled = true;
});
@@ -177,7 +177,7 @@ BinderTest.prototype.testButtonElementActionExecutesInScope = function(){
};
BinderTest.prototype.testRepeaterUpdateBindings = function(){
- var a = this.compile('<ul><LI ng-repeat="item in model.items" ng-bind="item.a"/></ul>');
+ var a = this.compile('<ul><LI ng:repeat="item in model.items" ng:bind="item.a"/></ul>');
var form = a.node;
var items = [{a:"A"}, {a:"B"}];
a.scope.$set('model', {items:items});
@@ -185,25 +185,25 @@ BinderTest.prototype.testRepeaterUpdateBindings = function(){
a.scope.$eval();
assertEquals('<ul>' +
'<#comment></#comment>' +
- '<li ng-bind="item.a" ng-repeat-index="0">A</li>' +
- '<li ng-bind="item.a" ng-repeat-index="1">B</li>' +
+ '<li ng:bind="item.a" ng:repeat-index="0">A</li>' +
+ '<li ng:bind="item.a" ng:repeat-index="1">B</li>' +
'</ul>', sortedHtml(form));
items.unshift({a:'C'});
a.scope.$eval();
assertEquals('<ul>' +
'<#comment></#comment>' +
- '<li ng-bind="item.a" ng-repeat-index="0">C</li>' +
- '<li ng-bind="item.a" ng-repeat-index="1">A</li>' +
- '<li ng-bind="item.a" ng-repeat-index="2">B</li>' +
+ '<li ng:bind="item.a" ng:repeat-index="0">C</li>' +
+ '<li ng:bind="item.a" ng:repeat-index="1">A</li>' +
+ '<li ng:bind="item.a" ng:repeat-index="2">B</li>' +
'</ul>', sortedHtml(form));
items.shift();
a.scope.$eval();
assertEquals('<ul>' +
'<#comment></#comment>' +
- '<li ng-bind="item.a" ng-repeat-index="0">A</li>' +
- '<li ng-bind="item.a" ng-repeat-index="1">B</li>' +
+ '<li ng:bind="item.a" ng:repeat-index="0">A</li>' +
+ '<li ng:bind="item.a" ng:repeat-index="1">B</li>' +
'</ul>', sortedHtml(form));
items.shift();
@@ -212,19 +212,19 @@ BinderTest.prototype.testRepeaterUpdateBindings = function(){
};
BinderTest.prototype.testRepeaterContentDoesNotBind = function(){
- var a = this.compile('<ul><LI ng-repeat="item in model.items"><span ng-bind="item.a"></span></li></ul>');
+ 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();
assertEquals('<ul>' +
'<#comment></#comment>' +
- '<li ng-repeat-index="0"><span ng-bind="item.a">A</span></li>' +
+ '<li ng:repeat-index="0"><span ng:bind="item.a">A</span></li>' +
'</ul>', sortedHtml(a.node));
};
BinderTest.prototype.testExpandEntityTag = function(){
assertEquals(
- '<div ng-entity="Person" ng-watch="$anchor.a:1"></div>',
- this.compileToHtml('<div ng-entity="Person" ng-watch="$anchor.a:1"/>'));
+ '<div ng-entity="Person" ng:watch="$anchor.a:1"></div>',
+ this.compileToHtml('<div ng-entity="Person" ng:watch="$anchor.a:1"/>'));
};
BinderTest.prototype.testDoNotOverwriteCustomAction = function(){
@@ -233,7 +233,7 @@ BinderTest.prototype.testDoNotOverwriteCustomAction = function(){
};
BinderTest.prototype.testRepeaterAdd = function(){
- var c = this.compile('<div><input type="text" name="item.x" ng-repeat="item in items"></div>');
+ var c = this.compile('<div><input type="text" name="item.x" ng:repeat="item in items"></div>');
var doc = c.node;
c.scope.$set('items', [{x:'a'}, {x:'b'}]);
c.scope.$eval();
@@ -248,7 +248,7 @@ BinderTest.prototype.testRepeaterAdd = function(){
};
BinderTest.prototype.testItShouldRemoveExtraChildrenWhenIteratingOverHash = function(){
- var c = this.compile('<div><div ng-repeat="i in items">{{i}}</div></div>');
+ var c = this.compile('<div><div ng:repeat="i in items">{{i}}</div></div>');
var items = {};
c.scope.$set("items", items);
@@ -308,8 +308,8 @@ BinderTest.prototype.testIfAttrBindingThrowsErrorDecorateTheAttribute = function
};
BinderTest.prototype.testNestedRepeater = function() {
- var a = this.compile('<div><div ng-repeat="m in model" name="{{m.name}}">' +
- '<ul name="{{i}}" ng-repeat="i in m.item"></ul>' +
+ var a = 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']}]);
@@ -317,20 +317,20 @@ BinderTest.prototype.testNestedRepeater = function() {
assertEquals('<div>'+
'<#comment></#comment>'+
- '<div name="a" ng-bind-attr="{"name":"{{m.name}}"}" ng-repeat-index="0">'+
+ '<div name="a" ng:bind-attr="{"name":"{{m.name}}"}" ng:repeat-index="0">'+
'<#comment></#comment>'+
- '<ul name="a1" ng-bind-attr="{"name":"{{i}}"}" ng-repeat-index="0"></ul>'+
- '<ul name="a2" ng-bind-attr="{"name":"{{i}}"}" ng-repeat-index="1"></ul>'+
+ '<ul name="a1" ng:bind-attr="{"name":"{{i}}"}" ng:repeat-index="0"></ul>'+
+ '<ul name="a2" ng:bind-attr="{"name":"{{i}}"}" ng:repeat-index="1"></ul>'+
'</div>'+
- '<div name="b" ng-bind-attr="{"name":"{{m.name}}"}" ng-repeat-index="1">'+
+ '<div name="b" ng:bind-attr="{"name":"{{m.name}}"}" ng:repeat-index="1">'+
'<#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>'+
+ '<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.node));
};
BinderTest.prototype.testHideBindingExpression = function() {
- var a = this.compile('<div ng-hide="hidden == 3"/>');
+ var a = this.compile('<div ng:hide="hidden == 3"/>');
a.scope.$set('hidden', 3);
a.scope.$eval();
@@ -344,7 +344,7 @@ BinderTest.prototype.testHideBindingExpression = function() {
};
BinderTest.prototype.testHideBinding = function() {
- var c = this.compile('<div ng-hide="hidden"/>');
+ var c = this.compile('<div ng:hide="hidden"/>');
c.scope.$set('hidden', 'true');
c.scope.$eval();
@@ -363,7 +363,7 @@ BinderTest.prototype.testHideBinding = function() {
};
BinderTest.prototype.testShowBinding = function() {
- var c = this.compile('<div ng-show="show"/>');
+ var c = this.compile('<div ng:show="show"/>');
c.scope.$set('show', 'true');
c.scope.$eval();
@@ -382,42 +382,44 @@ BinderTest.prototype.testShowBinding = function() {
};
BinderTest.prototype.testBindClassUndefined = function() {
- var doc = this.compile('<div ng-class="undefined"/>');
+ var doc = this.compile('<div ng:class="undefined"/>');
doc.scope.$eval();
assertEquals(
- '<div class="undefined" ng-class="undefined"></div>',
+ '<div class="undefined" ng:class="undefined"></div>',
sortedHtml(doc.node));
};
BinderTest.prototype.testBindClass = function() {
- var c = this.compile('<div ng-class="class"/>');
+ var c = this.compile('<div ng:class="class"/>');
c.scope.$set('class', 'testClass');
c.scope.$eval();
- assertEquals(sortedHtml(c.node),
- '<div class="testClass" ng-class="class"></div>');
+ assertEquals('<div class="testClass" ng:class="class"></div>', sortedHtml(c.node));
c.scope.$set('class', ['a', 'b']);
c.scope.$eval();
- assertEquals(sortedHtml(c.node),
- '<div class="a b" ng-class="class"></div>');
+ assertEquals('<div class="a b" ng:class="class"></div>', sortedHtml(c.node));
};
BinderTest.prototype.testBindClassEvenOdd = function() {
- var x = this.compile('<div><div ng-repeat="i in [0,1]" ng-class-even="\'e\'" ng-class-odd="\'o\'"/></div>');
+ var x = this.compile('<div><div ng:repeat="i in [0,1]" ng:class-even="\'e\'" ng:class-odd="\'o\'"/></div>');
x.scope.$eval();
+ var d1 = jqLite(x.node[0].childNodes[1]);
+ var d2 = jqLite(x.node[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>',
+ '<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.node));
};
BinderTest.prototype.testBindStyle = function() {
- var c = this.compile('<div ng-style="style"/>');
+ var c = this.compile('<div ng:style="style"/>');
c.scope.$eval('style={color:"red"}');
c.scope.$eval();
@@ -430,7 +432,7 @@ BinderTest.prototype.testBindStyle = function() {
BinderTest.prototype.testActionOnAHrefThrowsError = function(){
var model = {books:[]};
- var c = this.compile('<a ng-click="action()">Add Phone</a>', model);
+ var c = this.compile('<a ng:click="action()">Add Phone</a>', model);
c.scope.action = function(){
throw {a:'abc', b:2};
};
@@ -450,23 +452,23 @@ BinderTest.prototype.testActionOnAHrefThrowsError = function(){
BinderTest.prototype.testShoulIgnoreVbNonBindable = function(){
var c = this.compile("<div>{{a}}" +
- "<div ng-non-bindable>{{a}}</div>" +
- "<div ng-non-bindable=''>{{b}}</div>" +
- "<div ng-non-bindable='true'>{{c}}</div></div>");
+ "<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.node.text());
};
BinderTest.prototype.testOptionShouldUpdateParentToGetProperBinding = function() {
- var c = this.compile('<select name="s"><option ng-repeat="i in [0,1]" value="{{i}}" ng-bind="i"></option></select>');
+ 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.node[0].selectedIndex);
};
BinderTest.prototype.testRepeaterShouldBindInputsDefaults = function () {
- var c = this.compile('<div><input value="123" name="item.name" ng-repeat="item in items"></div>');
+ 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();
@@ -474,19 +476,12 @@ BinderTest.prototype.testRepeaterShouldBindInputsDefaults = function () {
assertEquals("misko", c.scope.$eval('items[1].name'));
};
-BinderTest.prototype.testRepeaterShouldCreateArray = function () {
- var c = this.compile('<input value="123" name="item.name" ng-repeat="item in items">');
- c.scope.$eval();
-
- assertEquals(0, c.scope.$get('items').length);
-};
-
BinderTest.prototype.testShouldTemplateBindPreElements = function () {
var c = this.compile('<pre>Hello {{name}}!</pre>');
c.scope.$set("name", "World");
c.scope.$eval();
- assertEquals('<pre ng-bind-template="Hello {{name}}!">Hello World!</pre>', sortedHtml(c.node));
+ assertEquals('<pre ng:bind-template="Hello {{name}}!">Hello World!</pre>', sortedHtml(c.node));
};
BinderTest.prototype.testFillInOptionValueWhenMissing = function() {
@@ -510,8 +505,8 @@ BinderTest.prototype.testFillInOptionValueWhenMissing = function() {
};
BinderTest.prototype.testValidateForm = function() {
- var c = this.compile('<div><input name="name" ng-required>' +
- '<div ng-repeat="item in items"><input name="item.name" ng-required/></div></div>');
+ var c = this.compile('<div><input name="name" ng:required>' +
+ '<div ng:repeat="item in items"><input name="item.name" ng:required/></div></div>');
var items = [{}, {}];
c.scope.$set("items", items);
c.scope.$eval();
@@ -539,7 +534,7 @@ BinderTest.prototype.testValidateForm = function() {
};
BinderTest.prototype.testValidateOnlyVisibleItems = function(){
- var c = this.compile('<div><input name="name" ng-required><input ng-show="show" name="name" ng-required></div>');
+ var c = this.compile('<div><input name="name" ng:required><input ng:show="show" name="name" ng:required></div>');
jqLite(document.body).append(c.node);
c.scope.$set("show", true);
c.scope.$eval();
@@ -552,9 +547,9 @@ BinderTest.prototype.testValidateOnlyVisibleItems = function(){
BinderTest.prototype.testDeleteAttributeIfEvaluatesFalse = function() {
var c = 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>');
+ '<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();
function assertChild(index, disabled) {
var child = childNode(c.node, index);
@@ -571,8 +566,8 @@ BinderTest.prototype.testDeleteAttributeIfEvaluatesFalse = function() {
BinderTest.prototype.testItShouldDisplayErrorWhenActionIsSyntacticlyIncorect = function(){
var c = this.compile('<div>' +
- '<input type="button" ng-click="greeting=\'ABC\'"/>' +
- '<input type="button" ng-click=":garbage:"/></div>');
+ '<input type="button" ng:click="greeting=\'ABC\'"/>' +
+ '<input type="button" ng:click=":garbage:"/></div>');
var first = jqLite(c.node[0].childNodes[0]);
var second = jqLite(c.node[0].childNodes[1]);
@@ -605,8 +600,8 @@ BinderTest.prototype.testItShouldSelectTheCorrectRadioBox = function() {
BinderTest.prototype.testItShouldListenOnRightScope = function() {
var c = this.compile(
- '<ul ng-init="counter=0; gCounter=0" ng-watch="w:counter=counter+1">' +
- '<li ng-repeat="n in [1,2,4]" ng-watch="w:counter=counter+1;w:$root.gCounter=$root.gCounter+n"/></ul>');
+ '<ul ng:init="counter=0; gCounter=0" ng:watch="w:counter=counter+1">' +
+ '<li ng:repeat="n in [1,2,4]" ng:watch="w:counter=counter+1;w:$root.gCounter=$root.gCounter+n"/></ul>');
c.scope.$eval();
assertEquals(0, c.scope.$get("counter"));
assertEquals(0, c.scope.$get("gCounter"));
@@ -618,25 +613,25 @@ BinderTest.prototype.testItShouldListenOnRightScope = function() {
};
BinderTest.prototype.testItShouldRepeatOnHashes = function() {
- var x = this.compile('<ul><li ng-repeat="(k,v) in {a:0,b:1}" ng-bind=\"k + v\"></li></ul>');
+ var x = this.compile('<ul><li ng:repeat="(k,v) in {a:0,b:1}" ng:bind=\"k + v\"></li></ul>');
x.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>' +
+ '<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.node));
};
BinderTest.prototype.testItShouldFireChangeListenersBeforeUpdate = function(){
- var x = this.compile('<div ng-bind="name"></div>');
+ 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"));
assertEquals(
- '<div ng-bind="name">123</div>',
+ '<div ng:bind="name">123</div>',
sortedHtml(x.node));
};
@@ -657,12 +652,12 @@ BinderTest.prototype.XtestItShouldRenderMultiRootHtmlInBinding = function() {
x.scope.a = "a<b>c</b>d";
x.scope.$eval();
assertEquals(
- '<div>before <span ng-bind="a|html">a<b>c</b>d</span>after</div>',
+ '<div>before <span ng:bind="a|html">a<b>c</b>d</span>after</div>',
sortedHtml(x.node));
};
BinderTest.prototype.testItShouldUseFormaterForText = function() {
- var x = this.compile('<input name="a" ng-format="list" value="a,b">');
+ 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.node;
diff --git a/test/BrowserSpecs.js b/test/BrowserSpecs.js
index 3ce158b4..99632928 100644
--- a/test/BrowserSpecs.js
+++ b/test/BrowserSpecs.js
@@ -1,10 +1,14 @@
describe('browser', function(){
- var browser, location;
+ var browser, location, head;
beforeEach(function(){
location = {href:"http://server", hash:""};
- browser = new Browser(location, {});
+ head = {
+ scripts: [],
+ append: function(node){head.scripts.push(node);}
+ };
+ browser = new Browser(location, jqLite(window.document), head);
browser.setTimeout = noop;
});
@@ -45,4 +49,22 @@ describe('browser', function(){
});
});
+ describe('xhr', function(){
+ describe('JSON', function(){
+ it('should add script tag for request', function() {
+ var log = "";
+ browser.xhr('JSON', 'http://example.org/path?cb=JSON_CALLBACK', function(code, data){
+ log += code + ':' + data + ';';
+ });
+ expect(head.scripts.length).toEqual(1);
+ var url = head.scripts[0].src.split('?cb=');
+ expect(url[0]).toEqual('http://example.org/path');
+ expect(typeof window[url[1]]).toEqual('function');
+ window[url[1]]('data');
+ expect(log).toEqual('200:data;');
+ expect(typeof window[url[1]]).toEqual('undefined');
+ });
+ });
+ });
+
});
diff --git a/test/CompilerSpec.js b/test/CompilerSpec.js
index da354ea5..3736ff4e 100644
--- a/test/CompilerSpec.js
+++ b/test/CompilerSpec.js
@@ -22,7 +22,7 @@ describe('compiler', function(){
};
textMarkup = [];
attrMarkup = [];
- widgets = {};
+ widgets = extensionMap({}, 'widget');
compiler = new Compiler(textMarkup, attrMarkup, directives, widgets);
compile = function(html){
var e = jqLite("<div>" + html + "</div>");
diff --git a/test/FiltersTest.js b/test/FiltersTest.js
index f839bb51..903a7a2f 100644
--- a/test/FiltersTest.js
+++ b/test/FiltersTest.js
@@ -6,11 +6,11 @@ FiltersTest.prototype.testCurrency = function(){
var currency = bind(context, angular.filter.currency);
assertEquals(currency(0), '$0.00');
- assertEquals(html.hasClass('ng-format-negative'), false);
+ assertEquals(html.hasClass('ng:format-negative'), false);
assertEquals(currency(-999), '$-999.00');
- assertEquals(html.hasClass('ng-format-negative'), true);
+ assertEquals(html.hasClass('ng:format-negative'), true);
assertEquals(currency(1234.5678), '$1,234.57');
- assertEquals(html.hasClass('ng-format-negative'), false);
+ assertEquals(html.hasClass('ng:format-negative'), false);
};
FiltersTest.prototype.testFilterThisIsContext = function(){
diff --git a/test/ResourceSpec.js b/test/ResourceSpec.js
index 2f285bcf..6e32ce18 100644
--- a/test/ResourceSpec.js
+++ b/test/ResourceSpec.js
@@ -28,13 +28,24 @@ describe("resource", function() {
resource.route('URL').query();
});
+ it('should ignore slashes of undefinend parameters', function(){
+ var R = resource.route('/Path/:a/:b/:c');
+ xhr.expectGET('/Path').respond({});
+ xhr.expectGET('/Path/1').respond({});
+ xhr.expectGET('/Path/2/3').respond({});
+ xhr.expectGET('/Path/4/5/6').respond({});
+ R.get({});
+ R.get({a:1});
+ R.get({a:2, b:3});
+ R.get({a:4, b:5, c:6});
+ });
+
it("should build resource with default param", function(){
xhr.expectGET('/Order/123/Line/456.visa?minimum=0.05').respond({id:'abc'});
var LineItem = resource.route('/Order/:orderId/Line/:id:verb', {orderId: '123', id: '@id.key', verb:'.visa', minimum:0.05});
var item = LineItem.get({id:456});
xhr.flush();
nakedExpect(item).toEqual({id:'abc'});
-
});
it("should create resource", function(){
@@ -66,8 +77,6 @@ describe("resource", function() {
nakedExpect(cc).toEqual({id:{key:123}, name:'misko'});
expect(callback).wasNotCalled();
xhr.flush();
- nakedExpect(cc).toEqual({id:{key:123}, name:'rama'});
- expect(callback).wasCalledWith(cc);
});
it("should query resource", function(){
@@ -138,6 +147,23 @@ describe("resource", function() {
expect(person.name).toEqual('misko');
});
+ it('should return the same object when verifying the cache', function(){
+ var scope = angular.compile('<div></div>');
+ var Person = scope.$resource('/Person/:id', null, {query: {method:'GET', isArray: true, verifyCache: true}});
+ scope.$browser.xhr.expectGET('/Person/123').respond('[\n{\nname:\n"misko"\n}\n]');
+ var person = Person.query({id:123});
+ scope.$browser.xhr.flush();
+ expect(person[0].name).toEqual('misko');
+
+ scope.$browser.xhr.expectGET('/Person/123').respond('[\n{\nname:\n"rob"\n}\n]');
+ var person2 = Person.query({id:123});
+ expect(person2[0].name).toEqual('misko');
+ var person2Cache = person2;
+ scope.$browser.xhr.flush();
+ expect(person2Cache).toEqual(person2);
+ expect(person2[0].name).toEqual('rob');
+ });
+
describe('failure mode', function(){
it('should report error when non 200', function(){
xhr.expectGET('/CreditCard/123').respond(500, "Server Error");
diff --git a/test/ScenarioSpec.js b/test/ScenarioSpec.js
index 9afe8e95..7ea3192d 100644
--- a/test/ScenarioSpec.js
+++ b/test/ScenarioSpec.js
@@ -1,6 +1,6 @@
describe("ScenarioSpec: Compilation", function(){
it("should compile dom node and return scope", function(){
- var node = jqLite('<div ng-init="a=1">{{b=a+1}}</div>')[0];
+ var node = jqLite('<div ng:init="a=1">{{b=a+1}}</div>')[0];
var scope = compile(node);
scope.$init();
expect(scope.a).toEqual(1);
diff --git a/test/ScopeSpec.js b/test/ScopeSpec.js
index d93400e5..6f5485e7 100644
--- a/test/ScopeSpec.js
+++ b/test/ScopeSpec.js
@@ -15,12 +15,17 @@ describe('scope/model', function(){
expect(model.$root).toEqual(model);
});
+ it('should return noop function when LHS is undefined', function(){
+ var model = createScope();
+ expect(model.$eval('x.$filter()')).toEqual(undefined);
+ });
+
describe('$eval', function(){
- it('should eval function with correct this and pass arguments', function(){
+ it('should eval function with correct this', function(){
var model = createScope();
- model.$eval(function(name){
- this.name = name;
- }, 'works');
+ model.$eval(function(){
+ this.name = 'works';
+ });
expect(model.name).toEqual('works');
});
diff --git a/test/ValidatorsTest.js b/test/ValidatorsTest.js
index 573c340d..2e156f84 100644
--- a/test/ValidatorsTest.js
+++ b/test/ValidatorsTest.js
@@ -7,7 +7,7 @@ ValidatorTest.prototype.testItShouldHaveThisSet = function() {
validator.last = last;
validator._this = this;
};
- var scope = compile('<input name="name" ng-validate="myValidator:\'hevery\'"/>');
+ var scope = compile('<input name="name" ng:validate="myValidator:\'hevery\'"/>');
scope.name = 'misko';
scope.$init();
assertEquals('misko', validator.first);
@@ -109,7 +109,7 @@ describe('Validator:asynchronous', function(){
it('should make a request and show spinner', function(){
var value, fn;
- var scope = compile('<input type="text" name="name" ng-validate="asynchronous:asyncFn"/>');
+ var scope = compile('<input type="text" name="name" ng:validate="asynchronous:asyncFn"/>');
scope.$init();
var input = scope.$element;
scope.asyncFn = function(v,f){
@@ -151,7 +151,7 @@ describe('Validator:asynchronous', function(){
});
it("should handle update function", function(){
- var scope = angular.compile('<input name="name" ng-validate="asynchronous:asyncFn:updateFn"/>');
+ var scope = angular.compile('<input name="name" ng:validate="asynchronous:asyncFn:updateFn"/>');
scope.asyncFn = jasmine.createSpy();
scope.updateFn = jasmine.createSpy();
scope.name = 'misko';
diff --git a/test/angular-mocks.js b/test/angular-mocks.js
index 8838b2cd..bac2e800 100644
--- a/test/angular-mocks.js
+++ b/test/angular-mocks.js
@@ -66,6 +66,7 @@ function MockBrowser() {
self.xhr.expectPOST = angular.bind(self, self.xhr.expect, 'POST');
self.xhr.expectDELETE = angular.bind(self, self.xhr.expect, 'DELETE');
self.xhr.expectPUT = angular.bind(self, self.xhr.expect, 'PUT');
+ self.xhr.expectJSON = angular.bind(self, self.xhr.expect, 'JSON');
self.xhr.flush = function() {
while(requests.length) {
requests.pop()();
diff --git a/test/delete/ScopeTest.js b/test/delete/ScopeTest.js
deleted file mode 100644
index 24febf19..00000000
--- a/test/delete/ScopeTest.js
+++ /dev/null
@@ -1,145 +0,0 @@
-ScopeTest = TestCase('ScopeTest');
-
-ScopeTest.prototype.testGetScopeRetrieval = function(){
- var scope = {};
- var form = jQuery("<a><b><c></c></b></a>");
- form.data('scope', scope);
- var c = form.find('c');
- assertTrue(scope === c.scope());
-};
-
-ScopeTest.prototype.testGetScopeRetrievalIntermediateNode = function(){
- var scope = {};
- var form = jQuery("<a><b><c></c></b></a>");
- form.find("b").data('scope', scope);
- var b = form.find('b');
- assertTrue(scope === b.scope());
-};
-
-ScopeTest.prototype.testNoScopeDoesNotCauseInfiniteRecursion = function(){
- var form = jQuery("<a><b><c></c></b></a>");
- var c = form.find('c');
- assertTrue(!c.scope());
-};
-
-ScopeTest.prototype.testScopeEval = function(){
- var scope = new Scope({b:345});
- assertEquals(scope.eval('b = 123'), 123);
- assertEquals(scope.get('b'), 123);
-};
-
-ScopeTest.prototype.testScopeFromPrototype = function(){
- var scope = new Scope({b:123});
- scope.eval('a = b');
- scope.eval('b = 456');
- assertEquals(scope.get('a'), 123);
- assertEquals(scope.get('b'), 456);
-};
-
-ScopeTest.prototype.testSetScopeGet = function(){
- var scope = new Scope();
- assertEquals(987, scope.set('a', 987));
- assertEquals(scope.get('a'), 987);
- assertEquals(scope.eval('a'), 987);
-};
-
-ScopeTest.prototype.testGetChain = function(){
- var scope = new Scope({a:{b:987}});
- assertEquals(scope.get('a.b'), 987);
- assertEquals(scope.eval('a.b'), 987);
-};
-
-ScopeTest.prototype.testGetUndefinedChain = function(){
- var scope = new Scope();
- assertEquals(typeof scope.get('a.b'), 'undefined');
-};
-
-ScopeTest.prototype.testSetChain = function(){
- var scope = new Scope({a:{}});
- scope.set('a.b', 987);
- assertEquals(scope.get('a.b'), 987);
- assertEquals(scope.eval('a.b'), 987);
-};
-
-ScopeTest.prototype.testSetGetOnChain = function(){
- var scope = new Scope();
- scope.set('a.b', 987);
- assertEquals(scope.get('a.b'), 987);
- assertEquals(scope.eval('a.b'), 987);
-};
-
-ScopeTest.prototype.testGlobalFunctionAccess =function(){
- window['scopeAddTest'] = function (a, b) {return a+b;};
- var scope = new Scope({window:window});
- assertEquals(scope.eval('window.scopeAddTest(1,2)'), 3);
-
- scope.set('add', function (a, b) {return a+b;});
- assertEquals(scope.eval('add(1,2)'), 3);
-
- scope.set('math.add', function (a, b) {return a+b;});
- assertEquals(scope.eval('math.add(1,2)'), 3);
-};
-
-ScopeTest.prototype.testValidationEval = function(){
- expectAsserts(4);
- var scope = new Scope();
- scope.set("name", "misko");
- angular.validator.testValidator = function(value, expect){
- assertEquals("misko", this.name);
- return value == expect ? null : "Error text";
- };
-
- assertEquals("Error text", scope.validate("testValidator:'abc'", 'x'));
- assertEquals(null, scope.validate("testValidator:'abc'", 'abc'));
-
- delete angular.validator['testValidator'];
-};
-
-ScopeTest.prototype.testCallingNonExistantMethodShouldProduceFriendlyException = function() {
- expectAsserts(1);
- var scope = new Scope({obj:{}});
- try {
- scope.eval("obj.iDontExist()");
- fail();
- } catch (e) {
- assertEquals("Expression 'obj.iDontExist' is not a function.", e);
- }
-};
-
-ScopeTest.prototype.testAccessingWithInvalidPathShouldThrowError = function() {
- var scope = new Scope();
- try {
- scope.get('a.{{b}}');
- fail();
- } catch (e) {
- assertEquals("Expression 'a.{{b}}' is not a valid expression for accesing variables.", e);
- }
-};
-
-ScopeTest.prototype.testItShouldHave$parent = function() {
- var parent = new Scope({}, "ROOT");
- var child = new Scope(parent.state);
- assertSame("parent", child.state.$parent, parent.state);
- assertSame("root", child.state.$root, parent.state);
-};
-
-ScopeTest.prototype.testItShouldHave$root = function() {
- var scope = new Scope({}, "ROOT");
- assertSame(scope.state.$root, scope.state);
-};
-
-ScopeTest.prototype.testItShouldBuildPathOnUndefined = function(){
- var scope = new Scope({}, "ROOT");
- scope.setEval("a.$b.c", 1);
- assertJsonEquals({$b:{c:1}}, scope.get("a"));
-};
-
-ScopeTest.prototype.testItShouldMapUnderscoreFunctions = function(){
- var scope = new Scope({}, "ROOT");
- scope.set("a", [1,2,3]);
- assertEquals('function', typeof scope.get("a.$size"));
- scope.eval("a.$includeIf(4,true)");
- assertEquals(4, scope.get("a.$size")());
- assertEquals(4, scope.eval("a.$size()"));
- assertEquals('undefined', typeof scope.get("a.dontExist"));
-};
diff --git a/test/delete/WidgetsTest.js b/test/delete/WidgetsTest.js
deleted file mode 100644
index 313d7372..00000000
--- a/test/delete/WidgetsTest.js
+++ /dev/null
@@ -1,268 +0,0 @@
-WidgetTest = TestCase('WidgetTest');
-
-WidgetTest.prototype.testRequired = function () {
- var view = $('<input name="a" ng-required>');
- var scope = new Scope({$invalidWidgets:[]});
- var cntl = new TextController(view[0], 'a', angularFormatter.noop);
- cntl.updateView(scope);
- assertTrue(view.hasClass('ng-validation-error'));
- assertEquals("Required Value", view.attr('ng-error'));
- scope.set('a', 'A');
- cntl.updateView(scope);
- assertFalse(view.hasClass('ng-validation-error'));
- assertEquals("undefined", typeof view.attr('ng-error'));
-};
-
-WidgetTest.prototype.testValidator = function () {
- var view = $('<input name="a" ng-validate="testValidator:\'ABC\'">');
- var scope = new Scope({$invalidWidgets:[]});
- var cntl = new TextController(view[0], 'a', angularFormatter.noop);
- angular.validator.testValidator = function(value, expect){
- return value == expect ? false : "Error text";
- };
-
- scope.set('a', '');
- cntl.updateView(scope);
- assertEquals(view.hasClass('ng-validation-error'), false);
- assertEquals(null, view.attr('ng-error'));
-
- scope.set('a', 'X');
- cntl.updateView(scope);
- assertEquals(view.hasClass('ng-validation-error'), true);
- assertEquals(view.attr('ng-error'), "Error text");
- assertEquals("Error text", view.attr('ng-error'));
-
- scope.set('a', 'ABC');
- cntl.updateView(scope);
- assertEquals(view.hasClass('ng-validation-error'), false);
- assertEquals(view.attr('ng-error'), null);
- assertEquals(null, view.attr('ng-error'));
-
- delete angular.validator['testValidator'];
-};
-
-WidgetTest.prototype.testRequiredValidator = function () {
- var view = $('<input name="a" ng-required ng-validate="testValidator:\'ABC\'">');
- var scope = new Scope({$invalidWidgets:[]});
- var cntl = new TextController(view[0], 'a', angularFormatter.noop);
- angular.validator.testValidator = function(value, expect){
- return value == expect ? null : "Error text";
- };
-
- scope.set('a', '');
- cntl.updateView(scope);
- assertEquals(view.hasClass('ng-validation-error'), true);
- assertEquals("Required Value", view.attr('ng-error'));
-
- scope.set('a', 'X');
- cntl.updateView(scope);
- assertEquals(view.hasClass('ng-validation-error'), true);
- assertEquals("Error text", view.attr('ng-error'));
-
- scope.set('a', 'ABC');
- cntl.updateView(scope);
- assertEquals(view.hasClass('ng-validation-error'), false);
- assertEquals(null, view.attr('ng-error'));
-
- delete angular.validator['testValidator'];
-};
-
-TextControllerTest = TestCase("TextControllerTest");
-
-TextControllerTest.prototype.testDatePicker = function() {
- var input = $('<input type="text" ng-widget="datepicker">');
- input.data('scope', new Scope());
- var body = $(document.body);
- body.append(input);
- var binder = new Binder(input[0], new WidgetFactory());
- assertTrue('before', input.data('datepicker') === undefined);
- binder.compile();
- assertTrue('after', input.data('datepicker') !== null);
- assertTrue(body.html(), input.hasClass('hasDatepicker'));
-};
-
-RepeaterUpdaterTest = TestCase("RepeaterUpdaterTest");
-
-RepeaterUpdaterTest.prototype.testRemoveThenAdd = function() {
- var view = $("<div><span/></div>");
- var template = function () {
- return $("<li/>");
- };
- var repeater = new RepeaterUpdater(view.find("span"), "a in b", template, "");
- var scope = new Scope();
- scope.set('b', [1,2]);
-
- repeater.updateView(scope);
-
- scope.set('b', []);
- repeater.updateView(scope);
-
- scope.set('b', [1]);
- repeater.updateView(scope);
- assertEquals(1, view.find("li").size());
-};
-
-RepeaterUpdaterTest.prototype.testShouldBindWidgetOnRepeaterClone = function(){
- //fail();
-};
-
-RepeaterUpdaterTest.prototype.testShouldThrowInformativeSyntaxError= function(){
- expectAsserts(1);
- try {
- var repeater = new RepeaterUpdater(null, "a=b");
- } catch (e) {
- assertEquals("Expected ng-repeat in form of 'item in collection' but got 'a=b'.", e);
- }
-};
-
-SelectControllerTest = TestCase("SelectControllerTest");
-
-SelectControllerTest.prototype.testShouldUpdateModelNullOnNothingSelected = function(){
- var scope = new Scope();
- var view = {selectedIndex:-1, options:[]};
- var cntl = new SelectController(view, 'abc');
- cntl.updateModel(scope);
- assertNull(scope.get('abc'));
-};
-
-SelectControllerTest.prototype.testShouldUpdateModelWhenNothingSelected = function(){
- var scope = new Scope();
- var view = {value:'123'};
- var cntl = new SelectController(view, 'abc');
- cntl.updateView(scope);
- assertEquals("123", scope.get('abc'));
-};
-
-BindUpdaterTest = TestCase("BindUpdaterTest");
-
-BindUpdaterTest.prototype.testShouldDisplayNothingForUndefined = function () {
- var view = $('<span />');
- var controller = new BindUpdater(view[0], "{{a}}");
- var scope = new Scope();
-
- scope.set('a', undefined);
- controller.updateView(scope);
- assertEquals("", view.text());
-
- scope.set('a', null);
- controller.updateView(scope);
- assertEquals("", view.text());
-};
-
-BindUpdaterTest.prototype.testShouldDisplayJsonForNonStrings = function () {
- var view = $('<span />');
- var controller = new BindUpdater(view[0], "{{obj}}");
-
- controller.updateView(new Scope({obj:[]}));
- assertEquals("[]", view.text());
-
- controller.updateView(new Scope({obj:{text:'abc'}}));
- assertEquals('abc', fromJson(view.text()).text);
-};
-
-
-BindUpdaterTest.prototype.testShouldInsertHtmlNode = function () {
- var view = $('<span />');
- var controller = new BindUpdater(view[0], "<fake>&{{obj}}</fake>");
- var scope = new Scope();
-
- scope.set("obj", $('<div>myDiv</div>')[0]);
- controller.updateView(scope);
- assertEquals("<fake>&myDiv</fake>", view.text());
-};
-
-
-BindUpdaterTest.prototype.testShouldDisplayTextMethod = function () {
- var view = $('<div />');
- var controller = new BindUpdater(view[0], "{{obj}}");
- var scope = new Scope();
-
- scope.set("obj", new angular.filter.Meta({text:function(){return "abc";}}));
- controller.updateView(scope);
- assertEquals("abc", view.text());
-
- scope.set("obj", new angular.filter.Meta({text:"123"}));
- controller.updateView(scope);
- assertEquals("123", view.text());
-
- scope.set("obj", {text:"123"});
- controller.updateView(scope);
- assertEquals("123", fromJson(view.text()).text);
-};
-
-BindUpdaterTest.prototype.testShouldDisplayHtmlMethod = function () {
- var view = $('<div />');
- var controller = new BindUpdater(view[0], "{{obj}}");
- var scope = new Scope();
-
- scope.set("obj", new angular.filter.Meta({html:function(){return "a<div>b</div>c";}}));
- controller.updateView(scope);
- assertEquals("abc", view.text());
-
- scope.set("obj", new angular.filter.Meta({html:"1<div>2</div>3"}));
- controller.updateView(scope);
- assertEquals("123", view.text());
-
- scope.set("obj", {html:"123"});
- controller.updateView(scope);
- assertEquals("123", fromJson(view.text()).html);
-};
-
-BindUpdaterTest.prototype.testUdateBoolean = function() {
- var view = $('<div />');
- var controller = new BindUpdater(view[0], "{{true}}, {{false}}");
- controller.updateView(new Scope());
- assertEquals('true, false', view.text());
-};
-
-BindAttrUpdaterTest = TestCase("BindAttrUpdaterTest");
-
-BindAttrUpdaterTest.prototype.testShouldLoadBlankImageWhenBindingIsUndefined = function () {
- var view = $('<img />');
- var controller = new BindAttrUpdater(view[0], {src: '{{imageUrl}}'});
-
- var scope = new Scope();
- scope.set('imageUrl', undefined);
- scope.set('$config.blankImage', 'http://server/blank.gif');
-
- controller.updateView(scope);
- assertEquals("http://server/blank.gif", view.attr('src'));
-};
-
-RepeaterUpdaterTest.prototype.testShouldNotDieWhenRepeatExpressionIsNull = function() {
- var rep = new RepeaterUpdater(null, "$item in items", null, null);
- var scope = new Scope();
- scope.set('items', undefined);
- rep.updateView(scope);
-};
-
-RepeaterUpdaterTest.prototype.testShouldIterateOverKeys = function() {
- var rep = new RepeaterUpdater(null, "($k,_v) in items", null, null);
- assertEquals("items", rep.iteratorExp);
- assertEquals("_v", rep.valueExp);
- assertEquals("$k", rep.keyExp);
-};
-
-EvalUpdaterTest = TestCase("EvalUpdaterTest");
-EvalUpdaterTest.prototype.testEvalThrowsException = function(){
- var view = $('<div/>');
- var eval = new EvalUpdater(view[0], 'undefined()');
-
- eval.updateView(new Scope());
- assertTrue(!!view.attr('ng-error'));
- assertTrue(view.hasClass('ng-exception'));
-
- eval.exp = "1";
- eval.updateView(new Scope());
- assertFalse(!!view.attr('ng-error'));
- assertFalse(view.hasClass('ng-exception'));
-};
-
-RadioControllerTest = TestCase("RadioController");
-RadioControllerTest.prototype.testItShouldTreatTrueStringAsBoolean = function () {
- var view = $('<input type="radio" name="select" value="true"/>');
- var radio = new RadioController(view[0], 'select');
- var scope = new Scope({select:true});
- radio.updateView(scope);
- assertTrue(view[0].checked);
-};
diff --git a/test/directivesSpec.js b/test/directivesSpec.js
index 42869a05..8a7da41d 100644
--- a/test/directivesSpec.js
+++ b/test/directivesSpec.js
@@ -17,57 +17,82 @@ describe("directives", function(){
expect(size(jqCache)).toEqual(0);
});
- it("should ng-init", function() {
- var scope = compile('<div ng-init="a=123"></div>');
+ it("should ng:init", function() {
+ var scope = compile('<div ng:init="a=123"></div>');
expect(scope.a).toEqual(123);
});
- it("should ng-eval", function() {
- var scope = compile('<div ng-init="a=0" ng-eval="a = a + 1"></div>');
+ it("should ng:eval", function() {
+ var scope = compile('<div ng:init="a=0" ng:eval="a = a + 1"></div>');
expect(scope.a).toEqual(1);
scope.$eval();
expect(scope.a).toEqual(2);
});
- it('should ng-bind', function() {
- var scope = compile('<div ng-bind="a"></div>');
- expect(element.text()).toEqual('');
- scope.a = 'misko';
- scope.$eval();
- expect(element.text()).toEqual('misko');
- });
+ describe('ng:bind', function(){
+ it('should set text', function() {
+ var scope = compile('<div ng:bind="a"></div>');
+ expect(element.text()).toEqual('');
+ scope.a = 'misko';
+ scope.$eval();
+ expect(element.text()).toEqual('misko');
+ });
- it('should ng-bind html', function() {
- var scope = compile('<div ng-bind="html|html"></div>');
- scope.html = '<div>hello</div>';
- scope.$eval();
- expect(lowercase(element.html())).toEqual('<div>hello</div>');
- });
+ it('should set html', function() {
+ var scope = compile('<div ng:bind="html|html"></div>');
+ scope.html = '<div>hello</div>';
+ scope.$eval();
+ expect(lowercase(element.html())).toEqual('<div>hello</div>');
+ });
+
+ it('should set element element', function() {
+ angularFilter.myElement = function() {
+ return jqLite('<a>hello</a>');
+ };
+ var scope = compile('<div ng:bind="0|myElement"></div>');
+ scope.$eval();
+ expect(lowercase(element.html())).toEqual('<a>hello</a>');
+ });
+
+ it('should have $element set to current bind element', function(){
+ angularFilter.myFilter = function(){
+ this.$element.text('HELLO');
+ };
+ var scope = compile('<div>before<div ng:bind="0|myFilter"></div>after</div>');
+ expect(scope.$element.text()).toEqual("beforeHELLOafter");
+ });
- it('should ng-bind element', function() {
- angularFilter.myElement = function() {
- return jqLite('<a>hello</a>');
- };
- var scope = compile('<div ng-bind="0|myElement"></div>');
- scope.$eval();
- expect(lowercase(element.html())).toEqual('<a>hello</a>');
});
- it('should ng-bind-template', function() {
- var scope = compile('<div ng-bind-template="Hello {{name}}!"></div>');
- scope.$set('name', 'Misko');
- scope.$eval();
- expect(element.text()).toEqual('Hello Misko!');
+ describe('ng:bind-template', function(){
+ it('should ng:bind-template', function() {
+ var scope = compile('<div ng:bind-template="Hello {{name}}!"></div>');
+ scope.$set('name', 'Misko');
+ scope.$eval();
+ expect(element.text()).toEqual('Hello Misko!');
+ });
+
+ it('should have $element set to current bind element', function(){
+ var innerText = 'blank';
+ angularFilter.myFilter = function(text){
+ innerText = this.$element.text();
+ return text;
+ };
+ var scope = compile('<div>before<span ng:bind-template="{{\'HELLO\'|myFilter}}">INNER</span>after</div>');
+ expect(scope.$element.text()).toEqual("beforeHELLOafter");
+ expect(innerText).toEqual('INNER');
+ });
+
});
- it('should ng-bind-attr', function(){
- var scope = compile('<img ng-bind-attr="{src:\'http://localhost/mysrc\', alt:\'myalt\'}"/>');
+ it('should ng:bind-attr', function(){
+ var scope = compile('<img ng:bind-attr="{src:\'http://localhost/mysrc\', alt:\'myalt\'}"/>');
expect(element.attr('src')).toEqual('http://localhost/mysrc');
expect(element.attr('alt')).toEqual('myalt');
});
it('should remove special attributes on false', function(){
- var scope = compile('<input ng-bind-attr="{disabled:\'{{disabled}}\', readonly:\'{{readonly}}\', checked:\'{{checked}}\'}"/>');
+ var scope = compile('<input ng:bind-attr="{disabled:\'{{disabled}}\', readonly:\'{{readonly}}\', checked:\'{{checked}}\'}"/>');
var input = scope.$element[0];
expect(input.disabled).toEqual(false);
expect(input.readOnly).toEqual(false);
@@ -83,51 +108,48 @@ describe("directives", function(){
expect(input.checked).toEqual(true);
});
- it('should ng-non-bindable', function(){
- var scope = compile('<div ng-non-bindable><span ng-bind="name"></span></div>');
+ it('should ng:non-bindable', function(){
+ var scope = compile('<div ng:non-bindable><span ng:bind="name"></span></div>');
scope.$set('name', 'misko');
scope.$eval();
expect(element.text()).toEqual('');
});
- it('should ng-repeat over array', function(){
- var scope = compile('<ul><li ng-repeat="item in items" ng-init="suffix = \';\'" ng-bind="item + suffix"></li></ul>');
+ it('should ng:repeat over array', function(){
+ var scope = compile('<ul><li ng:repeat="item in items" ng:init="suffix = \';\'" ng:bind="item + suffix"></li></ul>');
- scope.$set('items', ['misko', 'shyam']);
+ Array.prototype.extraProperty = "should be ignored";
+ scope.items = ['misko', 'shyam'];
scope.$eval();
expect(element.text()).toEqual('misko;shyam;');
+ delete Array.prototype.extraProperty;
- scope.$set('items', ['adam', 'kai', 'brad']);
+ scope.items = ['adam', 'kai', 'brad'];
scope.$eval();
expect(element.text()).toEqual('adam;kai;brad;');
- scope.$set('items', ['brad']);
+ scope.items = ['brad'];
scope.$eval();
expect(element.text()).toEqual('brad;');
});
- it('should ng-repeat over object', function(){
- var scope = compile('<ul><li ng-repeat="(key, value) in items" ng-bind="key + \':\' + value + \';\' "></li></ul>');
+ it('should ng:repeat over object', function(){
+ var scope = compile('<ul><li ng:repeat="(key, value) in items" ng:bind="key + \':\' + value + \';\' "></li></ul>');
scope.$set('items', {misko:'swe', shyam:'set'});
scope.$eval();
expect(element.text()).toEqual('misko:swe;shyam:set;');
});
- it('should set ng-repeat to [] if undefinde', function(){
- var scope = compile('<ul><li ng-repeat="item in items"></li></ul>');
- expect(scope.items).toEqual([]);
- });
-
- it('should error on wrong parsing of ng-repeat', function(){
- var scope = compile('<ul><li ng-repeat="i dont parse"></li></ul>');
+ it('should error on wrong parsing of ng:repeat', function(){
+ var scope = compile('<ul><li ng:repeat="i dont parse"></li></ul>');
var log = "";
log += element.attr('ng-exception') + ';';
log += element.hasClass('ng-exception') + ';';
- expect(log).toEqual("\"Expected ng-repeat in form of 'item in collection' but got 'i dont parse'.\";true;");
+ expect(log).toEqual("\"Expected ng:repeat in form of 'item in collection' but got 'i dont parse'.\";true;");
});
- it('should ng-watch', function(){
- var scope = compile('<div ng-watch="i: count = count + 1" ng-init="count = 0">');
+ it('should ng:watch', function(){
+ var scope = compile('<div ng:watch="i: count = count + 1" ng:init="count = 0">');
scope.$eval();
scope.$eval();
expect(scope.$get('count')).toEqual(0);
@@ -138,8 +160,8 @@ describe("directives", function(){
expect(scope.$get('count')).toEqual(1);
});
- it('should ng-click', function(){
- var scope = compile('<div ng-click="clicked = true"></div>');
+ it('should ng:click', function(){
+ var scope = compile('<div ng:click="clicked = true"></div>');
scope.$eval();
expect(scope.$get('clicked')).toBeFalsy();
@@ -147,16 +169,16 @@ describe("directives", function(){
expect(scope.$get('clicked')).toEqual(true);
});
- it('should ng-class', function(){
- var scope = compile('<div class="existing" ng-class="[\'A\', \'B\']"></div>');
+ it('should ng:class', function(){
+ var scope = compile('<div class="existing" ng:class="[\'A\', \'B\']"></div>');
scope.$eval();
expect(element.hasClass('existing')).toBeTruthy();
expect(element.hasClass('A')).toBeTruthy();
expect(element.hasClass('B')).toBeTruthy();
});
- it('should ng-class odd/even', function(){
- var scope = compile('<ul><li ng-repeat="i in [0,1]" class="existing" ng-class-odd="\'odd\'" ng-class-even="\'even\'"></li><ul>');
+ it('should ng:class odd/even', function(){
+ var scope = compile('<ul><li ng:repeat="i in [0,1]" class="existing" ng:class-odd="\'odd\'" ng:class-even="\'even\'"></li><ul>');
scope.$eval();
var e1 = jqLite(element[0].childNodes[1]);
var e2 = jqLite(element[0].childNodes[2]);
@@ -166,14 +188,34 @@ describe("directives", function(){
expect(e2.hasClass('even')).toBeTruthy();
});
- it('should ng-style', function(){
- var scope = compile('<div ng-style="{color:\'red\'}"></div>');
- scope.$eval();
- expect(element.css('color')).toEqual('red');
+ describe('ng:style', function(){
+ it('should set', function(){
+ var scope = compile('<div ng:style="{color:\'red\'}"></div>');
+ scope.$eval();
+ expect(element.css('color')).toEqual('red');
+ });
+
+ it('should silently ignore undefined style', function() {
+ var scope = compile('<div ng:style="myStyle"></div>');
+ scope.$eval();
+ expect(element.hasClass('ng-exception')).toBeFalsy();
+ });
+
+ it('should preserve and remove previous style', function(){
+ var scope = compile('<div style="color:red;" ng:style="myStyle"></div>');
+ scope.$eval();
+ expect(getStyle(element)).toEqual({color:'red'});
+ scope.myStyle = {color:'blue', width:'10px'};
+ scope.$eval();
+ expect(getStyle(element)).toEqual({color:'blue', width:'10px'});
+ scope.myStyle = {};
+ scope.$eval();
+ expect(getStyle(element)).toEqual({color:'red'});
+ });
});
- it('should ng-show', function(){
- var scope = compile('<div ng-hide="hide"></div>');
+ it('should ng:show', function(){
+ var scope = compile('<div ng:hide="hide"></div>');
scope.$eval();
expect(isCssVisible(scope.$element)).toEqual(true);
scope.$set('hide', true);
@@ -181,8 +223,8 @@ describe("directives", function(){
expect(isCssVisible(scope.$element)).toEqual(false);
});
- it('should ng-hide', function(){
- var scope = compile('<div ng-show="show"></div>');
+ it('should ng:hide', function(){
+ var scope = compile('<div ng:show="show"></div>');
scope.$eval();
expect(isCssVisible(scope.$element)).toEqual(false);
scope.$set('show', true);
@@ -190,7 +232,7 @@ describe("directives", function(){
expect(isCssVisible(scope.$element)).toEqual(true);
});
- describe('ng-controller', function(){
+ describe('ng:controller', function(){
it('should bind', function(){
window.Greeter = function(){
this.greeting = 'hello';
@@ -203,18 +245,18 @@ describe("directives", function(){
return this.greeting + ' ' + name + this.suffix;
}
};
- var scope = compile('<div ng-controller="Greeter"></div>');
+ var scope = compile('<div ng:controller="Greeter"></div>');
expect(scope.greeting).toEqual('hello');
expect(scope.greet('misko')).toEqual('hello misko!');
window.Greeter = undefined;
});
});
- it('should eval things according to ng-eval-order', function(){
+ it('should eval things according to ng:eval-order', function(){
var scope = compile(
- '<div ng-init="log=\'\'">' +
+ '<div ng:init="log=\'\'">' +
'{{log = log + \'e\'}}' +
- '<span ng-eval-order="first" ng-eval="log = log + \'a\'">' +
+ '<span ng:eval-order="first" ng:eval="log = log + \'a\'">' +
'{{log = log + \'b\'}}' +
'<span src="{{log = log + \'c\'}}"></span>' +
'<span bind-template="{{log = log + \'d\'}}"></span>' +
diff --git a/test/markupSpec.js b/test/markupSpec.js
index 8358b673..5fe5bba9 100644
--- a/test/markupSpec.js
+++ b/test/markupSpec.js
@@ -20,23 +20,23 @@ describe("markups", function(){
it('should translate {{}} in text', function(){
compile('<div>hello {{name}}!</div>');
- expect(sortedHtml(element)).toEqual('<div>hello <span ng-bind="name"></span>!</div>');
+ expect(sortedHtml(element)).toEqual('<div>hello <span ng:bind="name"></span>!</div>');
scope.$set('name', 'Misko');
scope.$eval();
- expect(sortedHtml(element)).toEqual('<div>hello <span ng-bind="name">Misko</span>!</div>');
+ expect(sortedHtml(element)).toEqual('<div>hello <span ng:bind="name">Misko</span>!</div>');
});
it('should translate {{}} in terminal nodes', function(){
compile('<select name="x"><option value="">Greet {{name}}!</option></select>');
- expect(sortedHtml(element).replace(' selected="true"', '')).toEqual('<select name="x"><option ng-bind-template="Greet {{name}}!">Greet !</option></select>');
+ expect(sortedHtml(element).replace(' selected="true"', '')).toEqual('<select name="x"><option ng:bind-template="Greet {{name}}!">Greet !</option></select>');
scope.$set('name', 'Misko');
scope.$eval();
- expect(sortedHtml(element).replace(' selected="true"', '')).toEqual('<select name="x"><option ng-bind-template="Greet {{name}}!">Greet Misko!</option></select>');
+ expect(sortedHtml(element).replace(' selected="true"', '')).toEqual('<select name="x"><option ng:bind-template="Greet {{name}}!">Greet Misko!</option></select>');
});
it('should translate {{}} in attributes', function(){
compile('<img src="http://server/{{path}}.png"/>');
- expect(element.attr('ng-bind-attr')).toEqual('{"src":"http://server/{{path}}.png"}');
+ expect(element.attr('ng:bind-attr')).toEqual('{"src":"http://server/{{path}}.png"}');
scope.$set('path', 'a/b');
scope.$eval();
expect(element.attr('src')).toEqual("http://server/a/b.png");
diff --git a/test/moveToAngularCom/Base64Test.js b/test/moveToAngularCom/Base64Test.js
deleted file mode 100644
index a9353186..00000000
--- a/test/moveToAngularCom/Base64Test.js
+++ /dev/null
@@ -1,5 +0,0 @@
-Base64Test = TestCase('Base64Test');
-
-Base64Test.prototype.testEncodeDecode = function(){
- assertEquals(Base64.decode(Base64.encode('hello')), 'hello');
-};
diff --git a/test/moveToAngularCom/DataStoreTest.js b/test/moveToAngularCom/DataStoreTest.js
deleted file mode 100644
index 87c5be2e..00000000
--- a/test/moveToAngularCom/DataStoreTest.js
+++ /dev/null
@@ -1,616 +0,0 @@
-DataStoreTest = TestCase('DataStoreTest');
-
-DataStoreTest.prototype.testSavePostsToServer = function(){
- expectAsserts(10);
- var response;
- var post = function(data, callback){
- var method = data[0][0];
- var posted = data[0][2];
- assertEquals("POST", method);
- assertEquals("abc", posted.$entity);
- assertEquals("123", posted.$id);
- assertEquals("1", posted.$version);
- assertFalse('function' == typeof posted.save);
- response = fromJson(toJson(posted));
- response.$entity = "abc";
- response.$id = "123";
- response.$version = "2";
- callback(200, [response]);
- };
- var datastore = new DataStore(post);
- var model = datastore.entity('abc', {name: "value"})();
- model.$id = "123";
- model.$version = "1";
-
- datastore.save(model, function(obj){
- assertTrue(obj === model);
- assertEquals(obj.$entity, "abc");
- assertEquals(obj.$id, "123");
- assertEquals(obj.$version, "2");
- assertEquals(obj.name, "value");
- obj.after = true;
- });
- datastore.flush();
-};
-
-DataStoreTest.prototype.testLoadGetsFromServer = function(){
- expectAsserts(12);
- var post = function(data, callback){
- var method = data[0][0];
- var path = data[0][1];
- assertEquals("GET", method);
- assertEquals("abc/1", path);
- response = [{$entity:'abc', $id:'1', $version:'2', key:"value"}];
- callback(200, response);
- };
- var datastore = new DataStore(post);
-
- var model = datastore.entity("abc", {merge:true})();
- assertEquals(datastore.load(model, '1', function(obj){
- assertEquals(obj.$entity, "abc");
- assertEquals(obj.$id, "1");
- assertEquals(obj.$version, "2");
- assertEquals(obj.key, "value");
- }), model);
- datastore.flush();
- assertEquals(model.$entity, "abc");
- assertEquals(model.$id, "1");
- assertEquals(model.$version, "2");
- assertEquals(model.key, "value");
- assertEquals(model.merge, true);
-};
-
-DataStoreTest.prototype.testRemove = function(){
- expectAsserts(8);
- var response;
- var post = function(data, callback){
- var method = data[0][0];
- var posted = data[0][2];
- assertEquals("DELETE", method);
- assertEquals("abc", posted.$entity);
- assertEquals("123", posted.$id);
- assertEquals("1", posted.$version);
- assertFalse('function' == typeof posted.save);
- response = fromJson(toJson(posted));
- response.$entity = "abc";
- response.$id = "123";
- response.$version = "2";
- callback(200, [response]);
- };
- var model;
- var datastore = new DataStore(post);
- model = datastore.entity('abc', {name: "value"})();
- model.$id = "123";
- model.$version = "1";
-
- datastore.remove(model, function(obj){
- assertEquals(obj.$id, "123");
- assertEquals(obj.$version, "2");
- assertEquals(obj.name, "value");
- obj.after = true;
- });
- datastore.flush();
-
-};
-
-
-DataStoreTest.prototype.test401ResponseDoesNotCallCallback = function(){
- expectAsserts(1);
- var post = function(data, callback) {
- callback(200, {$status_code: 401});
- };
-
- var datastore = new DataStore(post, {login:function(){
- assertTrue(true);
- }});
-
- var onLoadAll = function(){
- assertTrue(false, "onLoadAll should not be called when response is status 401");
- };
- datastore.bulkRequest.push({});
- datastore.flush();
- datastore.loadAll({type: "A"}, onLoadAll);
-};
-
-DataStoreTest.prototype.test403ResponseDoesNotCallCallback = function(){
- expectAsserts(1);
- var post = function(data, callback) {
- callback(200, [{$status_code: 403}]);
- };
-
- var datastore = new DataStore(post, {notAuthorized:function(){
- assertTrue(true);
- }});
-
- var onLoadAll = function(){
- assertTrue(false, "onLoadAll should not be called when response is status 403");
- };
- datastore.bulkRequest.push({});
- datastore.flush();
- datastore.loadAll({type: "A"}, onLoadAll);
-};
-
-DataStoreTest.prototype.testLoadCalledWithoutIdShouldBeNoop = function(){
- expectAsserts(2);
- var post = function(url, callback){
- assertTrue(false);
- };
- var datastore = new DataStore(post);
- var model = datastore.entity("abc")();
- assertEquals(datastore.load(model, undefined), model);
- assertEquals(model.$entity, "abc");
-};
-
-DataStoreTest.prototype.testEntityFactory = function(){
- var ds = new DataStore();
- var Recipe = ds.entity("Recipe", {a:1, b:2});
- assertEquals(Recipe.title, "Recipe");
- assertEquals(Recipe.defaults.a, 1);
- assertEquals(Recipe.defaults.b, 2);
-
- var recipe = Recipe();
- assertEquals(recipe.$entity, "Recipe");
- assertEquals(recipe.a, 1);
- assertEquals(recipe.b, 2);
-
- recipe = new Recipe();
- assertEquals(recipe.$entity, "Recipe");
- assertEquals(recipe.a, 1);
- assertEquals(recipe.b, 2);
-};
-
-DataStoreTest.prototype.testEntityFactoryNoDefaults = function(){
- var ds = new DataStore();
- var Recipe = ds.entity("Recipe");
- assertEquals(Recipe.title, "Recipe");
-
- recipe = new Recipe();
- assertEquals(recipe.$entity, "Recipe");
-};
-
-DataStoreTest.prototype.testEntityFactoryWithInitialValues = function(){
- var ds = new DataStore();
- var Recipe = ds.entity("Recipe");
-
- var recipe = Recipe({name: "name"});
- assertEquals("name", recipe.name);
-};
-
-DataStoreTest.prototype.testEntityLoad = function(){
- var ds = new DataStore();
- var Recipe = ds.entity("Recipe", {a:1, b:2});
- ds.load = function(instance, id, callback){
- callback.apply(instance);
- return instance;
- };
- var instance = null;
- var recipe2 = Recipe.load("ID", function(){
- instance = this;
- });
- assertTrue(recipe2 === instance);
-};
-
-DataStoreTest.prototype.testSaveScope = function(){
- var ds = new DataStore();
- var log = "";
- var Person = ds.entity("Person");
- var person1 = Person({name:"A", $entity:"Person", $id:"1", $version:"1"}, ds);
- person1.$$anchor = "A";
- var person2 = Person({name:"B", $entity:"Person", $id:"2", $version:"2"}, ds);
- person2.$$anchor = "B";
- var anchor = {};
- ds.anchor = anchor;
- ds._jsonRequest = function(request, callback){
- log += "save(" + request[2].$id + ");";
- callback({$id:request[2].$id});
- };
- ds.saveScope({person1:person1, person2:person2,
- ignoreMe:{name: "ignore", save:function(callback){callback();}}}, function(){
- log += "done();";
- });
- assertEquals("save(1);save(2);done();", log);
- assertEquals(1, anchor.A);
- assertEquals(2, anchor.B);
-};
-
-DataStoreTest.prototype.testEntityLoadAllRows = function(){
- var ds = new DataStore();
- var Recipe = ds.entity("Recipe");
- var list = [];
- ds.loadAll = function(entity, callback){
- assertTrue(Recipe === entity);
- callback.apply(list);
- return list;
- };
- var items = Recipe.all(function(){
- assertTrue(list === this);
- });
- assertTrue(items === list);
-};
-
-DataStoreTest.prototype.testLoadAll = function(){
- expectAsserts(8);
- var post = function(data, callback){
- assertEquals("GET", data[0][0]);
- assertEquals("A", data[0][1]);
- callback(200, [[{$entity:'A', $id:'1'},{$entity:'A', $id:'2'}]]);
- };
- var datastore = new DataStore(post);
- var list = datastore.entity("A").all(function(){
- assertTrue(true);
- });
- datastore.flush();
- assertEquals(list.length, 2);
- assertEquals(list[0].$entity, "A");
- assertEquals(list[0].$id, "1");
- assertEquals(list[1].$entity, "A");
- assertEquals(list[1].$id, "2");
-};
-
-DataStoreTest.prototype.testQuery = function(){
- expectAsserts(5);
- var post = function(data, callback) {
- assertEquals("GET", data[0][0]);
- assertEquals("Employee/managerId=123abc", data[0][1]);
- callback(200, [[{$entity:"Employee", $id: "456", managerId: "123ABC"}]]);
-
- };
- var datastore = new DataStore(post);
- var Employee = datastore.entity("Employee");
- var list = Employee.query('managerId', "123abc", function(){
- assertTrue(true);
- });
- datastore.flush();
- assertJsonEquals([[{$entity:"Employee", $id: "456", managerId: "123ABC"}]], datastore._cache.$collections);
- assertEquals(list[0].$id, "456");
-};
-
-DataStoreTest.prototype.testLoadingDocumentRefreshesExistingArrays = function() {
- expectAsserts(12);
- var post;
- var datastore = new DataStore(function(r, c){post(r,c);});
- var Book = datastore.entity('Book');
- post = function(req, callback) {
- callback(200, [[{$id:1, $entity:"Book", name:"Moby"},
- {$id:2, $entity:"Book", name:"Dick"}]]);
- };
- var allBooks = Book.all();
- datastore.flush();
- var queryBooks = Book.query("a", "b");
- datastore.flush();
- assertEquals("Moby", allBooks[0].name);
- assertEquals("Dick", allBooks[1].name);
- assertEquals("Moby", queryBooks[0].name);
- assertEquals("Dick", queryBooks[1].name);
-
- post = function(req, callback) {
- assertEquals('[["GET","Book/1"]]', toJson(req));
- callback(200, [{$id:1, $entity:"Book", name:"Moby Dick"}]);
- };
- var book = Book.load(1);
- datastore.flush();
- assertEquals("Moby Dick", book.name);
- assertEquals("Moby Dick", allBooks[0].name);
- assertEquals("Moby Dick", queryBooks[0].name);
-
- post = function(req, callback) {
- assertEquals('POST', req[0][0]);
- callback(200, [{$id:1, $entity:"Book", name:"The Big Fish"}]);
- };
- book.$save();
- datastore.flush();
- assertEquals("The Big Fish", book.name);
- assertEquals("The Big Fish", allBooks[0].name);
- assertEquals("The Big Fish", queryBooks[0].name);
-};
-
-DataStoreTest.prototype.testEntityProperties = function() {
- expectAsserts(2);
- var datastore = new DataStore();
- var callback = {};
-
- datastore._jsonRequest = function(request, callbackFn) {
- assertJsonEquals(["GET", "Cheese/$properties"], request);
- assertEquals(callback, callbackFn);
- };
-
- var Cheese = datastore.entity("Cheese");
- Cheese.properties(callback);
-
-};
-
-DataStoreTest.prototype.testLoadInstanceIsNotFromCache = function() {
- var post;
- var datastore = new DataStore(function(r, c){post(r,c);});
- var Book = datastore.entity('Book');
-
- post = function(req, callback) {
- assertEquals('[["GET","Book/1"]]', toJson(req));
- callback(200, [{$id:1, $entity:"Book", name:"Moby Dick"}]);
- };
- var book = Book.load(1);
- datastore.flush();
- assertEquals("Moby Dick", book.name);
- assertFalse(book === datastore._cache['Book/1']);
-};
-
-DataStoreTest.prototype.testLoadStarsIsNewDocument = function() {
- var datastore = new DataStore();
- var Book = datastore.entity('Book');
- var book = Book.load('*');
- assertEquals('Book', book.$entity);
-};
-
-DataStoreTest.prototype.testUndefinedEntityReturnsNullValueObject = function() {
- var datastore = new DataStore();
- var Entity = datastore.entity(undefined);
- var all = Entity.all();
- assertEquals(0, all.length);
-};
-
-DataStoreTest.prototype.testFetchEntities = function(){
- expectAsserts(6);
- var post = function(data, callback){
- assertJsonEquals(["GET", "$entities"], data[0]);
- callback(200, [{A:0, B:0}]);
- };
- var datastore = new DataStore(post);
- var entities = datastore.entities(function(){
- assertTrue(true);
- });
- datastore.flush();
- assertJsonEquals([], datastore.bulkRequest);
- assertEquals(2, entities.length);
- assertEquals("A", entities[0].title);
- assertEquals("B", entities[1].title);
-};
-
-DataStoreTest.prototype.testItShouldMigrateSchema = function() {
- var datastore = new DataStore();
- var Entity = datastore.entity("Entity", {a:[], user:{name:"Misko", email:""}});
- var doc = Entity().$loadFrom({b:'abc', user:{email:"misko@hevery.com"}});
- assertFalse(
- toJson({a:[], b:'abc', user:{name:"Misko", email:"misko@hevery.com"}}) ==
- toJson(doc));
- doc.$migrate();
- assertEquals(
- toJson({a:[], b:'abc', user:{name:"Misko", email:"misko@hevery.com"}}),
- toJson(doc));
-};
-
-DataStoreTest.prototype.testItShouldCollectRequestsForBulk = function() {
- var ds = new DataStore();
- var Book = ds.entity("Book");
- var Library = ds.entity("Library");
- Book.all();
- Library.load("123");
- assertEquals(2, ds.bulkRequest.length);
- assertJsonEquals(["GET", "Book"], ds.bulkRequest[0]);
- assertJsonEquals(["GET", "Library/123"], ds.bulkRequest[1]);
-};
-
-DataStoreTest.prototype.testEmptyFlushShouldDoNothing = function () {
- var ds = new DataStore(function(){
- fail("expecting noop");
- });
- ds.flush();
-};
-
-DataStoreTest.prototype.testFlushShouldCallAllCallbacks = function() {
- var log = "";
- function post(request, callback){
- log += 'BulkRequest:' + toJson(request) + ';';
- callback(200, [[{$id:'ABC'}], {$id:'XYZ'}]);
- }
- var ds = new DataStore(post);
- var Book = ds.entity("Book");
- var Library = ds.entity("Library");
- Book.all(function(instance){
- log += toJson(instance) + ';';
- });
- Library.load("123", function(instance){
- log += toJson(instance) + ';';
- });
- assertEquals("", log);
- ds.flush();
- assertJsonEquals([], ds.bulkRequest);
- assertEquals('BulkRequest:[["GET","Book"],["GET","Library/123"]];[{"$id":"ABC"}];{"$id":"XYZ"};', log);
-};
-
-DataStoreTest.prototype.testSaveOnNotLoggedInRetriesAfterLoggin = function(){
- var log = "";
- var book;
- var ds = new DataStore(null, {login:function(c){c();}});
- ds.post = function (request, callback){
- assertJsonEquals([["POST", "", book]], request);
- ds.post = function(request, callback){
- assertJsonEquals([["POST", "", book]], request);
- ds.post = function(){fail("too much recursion");};
- callback(200, [{saved:"ok"}]);
- };
- callback(200, {$status_code:401});
- };
- book = ds.entity("Book")({name:"misko"});
- book.$save();
- ds.flush();
- assertJsonEquals({saved:"ok"}, book);
-};
-
-DataStoreTest.prototype.testItShouldRemoveItemFromCollectionWhenDeleted = function() {
- expectAsserts(6);
- var ds = new DataStore();
- ds.post = function(request, callback){
- assertJsonEquals([["GET", "Book"]], request);
- callback(200, [[{name:"Moby Dick", $id:123, $entity:'Book'}]]);
- };
- var Book = ds.entity("Book");
- var books = Book.all();
- ds.flush();
- assertJsonEquals([[{name:"Moby Dick", $id:123, $entity:'Book'}]], ds._cache.$collections);
- assertDefined(ds._cache['Book/123']);
- var book = Book({$id:123});
- ds.post = function(request, callback){
- assertJsonEquals([["DELETE", "", book]], request);
- callback(200, [book]);
- };
- ds.remove(book);
- ds.flush();
- assertUndefined(ds._cache['Book/123']);
- assertJsonEquals([[]],ds._cache.$collections);
-};
-
-DataStoreTest.prototype.testItShouldAddToAll = function() {
- expectAsserts(8);
- var ds = new DataStore();
- ds.post = function(request, callback){
- assertJsonEquals([["GET", "Book"]], request);
- callback(200, [[]]);
- };
- var Book = ds.entity("Book");
- var books = Book.all();
- assertEquals(0, books.length);
- ds.flush();
- var moby = Book({name:'moby'});
- moby.$save();
- ds.post = function(request, callback){
- assertJsonEquals([["POST", "", moby]], request);
- moby.$id = '123';
- callback(200, [moby]);
- };
- ds.flush();
- assertEquals(1, books.length);
- assertEquals(moby, books[0]);
-
- moby.$save();
- ds.flush();
- assertEquals(1, books.length);
- assertEquals(moby, books[0]);
-};
-
-DataStoreTest.prototype.testItShouldReturnCreatedDocumentCountByUser = function(){
- expectAsserts(2);
- var datastore = new DataStore(
- function(request, callback){
- assertJsonEquals([["GET", "$users"]], request);
- callback(200, [{misko:1, adam:1}]);
- });
- var users = datastore.documentCountsByUser();
- assertJsonEquals({misko:1, adam:1}, users);
-};
-
-
-DataStoreTest.prototype.testItShouldReturnDocumentIdsForUeserByEntity = function(){
- expectAsserts(2);
- var datastore = new DataStore(
- function(request, callback){
- assertJsonEquals([["GET", "$users/misko@hevery.com"]], request);
- callback(200, [{Book:["1"], Library:["2"]}]);
- });
- var users = datastore.userDocumentIdsByEntity("misko@hevery.com");
- assertJsonEquals({Book:["1"], Library:["2"]}, users);
-};
-
-DataStoreTest.prototype.testItShouldReturnNewInstanceOn404 = function(){
- expectAsserts(7);
- var log = "";
- var datastore = new DataStore(
- function(request, callback){
- assertJsonEquals([["GET", "User/misko"]], request);
- callback(200, [{$status_code:404}]);
- });
- var User = datastore.entity("User", {admin:false});
- var user = User.loadOrCreate('misko', function(i){log+="cb "+i.$id+";";});
- datastore.flush();
- assertEquals("misko", user.$id);
- assertEquals("User", user.$entity);
- assertEquals(false, user.admin);
- assertEquals("undefined", typeof user.$secret);
- assertEquals("undefined", typeof user.$version);
- assertEquals("cb misko;", log);
-};
-
-DataStoreTest.prototype.testItShouldReturnNewInstanceOn404 = function(){
- var log = "";
- var datastore = new DataStore(
- function(request, callback){
- assertJsonEquals([["GET", "User/misko"],["GET", "User/adam"]], request);
- callback(200, [{$id:'misko'},{$id:'adam'}]);
- });
- var User = datastore.entity("User");
- var users = User.loadMany(['misko', 'adam'], function(i){log+="cb "+toJson(i)+";";});
- datastore.flush();
- assertEquals("misko", users[0].$id);
- assertEquals("adam", users[1].$id);
- assertEquals('cb [{"$id":"misko"},{"$id":"adam"}];', log);
-};
-
-DataStoreTest.prototype.testItShouldCreateJoinAndQuery = function() {
- var datastore = new DataStore();
- var Invoice = datastore.entity("Invoice");
- var Customer = datastore.entity("Customer");
- var InvoiceWithCustomer = datastore.join({
- invoice:{join:Invoice},
- customer:{join:Customer, on:"invoice.customer"}
- });
- var invoiceWithCustomer = InvoiceWithCustomer.query("invoice.month", 1);
- assertEquals([], invoiceWithCustomer);
- assertJsonEquals([["GET", "Invoice/month=1"]], datastore.bulkRequest);
- var request = datastore.bulkRequest.shift();
- request.$$callback([{$id:1, customer:1},{$id:2, customer:1},{$id:3, customer:3}]);
- assertJsonEquals([["GET","Customer/1"],["GET","Customer/3"]], datastore.bulkRequest);
- datastore.bulkRequest.shift().$$callback({$id:1});
- datastore.bulkRequest.shift().$$callback({$id:3});
- assertJsonEquals([
- {invoice:{$id:1,customer:1},customer:{$id:1}},
- {invoice:{$id:2,customer:1},customer:{$id:1}},
- {invoice:{$id:3,customer:3},customer:{$id:3}}], invoiceWithCustomer);
-};
-
-DataStoreTest.prototype.testItShouldThrowIfMoreThanOneEntityIsPrimary = function() {
- var datastore = new DataStore();
- var Invoice = datastore.entity("Invoice");
- var Customer = datastore.entity("Customer");
- assertThrows("Exactly one entity needs to be primary.", function(){
- datastore.join({
- invoice:{join:Invoice},
- customer:{join:Customer}
- });
- });
-};
-
-DataStoreTest.prototype.testItShouldThrowIfLoopInReferences = function() {
- var datastore = new DataStore();
- var Invoice = datastore.entity("Invoice");
- var Customer = datastore.entity("Customer");
- assertThrows("Infinite loop in join: invoice -> customer", function(){
- datastore.join({
- invoice:{join:Invoice, on:"customer.invoice"},
- customer:{join:Customer, on:"invoice.customer"}
- });
- });
-};
-
-DataStoreTest.prototype.testItShouldThrowIfReferenceToNonExistantJoin = function() {
- var datastore = new DataStore();
- var Invoice = datastore.entity("Invoice");
- var Customer = datastore.entity("Customer");
- assertThrows("Named entity 'x' is undefined.", function(){
- datastore.join({
- invoice:{join:Invoice, on:"x.invoice"},
- customer:{join:Customer, on:"invoice.customer"}
- });
- });
-};
-
-DataStoreTest.prototype.testItShouldThrowIfQueryOnNonPrimary = function() {
- var datastore = new DataStore();
- var Invoice = datastore.entity("Invoice");
- var Customer = datastore.entity("Customer");
- var InvoiceWithCustomer = datastore.join({
- invoice:{join:Invoice},
- customer:{join:Customer, on:"invoice.customer"}
- });
- assertThrows("Named entity 'customer' is not a primary entity.", function(){
- InvoiceWithCustomer.query("customer.month", 1);
- });
-};
diff --git a/test/moveToAngularCom/EntityDeclarationTest.js b/test/moveToAngularCom/EntityDeclarationTest.js
deleted file mode 100644
index 28986ea8..00000000
--- a/test/moveToAngularCom/EntityDeclarationTest.js
+++ /dev/null
@@ -1,50 +0,0 @@
-EntityDeclarationTest = TestCase('EntityDeclarationTest');
-
-EntityDeclarationTest.prototype.testEntityTypeOnly = function(){
- expectAsserts(2);
- var datastore = {entity:function(name){
- assertEquals("Person", name);
- }};
- var scope = new Scope();
- var init = scope.entity("Person", datastore);
- assertEquals("", init);
-};
-
-EntityDeclarationTest.prototype.testWithDefaults = function(){
- expectAsserts(4);
- var datastore = {entity:function(name, init){
- assertEquals("Person", name);
- assertEquals("=a:", init.a);
- assertEquals(0, init.b.length);
- }};
- var scope = new Scope();
- var init = scope.entity('Person:{a:"=a:", b:[]}', datastore);
- assertEquals("", init);
-};
-
-EntityDeclarationTest.prototype.testWithName = function(){
- expectAsserts(2);
- var datastore = {entity:function(name, init){
- assertEquals("Person", name);
- return function (){ return {}; };
- }};
- var scope = new Scope();
- var init = scope.entity('friend=Person', datastore);
- assertEquals("$anchor.friend:{friend=Person.load($anchor.friend);friend.$$anchor=\"friend\";};", init);
-};
-
-EntityDeclarationTest.prototype.testMultipleEntities = function(){
- expectAsserts(3);
- var expect = ['Person', 'Book'];
- var i=0;
- var datastore = {entity:function(name, init){
- assertEquals(expect[i], name);
- i++;
- return function (){ return {}; };
- }};
- var scope = new Scope();
- var init = scope.entity('friend=Person;book=Book;', datastore);
- assertEquals("$anchor.friend:{friend=Person.load($anchor.friend);friend.$$anchor=\"friend\";};" +
- "$anchor.book:{book=Book.load($anchor.book);book.$$anchor=\"book\";};",
- init);
-};
diff --git a/test/moveToAngularCom/FileControllerTest.js b/test/moveToAngularCom/FileControllerTest.js
deleted file mode 100644
index 75c924e6..00000000
--- a/test/moveToAngularCom/FileControllerTest.js
+++ /dev/null
@@ -1,98 +0,0 @@
-FileControllerTest = TestCase('FileControllerTest');
-
-FileControllerTest.prototype.XtestOnSelectUpdateView = function(){
- var view = jQuery('<span><a/><span/></span>');
- var swf = {};
- var controller = new FileController(view, null, swf);
- swf.uploadFile = function(path){};
- controller.select('A', 9, '9 bytes');
- assertEquals(view.find('a').text(), "A");
- assertEquals(view.find('span').text(), "9 bytes");
-};
-
-FileControllerTest.prototype.XtestUpdateModelView = function(){
- var view = FileController.template('');
- var input = $('<input name="value.input">');
- var controller;
- var scope = new Scope({value:{}, $binder:{updateView:function(){
- controller.updateView(scope);
- }}});
- view.data('scope', scope);
- controller = new FileController(view, 'value.input', null, "http://server_base");
- var value = '{"text":"A", "size":123, "id":"890"}';
- controller.uploadCompleteData(value);
- controller.updateView(scope);
- assertEquals(scope.get('value.input.text'), 'A');
- assertEquals(scope.get('value.input.size'), 123);
- assertEquals(scope.get('value.input.id'), '890');
- assertEquals(scope.get('value.input.url'), 'http://server_base/_attachments/890/A');
- assertEquals(view.find('a').text(), "A");
- assertEquals(view.find('a').attr('href'), "http://server_base/_attachments/890/A");
- assertEquals(view.find('span').text(), "123 bytes");
-};
-
-FileControllerTest.prototype.XtestFileUpload = function(){
- expectAsserts(1);
- var swf = {};
- var controller = new FileController(null, null, swf, "http://server_base");
- swf.uploadFile = function(path){
- assertEquals("http://server_base/_attachments", path);
- };
- controller.name = "Name";
- controller.upload();
-};
-
-FileControllerTest.prototype.XtestFileUploadNoFileIsNoop = function(){
- expectAsserts(0);
- var swf = {uploadFile:function(path){
- fail();
- }};
- var controller = new FileController(null, swf);
- controller.upload("basePath", null);
-};
-
-FileControllerTest.prototype.XtestRemoveAttachment = function(){
- var doc = FileController.template();
- var input = $('<input name="file">');
- var scope = new Scope();
- input.data('scope', scope);
- var controller = new FileController(doc, 'file', null, null);
- controller.updateView(scope);
- assertEquals(false, doc.find('input').attr('checked'));
-
- scope.set('file', {url:'url', size:123});
- controller.updateView(scope);
- assertEquals(true, doc.find('input').attr('checked'));
-
- doc.find('input').attr('checked', false);
- controller.updateModel(scope);
- assertNull(scope.get('file'));
-
- doc.find('input').attr('checked', true);
- controller.updateModel(scope);
- assertEquals('url', scope.get('file.url'));
- assertEquals(123, scope.get('file.size'));
-};
-
-FileControllerTest.prototype.XtestShouldEmptyOutOnUndefined = function () {
- var view = FileController.template('hello');
- var controller = new FileController(view, 'abc', null, null);
-
- var scope = new Scope();
- scope.set('abc', {text: 'myname', url: 'myurl', size: 1234});
-
- controller.updateView(scope);
- assertEquals("myurl", view.find('a').attr('href'));
- assertEquals("myname", view.find('a').text());
- assertEquals(true, view.find('input').is(':checked'));
- assertEquals("1.2 KB", view.find('span').text());
-
- scope.set('abc', undefined);
- controller.updateView(scope);
- assertEquals("myurl", view.find('a').attr('href'));
- assertEquals("myname", view.find('a').text());
- assertEquals(false, view.find('input').is(':checked'));
- assertEquals("1.2 KB", view.find('span').text());
-};
-
-
diff --git a/test/moveToAngularCom/MiscTest.js b/test/moveToAngularCom/MiscTest.js
deleted file mode 100644
index aa0e1186..00000000
--- a/test/moveToAngularCom/MiscTest.js
+++ /dev/null
@@ -1,35 +0,0 @@
-BinderTest.prototype.testExpandEntityTagWithName = function(){
- var c = this.compile('<div ng-entity="friend=Person"/>');
- assertEquals(
- '<div ng-entity="friend=Person" ng-watch="$anchor.friend:{friend=Person.load($anchor.friend);friend.$$anchor=\"friend\";};"></div>',
- sortedHtml(c.node));
- assertEquals("Person", c.scope.$get("friend.$entity"));
- assertEquals("friend", c.scope.$get("friend.$$anchor"));
-};
-
-BinderTest.prototype.testExpandSubmitButtonToAction = function(){
- var html = this.compileToHtml('<input type="submit" value="Save">');
- assertTrue(html, html.indexOf('ng-action="$save()"') > 0 );
- assertTrue(html, html.indexOf('ng-bind-attr="{"disabled":"{{$invalidWidgets}}"}"') > 0 );
-};
-
-BinderTest.prototype.testReplaceFileUploadWithSwf = function(){
- expectAsserts(1);
- var form = jQuery("body").append('<div id="testTag"><input type="file"></div>');
- form.data('scope', new Scope());
- var factory = {};
- var binder = new Binder(form.get(0), factory, new MockLocation());
- factory.createController = function(node){
- assertEquals(node.attr('type'), 'file');
- return {updateModel:function(){}};
- };
- binder.compile();
- jQuery("#testTag").remove();
-};
-
-BinderTest.prototype.testExpandEntityTagWithDefaults = function(){
- assertEquals(
- '<div ng-entity="Person:{a:\"a\"}" ng-watch=""></div>',
- this.compileToHtml('<div ng-entity=\'Person:{a:"a"}\'/>'));
-};
-
diff --git a/test/moveToAngularCom/ModelTest.js b/test/moveToAngularCom/ModelTest.js
deleted file mode 100644
index dbd97778..00000000
--- a/test/moveToAngularCom/ModelTest.js
+++ /dev/null
@@ -1,84 +0,0 @@
-ModelTest = TestCase('ModelTest');
-
-ModelTest.prototype.testLoadSaveOperations = function(){
- var m1 = new DataStore().entity('A')();
- m1.a = 1;
-
- var m2 = {b:1};
-
- m1.$loadFrom(m2);
-
- assertTrue(!m1.a);
- assertEquals(m1.b, 1);
-};
-
-ModelTest.prototype.testLoadfromDoesNotClobberFunctions = function(){
- var m1 = new DataStore().entity('A')();
- m1.id = function(){return 'OK';};
- m1.$loadFrom({id:null});
- assertEquals(m1.id(), 'OK');
-
- m1.b = 'OK';
- m1.$loadFrom({b:function(){}});
- assertEquals(m1.b, 'OK');
-};
-
-ModelTest.prototype.testDataStoreDoesNotGetClobbered = function(){
- var ds = new DataStore();
- var m = ds.entity('A')();
- assertTrue(m.$$entity.datastore === ds);
- m.$loadFrom({});
- assertTrue(m.$$entity.datastore === ds);
-};
-
-ModelTest.prototype.testManagedModelDelegatesMethodsToDataStore = function(){
- expectAsserts(7);
- var datastore = new DataStore();
- var model = datastore.entity("A", {a:1})();
- var fn = {};
- datastore.save = function(instance, callback) {
- assertTrue(model === instance);
- assertTrue(callback === fn);
- };
- datastore.remove = function(instance, callback) {
- assertTrue(model === instance);
- assertTrue(callback === fn);
- };
- datastore.load = function(instance, id, callback) {
- assertTrue(model === instance);
- assertTrue(id === "123");
- assertTrue(callback === fn);
- };
- model.$save(fn);
- model.$delete(fn);
- model.$loadById("123", fn);
-};
-
-ModelTest.prototype.testManagedModelCanBeForcedToFlush = function(){
- expectAsserts(6);
- var datastore = new DataStore();
- var model = datastore.entity("A", {a:1})();
-
- datastore.save = function(instance, callback) {
- assertTrue(model === instance);
- assertTrue(callback === undefined);
- };
- datastore.remove = function(instance, callback) {
- assertTrue(model === instance);
- assertTrue(callback === undefined);
- };
- datastore.flush = function(){
- assertTrue(true);
- };
- model.$save(true);
- model.$delete(true);
-};
-
-
-ModelTest.prototype.testItShouldMakeDeepCopyOfInitialValues = function (){
- var initial = {a:[]};
- var entity = new DataStore().entity("A", initial);
- var model = entity();
- model.a.push(1);
- assertEquals(0, entity().a.length);
-};
diff --git a/test/moveToAngularCom/ServerTest.js b/test/moveToAngularCom/ServerTest.js
deleted file mode 100644
index 02fab84c..00000000
--- a/test/moveToAngularCom/ServerTest.js
+++ /dev/null
@@ -1,42 +0,0 @@
-ServerTest = TestCase("ServerTest");
-ServerTest.prototype.testBreakLargeRequestIntoPackets = function() {
- var log = "";
- var server = new Server("http://server", function(url){
- log += "|" + url;
- });
- server.maxSize = 30;
- server.uuid = "uuid";
- server.request("POST", "/data/database", {}, function(code, r){
- assertEquals(200, code);
- assertEquals("response", r);
- });
- angularCallbacks.uuid0("response");
- assertEquals(
- "|http://server/$/uuid0/2/1?h=eyJtIjoiUE9TVCIsInAiOnt9LCJ1Ij" +
- "|http://server/$/uuid0/2/2?h=oiL2RhdGEvZGF0YWJhc2UifQ==",
- log);
-};
-
-ServerTest.prototype.testItShouldEncodeUsingUrlRules = function() {
- var server = new Server("http://server");
- assertEquals("fn5-fn5-", server.base64url("~~~~~~"));
- assertEquals("fn5_fn5_", server.base64url("~~\u007f~~\u007f"));
-};
-
-FrameServerTest = TestCase("FrameServerTest");
-
-FrameServerTest.prototype = {
- testRead:function(){
- var window = {name:'$DATASET:"MyData"'};
- var server = new FrameServer(window);
- server.read();
- assertEquals("MyData", server.data);
- },
- testWrite:function(){
- var window = {};
- var server = new FrameServer(window);
- server.data = "TestData";
- server.write();
- assertEquals('$DATASET:"TestData"', window.name);
- }
-};
diff --git a/test/moveToAngularCom/UsersTest.js b/test/moveToAngularCom/UsersTest.js
deleted file mode 100644
index f0ff545a..00000000
--- a/test/moveToAngularCom/UsersTest.js
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright (C) 2008,2009 BRAT Tech LLC
-
-UsersTest = TestCase("UsersTest");
-
-UsersTest.prototype = {
- setUp:function(){},
-
- tearDown:function(){},
-
- testItShouldFetchCurrentUser:function(){
- expectAsserts(5);
- var user;
- var users = new Users({request:function(method, url, request, callback){
- assertEquals("GET", method);
- assertEquals("/account.json", url);
- assertEquals("{}", toJson(request));
- callback(200, {$status_code:200, user:{name:'misko'}});
- }});
- users.fetchCurrentUser(function(u){
- user = u;
- assertEquals("misko", u.name);
- assertEquals("misko", users.current.name);
- });
- }
-
-};
diff --git a/test/moveToAngularCom/miscTest.js b/test/moveToAngularCom/miscTest.js
deleted file mode 100644
index aa0e1186..00000000
--- a/test/moveToAngularCom/miscTest.js
+++ /dev/null
@@ -1,35 +0,0 @@
-BinderTest.prototype.testExpandEntityTagWithName = function(){
- var c = this.compile('<div ng-entity="friend=Person"/>');
- assertEquals(
- '<div ng-entity="friend=Person" ng-watch="$anchor.friend:{friend=Person.load($anchor.friend);friend.$$anchor=\"friend\";};"></div>',
- sortedHtml(c.node));
- assertEquals("Person", c.scope.$get("friend.$entity"));
- assertEquals("friend", c.scope.$get("friend.$$anchor"));
-};
-
-BinderTest.prototype.testExpandSubmitButtonToAction = function(){
- var html = this.compileToHtml('<input type="submit" value="Save">');
- assertTrue(html, html.indexOf('ng-action="$save()"') > 0 );
- assertTrue(html, html.indexOf('ng-bind-attr="{"disabled":"{{$invalidWidgets}}"}"') > 0 );
-};
-
-BinderTest.prototype.testReplaceFileUploadWithSwf = function(){
- expectAsserts(1);
- var form = jQuery("body").append('<div id="testTag"><input type="file"></div>');
- form.data('scope', new Scope());
- var factory = {};
- var binder = new Binder(form.get(0), factory, new MockLocation());
- factory.createController = function(node){
- assertEquals(node.attr('type'), 'file');
- return {updateModel:function(){}};
- };
- binder.compile();
- jQuery("#testTag").remove();
-};
-
-BinderTest.prototype.testExpandEntityTagWithDefaults = function(){
- assertEquals(
- '<div ng-entity="Person:{a:\"a\"}" ng-watch=""></div>',
- this.compileToHtml('<div ng-entity=\'Person:{a:"a"}\'/>'));
-};
-
diff --git a/test/scenario/RunnerSpec.js b/test/scenario/RunnerSpec.js
index 689354df..98858747 100644
--- a/test/scenario/RunnerSpec.js
+++ b/test/scenario/RunnerSpec.js
@@ -164,7 +164,7 @@ describe('Runner', function(){
expect(log).toEqual('first;second;');
next();
expect(log).toEqual('first;second;done;');
- expect(spec).not.toEqual(window);
+ expect(spec === window).toEqual(false);
expect(spec).toEqual(firstThis);
expect(spec).toEqual(secondThis);
expect(spec).toEqual(doneThis);
diff --git a/test/servicesSpec.js b/test/servicesSpec.js
index f679a39b..91538703 100644
--- a/test/servicesSpec.js
+++ b/test/servicesSpec.js
@@ -1,5 +1,5 @@
describe("service", function(){
- var scope, $xhrError, $log;
+ var scope, $xhrError, $log, mockServices;
beforeEach(function(){
$xhrError = jasmine.createSpy('$xhr.error');
@@ -33,32 +33,45 @@ describe("service", function(){
describe("$log", function(){
it('should use console if present', function(){
- function log(){};
- function warn(){};
- function info(){};
- function error(){};
- var scope = createScope(null, angularService, {$window: {console:{log:log, warn:warn, info:info, error:error}}});
- expect(scope.$log.log).toEqual(log);
- expect(scope.$log.warn).toEqual(warn);
- expect(scope.$log.info).toEqual(info);
- expect(scope.$log.error).toEqual(error);
+ var logger = "";
+ function log(){ logger+= 'log;'; };
+ function warn(){ logger+= 'warn;'; };
+ function info(){ logger+= 'info;'; };
+ function error(){ logger+= 'error;'; };
+ var scope = createScope(null, angularService, {$window: {console:{log:log, warn:warn, info:info, error:error}}, $document:[{}]});
+ scope.$log.log();
+ scope.$log.warn();
+ scope.$log.info();
+ scope.$log.error();
+ expect(logger).toEqual('log;warn;info;error;');
});
it('should use console.log if other not present', function(){
- function log(){};
- var scope = createScope(null, angularService, {$window: {console:{log:log}}});
- expect(scope.$log.log).toEqual(log);
- expect(scope.$log.warn).toEqual(log);
- expect(scope.$log.info).toEqual(log);
- expect(scope.$log.error).toEqual(log);
+ var logger = "";
+ function log(){ logger+= 'log;'; };
+ var scope = createScope(null, angularService, {$window: {console:{log:log}}, $document:[{}]});
+ scope.$log.log();
+ scope.$log.warn();
+ scope.$log.info();
+ scope.$log.error();
+ expect(logger).toEqual('log;log;log;log;');
});
it('should use noop if no console', function(){
- var scope = createScope(null, angularService, {$window: {}});
- expect(scope.$log.log).toEqual(noop);
- expect(scope.$log.warn).toEqual(noop);
- expect(scope.$log.info).toEqual(noop);
- expect(scope.$log.error).toEqual(noop);
+ var scope = createScope(null, angularService, {$window: {}, $document:[{}]});
+ scope.$log.log();
+ scope.$log.warn();
+ scope.$log.info();
+ scope.$log.error();
+ });
+ });
+
+ describe("$exceptionHandler", function(){
+ it('should log errors', function(){
+ var error = '';
+ $log.error = function(m) { error += m; };
+ scope.$exceptionHandler('myError');
+ expect(error).toEqual('myError');
});
});
@@ -136,7 +149,7 @@ describe("service", function(){
describe("$invalidWidgets", function(){
it("should count number of invalid widgets", function(){
- var scope = compile('<input name="price" ng-required ng-validate="number"></input>').$init();
+ var scope = compile('<input name="price" ng:required ng:validate="number"></input>').$init();
expect(scope.$invalidWidgets.length).toEqual(1);
scope.price = 123;
scope.$eval();
diff --git a/test/testabilityPatch.js b/test/testabilityPatch.js
index d621b1f1..5d0df780 100644
--- a/test/testabilityPatch.js
+++ b/test/testabilityPatch.js
@@ -63,9 +63,11 @@ function sortedHtml(element) {
html += '<' + node.nodeName.toLowerCase();
var attributes = node.attributes || [];
var attrs = [];
+ if (node.className)
+ attrs.push(' class="' + node.className + '"');
for(var i=0; i<attributes.length; i++) {
var attr = attributes[i];
- if(attr.name.match(/^ng-/) ||
+ if(attr.name.match(/^ng:/) ||
attr.value &&
attr.value !='null' &&
attr.value !='auto' &&
@@ -76,6 +78,7 @@ function sortedHtml(element) {
attr.name !='complete' &&
attr.name !='maxLength' &&
attr.name !='size' &&
+ attr.name !='class' &&
attr.name !='start' &&
attr.name !='tabIndex' &&
attr.name !='style' &&
diff --git a/test/widgetsSpec.js b/test/widgetsSpec.js
index a053090e..ad98e482 100644
--- a/test/widgetsSpec.js
+++ b/test/widgetsSpec.js
@@ -22,7 +22,7 @@ describe("widget", function(){
describe("text", function(){
it('should input-text auto init and handle keyup/change events', function(){
- compile('<input type="Text" name="name" value="Misko" ng-change="count = count + 1" ng-init="count=0"/>');
+ compile('<input type="Text" name="name" value="Misko" ng:change="count = count + 1" ng:init="count=0"/>');
expect(scope.$get('name')).toEqual("Misko");
expect(scope.$get('count')).toEqual(0);
@@ -41,10 +41,10 @@ describe("widget", function(){
expect(scope.$get('count')).toEqual(2);
});
- describe("ng-format", function(){
+ describe("ng:format", function(){
it("should format text", function(){
- compile('<input type="Text" name="list" value="a,b,c" ng-format="list"/>');
+ compile('<input type="Text" name="list" value="a,b,c" ng:format="list"/>');
expect(scope.$get('list')).toEqual(['a', 'b', 'c']);
scope.$set('list', ['x', 'y', 'z']);
@@ -57,7 +57,7 @@ describe("widget", function(){
});
it("should come up blank if null", function(){
- compile('<input type="text" name="age" ng-format="number"/>', function(){
+ compile('<input type="text" name="age" ng:format="number"/>', function(){
scope.age = null;
});
expect(scope.age).toBeNull();
@@ -65,7 +65,7 @@ describe("widget", function(){
});
it("should show incorect text while number does not parse", function(){
- compile('<input type="text" name="age" ng-format="number"/>');
+ compile('<input type="text" name="age" ng:format="number"/>');
scope.age = 123;
scope.$eval();
scope.$element.val('123X');
@@ -76,14 +76,14 @@ describe("widget", function(){
});
it("should clober incorect text if model changes", function(){
- compile('<input type="text" name="age" ng-format="number" value="123X"/>');
+ compile('<input type="text" name="age" ng:format="number" value="123X"/>');
scope.age = 456;
scope.$eval();
expect(scope.$element.val()).toEqual('456');
});
it("should not clober text if model changes doe to itself", function(){
- compile('<input type="text" name="list" ng-format="list" value="a"/>');
+ compile('<input type="text" name="list" ng:format="list" value="a"/>');
scope.$element.val('a ');
scope.$element.trigger('change');
@@ -107,7 +107,7 @@ describe("widget", function(){
});
it("should come up blank when no value specifiend", function(){
- compile('<input type="text" name="age" ng-format="number"/>');
+ compile('<input type="text" name="age" ng:format="number"/>');
scope.$eval();
expect(scope.$element.val()).toEqual('');
expect(scope.age).toEqual(null);
@@ -125,7 +125,7 @@ describe("widget", function(){
});
it('should support type="checkbox"', function(){
- compile('<input type="checkBox" name="checkbox" checked ng-change="action = true"/>');
+ compile('<input type="checkBox" name="checkbox" checked ng:change="action = true"/>');
expect(scope.checkbox).toEqual(true);
click(element);
expect(scope.checkbox).toEqual(false);
@@ -134,7 +134,7 @@ describe("widget", function(){
expect(scope.checkbox).toEqual(true);
});
- it("should use ng-format", function(){
+ it("should use ng:format", function(){
angularFormatter('testFormat', {
parse: function(value){
return value ? "Worked" : "Failed";
@@ -146,7 +146,7 @@ describe("widget", function(){
}
});
- compile('<input type="checkbox" name="state" ng-format="testFormat" checked/>');
+ compile('<input type="checkbox" name="state" ng:format="testFormat" checked/>');
expect(scope.state).toEqual("Worked");
expect(scope.$element[0].checked).toEqual(true);
@@ -161,9 +161,9 @@ describe("widget", function(){
});
});
- describe("ng-validate", function(){
- it("should process ng-validate", function(){
- compile('<input type="text" name="price" value="abc" ng-validate="number"/>');
+ describe("ng:validate", function(){
+ it("should process ng:validate", function(){
+ compile('<input type="text" name="price" value="abc" ng:validate="number"/>');
expect(element.hasClass('ng-validation-error')).toBeTruthy();
expect(element.attr('ng-validation-error')).toEqual('Not a number');
@@ -179,7 +179,7 @@ describe("widget", function(){
});
it('should not blow up for validation with bound attributes', function() {
- compile('<input type="text" name="price" boo="{{abc}}" ng-required/>');
+ compile('<input type="text" name="price" boo="{{abc}}" ng:required/>');
expect(element.hasClass('ng-validation-error')).toBeTruthy();
expect(element.attr('ng-validation-error')).toEqual('Required');
@@ -192,7 +192,7 @@ describe("widget", function(){
it("should not call validator if undefined/empty", function(){
var lastValue = "NOT_CALLED";
angularValidator.myValidator = function(value){lastValue = value;};
- compile('<input type="text" name="url" ng-validate="myValidator"/>');
+ compile('<input type="text" name="url" ng:validate="myValidator"/>');
expect(lastValue).toEqual("NOT_CALLED");
scope.url = 'http://server';
@@ -205,19 +205,19 @@ describe("widget", function(){
});
it("should ignore disabled widgets", function(){
- compile('<input type="text" name="price" ng-required disabled/>');
+ compile('<input type="text" name="price" ng:required disabled/>');
expect(element.hasClass('ng-validation-error')).toBeFalsy();
expect(element.attr('ng-validation-error')).toBeFalsy();
});
it("should ignore readonly widgets", function(){
- compile('<input type="text" name="price" ng-required readonly/>');
+ compile('<input type="text" name="price" ng:required readonly/>');
expect(element.hasClass('ng-validation-error')).toBeFalsy();
expect(element.attr('ng-validation-error')).toBeFalsy();
});
- it("should process ng-required", function(){
- compile('<input type="text" name="price" ng-required/>');
+ it("should process ng:required", function(){
+ compile('<input type="text" name="price" ng:required/>');
expect(element.hasClass('ng-validation-error')).toBeTruthy();
expect(element.attr('ng-validation-error')).toEqual('Required');
@@ -232,8 +232,8 @@ describe("widget", function(){
expect(element.attr('ng-validation-error')).toEqual('Required');
});
- it('should allow conditions on ng-required', function() {
- compile('<input type="text" name="price" ng-required="ineedz"/>');
+ it('should allow conditions on ng:required', function() {
+ compile('<input type="text" name="price" ng:required="ineedz"/>');
scope.$set('ineedz', false);
scope.$eval();
expect(element.hasClass('ng-validation-error')).toBeFalsy();
@@ -256,7 +256,7 @@ describe("widget", function(){
expect(element.attr('ng-validation-error')).toBeFalsy();
});
- it("should process ng-required2", function() {
+ it("should process ng:required2", function() {
compile('<textarea name="name">Misko</textarea>');
expect(scope.$get('name')).toEqual("Misko");
@@ -273,14 +273,14 @@ describe("widget", function(){
expect(scope.$get('name')).toEqual('Kai');
});
- it('should call ng-change on button click', function(){
- compile('<input type="button" value="Click Me" ng-change="clicked = true"/>');
+ it('should call ng:change on button click', function(){
+ compile('<input type="button" value="Click Me" ng:change="clicked = true"/>');
click(element);
expect(scope.$get('clicked')).toEqual(true);
});
it('should support button alias', function(){
- compile('<button ng-change="clicked = true">Click Me</button>');
+ compile('<button ng:change="clicked = true">Click Me</button>');
click(element);
expect(scope.$get('clicked')).toEqual(true);
});
@@ -289,9 +289,9 @@ describe("widget", function(){
it('should support type="radio"', function(){
compile('<div>' +
- '<input type="radio" name="chose" value="A" ng-change="clicked = 1"/>' +
- '<input type="radio" name="chose" value="B" checked ng-change="clicked = 2"/>' +
- '<input type="radio" name="chose" value="C" ng-change="clicked = 3"/>' +
+ '<input type="radio" name="chose" value="A" ng:change="clicked = 1"/>' +
+ '<input type="radio" name="chose" value="B" checked ng:change="clicked = 2"/>' +
+ '<input type="radio" name="chose" value="C" ng:change="clicked = 3"/>' +
'</div>');
var a = element[0].childNodes[0];
var b = element[0].childNodes[1];
@@ -373,8 +373,8 @@ describe("widget", function(){
expect(element.hasClass('ng-exception')).toBeTruthy();
});
- it('should report error on ng-change exception', function(){
- compile('<button ng-change="a-2=x">click</button>');
+ it('should report error on ng:change exception', function(){
+ compile('<button ng:change="a-2=x">click</button>');
click(element);
expect(element.hasClass('ng-exception')).toBeTruthy();
});
@@ -382,7 +382,7 @@ describe("widget", function(){
describe('ng:switch', function(){
it('should switch on value change', function(){
- compile('<ng:switch on="select"><div ng-switch-when="1">first:{{name}}</div><div ng-switch-when="2">second:{{name}}</div></ng:switch>');
+ compile('<ng:switch on="select"><div ng:switch-when="1">first:{{name}}</div><div ng:switch-when="2">second:{{name}}</div></ng:switch>');
expect(element.html()).toEqual('');
scope.select = 1;
scope.$eval();
@@ -399,7 +399,7 @@ describe("widget", function(){
});
it("should match urls", function(){
- var scope = angular.compile('<ng:switch on="url" using="route:params"><div ng-switch-when="/Book/:name">{{params.name}}</div></ng:switch>');
+ var scope = angular.compile('<ng:switch on="url" using="route:params"><div ng:switch-when="/Book/:name">{{params.name}}</div></ng:switch>');
scope.url = '/Book/Moby';
scope.$init();
expect(scope.$element.text()).toEqual('Moby');
@@ -407,12 +407,12 @@ describe("widget", function(){
it("should match sandwich ids", function(){
var scope = {};
- var match = angular.widget['NG:SWITCH'].route.call(scope, '/a/123/b', '/a/:id');
+ var match = angular.widget('NG:SWITCH').route.call(scope, '/a/123/b', '/a/:id');
expect(match).toBeFalsy();
});
it('should call init on switch', function(){
- var scope = angular.compile('<ng:switch on="url" change="name=\'works\'"><div ng-switch-when="a">{{name}}</div></ng:switch>');
+ var scope = angular.compile('<ng:switch on="url" change="name=\'works\'"><div ng:switch-when="a">{{name}}</div></ng:switch>');
var cleared = false;
scope.url = 'a';
scope.$invalidWidgets = {clearOrphans: function(){