Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormike <michael.jmontcalm@gmail.com>2009-10-21 06:26:09 (GMT)
committer mike <michael.jmontcalm@gmail.com>2009-10-21 06:26:09 (GMT)
commitf093aac859b9a92f6296b3bb70b87678fe4d4b42 (patch)
tree5f6a5d6a26755fc27ee482dd937bea714f8d4e8b
parentffcb6e82b7ba81021e72be6f4eee3bbfb08c1541 (diff)
Audit : Comitting draft of Workshop activity; only layout problems to correct for now
-rw-r--r--Workshop.activity/WorkshopModel.py12
-rw-r--r--addons/triggereventfilter.py4
-rw-r--r--tests/coretests.py51
-rw-r--r--tests/filterstests.py20
-rw-r--r--tests/linear_creatortests.py8
-rw-r--r--tutorius/core.py23
6 files changed, 57 insertions, 61 deletions
diff --git a/Workshop.activity/WorkshopModel.py b/Workshop.activity/WorkshopModel.py
index cc066ba..ebc5579 100644
--- a/Workshop.activity/WorkshopModel.py
+++ b/Workshop.activity/WorkshopModel.py
@@ -4,7 +4,7 @@ WorkshopModel
This module is the model of the Workshop Activity
"""
-#import sugar.tutorius.vault
+from sugar.tutorius.vault import *
class WorkshopModel():
def __init__(self,view):
@@ -25,8 +25,8 @@ class WorkshopModel():
## t6 = Tutorial({'name':'tuto 6',"description":"This is the description oh the last","rating":1})
## t7 = Tutorial({'name':'tuto 7',"description":"This is the description oh the last","rating":1})
## tutorial_list = [t1,t2,t3,t4,t5,t6,t7]
-
- vault_return = vault.query({},{},{})
+
+ vault_return = Vault.query()
tutorial_list = []
for tuto in vault_return:
tutorial_list.append(Tutorial(tuto))
@@ -95,15 +95,15 @@ class Tutorial():
if 'rating' in self.__original_dict:
self.__rating = self.__original_dict['rating']
else:
- self.__rating = None
+ self.__rating = 0
if 'publish_state' in self.__original_dict:
- self.__published_state = original_dict['publish_state']
+ self.__published_state = self.__original_dict['publish_state']
else:
self.__published_state = None
if 'guid' in self.__original_dict:
- self.__id = original_state['guid']
+ self.__id = self.__original_dict['guid']
else:
self.__id = None
diff --git a/addons/triggereventfilter.py b/addons/triggereventfilter.py
index 06c0995..acc0d0d 100644
--- a/addons/triggereventfilter.py
+++ b/addons/triggereventfilter.py
@@ -23,8 +23,8 @@ class TriggerEventFilter(EventFilter):
Used to fake events and see the effect on the FSM.
"""
- def __init__(self, next_state):
- EventFilter.__init__(self, next_state)
+ def __init__(self):
+ EventFilter.__init__(self)
self.toggle_on_callback = False
def install_handlers(self, callback, **kwargs):
diff --git a/tests/coretests.py b/tests/coretests.py
index 4f564c8..b2f68e5 100644
--- a/tests/coretests.py
+++ b/tests/coretests.py
@@ -130,9 +130,9 @@ class StateTest(unittest.TestCase):
Tests the fact that the event filters are correctly installed on setup
and uninstalled on teardown.
"""
- event_filter = addon.create('TriggerEventFilter', "second_state")
+ event_filter = addon.create('TriggerEventFilter')
- state = State("event_test", event_filter_list=[event_filter])
+ state = State("event_test", event_filter_list=[(event_filter, "next_state")])
state.set_tutorial(SimpleTutorial())
assert event_filter.toggle_on_callback == False, "Wrong init of event_filter"
@@ -198,17 +198,20 @@ class StateTest(unittest.TestCase):
def test_add_event_filter(self):
state = State("INIT")
- event1 = addon.create('TriggerEventFilter', "s")
- event2 = addon.create('TriggerEventFilter', "t")
- event3 = addon.create('TriggerEventFilter', "r")
+ event1 = addon.create('TriggerEventFilter')
+ # MJM : 2009-10-21 : Commenting the below as per new FSM standard, a state cannot
+ # have more than one event filter with the same properties (no identical
+ # properties containers)
+ #event2 = addon.create('TriggerEventFilter')
+ #event3 = addon.create('TriggerEventFilter')
# Insert the event filters
- assert state.add_event_filter(event1), "Could not add event filter 1"
- assert state.add_event_filter(event2), "Could not add event filter 2"
- assert state.add_event_filter(event3), "Could not add event filter 3"
+ assert state.add_event_filter(event1, 's'), "Could not add event filter 1"
+ #assert state.add_event_filter(event2, 't'), "Could not add event filter 2"
+ #assert state.add_event_filter(event3, 'r'), "Could not add event filter 3"
# Make sure we cannot insert an event twice
- assert state.add_event_filter(event1) == False, "Could add twice the event filter"
+ assert state.add_event_filter(event1, 's') == False, "Could add twice the event filter"
# Get the list of event filters
event_filters = state.get_event_filter_list()
@@ -243,19 +246,19 @@ class StateTest(unittest.TestCase):
act1 = addon.create("BubbleMessage", message="Hi", position=[132,450])
act2 = addon.create("BubbleMessage", message="Hi", position=[132,450])
- event1 = addon.create("GtkWidgetEventFilter", "nextState", "0.0.0.1.1.2.3.1", "clicked")
+ event1 = addon.create("GtkWidgetEventFilter", "0.0.0.1.1.2.3.1", "clicked")
act3 = addon.create("DialogMessage", message="Hello again.", position=[200, 400])
# Build the first state
st1.add_action(act1)
st1.add_action(act3)
- st1.add_event_filter(event1)
+ st1.add_event_filter(event1, 'nextState')
# Build the second state
st2.add_action(act2)
st2.add_action(act3)
- st2.add_event_filter(event1)
+ st2.add_event_filter(event1, 'nextState')
# Make sure that they are identical for now
assert st1 == st2, "States should be considered as identical"
@@ -282,14 +285,14 @@ class StateTest(unittest.TestCase):
assert not (st1 == st3), "States having a different number of actions should be different"
st4 = copy.deepcopy(st1)
- st4.add_event_filter(addon.create("GtkWidgetEventFilter", "next_state", "0.0.1.1.2.2.3", "clicked"))
+ st4.add_event_filter(addon.create("GtkWidgetEventFilter", "0.0.1.1.2.2.3", "clicked"), "next_state")
assert not (st1 == st4), "States having a different number of events should be different"
st5 = copy.deepcopy(st1)
- st5._event_filters = []
+ st5.clear_event_filters()
- st5.add_event_filter(addon.create("GtkWidgetEventFilter", "other_state", "0.1.2.3.4.1.2", "pressed"))
+ st5.add_event_filter(addon.create("GtkWidgetEventFilter", "0.1.2.3.4.1.2", "pressed"), "other_state")
#import rpdb2; rpdb2.start_embedded_debugger('pass')
assert not (st1 == st5), "States having the same number of event filters" \
@@ -305,10 +308,10 @@ class FSMTest(unittest.TestCase):
act_init = TrueWhileActiveAction()
act_second = TrueWhileActiveAction()
- event_init = FakeEventFilter("SECOND")
+ event_init = FakeEventFilter()
content = {
- "INIT": State("INIT", action_list=[act_init],event_filter_list=[event_init]),
+ "INIT": State("INIT", action_list=[act_init],event_filter_list=[(event_init, "SECOND")]),
"SECOND": State("SECOND", action_list=[act_second])
}
@@ -399,9 +402,9 @@ class FSMTest(unittest.TestCase):
This test removes a state from the FSM. It also verifies that the links
from other states going into the removed state are gone.
"""
- st1 = State("INIT", event_filter_list=[addon.create('TriggerEventFilter', "second")])
- st2 = State("second", event_filter_list=[addon.create('TriggerEventFilter', "third")])
- st3 = State("third", event_filter_list=[addon.create('TriggerEventFilter', "second")])
+ st1 = State("INIT", event_filter_list=[(addon.create('TriggerEventFilter'), "second")])
+ st2 = State("second", event_filter_list=[(addon.create('TriggerEventFilter'), "third")])
+ st3 = State("third", event_filter_list=[(addon.create('TriggerEventFilter'), "second")])
fsm = FiniteStateMachine("StateRemovalTest")
@@ -582,13 +585,13 @@ class FSMExplorationTests(unittest.TestCase):
"""
st1 = State("INIT")
st1.add_action(CountAction())
- st1.add_event_filter(addon.create('TriggerEventFilter', "Second"))
- st1.add_event_filter(addon.create('TriggerEventFilter', "Third"))
+ st1.add_event_filter(addon.create('TriggerEventFilter'), "Second")
+ st1.add_event_filter(addon.create('TriggerEventFilter'), "Third")
st2 = State("Second")
st2.add_action(TrueWhileActiveAction())
- st2.add_event_filter(addon.create('TriggerEventFilter', "Third"))
- st2.add_event_filter(addon.create('TriggerEventFilter', "Fourth"))
+ st2.add_event_filter(addon.create('TriggerEventFilter'), "Third")
+ st2.add_event_filter(addon.create('TriggerEventFilter'), "Fourth")
st3 = State("Third")
st3.add_action(CountAction())
diff --git a/tests/filterstests.py b/tests/filterstests.py
index c45f924..ee6033b 100644
--- a/tests/filterstests.py
+++ b/tests/filterstests.py
@@ -32,20 +32,10 @@ from gtkutilstests import SignalCatcher
class BaseEventFilterTests(unittest.TestCase):
"""Test the behavior of the Base EventFilter class"""
- def test_properties(self):
- """Test EventFilter properties"""
- e = EventFilter("NEXTSTATE")
-
- assert e.next_state == "NEXTSTATE", "next_state should have value used in constructor"
-
- e.next_state = "NEWSTATE"
-
- assert e.next_state == "NEWSTATE", "next_state should have been changed by setter"
-
def test_callback(self):
"""Test the callback mechanism"""
- e = EventFilter("Next")
+ e = EventFilter()
s = SignalCatcher()
#Trigger the do_callback, shouldn't do anything
@@ -79,7 +69,7 @@ class TestTimerEvent(unittest.TestCase):
ctx = gobject.MainContext()
main = gobject.MainLoop(ctx)
- e = addon.create('TimerEvent', "Next", 2) # 2 seconds should be enough :s
+ e = addon.create('TimerEvent', 2) # 2 seconds should be enough :s
s = SignalCatcher()
e.install_handlers(s.callback)
@@ -122,7 +112,7 @@ class TestTimerEvent(unittest.TestCase):
ctx = gobject.MainContext()
main = gobject.MainLoop(ctx)
- e = addon.create('TimerEvent', "Next", 2) # 2 seconds should be enough :s
+ e = addon.create('TimerEvent', 2) # 2 seconds should be enough :s
s = SignalCatcher()
e.install_handlers(s.callback)
@@ -169,7 +159,7 @@ class TestGtkWidgetEventFilter(unittest.TestCase):
self.top.add(self.btn1)
def test_install(self):
- h = addon.create('GtkWidgetEventFilter', "Next","0","whatever")
+ h = addon.create('GtkWidgetEventFilter', "0","whatever")
try:
h.install_handlers(None)
@@ -178,7 +168,7 @@ class TestGtkWidgetEventFilter(unittest.TestCase):
assert True, "Install should have failed"
def test_button_clicks(self):
- h = addon.create('GtkWidgetEventFilter', "Next","0.0","clicked")
+ h = addon.create('GtkWidgetEventFilter', "0.0","clicked")
s = SignalCatcher()
h.install_handlers(s.callback, activity=self.top)
diff --git a/tests/linear_creatortests.py b/tests/linear_creatortests.py
index 999f4d5..8b13656 100644
--- a/tests/linear_creatortests.py
+++ b/tests/linear_creatortests.py
@@ -35,11 +35,11 @@ class CreatorTests(unittest.TestCase):
creator.action(CountAction())
creator.action(CountAction())
- creator.event(TriggerEventFilter("Not important"))
+ creator.event(TriggerEventFilter())
creator.action(CountAction())
- creator.event(TriggerEventFilter("Not good either..."))
+ creator.event(TriggerEventFilter())
fsm = creator.generate_fsm()
@@ -50,13 +50,13 @@ class CreatorTests(unittest.TestCase):
assert len(init_state.get_action_list()) == 2, "Creator did not insert all the actions"
- assert init_state.get_event_filter_list()[0].get_next_state() == "State 1" , "expected next state to be 'State 1' but got %s" % init_state.get_event_filter_list()[0].get_next_state()
+ assert init_state.get_event_filter_list()[0][1] == "State 1" , "expected next state to be 'State 1' but got %s" % init_state.get_event_filter_list()[0].get_next_state()
state1 = fsm.get_state_by_name("State 1")
assert len(state1.get_action_list()) == 1, "Creator did not insert all the actions"
- assert state1.get_event_filter_list()[0].get_next_state() == "State 2"
+ assert state1.get_event_filter_list()[0][1] == "State 2"
# Make sure we have the final state and that it's empty
state2 = fsm.get_state_by_name("State2")
diff --git a/tutorius/core.py b/tutorius/core.py
index 15a0c87..d08c136 100644
--- a/tutorius/core.py
+++ b/tutorius/core.py
@@ -271,7 +271,7 @@ class State(object):
if len(self._actions) != len(otherState._actions):
return False
- if len(self._event_filters) != len(otherState._event_filters):
+ if len(self._transitions) != len(otherState._transitions):
return False
for act in self._actions:
@@ -287,12 +287,14 @@ class State(object):
return False
# Do they have the same event filters?
- for event in self._event_filters:
+ for event in self._transitions:
+ state_name = self._transitions[event]
found = False
# For every event filter in the other state, try to match it with
# the current filter. We just need to find one with the right
# properties and values.
- for otherEvent in otherState._event_filters:
+ for otherEvent in otherState._transitions:
+ other_state_name = otherState._transitions[otherEvent]
if event == otherEvent:
found = True
break
@@ -515,10 +517,10 @@ class FiniteStateMachine(State):
#TODO : Move this code inside the State itself - we're breaking
# encap :P
- if st._transitions:
- for event, state in st._transitions.items():
- if state == state_name:
- del st._transitions[event]
+ for event in st._transitions.keys():
+ state = st._transitions[event]
+ if state == state_name:
+ del st._transitions[event]
# Remove the state from the dictionary
del self._states[state_name]
@@ -536,8 +538,9 @@ class FiniteStateMachine(State):
next_states = set()
- for event, state in state._transitions:
- next_states.add(state)
+ for event in state._transitions.keys():
+ state_name_in_dict = state._transitions[event]
+ next_states.add(state_name_in_dict)
return tuple(next_states)
@@ -559,7 +562,7 @@ class FiniteStateMachine(State):
states = []
# Walk through the list of states
for st in self._states.itervalues():
- for event, state in st._transitions:
+ for event, state in st._transitions.items():
if state == state_name:
states.append(state)
continue