From fb49b482f5bd478bada50cd1ab25a876806eff31 Mon Sep 17 00:00:00 2001 From: mike Date: Tue, 05 May 2009 05:30:41 +0000 Subject: [LP 352437] Core : Minor refactoring on XMLSerializer, added tests --- (limited to 'src/sugar/tutorius/tests') diff --git a/src/sugar/tutorius/tests/serializertests.py b/src/sugar/tutorius/tests/serializertests.py index 2a743e1..bc29601 100644 --- a/src/sugar/tutorius/tests/serializertests.py +++ b/src/sugar/tutorius/tests/serializertests.py @@ -32,10 +32,10 @@ import shutil from sugar.tutorius import gtkutils, overlayer from sugar.tutorius.core import Tutorial, State, FiniteStateMachine -from sugar.tutorius.actions import DialogMessage, OnceWrapper, BubbleMessage -from sugar.tutorius.filters import GtkWidgetEventFilter, TimerEvent -from sugar.tutorius.bundler import * - +from sugar.tutorius.actions import * +from sugar.tutorius.filters import * +from sugar.tutorius.bundler import XMLSerializer, Serializer +import sugar from uuid import * import rpdb2 @@ -56,7 +56,7 @@ class SerializerInterfaceTest(unittest.TestCase): ser = Serializer() try: - ser.load_fsm(str(uuid.uuid1)) + ser.load_fsm(str(uuid.uuid1())) assert False, "load_fsm() should throw an unimplemented error" except: pass @@ -66,6 +66,12 @@ class XMLSerializerTest(unittest.TestCase): Tests the transformation of XML to FSM, then back. """ def setUp(self): + # Make the serializer believe the test is in a activity path + self.testpath = "/tmp/testdata/" + os.environ["SUGAR_BUNDLE_PATH"] = self.testpath + os.environ["SUGAR_PREFIX"] = self.testpath +## os.mkdir(sugar.tutorius.bundler._get_store_root()) + # Create the sample FSM self.fsm = FiniteStateMachine("testingMachine") @@ -76,6 +82,7 @@ class XMLSerializerTest(unittest.TestCase): st1 = State("INIT") st1.add_action(act1) + st1.add_event_filter(ev1) st2 = State("Second") @@ -86,33 +93,34 @@ class XMLSerializerTest(unittest.TestCase): self.uuid = uuid1() + # Flag to set to True if the output can be deleted after execution of + # the test + self.remove = True + + def tearDown(self): + """ + Removes the created files, if need be. + """ + if self.remove == True: + os.remove(os.path.join(sugar.tutorius.bundler._get_store_root(), str(self.uuid)) + "/fsm.xml") + if os.path.isdir(self.testpath): + shutil.rmtree(self.testpath) - def test_save(self, remove=True): + def test_save(self): """ Writes an FSM to disk, then compares the file to the expected results. "Remove" boolean argument specify if the test data must be removed or not - """ - # Make the serializer believe the test is in a activity path - testpath = "/tmp/testdata/" - os.environ["SUGAR_BUNDLE_PATH"] = testpath - os.environ["SUGAR_PREFIX"] = testpath -## os.mkdir(sugar.tutorius.bundler._get_store_root()) + """ xml_ser = XMLSerializer() os.makedirs(os.path.join(sugar.tutorius.bundler._get_store_root(), str(self.uuid))) #rpdb2.start_embedded_debugger('flakyPass') xml_ser.save_fsm(self.fsm, "fsm.xml", os.path.join(sugar.tutorius.bundler._get_store_root(), str(self.uuid))) - - #Remove test file and path - if remove == True: - os.remove(os.path.join(sugar.tutorius.bundler._get_store_root(), str(self.uuid)) + "/fsm.xml") - if os.path.isdir(testpath): - shutil.rmtree(testpath) - + def test_save_and_load(self): """ Load up the written FSM and compare it with the object representation. """ - self.test_save(False) + self.test_save() testpath = "/tmp/testdata/" #rpdb2.start_embedded_debugger('flakyPass') xml_ser = XMLSerializer() @@ -130,90 +138,59 @@ class XMLSerializerTest(unittest.TestCase): self.fsm._states.get("INIT").get_action_list()[0].message.value, \ 'FSM underlying State underlying Action differ from original to reformed one' assert len(loaded_fsm.get_action_list()) == 0, "FSM should not have any actions on itself" - - os.remove(os.path.join(sugar.tutorius.bundler._get_store_root(), str(self.uuid)) + "/fsm.xml") - if os.path.isdir(testpath): - shutil.rmtree(testpath) - - -# Helper classes to help testing -class SerializerTest(unittest.TestCase): - """ - This class has to test the Serializer methods as well as the expected - functionality. - """ + def test_all_actions(self): + """ + Inserts all the known action types in a FSM, then attempt to load it. + """ + st = State("INIT") - # Voiding test as it is meant to be used with the pickle serializer, - # that was deprecated -## def test_pickle_integrity(self): -## """ -## Validates content is uncorrupted trough a pickle file save/load. -## """ -## -## # Sample valid FSM dict -## sampleDict = { -## "INIT":State("INIT", -## action_list=[ -## OnceWrapper(BubbleMessage(message="Welcome to the text editor tutorial!\n\n Click on the canvas and type a letter.", pos=[100,100], tailpos=[-10,-20])), -## ], -## event_filter_list=[ -## GtkWidgetEventFilter("TEXT","0.0.0.1.0.0.0","key-press-event"), -## TimerEvent("LOST",15), -## ], -## ), -## "LOST":State("LOST", -## action_list=[BubbleMessage("Click in the canvas and type on your keyboard", [400, 400]),], -## event_filter_list=[ -## GtkWidgetEventFilter("TEXT","0.0.0.1.0.0.0","key-press-event"), -## TimerEvent("INIT",5), -## ], -## ), -## "TEXT":State("TEXT", -## action_list=[OnceWrapper(BubbleMessage(" You can type more letters if you want!\n\n" + -## "To proceed to the next step, select your text.\n\n Click and drag over the text!", [200,150])),], -## event_filter_list=[ -## GtkWidgetEventFilter("SELECTED","0.0.0.1.0.0","text-selected"), -## ], -## ), -## } -## -## testpath = "/tmp/testdata/" -## -## # Create testdata/ folder if no exists -## if not os.path.exists(testpath): -## os.mkdir(testpath) -## -## serialize = TutoSerializer() -## -## # Make the class believe the test is in a activity path -## os.environ["SUGAR_ACTIVITY_ROOT"] = testpath -## -## fsm = FiniteStateMachine("Test", state_dict=sampleDict) -## -## serialize.save_tutorial("Test", "Test", fsm, "serializeTest") -## -## fileDict = serialize.load_tuto_list() -## -## for filekey, tutorial in fileDict.items(): -## if filekey == "Test": -## reformedTuto = serialize.build_tutorial(filekey) -## -## reformedfsm = reformedTuto.get("Test").state_machine -## -## #Tests -## assert reformedfsm._states.get("INIT").name == fsm._states.get("INIT").name, \ -## 'FSM underlying dictionary differ from original to pickled/reformed one' -## assert reformedfsm._states.get("LOST").name == fsm._states.get("LOST").name, \ -## 'FSM underlying dictionary differ from original to pickled/reformed one' -## assert reformedfsm._states.get("TEXT").name == fsm._states.get("TEXT").name, \ -## 'FSM underlying dictionary differ from original to pickled/reformed one' -## -## -## os.remove(testpath + "serializeTest.tml") -## os.rmdir(testpath) -## os.rmdir("/tmp") - - + act1 = BubbleMessage("Hi!", pos=[10,120], tailpos=[-12,30]) + act2 = DialogMessage("Hello again.", pos=[120,10]) + act3 = WidgetIdentifyAction() + act4 = DisableWidgetAction("0.0.0.1.0.0.0") + act5 = TypeTextAction("0.0.0.1.1.1.0.0", "New text") + act6 = ClickAction("0.0.1.0.1.1") + act7 = OnceWrapper(act1) + act8 = ChainAction([act1, act2, act3, act4]) + actions = [act1, act2, act3, act4, act5, act6, act7, act8] + + for action in actions: + st.add_action(action) + + self.fsm.remove_state("Second") + self.fsm.remove_state("INIT") + self.fsm.add_state(st) + + xml_ser = XMLSerializer() + + self.test_save() + + reloaded_fsm = xml_ser.load_fsm(str(self.uuid)) + + def test_all_filters(self): + """ + Inserts all the known action types in a FSM, then attempt to load it. + """ + st = State("INIT") + + ev1 = TimerEvent("Second", 1000) + ev2 = GtkWidgetEventFilter("Second", "0.0.1.1.0.0.1", "clicked") + ev3 = GtkWidgetTypeFilter("Second", "0.0.1.1.1.2.3", text="Typed stuff") + ev4 = GtkWidgetTypeFilter("Second", "0.0.1.1.1.2.3", strokes="acbd") + filters = [ev1, ev2, ev3, ev4] + + for filter in filters: + st.add_event_filter(filter) + + self.fsm.remove_state("INIT") + self.fsm.add_state(st) + + xml_ser = XMLSerializer() + + self.test_save() + + reloaded_fsm = xml_ser.load_fsm(str(self.uuid)) + if __name__ == "__main__": unittest.main() -- cgit v0.9.1