#!/usr/bin/python # -*- coding: utf-8 -*- # libavg - Media Playback Engine. # Copyright (C) 2003-2014 Ulrich von Zadow # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Current versions can be found at www.libavg.de # from libavg import avg, player from testcase import * class DynamicsTestCase(AVGTestCase): def __init__(self, testFuncName): AVGTestCase.__init__(self, testFuncName) def __runDynamicsTest(self, createFunc, testName, isVideo = False, warnOnImageDiff = False): def createNode1(useXml): def setNodeID(): node.id = "bork" node = createFunc(useXml) node.id = "nodeid1" node.x = 10 node.y = 20 self.root.appendChild(node) self.assertException(setNodeID) self.assertEqual(self.root.indexOf(player.getElementByID("nodeid1")), 0) self.assertException(lambda: self.root.indexOf(self.root)) def createNode2(useXml): node = createFunc(useXml) node.id = "nodeid2" oldNode = player.getElementByID("nodeid1") self.root.insertChildBefore(node, oldNode) def reorderNode(): self.root.reorderChild(0, 1) node = player.getElementByID("nodeid1") self.root.reorderChild(node, 0) def removeNodes(): self.node = player.getElementByID("nodeid1") self.root.removeChild(self.root.indexOf(self.node)) node2 = player.getElementByID("nodeid2") self.root.removeChild(node2) self.assertEqual(player.getElementByID("nodeid1"), None) def reAddNode(): self.root.appendChild(self.node) if isVideo: self.node.play() self.node = None def killNode(): self.node = player.getElementByID("nodeid1") self.node.unlink(True) gone = player.getElementByID("nodeid1") self.assertEqual(gone, None) def removeAgain(): node = player.getElementByID("nodeid1") node.unlink() gone = player.getElementByID("nodeid1") self.assertEqual(gone, None) def runTest(useXml): self.root = self.loadEmptyScene() createNode1(useXml) player.stop() self.root = self.loadEmptyScene() player.setFakeFPS(25) self.start(warnOnImageDiff, (lambda: createNode1(useXml), lambda: self.compareImage(testName+"1"), lambda: createNode2(useXml), lambda: self.compareImage(testName+"2"), reorderNode, lambda: self.compareImage(testName+"3"), removeNodes, lambda: self.compareImage(testName+"4"), reAddNode, lambda: self.compareImage(testName+"5"), killNode, reAddNode, removeAgain )) runTest(True) runTest(False) def testImgDynamics(self): def createImg(useXml): if useXml: node = player.createNode("") else: node = player.createNode("image", {"href":"rgb24-64x64.png"}) return node self.__runDynamicsTest(createImg, "testImgDynamics") def testVideoDynamics(self): def createVideo(useXml): if useXml: node = player.createNode( "