describe('getBounds', function () {


    it('should register correct width and height with a LOADED Sprite', function() {
        var parent = new PIXI.Container();
        var texture = PIXI.RenderTexture.create(10, 10);

        var sprite = new PIXI.Sprite(texture);

        parent.addChild(sprite);


        var bounds = sprite.getBounds();

        expect(bounds.x).to.equal(0);
        expect(bounds.y).to.equal(0);
        expect(bounds.width).to.equal(10);
        expect(bounds.height).to.equal(10);

        sprite.position.x = 20;
        sprite.position.y = 20;

        sprite.scale.x = 2;
        sprite.scale.y = 2;

        var bounds = sprite.getBounds();

        expect(bounds.x).to.equal(20);
        expect(bounds.y).to.equal(20);
        expect(bounds.width).to.equal(20);
        expect(bounds.height).to.equal(20);


        var bounds = sprite.getBounds(true);

        expect(bounds.x).to.equal(20);
        expect(bounds.y).to.equal(20);
        expect(bounds.width).to.equal(20);
        expect(bounds.height).to.equal(20);

    });

    it('should register correct width and height with Graphics', function() {
        var parent = new PIXI.Container();

        var graphics = new PIXI.Graphics();

        var bounds = graphics.getBounds();

        expect(bounds.x).to.equal(0);
        expect(bounds.y).to.equal(0);
        expect(bounds.width).to.equal(0);
        expect(bounds.height).to.equal(0);

        graphics.beginFill(0xFF0000).drawCircle(0, 0, 10, 10);//texture);

        parent.addChild(graphics);

        var bounds = graphics.getBounds();

        expect(bounds.x).to.equal(-10);
        expect(bounds.y).to.equal(-10);
        expect(bounds.width).to.equal(20);
        expect(bounds.height).to.equal(20);

        graphics.position.x = 20;
        graphics.position.y = 20;

        graphics.scale.x = 2;
        graphics.scale.y = 2;

        var bounds = graphics.getBounds();

        expect(bounds.x).to.equal(0);
        expect(bounds.y).to.equal(0);
        expect(bounds.width).to.equal(40);
        expect(bounds.height).to.equal(40);

        var bounds = graphics.getBounds(true);

        expect(bounds.x).to.equal(0);
        expect(bounds.y).to.equal(0);
        expect(bounds.width).to.equal(40);
        expect(bounds.height).to.equal(40);

    });

    it('should register correct width and height with an empty Container', function() {
        var parent = new PIXI.Container();

        var container = new PIXI.Container();//Graphics().beginFill(0xFF0000).drawCircle(0, 0, 10, 10);//texture);

        parent.addChild(container);

        var bounds = container.getBounds();

        expect(bounds.x).to.equal(0);
        expect(bounds.y).to.equal(0);
        expect(bounds.width).to.equal(0);
        expect(bounds.height).to.equal(0);

        container.position.x = 20;
        container.position.y = 20;

        container.scale.x = 2;
        container.scale.y = 2;

        var bounds = container.getBounds();

        expect(bounds.x).to.equal(0);
        expect(bounds.y).to.equal(0);
        expect(bounds.width).to.equal(0);
        expect(bounds.height).to.equal(0);

    });

    it('should register correct width and height with a Container', function() {
        var parent = new PIXI.Container();

        var container = new PIXI.Container();//Graphics().beginFill(0xFF0000).drawCircle(0, 0, 10, 10);//texture);

    	var graphics = new PIXI.Graphics().beginFill(0xFF0000).drawCircle(0, 0, 10, 10);//texture);

    	var texture = PIXI.RenderTexture.create(10, 10);
        var sprite = new PIXI.Sprite(texture);

        container.addChild(sprite);
        container.addChild(graphics);

        parent.addChild(container);

	    sprite.position.x = 30;
    	sprite.position.y = 20;
	    graphics.position.x = 100;
    	graphics.position.y = 100;

        var bounds = container.getBounds();

        expect(bounds.x).to.equal(30);
        expect(bounds.y).to.equal(20);
        expect(bounds.width).to.equal(80);
        expect(bounds.height).to.equal(90);

	    container.rotation = 0.1;

        var bounds = container.getBounds();

        expect(bounds.x | 0).to.equal(26);
        expect(bounds.y | 0).to.equal(22);
        expect(bounds.width | 0).to.equal(73);
        expect(bounds.height | 0).to.equal(97);

        var bounds = container.getBounds(true);

        expect(bounds.x | 0).to.equal(26);
        expect(bounds.y | 0).to.equal(22);
        expect(bounds.width | 0).to.equal(73);
        expect(bounds.height | 0).to.equal(97);


    });

	it('should register correct width and height with an item that has already had its parent Container transformed', function() {
        var parent = new PIXI.Container();

        var container = new PIXI.Container();//Graphics().beginFill(0xFF0000).drawCircle(0, 0, 10, 10);//texture);

    	var graphics = new PIXI.Graphics().beginFill(0xFF0000).drawRect(0, 0, 10, 10);//texture);


        parent.addChild(container);
        container.addChild(graphics);

	    container.position.x = 100;
    	container.position.y = 100;

        var bounds = container.getBounds();

        expect(bounds.x).to.equal(100);
        expect(bounds.y).to.equal(100);
        expect(bounds.width).to.equal(10);
        expect(bounds.height).to.equal(10);


        var bounds = graphics.getBounds(true);

        expect(bounds.x).to.equal(100);
        expect(bounds.y).to.equal(100);
        expect(bounds.width).to.equal(10);
        expect(bounds.height).to.equal(10);




    });

	it('should register correct width and height with a Mesh', function() {
	        var parent = new PIXI.Container();

	    	var texture = PIXI.RenderTexture.create(10, 10);

	        var plane = new PIXI.mesh.Plane(texture);

	        parent.addChild(plane);

		    plane.position.x = 20;
	    	plane.position.y = 20;

	        var bounds = plane.getBounds();

	        expect(bounds.x).to.equal(20);
	        expect(bounds.y).to.equal(20);
	        expect(bounds.width).to.equal(10);
	        expect(bounds.height).to.equal(10);

	        plane.scale.x = 2;
	    	plane.scale.y = 2;

	        var bounds = plane.getBounds();

	        expect(bounds.x).to.equal(20);
	        expect(bounds.y).to.equal(20);
	        expect(bounds.width).to.equal(20);
	        expect(bounds.height).to.equal(20);

	    });

        it('should register correct width and height with an a DisplayObject is visible false', function() {

            var parent = new PIXI.Container();

            var container = new PIXI.Container();//Graphics().beginFill(0xFF0000).drawCircle(0, 0, 10, 10);//texture);

            var graphics = new PIXI.Graphics().beginFill(0xFF0000).drawCircle(0, 0, 10, 10);//texture);

            var texture = PIXI.RenderTexture.create(10, 10);
            var sprite = new PIXI.Sprite(texture);

            container.addChild(sprite);
            container.addChild(graphics);

            parent.addChild(container);

            sprite.position.x = 30;
            sprite.position.y = 20;
            graphics.position.x = 100;
            graphics.position.y = 100;

            graphics.visible = false;

            var bounds = container.getBounds();

            expect(bounds.x).to.equal(30);
            expect(bounds.y).to.equal(20);
            expect(bounds.width).to.equal(10);
            expect(bounds.height).to.equal(10);

            container.visible = false;

            var bounds = container.getBounds();

            expect(bounds.x).to.equal(0);
            expect(bounds.y).to.equal(0);
            expect(bounds.width).to.equal(0);
            expect(bounds.height).to.equal(0);


        });

        it('should register correct width and height with an a DisplayObject parent has moved', function() {

            var parent = new PIXI.Container();

            var container = new PIXI.Container();//Graphics().beginFill(0xFF0000).drawCircle(0, 0, 10, 10);//texture);

            var graphics = new PIXI.Graphics().beginFill(0xFF0000).drawCircle(0, 0, 10);//texture);

            container.addChild(graphics);

            parent.addChild(container);

          //  graphics.position.x = 100;
          //  graphics.position.y = 100;
            container.position.x -= 100;
            container.position.y -= 100;

            var bounds = graphics.getBounds();

            expect(bounds.x).to.equal(-110);
            expect(bounds.y).to.equal(-110);
            expect(bounds.width).to.equal(20);
            expect(bounds.height).to.equal(20);


        });

        it('should register correct width and height with an a Text Object', function() {

            var parent = new PIXI.Container();

            var container = new PIXI.Container();//Graphics().beginFill(0xFF0000).drawCircle(0, 0, 10, 10);//texture);

            var text = new PIXI.Text('i am some text');

            container.addChild(text);

            parent.addChild(container);

            var bounds = text.getBounds();
            var bx = bounds.width;

            expect(bounds.x).to.equal(0);
            expect(bounds.y).to.equal(0);
            expect(bounds.width).to.be.greaterThan(0);
            expect(bounds.height).to.greaterThan(0);

            text.text = 'hello!';

            var bounds = text.getBounds();

            // this variable seems to be different on different devices. a font thing?
            expect(bounds.width).to.not.equal(bx);

        });


	});
