'use strict';
describe('PIXI.Container', function ()
{
describe('parent', function ()
{
it('should be present when adding children to Container', function ()
{
var container = new PIXI.Container();
var child = new PIXI.DisplayObject();
expect(container.children.length).to.be.equals(0);
container.addChild(child);
expect(container.children.length).to.be.equals(1);
expect(child.parent).to.be.equals(container);
});
});
describe('events', function ()
{
it('should trigger "added" and "removed" events on its children', function ()
{
var container = new PIXI.Container();
var child = new PIXI.DisplayObject();
var triggeredAdded = false;
var triggeredRemoved = false;
child.on('added', function (to)
{
triggeredAdded = true;
expect(container.children.length).to.be.equals(1);
expect(child.parent).to.be.equals(to);
});
child.on('removed', function (from)
{
triggeredRemoved = true;
expect(container.children.length).to.be.equals(0);
expect(child.parent).to.be.null;
expect(container).to.be.equals(from);
});
container.addChild(child);
expect(triggeredAdded).to.be.true;
expect(triggeredRemoved).to.be.false;
container.removeChild(child);
expect(triggeredRemoved).to.be.true;
});
});
describe('addChild', function ()
{
it('should remove from current parent', function ()
{
var parent = new PIXI.Container();
var container = new PIXI.Container();
var child = new PIXI.DisplayObject();
assertRemovedFromParent(parent, container, child, function () { container.addChild(child); });
});
});
describe('removeChildAt', function ()
{
it('should remove from current parent', function ()
{
var parent = new PIXI.Container();
var child = new PIXI.DisplayObject();
assertRemovedFromParent(parent, null, child, function () { parent.removeChildAt(0); });
});
});
describe('addChildAt', function ()
{
it('should allow placements at start', function ()
{
var container = new PIXI.Container();
var child = new PIXI.DisplayObject();
container.addChild(new PIXI.DisplayObject());
container.addChildAt(child, 0);
expect(container.children.length).to.be.equals(2);
expect(container.children[0]).to.be.equals(child);
});
it('should allow placements at end', function ()
{
var container = new PIXI.Container();
var child = new PIXI.DisplayObject();
container.addChild(new PIXI.DisplayObject());
container.addChildAt(child, 1);
expect(container.children.length).to.be.equals(2);
expect(container.children[1]).to.be.equals(child);
});
it('should throw on out-of-bounds', function ()
{
var container = new PIXI.Container();
var child = new PIXI.DisplayObject();
container.addChild(new PIXI.DisplayObject());
expect(function () { container.addChildAt(child, -1); }).to.throw('The index -1 supplied is out of bounds 1');
expect(function () { container.addChildAt(child, 2); }).to.throw('The index 2 supplied is out of bounds 1');
});
it('should remove from current parent', function ()
{
var parent = new PIXI.Container();
var container = new PIXI.Container();
var child = new PIXI.DisplayObject();
assertRemovedFromParent(parent, container, child, function () { container.addChildAt(child, 0); });
});
});
describe('removeChild', function ()
{
it('should ignore non-children', function ()
{
var container = new PIXI.Container();
var child = new PIXI.DisplayObject();
container.addChild(child);
container.removeChild(new PIXI.DisplayObject());
expect(container.children.length).to.be.equals(1);
});
it('should remove all children supplied', function ()
{
var container = new PIXI.Container();
var child1 = new PIXI.DisplayObject();
var child2 = new PIXI.DisplayObject();
container.addChild(child1, child2);
expect(container.children.length).to.be.equals(2);
container.removeChild(child1, child2);
expect(container.children.length).to.be.equals(0);
});
});
describe('getChildIndex', function ()
{
it('should return the correct index', function ()
{
var container = new PIXI.Container();
var child = new PIXI.DisplayObject();
container.addChild(new PIXI.DisplayObject(), child, new PIXI.DisplayObject());
expect(container.getChildIndex(child)).to.be.equals(1);
});
it('should throw when child does not exist', function ()
{
var container = new PIXI.Container();
var child = new PIXI.DisplayObject();
expect(function () { container.getChildIndex(child); })
.to.throw('The supplied DisplayObject must be a child of the caller');
});
});
describe('getChildAt', function ()
{
it('should throw when out-of-bounds', function ()
{
var container = new PIXI.Container();
expect(function () { container.getChildAt(-1); }).to.throw('getChildAt: Index (-1) does not exist.');
expect(function () { container.getChildAt(1); }).to.throw('getChildAt: Index (1) does not exist.');
});
});
function assertRemovedFromParent(parent, container, child, functionToAssert)
{
parent.addChild(child);
expect(parent.children.length).to.be.equals(1);
expect(child.parent).to.be.equals(parent);
functionToAssert();
expect(parent.children.length).to.be.equals(0);
expect(child.parent).to.be.equals(container);
}
});