YUI.add('drawing-tests', function(Y) {

var parentDiv = Y.DOM.create('<div id="testdiv" style="width: 400px; height: 400px;">'),
    suite = new Y.Test.Suite("Graphics: Drawing"),
    drawingTests,
    DOC = Y.config.doc;
    DOC.body.appendChild(parentDiv);
    drawingTests = new Y.Test.Case({

        setUp: function() {
            this.graphic = new Y.Graphic({
                render: parentDiv 
            });
            this.path = this.graphic.addShape({
                type: "path"
            });
        },

        tearDown: function() {
            this.graphic.destroy();
            //remove the focus event from the document as its not related to graphics.
            Y.Event.purgeElement(DOC, false);
        },

        "test: moveTo()" : function() {
            Y.Assert.areEqual(this.path, this.path.moveTo(10, 10), "The moveTo method should return a reference to the path.");
        },

        "test: relativeMoveTo()" : function() {
            Y.Assert.areEqual(this.path, this.path.relativeMoveTo(10, 10), "The relativeMoveTo method should return a reference to the path.");
        },

        "test: lineTo()" : function() {
            Y.Assert.areEqual(this.path, this.path.lineTo(10, 10), "The lineTo method should return a reference to the path.");
            Y.Assert.areEqual(this.path, this.path.lineTo(10, 10, 20, 10, 20, 20, 10, 20, 10, 10), "The lineTo method should return a reference to the path.");
            Y.Assert.areEqual(this.path, this.path.lineTo([10, 10], [20, 10], [20, 20], [10, 20], [10, 10]), "The lineTo method should return a reference to the path.");
        },

        "test: relativeLineTo()" : function() {
            Y.Assert.areEqual(this.path, this.path.relativeLineTo(10, 10), "The relativeLineTo method should return a reference to the path.");
        },

        "test: curveTo()" : function() {
            Y.Assert.areEqual(this.path, this.path.curveTo(83.5, 0, 100.5, 17, 100, 50), "The curveTo method should return a reference to the path.");
            Y.Assert.areEqual(this.path, this.path.curveTo(83.5, 0, 100.5, 17, 100, 50), "The curveTo method should return a reference to the path.");
            this.path._pathArray = [];
            Y.Assert.areEqual(this.path, this.path.curveTo(83.5, 0, 100.5, 17, 100, 50), "The curveTo method should return a reference to the path.");
        },

        "test: relativeCurveTo()" : function() {
            Y.Assert.areEqual(this.path, this.path.relativeCurveTo(83.5, 0, 100.5, 17, 100, 50), "The relativeCurveTo method should return a reference to the path.");
        },

        "test: quadraticCurveTo()" : function() {
            Y.Assert.areEqual(this.path, this.path.quadraticCurveTo(10, 0, 10, 5), "The quadraticCurveTo method should return a reference to the path.");
            Y.Assert.areEqual(this.path, this.path.quadraticCurveTo(10, 0, 10, 5), "The quadraticCurveTo method should return a reference to the path.");
            this.path._pathArray = [];
            Y.Assert.areEqual(this.path, this.path.quadraticCurveTo(10, 0, 10, 5), "The quadraticCurveTo method should return a reference to the path.");
        },

        "test: relativeQuadraticCurveTo()" : function() {
            Y.Assert.areEqual(this.path, this.path.relativeQuadraticCurveTo(10, 0, 10, 5), "The relativeQuadraticCurveTo method should return a reference to the path.");
        },

        "test: drawRect()" : function() {
             Y.Assert.areEqual(this.path, this.path.drawRect(0, 0, 20, 10), "The drawRect method should return a reference to the path.");
        },

        "test: drawRoundRect()" : function() {
             Y.Assert.areEqual(this.path, this.path.drawRoundRect(0, 0, 200, 100, 4, 4), "The drawRoundRect method should return a reference to the path.");
        },

        "test: drawEllipse()" : function() {
             Y.Assert.areEqual(this.path, this.path.drawEllipse(0, 0, 20, 10), "The drawEllipse method should return a reference to the path.");
        },

        "test: drawCircle()" : function() {
             Y.Assert.areEqual(this.path, this.path.drawCircle(0, 0, 10), "The drawCircle method should return a reference to the path.");
        },

        "test: drawDiamond()" : function() {
             Y.Assert.areEqual(this.path, this.path.drawDiamond(0, 0, 20, 10), "The drawDiamond method should return a reference to the path.");
        },

        "test: drawWedge()" : function() {
            Y.Assert.areEqual(this.path, this.path.drawWedge(175, 175, -3, 87, 175), "The drawWedge method should return a reference to the path.");
            this.path.moveTo(100, 85);
            Y.Assert.areEqual(this.path, this.path.drawWedge(175, 175, -3, 87, 175), "The drawWedge method should return a reference to the path.");
            //hit over 360 branch
            Y.Assert.areEqual(this.path, this.path.drawWedge(175, 175, -3, 365, 175), "The drawWedge method should return a reference to the path.");
            //hit 0 segs branch
            Y.Assert.areEqual(this.path, this.path.drawWedge(175, 175, -3, 0, 175), "The drawWedge method should return a reference to the path.");
        }
    });
    
    suite.add(drawingTests);
    Y.Test.Runner.add( suite );
    
}, '@VERSION@' ,{requires:['graphics', 'test']});
