From 9ee2cdff44e7d496774b340de816344126c457b3 Mon Sep 17 00:00:00 2001 From: Misko Hevery Date: Tue, 22 Nov 2011 21:28:39 -0800 Subject: refactor(directives): connect new compiler - turn everything into a directive --- test/directivesSpec.js | 247 +++++++++++++++++++++++-------------------------- 1 file changed, 117 insertions(+), 130 deletions(-) (limited to 'test/directivesSpec.js') diff --git a/test/directivesSpec.js b/test/directivesSpec.js index 5bd5f5bd..9dee4860 100644 --- a/test/directivesSpec.js +++ b/test/directivesSpec.js @@ -1,6 +1,16 @@ 'use strict'; describe("directive", function() { + var element; + + beforeEach(function() { + element = null; + }); + + afterEach(function() { + dealoc(element); + }); + var $filterProvider, element; @@ -19,7 +29,7 @@ describe("directive", function() { describe('ng:bind', function() { it('should set text', inject(function($rootScope, $compile) { - var element = $compile('
')($rootScope); + element = $compile('
')($rootScope); expect(element.text()).toEqual(''); $rootScope.a = 'misko'; $rootScope.$digest(); @@ -28,47 +38,40 @@ describe("directive", function() { })); it('should set text to blank if undefined', inject(function($rootScope, $compile) { - var element = $compile('
')($rootScope); + element = $compile('
')($rootScope); $rootScope.a = 'misko'; $rootScope.$digest(); expect(element.text()).toEqual('misko'); $rootScope.a = undefined; $rootScope.$digest(); expect(element.text()).toEqual(''); + $rootScope.a = null; + $rootScope.$digest(); + expect(element.text()).toEqual(''); })); it('should set html', inject(function($rootScope, $compile) { - var element = $compile('
')($rootScope); + element = $compile('
')($rootScope); $rootScope.html = '
hello
'; $rootScope.$digest(); expect(lowercase(element.html())).toEqual('
hello
'); })); it('should set unsafe html', inject(function($rootScope, $compile) { - var element = $compile('
')($rootScope); + element = $compile('
')($rootScope); $rootScope.html = '
hello
'; $rootScope.$digest(); expect(lowercase(element.html())).toEqual('
hello
'); })); - it('should set element element', inject(function($rootScope, $compile) { - $filterProvider.register('myElement', valueFn(function() { - return jqLite('hello'); - })); - var element = $compile('
')($rootScope); - $rootScope.$digest(); - expect(lowercase(element.html())).toEqual('hello'); - })); - - it('should suppress rendering of falsy values', inject(function($rootScope, $compile) { - var element = $compile('
{{ null }}{{ undefined }}{{ "" }}-{{ 0 }}{{ false }}
')($rootScope); + element = $compile('
{{ null }}{{ undefined }}{{ "" }}-{{ 0 }}{{ false }}
')($rootScope); $rootScope.$digest(); expect(element.text()).toEqual('-0false'); })); it('should render object as JSON ignore $$', inject(function($rootScope, $compile) { - var element = $compile('
{{ {key:"value", $$key:"hide"} }}
')($rootScope); + element = $compile('
{{ {key:"value", $$key:"hide"} }}
')($rootScope); $rootScope.$digest(); expect(fromJson(element.text())).toEqual({key:'value'}); })); @@ -76,27 +79,15 @@ describe("directive", function() { describe('ng:bind-template', function() { it('should ng:bind-template', inject(function($rootScope, $compile) { - var element = $compile('
')($rootScope); + element = $compile('
')($rootScope); $rootScope.name = 'Misko'; $rootScope.$digest(); expect(element.hasClass('ng-binding')).toEqual(true); expect(element.text()).toEqual('Hello Misko!'); })); - it('should have $element set to current bind element', inject(function($rootScope, $compile) { - var innerText; - $filterProvider.register('myFilter', valueFn(function(text) { - innerText = innerText || this.$element.text(); - return text; - })); - var element = $compile('
beforeINNERafter
')($rootScope); - $rootScope.$digest(); - expect(element.text()).toEqual("beforeHELLOafter"); - expect(innerText).toEqual('INNER'); - })); - it('should render object as JSON ignore $$', inject(function($rootScope, $compile) { - var element = $compile('
{{ {key:"value", $$key:"hide"}  }}
')($rootScope); + element = $compile('
{{ {key:"value", $$key:"hide"}  }}
')($rootScope); $rootScope.$digest(); expect(fromJson(element.text())).toEqual({key:'value'}); })); @@ -105,39 +96,40 @@ describe("directive", function() { describe('ng:bind-attr', function() { it('should bind attributes', inject(function($rootScope, $compile) { - var element = $compile('
')($rootScope); + element = $compile('
')($rootScope); $rootScope.$digest(); expect(element.attr('src')).toEqual('http://localhost/mysrc'); expect(element.attr('alt')).toEqual('myalt'); })); it('should not pretty print JSON in attributes', inject(function($rootScope, $compile) { - var element = $compile('{{ {a:1} }}')($rootScope); + element = $compile('{{ {a:1} }}')($rootScope); $rootScope.$digest(); expect(element.attr('alt')).toEqual('{"a":1}'); })); - }); - it('should remove special attributes on false', inject(function($rootScope, $compile) { - var element = $compile('')($rootScope); - var input = element[0]; - expect(input.disabled).toEqual(false); - expect(input.readOnly).toEqual(false); - expect(input.checked).toEqual(false); - - $rootScope.disabled = true; - $rootScope.readonly = true; - $rootScope.checked = true; - $rootScope.$digest(); - - expect(input.disabled).toEqual(true); - expect(input.readOnly).toEqual(true); - expect(input.checked).toEqual(true); - })); + it('should remove special attributes on false', inject(function($rootScope, $compile) { + element = $compile('')($rootScope); + var input = element[0]; + expect(input.disabled).toEqual(false); + expect(input.readOnly).toEqual(false); + expect(input.checked).toEqual(false); + + $rootScope.disabled = true; + $rootScope.readonly = true; + $rootScope.checked = true; + $rootScope.$digest(); + + 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', inject(function($rootScope, $compile) { - var element = $compile('
')($rootScope); + element = $compile('
')($rootScope); $rootScope.$digest(); expect($rootScope.clicked).toBeFalsy(); @@ -146,14 +138,12 @@ describe("directive", function() { })); it('should stop event propagation', inject(function($rootScope, $compile) { - var element = $compile('
')($rootScope); + element = $compile('
')($rootScope); $rootScope.$digest(); expect($rootScope.outer).not.toBeDefined(); expect($rootScope.inner).not.toBeDefined(); - var innerDiv = element.children()[0]; - - browserTrigger(innerDiv, 'click'); + browserTrigger(element.find('div'), 'click'); expect($rootScope.outer).not.toBeDefined(); expect($rootScope.inner).toEqual(true); })); @@ -162,7 +152,7 @@ describe("directive", function() { describe('ng:submit', function() { it('should get called on form submit', inject(function($rootScope, $compile) { - var element = $compile('
' + + element = $compile('' + '' + '
')($rootScope); $rootScope.$digest(); @@ -175,7 +165,7 @@ describe("directive", function() { describe('ng:class', function() { it('should add new and remove old classes dynamically', inject(function($rootScope, $compile) { - var element = $compile('
')($rootScope); + element = $compile('
')($rootScope); $rootScope.dynClass = 'A'; $rootScope.$digest(); expect(element.hasClass('existing')).toBe(true); @@ -196,7 +186,7 @@ describe("directive", function() { it('should support adding multiple classes via an array', inject(function($rootScope, $compile) { - var element = $compile('
')($rootScope); + element = $compile('
')($rootScope); $rootScope.$digest(); expect(element.hasClass('existing')).toBeTruthy(); expect(element.hasClass('A')).toBeTruthy(); @@ -227,7 +217,7 @@ describe("directive", function() { it('should support adding multiple classes via a space delimited string', inject(function($rootScope, $compile) { - var element = $compile('
')($rootScope); + element = $compile('
')($rootScope); $rootScope.$digest(); expect(element.hasClass('existing')).toBeTruthy(); expect(element.hasClass('A')).toBeTruthy(); @@ -236,7 +226,7 @@ describe("directive", function() { it('should preserve class added post compilation with pre-existing classes', inject(function($rootScope, $compile) { - var element = $compile('
')($rootScope); + element = $compile('
')($rootScope); $rootScope.dynClass = 'A'; $rootScope.$digest(); expect(element.hasClass('existing')).toBe(true); @@ -253,7 +243,7 @@ describe("directive", function() { it('should preserve class added post compilation without pre-existing classes"', inject(function($rootScope, $compile) { - var element = $compile('
')($rootScope); + element = $compile('
')($rootScope); $rootScope.dynClass = 'A'; $rootScope.$digest(); expect(element.hasClass('A')).toBe(true); @@ -269,119 +259,116 @@ describe("directive", function() { it('should preserve other classes with similar name"', inject(function($rootScope, $compile) { - var element = $compile('
')($rootScope); + element = $compile('
')($rootScope); $rootScope.dynCls = 'panel'; $rootScope.$digest(); $rootScope.dynCls = 'foo'; $rootScope.$digest(); - expect(element[0].className).toBe('ui-panel ui-selected ng-directive foo'); + expect(element[0].className).toBe('ui-panel ui-selected foo'); })); it('should not add duplicate classes', inject(function($rootScope, $compile) { - var element = $compile('
')($rootScope); + element = $compile('
')($rootScope); $rootScope.dynCls = 'panel'; $rootScope.$digest(); - expect(element[0].className).toBe('panel bar ng-directive'); + expect(element[0].className).toBe('panel bar'); })); it('should remove classes even if it was specified via class attribute', inject(function($rootScope, $compile) { - var element = $compile('
')($rootScope); + element = $compile('
')($rootScope); $rootScope.dynCls = 'panel'; $rootScope.$digest(); $rootScope.dynCls = 'window'; $rootScope.$digest(); - expect(element[0].className).toBe('bar ng-directive window'); + expect(element[0].className).toBe('bar window'); })); it('should remove classes even if they were added by another code', inject(function($rootScope, $compile) { - var element = $compile('
')($rootScope); + element = $compile('
')($rootScope); $rootScope.dynCls = 'foo'; $rootScope.$digest(); element.addClass('foo'); $rootScope.dynCls = ''; $rootScope.$digest(); - expect(element[0].className).toBe('ng-directive'); })); it('should convert undefined and null values to an empty string', inject(function($rootScope, $compile) { - var element = $compile('
')($rootScope); + element = $compile('
')($rootScope); $rootScope.dynCls = [undefined, null]; $rootScope.$digest(); - expect(element[0].className).toBe('ng-directive'); })); - }); - it('should ng:class odd/even', inject(function($rootScope, $compile) { - var element = $compile('