// 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 org.xml.sax.SAXException; import xaal.objects.Animation; import xaal.objects.Xaal; import xaal.objects.animation.AnimationOperation; import xaal.objects.animation.GroupOperation; import xaal.objects.animation.NarrativeOperation; import xaal.objects.animation.ParOperation; import xaal.objects.animation.PauseOperation; import xaal.objects.animation.SeqOperation; import xaal.objects.animation.SoundOperation; import xaal.objects.animation.SwapIdOperation; import xaal.objects.animation.graphical.MoveOperation; import xaal.objects.animation.timing.Timing; import xaal.objects.graphical.GraphicalPrimitive; import xaal.objects.structures.Structure; import xaal.parser.ParserModule; import xaal.parser.ParserModuleException; import xaal.parser.XmlParser; import xaal.parser.modules.XaalAnimParserModule; import xaal.parser.modules.XaalDSAnimParserModule; import xaal.parser.modules.XaalDSParserModule; import xaal.parser.modules.XaalGPAnimParserModule; import xaal.parser.modules.XaalGPParserModule; import xaal.parser.modules.XaalMainParserModule; import junit.framework.TestCase; public class XaalAnimParserModuleTest extends TestCase { private XmlParser xp; public XaalAnimParserModuleTest(String name) { super(name); } protected void setUp() throws Exception { super.setUp(); } protected void tearDown() throws Exception { super.tearDown(); } private void initializeXP() throws ParserModuleException { xp = new XmlParser(); xp.registerParserModule(XaalDSAnimParserModule.class.getName()); xp.registerParserModule(XaalDSParserModule.class.getName()); xp.registerParserModule(XaalGPParserModule.class.getName()); xp.registerParserModule(XaalMainParserModule.class.getName()); xp.registerParserModule(XaalAnimParserModule.class.getName()); xp.registerParserModule(XaalGPAnimParserModule.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 testStartElementPause() throws ParserModuleException, IOException, SAXException { initializeXP(); xp.parse(new StringReader("")); Animation a = commonTests(); Iterator i = a.getOperations(); assertEquals("Not enough operations created", true, i.hasNext()); Object o = i.next(); assertEquals("Operation not a PauseOperation", true, o instanceof PauseOperation); assertEquals("Id not set correctly", "p1", ((AnimationOperation) o).getId()); assertEquals("Not enough operations created", true, i.hasNext()); o = i.next(); assertEquals("Operation not a PauseOperation", true, o instanceof PauseOperation); assertEquals("Id not set correctly", "p2", ((AnimationOperation) o).getId()); assertEquals("Too many operations created", false, i.hasNext()); } public void testStartElementSound() throws ParserModuleException, IOException, SAXException { initializeXP(); String src = "http://www.test.org/test.mp3"; xp.parse(new StringReader("" + "narration" + "")); Animation a = commonTests(); Iterator i = a.getOperations(); assertEquals("Not enough operations created", true, i.hasNext()); Object o = i.next(); assertEquals("Operation not a SoundOperation", true, o instanceof SoundOperation); assertEquals("Id not set correctly", "s1", ((AnimationOperation) o).getId()); assertEquals("Too many operations created", false, i.hasNext()); SoundOperation so = (SoundOperation) o; assertEquals("RepeatCount not set correctly", 2, so.getRepeatCount()); assertEquals("Src not set correctly", src, so.getSrc()); assertEquals("Narrative not set", "narration", so.getNarrative()); Timing t = so.getTiming(); assertEquals("Timing not set", false, t == null); assertEquals("Delay not correct", 3, t.getDelay()); assertEquals("Delay type not correct", Timing.S_TYPE, t.getDelayType()); } public void testStartElementSwapId() throws ParserModuleException, IOException, SAXException { initializeXP(); xp.parse(new StringReader("" + "" + "" + "")); Animation a = commonTests(); Iterator i = a.getOperations(); assertEquals("Not enough operations created", true, i.hasNext()); Object o = i.next(); assertEquals("Operation not a SwapIdOperation", true, o instanceof SwapIdOperation); assertEquals("Id not set correctly", "s1", ((AnimationOperation) o).getId()); SwapIdOperation sio = (SwapIdOperation) o; assertEquals("a1", sio.getSwap()); assertEquals("a2", sio.getWith()); assertEquals("Not enough operations created", true, i.hasNext()); o = i.next(); assertEquals("Operation not a SwapIdOperation", true, o instanceof SwapIdOperation); assertEquals("Id not set correctly", "s2", ((AnimationOperation) o).getId()); sio = (SwapIdOperation) o; assertEquals("a1", sio.getSwap()); assertEquals("c0", sio.getWith()); // The third swap is invalid (a3 doesn't exist) and no operation should be created assertEquals("Too many operations created", false, i.hasNext()); } public void testStartElementSeq() throws ParserModuleException, IOException, SAXException { initializeXP(); xp.parse(new StringReader("" + "" + "" + "narration" + "narration2" + "")); Animation a = commonTests(); Iterator i = a.getOperations(); assertEquals("Not enough operations created", true, i.hasNext()); Object o = i.next(); assertEquals("Operation not a SeqOperation", true, o instanceof SeqOperation); assertEquals("Id not set correctly", "seq1", ((AnimationOperation) o).getId()); assertEquals("Narrative not correct", "narration", ((NarrativeOperation) o).getNarrative()); assertEquals("Too many operations created", false, i.hasNext()); i = ((SeqOperation)o).getOperations(); assertEquals("Not enough operations created", true, i.hasNext()); o = i.next(); assertEquals("Operation not a SwapIdOperation", true, o instanceof SwapIdOperation); assertEquals("Id not set correctly", "s1", ((AnimationOperation) o).getId()); SwapIdOperation sio = (SwapIdOperation) o; assertEquals("a1", sio.getSwap()); assertEquals("a2", sio.getWith()); assertEquals("Not enough operations created", true, i.hasNext()); o = i.next(); assertEquals("Operation not a SeqOperation", true, o instanceof SeqOperation); assertEquals("Id not set correctly", "seq2", ((AnimationOperation) o).getId()); assertEquals("Narrative not correct", "narration2", ((NarrativeOperation) o).getNarrative()); assertEquals("Too many operations created", false, i.hasNext()); i =((SeqOperation)o).getOperations(); assertEquals("Not enough operations created", true, i.hasNext()); o = i.next(); assertEquals("Operation not a SwapIdOperation", true, o instanceof SwapIdOperation); assertEquals("Id not set correctly", "s2", ((AnimationOperation) o).getId()); sio = (SwapIdOperation) o; assertEquals("a1", sio.getSwap()); assertEquals("c0", sio.getWith()); assertEquals("Too many operations created", false, i.hasNext()); } public void testStartElementPar() throws ParserModuleException, IOException, SAXException { initializeXP(); xp.parse(new StringReader("" + "" + "" + "narration" + "narration2" + "")); Animation a = commonTests(); Iterator i = a.getOperations(); assertEquals("Not enough operations created", true, i.hasNext()); Object o = i.next(); assertEquals("Operation not a ParOperation", true, o instanceof ParOperation); assertEquals("Id not set correctly", "par1", ((AnimationOperation) o).getId()); assertEquals("Narrative not correct", "narration", ((NarrativeOperation) o).getNarrative()); assertEquals("Too many operations created", false, i.hasNext()); i = ((ParOperation)o).getOperations(); assertEquals("Not enough operations created", true, i.hasNext()); o = i.next(); assertEquals("Operation not a SwapIdOperation", true, o instanceof SwapIdOperation); assertEquals("Id not set correctly", "s1", ((AnimationOperation) o).getId()); SwapIdOperation sio = (SwapIdOperation) o; assertEquals("a1", sio.getSwap()); assertEquals("a2", sio.getWith()); assertEquals("Not enough operations created", true, i.hasNext()); o = i.next(); assertEquals("Operation not a ParOperation", true, o instanceof ParOperation); assertEquals("Id not set correctly", "par2", ((AnimationOperation) o).getId()); assertEquals("Narrative not correct", "narration2", ((NarrativeOperation) o).getNarrative()); assertEquals("Too many operations created", false, i.hasNext()); i =((ParOperation)o).getOperations(); assertEquals("Not enough operations created", true, i.hasNext()); o = i.next(); assertEquals("Operation not a SwapIdOperation", true, o instanceof SwapIdOperation); assertEquals("Id not set correctly", "s2", ((AnimationOperation) o).getId()); sio = (SwapIdOperation) o; assertEquals("a1", sio.getSwap()); assertEquals("c0", sio.getWith()); assertEquals("Too many operations created", false, i.hasNext()); } public void testStartElementGroup() throws ParserModuleException, IOException, SAXException { initializeXP(); xp.parse(new StringReader("" + "" + "" + "" + ""+ ""+ "")); Animation a = commonTests(); Iterator i = a.getOperations(); assertEquals("Not enough operations created", true, i.hasNext()); AnimationOperation o = i.next(); assertEquals("Operation not a GroupOperation", true, o instanceof GroupOperation); assertEquals("Id not set correctly", "go", o.getId()); GroupOperation go = (GroupOperation) o; assertEquals("group1", go.getGroup().getName()); Iterator gps = go.getGraphicals(); assertEquals("No graphical primitives in group", true, gps.hasNext()); Iterator strs = go.getStructures(); assertEquals("No structures in group", true, strs.hasNext()); assertEquals("Not enough operations created", true, i.hasNext()); o = i.next(); assertEquals("Operation not a MoveOperation", true, o instanceof MoveOperation); assertEquals("Id not set correctly", "m0", o.getId()); MoveOperation mo = (MoveOperation) o; gps = mo.getGraphicals(); assertTrue("No graphical operations for group", gps.hasNext()); } }