ScopeTest = TestCase('ScopeTest'); ScopeTest.prototype.testGetScopeRetrieval = function(){ var scope = {}; var form = jQuery(""); form.data('scope', scope); var c = form.find('c'); assertTrue(scope === c.scope()); }; ScopeTest.prototype.testGetScopeRetrievalIntermediateNode = function(){ var scope = {}; var form = jQuery(""); form.find("b").data('scope', scope); var b = form.find('b'); assertTrue(scope === b.scope()); }; ScopeTest.prototype.testNoScopeDoesNotCauseInfiniteRecursion = function(){ var form = jQuery(""); 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")); };