describe("directive", function(){
var compile, model, element;
beforeEach(function() {
compile = function(html) {
element = jqLite(html);
return model = angular.compile(element)();
};
});
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('');
expect(sortedHtml(scope.$element)).toEqual('');
});
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('
');
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('