Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/src/sugar/tutorius/tests
diff options
context:
space:
mode:
authorJean-Christophe Savard <savard.jean.christophe@gmail.com>2009-03-30 17:38:36 (GMT)
committer Jean-Christophe Savard <savard.jean.christophe@gmail.com>2009-04-16 19:09:23 (GMT)
commiteb03421c5dd132fb79ac12a436efefbfb0287544 (patch)
treec9c6e4bf9b73761bb32392064f67be8d612a889d /src/sugar/tutorius/tests
parent78de92cde03264725093868231bdb539feb4f56b (diff)
Core (bug 341760) : TutoSerializer, 2nd version (fonction save_tutorial
added) + Tests : added serializertests.py
Diffstat (limited to 'src/sugar/tutorius/tests')
-rw-r--r--src/sugar/tutorius/tests/serializertests.py121
1 files changed, 121 insertions, 0 deletions
diff --git a/src/sugar/tutorius/tests/serializertests.py b/src/sugar/tutorius/tests/serializertests.py
new file mode 100644
index 0000000..7a31602
--- /dev/null
+++ b/src/sugar/tutorius/tests/serializertests.py
@@ -0,0 +1,121 @@
+# Copyright (C) 2009, Tutorius.org
+# Copyright (C) 2009, Jean-Christophe Savard <savard.jean.christophe@gmail.com>
+#
+# 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 2 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, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+"""
+Serialization Tests
+
+This module contains all the tests that pertain to the usage of the Tutorius
+Serializer object. This means testing saving a tutorial dictionary to a .tml
+file, loading the list of tutorials for this activity and building chosen
+tutorial.
+"""
+
+import unittest
+
+import logging
+import linecache
+import os
+import cPickle as pickle
+
+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.tutoserialize import TutoSerializer
+
+
+# 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_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")
+
+
+if __name__ == "__main__":
+ unittest.main() \ No newline at end of file