2015-04-16 18:38:28 -04:00
|
|
|
import {
|
|
|
|
AsyncTestCompleter,
|
|
|
|
beforeEach,
|
|
|
|
ddescribe,
|
|
|
|
xdescribe,
|
|
|
|
describe,
|
|
|
|
el,
|
|
|
|
dispatchEvent,
|
|
|
|
expect,
|
|
|
|
iit,
|
|
|
|
inject,
|
|
|
|
beforeEachBindings,
|
|
|
|
it,
|
|
|
|
xit,
|
2015-05-26 12:25:39 -04:00
|
|
|
SpyObject,
|
|
|
|
proxy
|
2015-04-16 18:38:28 -04:00
|
|
|
} from 'angular2/test_lib';
|
2015-06-02 13:15:16 -04:00
|
|
|
import {isBlank} from 'angular2/src/facade/lang';
|
2015-06-18 18:44:44 -04:00
|
|
|
import {ListWrapper} from 'angular2/src/facade/collection';
|
2015-04-16 18:38:28 -04:00
|
|
|
|
2015-05-06 14:22:28 -04:00
|
|
|
import {DomProtoView} from 'angular2/src/render/dom/view/proto_view';
|
2015-06-24 16:46:39 -04:00
|
|
|
import {DomElementBinder} from 'angular2/src/render/dom/view/element_binder';
|
2015-05-06 14:22:28 -04:00
|
|
|
import {DomView} from 'angular2/src/render/dom/view/view';
|
2015-04-16 18:38:28 -04:00
|
|
|
import {DOM} from 'angular2/src/dom/dom_adapter';
|
2015-07-31 13:58:24 -04:00
|
|
|
import {TemplateCloner} from 'angular2/src/render/dom/template_cloner';
|
2015-04-16 18:38:28 -04:00
|
|
|
|
|
|
|
export function main() {
|
2015-05-06 14:22:28 -04:00
|
|
|
describe('DomView', () => {
|
2015-04-16 18:38:28 -04:00
|
|
|
function createProtoView(binders = null) {
|
|
|
|
if (isBlank(binders)) {
|
|
|
|
binders = [];
|
|
|
|
}
|
2015-06-24 16:46:39 -04:00
|
|
|
var rootEl = DOM.createTemplate('<div></div>');
|
2015-07-31 13:58:24 -04:00
|
|
|
return DomProtoView.create(new TemplateCloner(-1), null, <Element>rootEl, null, [1], [],
|
|
|
|
binders, null);
|
2015-04-16 18:38:28 -04:00
|
|
|
}
|
|
|
|
|
2015-06-24 16:46:39 -04:00
|
|
|
function createElementBinder() { return new DomElementBinder({textNodeIndices: []}); }
|
|
|
|
|
2015-05-26 12:25:39 -04:00
|
|
|
function createView(pv = null, boundElementCount = 0) {
|
2015-04-16 18:38:28 -04:00
|
|
|
if (isBlank(pv)) {
|
2015-06-24 16:46:39 -04:00
|
|
|
var elementBinders = ListWrapper.createFixedSize(boundElementCount);
|
|
|
|
for (var i = 0; i < boundElementCount; i++) {
|
|
|
|
elementBinders[i] = createElementBinder();
|
|
|
|
}
|
|
|
|
pv = createProtoView(elementBinders);
|
2015-04-16 18:38:28 -04:00
|
|
|
}
|
|
|
|
var root = el('<div><div></div></div>');
|
|
|
|
var boundElements = [];
|
2015-05-26 12:25:39 -04:00
|
|
|
for (var i = 0; i < boundElementCount; i++) {
|
2015-06-24 16:46:39 -04:00
|
|
|
boundElements.push(el('<span></span'));
|
2015-04-16 18:38:28 -04:00
|
|
|
}
|
2015-06-24 16:46:39 -04:00
|
|
|
return new DomView(pv, [DOM.childNodes(root)[0]], boundElements);
|
2015-06-10 18:54:10 -04:00
|
|
|
}
|
|
|
|
|
2015-06-18 18:44:44 -04:00
|
|
|
describe('setElementProperty', () => {
|
|
|
|
var el, view;
|
|
|
|
beforeEach(() => {
|
|
|
|
view = createView(null, 1);
|
2015-06-24 16:46:39 -04:00
|
|
|
el = view.boundElements[0];
|
2015-06-18 18:44:44 -04:00
|
|
|
});
|
|
|
|
|
|
|
|
it('should update the property value', () => {
|
|
|
|
view.setElementProperty(0, 'title', 'Hello');
|
|
|
|
expect(el.title).toEqual('Hello');
|
|
|
|
});
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
describe('setElementAttribute', () => {
|
|
|
|
var el, view;
|
|
|
|
beforeEach(() => {
|
|
|
|
view = createView(null, 1);
|
2015-06-24 16:46:39 -04:00
|
|
|
el = view.boundElements[0];
|
2015-06-18 18:44:44 -04:00
|
|
|
});
|
|
|
|
|
|
|
|
it('should update and remove an attribute', () => {
|
|
|
|
view.setElementAttribute(0, 'role', 'button');
|
|
|
|
expect(DOM.getAttribute(el, 'role')).toEqual('button');
|
|
|
|
view.setElementAttribute(0, 'role', null);
|
|
|
|
expect(DOM.getAttribute(el, 'role')).toEqual(null);
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should de-normalize attribute names', () => {
|
|
|
|
view.setElementAttribute(0, 'ariaLabel', 'fancy button');
|
|
|
|
expect(DOM.getAttribute(el, 'aria-label')).toEqual('fancy button');
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
describe('setElementClass', () => {
|
|
|
|
var el, view;
|
|
|
|
beforeEach(() => {
|
|
|
|
view = createView(null, 1);
|
2015-06-24 16:46:39 -04:00
|
|
|
el = view.boundElements[0];
|
2015-06-18 18:44:44 -04:00
|
|
|
});
|
|
|
|
|
|
|
|
it('should set and remove a class', () => {
|
|
|
|
view.setElementClass(0, 'active', true);
|
|
|
|
expect(DOM.hasClass(el, 'active')).toEqual(true);
|
|
|
|
|
|
|
|
view.setElementClass(0, 'active', false);
|
|
|
|
expect(DOM.hasClass(el, 'active')).toEqual(false);
|
|
|
|
});
|
|
|
|
|
2015-07-24 04:49:47 -04:00
|
|
|
it('should not de-normalize class names', () => {
|
2015-06-18 18:44:44 -04:00
|
|
|
view.setElementClass(0, 'veryActive', true);
|
2015-07-24 04:49:47 -04:00
|
|
|
view.setElementClass(0, 'very-active', true);
|
|
|
|
expect(DOM.hasClass(el, 'veryActive')).toEqual(true);
|
2015-06-18 18:44:44 -04:00
|
|
|
expect(DOM.hasClass(el, 'very-active')).toEqual(true);
|
|
|
|
|
|
|
|
view.setElementClass(0, 'veryActive', false);
|
2015-07-24 04:49:47 -04:00
|
|
|
view.setElementClass(0, 'very-active', false);
|
|
|
|
expect(DOM.hasClass(el, 'veryActive')).toEqual(false);
|
2015-06-18 18:44:44 -04:00
|
|
|
expect(DOM.hasClass(el, 'very-active')).toEqual(false);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
describe('setElementStyle', () => {
|
|
|
|
var el, view;
|
|
|
|
beforeEach(() => {
|
|
|
|
view = createView(null, 1);
|
2015-06-24 16:46:39 -04:00
|
|
|
el = view.boundElements[0];
|
2015-06-18 18:44:44 -04:00
|
|
|
});
|
|
|
|
|
|
|
|
it('should set and remove styles', () => {
|
|
|
|
view.setElementStyle(0, 'width', '40px');
|
|
|
|
expect(DOM.getStyle(el, 'width')).toEqual('40px');
|
|
|
|
|
|
|
|
view.setElementStyle(0, 'width', null);
|
|
|
|
expect(DOM.getStyle(el, 'width')).toEqual('');
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should de-normalize style names', () => {
|
2015-07-29 12:34:02 -04:00
|
|
|
view.setElementStyle(0, 'maxWidth', '40px');
|
|
|
|
expect(DOM.getStyle(el, 'max-width')).toEqual('40px');
|
|
|
|
view.setElementStyle(0, 'maxWidth', null);
|
|
|
|
expect(DOM.getStyle(el, 'max-width')).toEqual('');
|
2015-06-18 18:44:44 -04:00
|
|
|
});
|
|
|
|
|
|
|
|
});
|
|
|
|
|
2015-04-16 18:38:28 -04:00
|
|
|
});
|
|
|
|
}
|