Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/tests/linear_creatortests.py
blob: e3c30c1598c99bcb553c7bfb44fe2ac024762125 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# Copyright (C) 2009, Tutorius.org
# Greatly influenced by sugar/activity/namingalert.py
#
# 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

from sugar.tutorius.core import *
from sugar.tutorius.actions import *
from sugar.tutorius.filters import *
from sugar.tutorius.linear_creator import *
from sugar.tutorius.addons.triggereventfilter import *
from actiontests import CountAction
import unittest

class CreatorTests(unittest.TestCase):
    
    def test_simple_usage(self):
        creator = LinearCreator()
        fsm_name = "SimpleUsageTest"
        
        creator.set_name(fsm_name)
        
        # Generate an FSM using the steps
        creator.action(CountAction())
        creator.action(CountAction())
        
        creator.event(TriggerEventFilter())
        
        creator.action(CountAction())
        
        creator.event(TriggerEventFilter())
        
        fsm = creator.generate_fsm()
        
        # Make sure everything worked!
        assert fsm.name == fsm_name, "Name was not set properly"
        
        init_state = fsm.get_state_by_name("INIT")
        
        assert len(init_state.get_action_list()) == 2, "Creator did not insert all the actions"
        
        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][1]
        
        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][1] == "State 2"

        # Make sure we have the final state and that it's empty
        state2 = fsm.get_state_by_name("State2")
        
        assert len(state2.get_action_list()) == 0, "Creator inserted extra actions on wrong state"
        
        assert len(state2.get_event_filter_list()) == 0, "Creator assigner events to the final state"

        creator.action(CountAction())

        fsm = creator.generate_fsm()

        state2 = fsm.get_state_by_name("State2")

        assert len(state2.get_action_list()) == 1, "Creator did not add the action"
        
        assert len(state2.get_event_filter_list()) == 0, "Creator assigner events to the final state"
        
if __name__ == '__main__':
    unittest.main()