blob: 0175fbab6396c32955ad8d8db7a730113b2f5fe9 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010, 2012 EclipseSource and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* EclipseSource - initial API and implementation
******************************************************************************/
qx.Class.define( "org.eclipse.rwt.test.tests.SVGTest", {
extend : qx.core.Object,
members : {
TARGETENGINE : [ "gecko", "webkit", "newmshtml" ],
testDrawShapeInWidget : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var GraphicsUtil = org.eclipse.rwt.GraphicsUtil;
var parent = new rwt.widgets.base.Terminator();
parent.setLocation( 10, 10 );
parent.setDimension( 400, 400 );
parent.addToDocument();
TestUtil.flush();
var parentNode = parent._getTargetNode();
var canvas = GraphicsUtil.createCanvas();
var shape = GraphicsUtil.createShape( "rect" );
GraphicsUtil.addToCanvas( canvas, shape );
parentNode.appendChild( GraphicsUtil.getCanvasNode( canvas ) );
GraphicsUtil.handleAppear( canvas );
var canvasNode = parentNode.firstChild;
assertEquals( "svg", canvasNode.tagName );
assertEquals( "rect", canvasNode.lastChild.tagName );
assertEquals( null, GraphicsUtil.getFillType( shape ) );
assertTrue( GraphicsUtil.getDisplay( shape ) );
parent.destroy();
TestUtil.flush();
},
testFillColor : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var GraphicsUtil = org.eclipse.rwt.GraphicsUtil;
TestUtil.flush();
var parentNode = document.body;
var canvas = GraphicsUtil.createCanvas();
var shape = GraphicsUtil.createShape( "rect" );
GraphicsUtil.addToCanvas( canvas, shape );
GraphicsUtil.handleAppear( canvas );
parentNode.appendChild( GraphicsUtil.getCanvasNode( canvas ) );
GraphicsUtil.setFillColor( shape, null);
assertEquals( null, GraphicsUtil.getFillType( shape ) );
assertEquals( null, GraphicsUtil.getFillColor( shape ) );
assertEquals( "none", shape.node.getAttribute( "fill" ) );
GraphicsUtil.setFillColor( shape, "green" );
assertEquals( "green", shape.node.getAttribute( "fill" ) );
assertEquals( "color", GraphicsUtil.getFillType( shape ) );
assertEquals( "green", GraphicsUtil.getFillColor( shape ) );
parentNode.removeChild( GraphicsUtil.getCanvasNode( canvas ) );
},
testFillGradient : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var GraphicsUtil = org.eclipse.rwt.GraphicsUtil;
TestUtil.flush();
var parentNode = document.body;
var canvas = GraphicsUtil.createCanvas();
var shape = GraphicsUtil.createShape( "rect" );
var hash = qx.core.Object.toHashCode( shape );
GraphicsUtil.addToCanvas( canvas, shape );
GraphicsUtil.handleAppear( canvas );
parentNode.appendChild( GraphicsUtil.getCanvasNode( canvas ) );
GraphicsUtil.setFillGradient( shape, [ [ 0, "red" ], [ 1, "green" ] ] );
assertEquals( "gradient", GraphicsUtil.getFillType( shape ) );
var expected = "url(#gradient_" + hash + ")";
assertEquals( expected, shape.node.getAttribute( "fill" ) );
var gradNode = canvas.defsNode.firstChild;
assertEquals( "linearGradient", gradNode.tagName );
assertEquals( "gradient_" + hash, gradNode.getAttribute( "id" ) );
assertEquals( "0", gradNode.firstChild.getAttribute( "offset" ) );
assertEquals( "red", gradNode.firstChild.getAttribute( "stop-color" ) );
assertEquals( "1", gradNode.lastChild.getAttribute( "offset" ) );
assertEquals( 0, gradNode.getAttribute( "x1" ) );
assertEquals( 0, gradNode.getAttribute( "y1" ) );
assertEquals( 0, gradNode.getAttribute( "x2" ) );
assertEquals( 1, gradNode.getAttribute( "y2" ) );
assertEquals( "green", gradNode.lastChild.getAttribute( "stop-color" ) );
parentNode.removeChild( GraphicsUtil.getCanvasNode( canvas ) );
},
testFillGradientHorizontal : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var GraphicsUtil = org.eclipse.rwt.GraphicsUtil;
TestUtil.flush();
var parentNode = document.body;
var canvas = GraphicsUtil.createCanvas();
var shape = GraphicsUtil.createShape( "rect" );
var hash = qx.core.Object.toHashCode( shape );
GraphicsUtil.addToCanvas( canvas, shape );
GraphicsUtil.handleAppear( canvas );
parentNode.appendChild( GraphicsUtil.getCanvasNode( canvas ) );
var gradient = [ [ 0, "red" ], [ 1, "green" ] ];
gradient.horizontal = true;
GraphicsUtil.setFillGradient( shape, gradient );
assertEquals( "gradient", GraphicsUtil.getFillType( shape ) );
var expected = "url(#gradient_" + hash + ")";
assertEquals( expected, shape.node.getAttribute( "fill" ) );
var gradNode = canvas.defsNode.firstChild;
assertEquals( "linearGradient", gradNode.tagName );
assertEquals( 0, gradNode.getAttribute( "x1" ) );
assertEquals( 0, gradNode.getAttribute( "y1" ) );
assertEquals( 1, gradNode.getAttribute( "x2" ) );
assertEquals( 0, gradNode.getAttribute( "y2" ) );
parentNode.removeChild( GraphicsUtil.getCanvasNode( canvas ) );
},
testChangeGradientOrientation : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var GraphicsUtil = org.eclipse.rwt.GraphicsUtil;
TestUtil.flush();
var parentNode = document.body;
var canvas = GraphicsUtil.createCanvas();
var shape = GraphicsUtil.createShape( "rect" );
var hash = qx.core.Object.toHashCode( shape );
GraphicsUtil.addToCanvas( canvas, shape );
GraphicsUtil.handleAppear( canvas );
parentNode.appendChild( GraphicsUtil.getCanvasNode( canvas ) );
var gradient = [ [ 0, "red" ], [ 1, "green" ] ];
gradient.horizontal = true;
GraphicsUtil.setFillGradient( shape, gradient );
var gradNode = canvas.defsNode.firstChild;
assertEquals( 0, gradNode.getAttribute( "x1" ) );
assertEquals( 0, gradNode.getAttribute( "y1" ) );
assertEquals( 1, gradNode.getAttribute( "x2" ) );
assertEquals( 0, gradNode.getAttribute( "y2" ) );
var gradientVert = [ [ 0, "red" ], [ 1, "green" ] ];
gradientVert.horizontal = false;
GraphicsUtil.setFillGradient( shape, gradientVert );
assertEquals( 0, gradNode.getAttribute( "x1" ) );
assertEquals( 0, gradNode.getAttribute( "y1" ) );
assertEquals( 0, gradNode.getAttribute( "x2" ) );
assertEquals( 1, gradNode.getAttribute( "y2" ) );
GraphicsUtil.setFillGradient( shape, gradient );
assertEquals( 0, gradNode.getAttribute( "x1" ) );
assertEquals( 0, gradNode.getAttribute( "y1" ) );
assertEquals( 1, gradNode.getAttribute( "x2" ) );
assertEquals( 0, gradNode.getAttribute( "y2" ) );
parentNode.removeChild( GraphicsUtil.getCanvasNode( canvas ) );
},
testDrawRoundRect : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var GraphicsUtil = org.eclipse.rwt.GraphicsUtil;
var canvas = GraphicsUtil.createCanvas();
var parent = document.body;
var shape = GraphicsUtil.createShape( "roundrect" );
GraphicsUtil.setRoundRectLayout( shape, 10, 10, 20, 20, [ 0, 4, 3, 2 ] );
GraphicsUtil.setStroke( shape, "black", 2 );
GraphicsUtil.addToCanvas( canvas, shape );
parent.appendChild( GraphicsUtil.getCanvasNode( canvas ) );
GraphicsUtil.handleAppear( canvas );
var expected = "M 10 10 L 26 10 A 4 4 0 0 1 30 14 L 30 27 "
+ "A 3 3 0 0 1 27 30 L 12 30 A 2 2 0 0 1 10 28 Z";
assertEquals( expected, shape.node.getAttribute( "d" ) );
parent.removeChild( GraphicsUtil.getCanvasNode( canvas ) );
},
testDrawRoundRectOneRadiusOnlyMinimalMize : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var GraphicsUtil = org.eclipse.rwt.GraphicsUtil;
var canvas = GraphicsUtil.createCanvas();
var parent = document.body;
var shape = GraphicsUtil.createShape( "roundrect" );
GraphicsUtil.setRoundRectLayout( shape, 10, 10, 20, 20, [ 20, 0, 0, 0] );
GraphicsUtil.setStroke( shape, "black", 2 );
GraphicsUtil.setFillColor( shape, "red" );
GraphicsUtil.addToCanvas( canvas, shape );
parent.appendChild( GraphicsUtil.getCanvasNode( canvas ) );
GraphicsUtil.handleAppear( canvas );
var expected = "M 10 20 A 10 10 0 0 1 20 10 L 30 10 30 10 L 30 30 30 30 L 10 30 10 30 Z";
if( rwt.client.Client.isNewMshtml() ) {
expected = "M 10 20 A 10 10 0 0 1 20 10 L 30 10 L 30 10 L 30 30 L 30 30 L 10 30 L 10 30 Z";
}
assertEquals( expected, shape.node.getAttribute( "d" ) );
parent.removeChild( GraphicsUtil.getCanvasNode( canvas ) );
},
testDrawRoundRectOneRadiusOnlyTooSmall : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var GraphicsUtil = org.eclipse.rwt.GraphicsUtil;
var canvas = GraphicsUtil.createCanvas();
var parent = document.body;
var shape = GraphicsUtil.createShape( "roundrect" );
GraphicsUtil.setRoundRectLayout( shape, 10, 10, 20, 20, [ 21, 0, 0, 0] );
GraphicsUtil.setStroke( shape, "black", 2 );
GraphicsUtil.setFillColor( shape, "red" );
GraphicsUtil.addToCanvas( canvas, shape );
parent.appendChild( GraphicsUtil.getCanvasNode( canvas ) );
GraphicsUtil.handleAppear( canvas );
var expected = "M 10 20 A 10 10 0 0 1 20 10 L 30 10 30 10 L 30 30 30 30 L 10 30 10 30 Z";
if( rwt.client.Client.isNewMshtml() ) {
expected = "M 10 20 A 10 10 0 0 1 20 10 L 30 10 L 30 10 L 30 30 L 30 30 L 10 30 L 10 30 Z";
}
assertEquals( expected, shape.node.getAttribute( "d" ) );
parent.removeChild( GraphicsUtil.getCanvasNode( canvas ) );
},
testDisplay : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var GraphicsUtil = org.eclipse.rwt.GraphicsUtil;
var parent = new rwt.widgets.base.Terminator();
parent.setLocation( 10, 10 );
parent.setDimension( 400, 400 );
parent.addToDocument();
TestUtil.flush();
var parentNode = parent._getTargetNode();
var canvas = GraphicsUtil.createCanvas();
var shape = GraphicsUtil.createShape( "rect" );
GraphicsUtil.addToCanvas( canvas, shape );
GraphicsUtil.setDisplay( shape, false );
parentNode.appendChild( GraphicsUtil.getCanvasNode( canvas ) );
GraphicsUtil.handleAppear( canvas );
var canvasNode = parentNode.firstChild;
assertEquals( "none", shape.node.getAttribute( "display" ) );
assertFalse( GraphicsUtil.getDisplay( shape ) );
parent.destroy();
TestUtil.flush();
},
testFillPattern : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var GraphicsUtil = org.eclipse.rwt.GraphicsUtil;
var canvas = GraphicsUtil.createCanvas();
var parent = document.body;
var url = "./js/resource/tex.jpg";
var shape = GraphicsUtil.createShape( "rect" );
GraphicsUtil.setRectBounds( shape, 10, 10, 100, 100 );
GraphicsUtil.setStroke( shape, "black", 2 );
GraphicsUtil.setFillPattern( shape, url, 70, 70 );
GraphicsUtil.addToCanvas( canvas, shape );
parent.appendChild( GraphicsUtil.getCanvasNode( canvas ) );
GraphicsUtil.handleAppear( canvas );
assertEquals( "rect", shape.node.tagName );
assertEquals( "pattern", canvas.defsNode.firstChild.tagName );
var patternId = canvas.defsNode.firstChild.getAttribute( "id" );
assertTrue( shape.node.getAttribute( "fill").search( patternId ) != -1 );
var imageNode = canvas.defsNode.firstChild.firstChild;
assertEquals( "image", imageNode.tagName );
assertEquals( 70, imageNode.getAttribute( "width" ) );
assertEquals( 70, imageNode.getAttribute( "height" ) );
// this is due to the workaround for Bug 301236:
if( rwt.client.Client.getEngine() != "webkit" ) {
assertEquals( url, imageNode.getAttribute( "href" ) );
}
assertEquals( "pattern", GraphicsUtil.getFillType( shape ) );
parent.removeChild( GraphicsUtil.getCanvasNode( canvas ) );
},
testBlurFilter : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var GraphicsUtil = org.eclipse.rwt.GraphicsUtil;
var canvas = GraphicsUtil.createCanvas();
var parent = document.body;
var shape = GraphicsUtil.createShape( "rect" );
GraphicsUtil.setRectBounds( shape, 10, 10, 100, 100 );
GraphicsUtil.setBlur( shape, 4 );
GraphicsUtil.addToCanvas( canvas, shape );
parent.appendChild( GraphicsUtil.getCanvasNode( canvas ) );
GraphicsUtil.handleAppear( canvas );
var hash = qx.core.Object.toHashCode( shape );
var expected = "url(#filter_" + hash + ")";
assertEquals( expected, shape.node.getAttribute( "filter" ) );
var filterNode = canvas.defsNode.firstChild;
assertEquals( "filter", filterNode.tagName );
assertEquals( "filter_" + hash, filterNode.getAttribute( "id" ) );
assertEquals( "feGaussianBlur", filterNode.firstChild.tagName );
assertEquals( "2", filterNode.firstChild.getAttribute( "stdDeviation" ) );
assertEquals( "4", GraphicsUtil.getBlur( shape ) );
GraphicsUtil.setBlur( shape, 0 );
assertEquals( "none", shape.node.getAttribute( "filter" ) );
assertEquals( "0", GraphicsUtil.getBlur( shape ) );
GraphicsUtil.setBlur( shape, 2 );
assertEquals( expected, shape.node.getAttribute( "filter" ) );
assertEquals( "1", filterNode.firstChild.getAttribute( "stdDeviation" ) );
assertEquals( "2", GraphicsUtil.getBlur( shape ) );
GraphicsUtil.setBlur( shape, 2 );
parent.removeChild( GraphicsUtil.getCanvasNode( canvas ) );
},
testOpacity : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var GraphicsUtil = org.eclipse.rwt.GraphicsUtil;
var canvas = GraphicsUtil.createCanvas();
var parent = document.body;
var shape = GraphicsUtil.createShape( "rect" );
GraphicsUtil.setRectBounds( shape, 10, 10, 100, 100 );
assertEquals( 0, GraphicsUtil.getOpacity( shape ) );
GraphicsUtil.setOpacity( shape, 0.4 );
GraphicsUtil.addToCanvas( canvas, shape );
parent.appendChild( GraphicsUtil.getCanvasNode( canvas ) );
GraphicsUtil.handleAppear( canvas );
assertEquals( 0.4, shape.node.getAttribute( "opacity" ) );
assertEquals( 0.4, GraphicsUtil.getOpacity( shape ) );
parent.removeChild( GraphicsUtil.getCanvasNode( canvas ) );
},
testNodeOrder : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var GraphicsUtil = org.eclipse.rwt.GraphicsUtil;
var parent = document.body;
var canvas = GraphicsUtil.createCanvas();
parent.appendChild( GraphicsUtil.getCanvasNode( canvas ) );
GraphicsUtil.handleAppear( canvas );
var shape1 = GraphicsUtil.createShape( "rect" );
var shape2 = GraphicsUtil.createShape( "rect" );
var shape3 = GraphicsUtil.createShape( "rect" );
GraphicsUtil.addToCanvas( canvas, shape1 );
GraphicsUtil.addToCanvas( canvas, shape3 );
GraphicsUtil.addToCanvas( canvas, shape2, shape3 );
var nodes = canvas.node.childNodes;
assertIdentical( nodes[ 1 ], shape1.node );
assertIdentical( nodes[ 2 ], shape2.node );
assertIdentical( nodes[ 3 ], shape3.node );
parent.removeChild( canvas.node );
},
testEnableOverflow : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var GraphicsUtil = org.eclipse.rwt.GraphicsUtil;
var parent = document.body;
var canvas = GraphicsUtil.createCanvas();
parent.appendChild( GraphicsUtil.getCanvasNode( canvas ) );
GraphicsUtil.handleAppear( canvas );
var shape = GraphicsUtil.createShape( "rect" );
GraphicsUtil.addToCanvas( canvas, shape );
assertIdentical( canvas.node, canvas.group );
assertIdentical( canvas.node, shape.node.parentNode );
GraphicsUtil.enableOverflow( canvas, 50, 30, 150, 140 );
assertEquals( "-50px", canvas.node.style.left );
assertEquals( "-30px", canvas.node.style.top );
assertEquals( "200px", canvas.node.style.width );
assertEquals( "170px", canvas.node.style.height );
assertIdentical( canvas.node, canvas.group.parentNode );
assertIdentical( canvas.group, shape.node.parentNode );
var transform = canvas.group.getAttribute( "transform" );
if( rwt.client.Client.isNewMshtml() ) {
transform = transform.split( " " ).join( "," );
} else {
transform = transform.split( " " ).join( "" );
}
assertEquals( "translate(50,30)", transform );
GraphicsUtil.enableOverflow( canvas, 0, 0, 110, 120 );
assertEquals( "0px", canvas.node.style.left );
assertEquals( "0px", canvas.node.style.top );
assertEquals( "110px", canvas.node.style.width );
assertEquals( "120px", canvas.node.style.height );
assertIdentical( canvas.node, canvas.group.parentNode );
assertIdentical( canvas.group, shape.node.parentNode );
var transform = canvas.group.getAttribute( "transform" );
assertEquals( "", transform );
GraphicsUtil.enableOverflow( canvas, 0, 0, null, null );
assertEquals( "0px", canvas.node.style.left );
assertEquals( "0px", canvas.node.style.top );
assertEquals( "100%", canvas.node.style.width );
assertEquals( "100%", canvas.node.style.height );
parent.removeChild( canvas.node );
}
}
} );