extjs-gpl
Version:
GPL licensed version of Sencha Ext JS
352 lines (286 loc) • 12.1 kB
JavaScript
describe("Ext.Element.traversal", function() {
var el, input, child1, child2, child3, child4, child4_1, child4_1_1;
beforeEach(function() {
el = Ext.getBody().createChild({
id : 'ExtElementHelper',
cls : 'wrapper',
style : 'position:absolute;',
children: [
{id: 'child1', style: 'position:absolute;'},
{id: 'child2', style: 'position:absolute;'},
{id: 'child3', style: 'position:absolute;'},
{
id: 'child4',
children: [
{
id : 'child4_1',
cls: 'findIt',
children: [
{
id : 'child4_1_1'
}
]
}
]
}
]
});
input = Ext.getBody().createChild({
id : 'ExtElementInputHelper',
tag : 'input',
type: 'text'
});
child1 = Ext.get('child1');
child2 = Ext.get('child2');
child3 = Ext.get('child3');
child4 = Ext.get('child4');
child4_1 = Ext.get('child4_1');
child4_1_1 = Ext.get('child4_1_1');
});
afterEach(function() {
Ext.each(
[el, input, child1, child2, child3, child4, child4_1, child4_1_1],
function(el) {
el.destroy();
}
);
});
describe("findParentNode", function() {
it("should return document.body", function() {
expect(el.findParentNode('body')).toEqual(document.body);
});
it("should return a dom", function() {
expect(child1.findParentNode('.wrapper')).toEqual(Ext.getDom(el));
});
it("should return an el", function() {
expect(child1.findParentNode('.wrapper', null, true)).toEqual(el);
});
describe("when maxDepth", function() {
describe("1", function() {
it("should not return the el", function() {
expect(child4_1.findParentNode('.wrapper', 1)).toBeNull();
});
});
describe("2", function() {
it("should not return the el", function() {
expect(child4_1.findParentNode('.wrapper', 2)).toEqual(Ext.getDom(el));
});
});
});
});
describe("up", function() {
it("should return Ext.getBody()", function() {
expect(el.up('body')).toEqual(Ext.getBody());
});
it("should return a el", function() {
expect(child1.up('.wrapper')).toEqual(el);
});
describe("when maxDepth", function() {
describe("1", function() {
it("should not return the el", function() {
expect(child4_1.up('.wrapper', 1)).toBeNull();
});
});
describe("2", function() {
it("should not return the el", function() {
expect(child4_1.up('.wrapper', 2)).toEqual(el);
});
});
});
});
describe("select", function() {
it("should return an Ext.CompositeELementLite", function() {
var result = el.select('div');
expect(result).toBeDefined();
expect(result.elements.length).toEqual(6);
expect(result instanceof Ext.CompositeElementLite).toBe(true);
});
});
describe("query", function() {
it("should return elements", function() {
var result = el.query('div');
expect(result).toBeDefined();
expect(result.length).toEqual(6);
expect(result.isComposite).toBeFalsy();
expect(Ext.isArray(result)).toBeTruthy();
});
});
describe("down", function() {
it("should return an el", function() {
var result = el.down('.findIt');
expect(result).toBeDefined();
expect(Ext.isElement(result)).toBeFalsy();
});
it("should return a dom", function() {
var result = el.down('.findIt', true);
expect(result).toBeDefined();
expect(Ext.isElement(result)).toBeTruthy();
});
});
describe("child", function() {
it("should return null", function() {
var result = el.child('.findIt');
expect(result).toBeNull();
});
it("should return an el", function() {
var result = child4.child('.findIt');
expect(result).toBeDefined();
expect(Ext.isElement(result)).toBeFalsy();
});
it("should return a dom", function() {
var result = child4.child('.findIt', true);
expect(result).toBeDefined();
expect(Ext.isElement(result)).toBeTruthy();
});
});
describe("parent", function() {
it("should return an el", function() {
var result = child1.parent();
expect(result).toBeDefined();
expect(result).toEqual(el);
expect(Ext.isElement(result)).toBeFalsy();
});
it("should return a dom", function() {
var result = child1.parent(null, true);
expect(result).toBeDefined();
expect(result).toEqual(Ext.getDom(el));
expect(Ext.isElement(result)).toBeTruthy();
});
});
describe("next", function() {
it("should return an el", function() {
var result = child1.next();
expect(result).toBeDefined();
expect(result).toEqual(child2);
expect(Ext.isElement(result)).toBeFalsy();
});
it("should return a dom", function() {
var result = child1.next(null, true);
expect(result).toBeDefined();
expect(result).toEqual(Ext.getDom(child2));
expect(Ext.isElement(result)).toBeTruthy();
});
});
describe("prev", function() {
it("should return an el", function() {
var result = child2.prev();
expect(result).toBeDefined();
expect(result).toEqual(child1);
expect(Ext.isElement(result)).toBeFalsy();
});
it("should return a dom", function() {
var result = child2.prev(null, true);
expect(result).toBeDefined();
expect(result).toEqual(Ext.getDom(child1));
expect(Ext.isElement(result)).toBeTruthy();
});
});
describe("first", function() {
it("should return an el", function() {
var result = el.first();
expect(result).toBeDefined();
expect(result).toEqual(child1);
expect(Ext.isElement(result)).toBeFalsy();
});
it("should return a dom", function() {
var result = el.first(null, true);
expect(result).toBeDefined();
expect(result).toEqual(Ext.getDom(child1));
expect(Ext.isElement(result)).toBeTruthy();
});
});
describe("last", function() {
it("should return an el", function() {
var result = el.last();
expect(result).toBeDefined();
expect(result).toEqual(child4);
expect(Ext.isElement(result)).toBeFalsy();
});
it("should return a dom", function() {
var result = el.last(null, true);
expect(result).toBeDefined();
expect(result).toEqual(Ext.getDom(child4));
expect(Ext.isElement(result)).toBeTruthy();
});
});
describe("findParent", function() {
it("should return document.body", function() {
expect(el.findParent('body')).toEqual(document.body);
});
it("should return a dom", function() {
expect(child1.findParent('.wrapper')).toEqual(Ext.getDom(el));
});
it("should return an el", function() {
expect(child1.findParent('.wrapper', null, true)).toEqual(el);
});
it("should include itself if it matches", function() {
expect(child4_1_1.findParent('#child4_1_1', null, true)).toBe(child4_1_1);
});
it("should default the maxDepth to 50 or the document element", function() {
var root = Ext.getBody().createChild({
cls: 'findParentRoot'
}),
current = root,
els = [root],
i;
for (i = 0; i < 49; ++i) {
current = current.createChild();
els.push(current);
}
expect(current.findParent('.findParentRoot', undefined, true)).toBe(root);
current = current.createChild();
els.push(current);
expect(current.findParent('.findParentRoot', undefined, true)).toBeNull();
expect(els[10].findParent('.doesntExist')).toBeNull();
Ext.destroy(els);
});
describe("with maxDepth", function() {
describe("as a number", function() {
it("should include an element within the limit", function() {
expect(child4_1_1.findParent('#child4', 3, true)).toBe(child4);
});
it("should exclude an element at the limit", function() {
expect(child4_1_1.findParent('#child4', 2, true)).toBeNull();
});
it("should exclude an element above the limit", function() {
expect(child4_1_1.findParent('#child4', 1, true)).toBeNull();
});
});
describe("as an element", function() {
it("should accept a string id", function() {
expect(child4_1_1.findParent('.wrapper', 'child4_1')).toBeNull();
});
it("should accept a dom element", function() {
expect(child4_1_1.findParent('.wrapper', child4_1.dom)).toBeNull();
});
it("should accept an Ext.dom.Element", function() {
expect(child4_1_1.findParent('.wrapper', child4_1)).toBeNull();
});
it("should include an element within the limit", function() {
expect(child4_1_1.findParent('.findIt', child4, true)).toBe(child4_1);
});
it("should exclude elements at the limit", function() {
expect(child4_1_1.findParent('#child4', child4, true)).toBeNull();
});
it("should exclude an element above the limit", function() {
expect(child4_1_1.findParent('.wrapper', child4, true)).toBeNull();
});
});
});
});
describe("contains", function(){
it('should return false for siblings', function(){
expect(Ext.fly(child1).contains(child4_1_1)).toBe(false);
expect(Ext.fly(child2).contains(child4_1_1)).toBe(false);
});
it('should return true for parents', function(){
expect(Ext.fly(child4_1).contains(child4_1_1)).toBe(true);
});
it('should return true for grandparents', function(){
expect(Ext.fly(child4).contains(child4_1_1)).toBe(true);
});
it('should return true for self', function(){
expect(Ext.fly(child4_1_1).contains(child4_1_1)).toBe(true);
});
});
}, "/src/dom/Element.traversal.js");