// XAAL toolkit // Copyright (C) 2009 Ville Karavirta // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . package tests.xaal.parser.modules; import java.io.IOException; import java.io.StringReader; import java.util.Iterator; import junit.framework.TestCase; import org.xml.sax.SAXException; import xaal.objects.Animation; import xaal.objects.Initial; import xaal.objects.Xaal; import xaal.objects.animation.AnimationOperation; import xaal.objects.animation.graphical.ChangeStyleOperation; import xaal.objects.animation.graphical.HideOperation; import xaal.objects.animation.graphical.RotateOperation; import xaal.objects.animation.graphical.ScaleOperation; import xaal.objects.animation.graphical.ShowOperation; import xaal.objects.animation.timing.Timing; import xaal.objects.graphical.Circle; import xaal.objects.graphical.ColorConverter; import xaal.objects.graphical.Coordinate; import xaal.objects.graphical.GraphicalPrimitive; import xaal.objects.graphical.Rectangle; import xaal.objects.graphical.Style; import xaal.objects.structures.Array; import xaal.parser.ParserModule; import xaal.parser.ParserModuleException; import xaal.parser.XmlParser; import xaal.parser.modules.XaalAnimParserModule; import xaal.parser.modules.XaalDSParserModule; import xaal.parser.modules.XaalGPAnimParserModule; import xaal.parser.modules.XaalGPParserModule; import xaal.parser.modules.XaalMainParserModule; public class XaalGPAnimParserModuleTest extends TestCase { private static final double DELTA = 0.00000001; private XmlParser xp; /** * @param name */ public XaalGPAnimParserModuleTest(String name) { super(name); } /* (non-Javadoc) * @see junit.framework.TestCase#setUp() */ protected void setUp() throws Exception { super.setUp(); } /* (non-Javadoc) * @see junit.framework.TestCase#tearDown() */ protected void tearDown() throws Exception { super.tearDown(); } private void initializeXP() throws ParserModuleException { xp = new XmlParser(); xp.registerParserModule(XaalDSParserModule.class.getName()); xp.registerParserModule(XaalGPParserModule.class.getName()); xp.registerParserModule(XaalMainParserModule.class.getName()); xp.registerParserModule(XaalGPAnimParserModule.class.getName()); xp.registerParserModule(XaalAnimParserModule.class.getName()); } private Animation commonTests() { Object o = ParserModule.getProperty(XaalMainParserModule.XAAL_ROOT_OBJECT); assertEquals("XAAL_ROOT_OBJECT is null", true, o != null); assertEquals("XAAL_ROOT_OBJECT not instance of " + Xaal.class.getName(), true, o instanceof Xaal); Xaal x = (Xaal) o; assertEquals("Xaal.getAnimation() returned null", true, x.getAnimation() != null); return x.getAnimation(); } public void testElementScale() throws ParserModuleException, IOException, SAXException { initializeXP(); xp.parse(new StringReader("" + ""+ ""+ "")); Animation a = commonTests(); Xaal x = (Xaal) XaalMainParserModule.getProperty(XaalMainParserModule.XAAL_ROOT_OBJECT); Iterator graphics = x.getInitial().getGraphicals(); assertEquals(true, graphics.hasNext()); Object o = graphics.next(); Circle c = (Circle) o; Iterator operations = a.getOperations(); assertEquals(true, operations.hasNext()); AnimationOperation ao = (AnimationOperation) operations.next(); assertEquals(true, ao instanceof ScaleOperation); ScaleOperation so = (ScaleOperation) ao; Timing t = so.getTiming(); assertEquals("Timing not set", false, t == null); assertEquals("Delay not correct", 13, t.getDelay()); assertEquals("Delay type not correct", Timing.FRAMES_TYPE, t.getDelayType()); assertEquals("Duration not correct", 20, t.getDuration()); assertEquals("Duration type not correct", Timing.MS_TYPE, t.getDurationType()); Iterator i = so.getGraphicals(); assertEquals(true, i.hasNext()); Circle hc = (Circle) i.next(); assertEquals(true, c.equals(hc)); assertEquals(false, i.hasNext()); i = so.getStructures(); assertEquals(true, i.hasNext()); Array arr = (Array) i.next(); assertEquals(true, arr.equals(x.getInitial().getStructures().next())); assertEquals(false, i.hasNext()); } public void testElementRotate() throws ParserModuleException, IOException, SAXException { initializeXP(); xp.parse(new StringReader("" + "" + ""+ "")); Animation a = commonTests(); Xaal xaal = (Xaal) ParserModule.getProperty(XaalMainParserModule.XAAL_ROOT_OBJECT); Initial in = xaal.getInitial(); Iterator graphics = in.getGraphicals(); assertEquals(true, graphics.hasNext()); Object o = graphics.next(); assertEquals(true, o instanceof GraphicalPrimitive); assertEquals(true, o instanceof Rectangle); GraphicalPrimitive gp = (GraphicalPrimitive) o; assertEquals("rect", gp.getId()); assertEquals(1.0, gp.getOpacity(), DELTA); assertEquals(false, gp.isHidden()); Rectangle r = (Rectangle) gp; assertEquals("c0", r.getStartCoordinate().getId()); assertEquals(10, r.getStartCoordinate().getX()); assertEquals(11, r.getStartCoordinate().getY()); assertEquals("c1", r.getEndCoordinate().getId()); assertEquals(9, r.getEndCoordinate().getX()); assertEquals(12, r.getEndCoordinate().getY()); assertEquals(12, r.getDepth()); assertEquals(3, r.getRound()[0]); assertEquals(4, r.getRound()[1]); Iterator operations = a.getOperations(); assertEquals(true, operations.hasNext()); AnimationOperation ao = (AnimationOperation) operations.next(); assertEquals(true, ao instanceof RotateOperation); RotateOperation ro = (RotateOperation) ao; Iterator i = ro.getGraphicals(); assertEquals(true, i.hasNext()); Rectangle rect = (Rectangle) i.next(); assertEquals(true, r.equals(rect)); assertEquals(false, i.hasNext()); Coordinate coord = ro.getCoordinate(); assertEquals(5, coord.getX()); assertEquals(7, coord.getY()); } public void testElementHide() throws ParserModuleException, IOException, SAXException { initializeXP(); xp.parse(new StringReader("" + ""+ ""+ "")); Animation a = commonTests(); Xaal x = (Xaal) XaalMainParserModule.getProperty(XaalMainParserModule.XAAL_ROOT_OBJECT); Iterator graphics = x.getInitial().getGraphicals(); assertEquals(true, graphics.hasNext()); Object o = graphics.next(); assertEquals(true, o instanceof GraphicalPrimitive); assertEquals(true, o instanceof Circle); GraphicalPrimitive gp = (GraphicalPrimitive) o; assertEquals("c0", gp.getId()); assertEquals(1.0, gp.getOpacity(), DELTA); assertEquals(false, gp.isHidden()); Circle c = (Circle) gp; assertEquals(5, c.getRadius().getLength()); assertEquals(5, c.getRadius().getX()); assertEquals(5, c.getRadius().getY()); assertEquals(0, c.getCenter().getX()); assertEquals(0, c.getCenter().getY()); assertEquals(Integer.MAX_VALUE, c.getDepth()); assertEquals(false, graphics.hasNext()); Iterator operations = a.getOperations(); assertEquals(true, operations.hasNext()); AnimationOperation ao = (AnimationOperation) operations.next(); assertEquals(true, ao instanceof HideOperation); HideOperation ho = (HideOperation) ao; Timing t = ho.getTiming(); assertEquals("Timing not set", false, t == null); assertEquals("Delay not correct", 13, t.getDelay()); assertEquals("Delay type not correct", Timing.FRAMES_TYPE, t.getDelayType()); assertEquals("Duration not correct", 20, t.getDuration()); assertEquals("Duration type not correct", Timing.MS_TYPE, t.getDurationType()); Iterator i = ho.getGraphicals(); assertEquals(true, i.hasNext()); Circle hc = (Circle) i.next(); assertEquals(true, c.equals(hc)); assertEquals(false, i.hasNext()); i = ho.getStructures(); assertEquals(true, i.hasNext()); Array arr = (Array) i.next(); assertEquals(true, arr.equals(x.getInitial().getStructures().next())); assertEquals(false, i.hasNext()); } public void testElementShow() throws ParserModuleException, IOException, SAXException { initializeXP(); xp.parse(new StringReader("" + ""+ ""+ "")); Animation a = commonTests(); Xaal x = (Xaal) XaalMainParserModule.getProperty(XaalMainParserModule.XAAL_ROOT_OBJECT); Iterator graphics = x.getInitial().getGraphicals(); assertEquals(true, graphics.hasNext()); Object o = graphics.next(); assertEquals(true, o instanceof GraphicalPrimitive); assertEquals(true, o instanceof Circle); GraphicalPrimitive gp = (GraphicalPrimitive) o; assertEquals("c0", gp.getId()); assertEquals(1.0, gp.getOpacity(), DELTA); assertEquals(false, gp.isHidden()); Circle c = (Circle) gp; assertEquals(5, c.getRadius().getLength()); assertEquals(5, c.getRadius().getX()); assertEquals(5, c.getRadius().getY()); assertEquals(0, c.getCenter().getX()); assertEquals(0, c.getCenter().getY()); assertEquals(Integer.MAX_VALUE, c.getDepth()); assertEquals(false, graphics.hasNext()); Iterator operations = a.getOperations(); assertEquals(true, operations.hasNext()); AnimationOperation ao = (AnimationOperation) operations.next(); assertEquals(true, ao instanceof ShowOperation); ShowOperation so = (ShowOperation) ao; Timing t = so.getTiming(); assertEquals("Timing not set", false, t == null); assertEquals("Delay not correct", 13, t.getDelay()); assertEquals("Delay type not correct", Timing.FRAMES_TYPE, t.getDelayType()); assertEquals("Duration not correct", 20, t.getDuration()); assertEquals("Duration type not correct", Timing.MS_TYPE, t.getDurationType()); Iterator i = so.getGraphicals(); assertEquals(true, i.hasNext()); Circle hc = (Circle) i.next(); assertEquals(true, c.equals(hc)); assertEquals(false, i.hasNext()); i = so.getStructures(); assertEquals(true, i.hasNext()); Array arr = (Array) i.next(); assertEquals(true, arr.equals(x.getInitial().getStructures().next())); assertEquals(false, i.hasNext()); } public void testElementChangeStyle() throws IOException, SAXException, ParserModuleException { initializeXP(); xp.parse(new StringReader("" + "")); Animation a = commonTests(); Xaal x = (Xaal) ParserModule.getProperty(XaalMainParserModule.XAAL_ROOT_OBJECT); assertEquals("Defs element is null", false, x.getDefs() == null); Circle c = (Circle) x.getInitial().getGraphicals().next(); Style s = c.getStyle(); assertEquals("style1", s.getId()); assertEquals(true, s.isForwardArrow()); assertEquals(false, s.isBackwardArrow()); assertEquals(ColorConverter.getPredefinedColor("green"), s.getColor()); assertEquals(ColorConverter.getPredefinedColor("yellow"), s.getFillColor()); ChangeStyleOperation cso = (ChangeStyleOperation) a.getOperations().next(); assertEquals(c, cso.getGraphicals().next()); Style s1 = cso.getStyle(); assertEquals(ColorConverter.getPredefinedColor("blue"), s1.getColor()); } public void testElementChangeProperty() throws IOException, SAXException, ParserModuleException { // TODO test for change-property in parser fail("not implemented"); } public void testElementMove() throws IOException, SAXException, ParserModuleException { // TODO test for change-property in parser fail("not implemented"); } }