describe("directive", function(){ var compile, model, element; beforeEach(function() { compile = function(html) { element = jqLite(html); return model = angular.compile(element)().scope; }; }); afterEach(function() { dealoc(model); }); it("should ng:init", function() { var scope = compile('
'); expect(scope.a).toEqual(123); }); it("should ng:eval", function() { var scope = compile('
'); expect(scope.a).toEqual(1); scope.$eval(); expect(scope.a).toEqual(2); }); describe('ng:bind', function(){ it('should set text', function() { var scope = compile('
'); expect(element.text()).toEqual(''); scope.a = 'misko'; scope.$eval(); expect(element.hasClass('ng-binding')).toEqual(true); expect(element.text()).toEqual('misko'); }); it('should set text to blank if undefined', function() { var scope = compile('
'); scope.a = 'misko'; scope.$eval(); expect(element.text()).toEqual('misko'); scope.a = undefined; scope.$eval(); expect(element.text()).toEqual(''); }); it('should set html', function() { var scope = compile('
'); scope.html = '
hello
'; scope.$eval(); expect(lowercase(element.html())).toEqual('
hello
'); }); it('should set unsafe html', function() { var scope = compile('
'); scope.html = '
hello
'; scope.$eval(); expect(lowercase(element.html())).toEqual('
hello
'); }); it('should set element element', function() { angularFilter.myElement = function() { return jqLite('hello'); }; var scope = compile('
'); scope.$eval(); expect(lowercase(element.html())).toEqual('hello'); }); it('should have $element set to current bind element', function(){ angularFilter.myFilter = function(){ this.$element.addClass("filter"); return 'HELLO'; }; var scope = compile('
before
after
'); expect(sortedHtml(scope.$element)).toEqual('
before
HELLO
after
'); }); it('should suppress rendering of falsy values', function(){ var scope = compile('
{{ null }}{{ undefined }}{{ "" }}-{{ 0 }}{{ false }}
'); expect(scope.$element.text()).toEqual('-0false'); }); }); describe('ng:bind-template', function(){ it('should ng:bind-template', function() { var scope = compile('
'); scope.$set('name', 'Misko'); scope.$eval(); expect(element.hasClass('ng-binding')).toEqual(true); 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('
beforeINNERafter
'); expect(scope.$element.text()).toEqual("beforeHELLOafter"); expect(innerText).toEqual('INNER'); }); }); describe('ng:bind-attr', function(){ it('should bind attributes', function(){ var scope = compile(''); expect(element.attr('src')).toEqual('http://localhost/mysrc'); expect(element.attr('alt')).toEqual('myalt'); }); it('should not pretty print JSON in attributes', function(){ var scope = compile('{{ {a:1} }}'); expect(element.attr('alt')).toEqual('{"a":1}'); }); }); it('should remove special attributes on false', function(){ var scope = compile(''); var input = scope.$element[0]; expect(input.disabled).toEqual(false); expect(input.readOnly).toEqual(false); expect(input.checked).toEqual(false); scope.disabled = true; scope.readonly = true; scope.checked = true; scope.$eval(); expect(input.disabled).toEqual(true); expect(input.readOnly).toEqual(true); expect(input.checked).toEqual(true); }); describe('ng:click', function(){ it('should get called on a click', function(){ var scope = compile('
'); scope.$eval(); expect(scope.$get('clicked')).toBeFalsy(); browserTrigger(element, 'click'); expect(scope.$get('clicked')).toEqual(true); }); it('should stop event propagation', function() { var scope = compile('
'); scope.$eval(); expect(scope.outer).not.toBeDefined(); expect(scope.inner).not.toBeDefined(); var innerDiv = element.children()[0]; browserTrigger(innerDiv, 'click'); expect(scope.outer).not.toBeDefined(); expect(scope.inner).toEqual(true); }); }); describe('ng:submit', function() { it('should get called on form submit', function() { var scope = compile('
' + '' + '
'); scope.$eval(); expect(scope.submitted).not.toBeDefined(); browserTrigger(element.children()[0]); expect(scope.submitted).toEqual(true); }); }); it('should ng:class', function(){ var scope = compile('
'); 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('