Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/src/sugar/tutorius/tests/actiontests.py
blob: 7c508a8a46c9c20638789a8abc31c6124e71e013 (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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
# Copyright (C) 2009, Tutorius.org
# Copyright (C) 2009, Michael Janelle-Montcalm <michael.jmontcalm@gmail.com>
# Copyright (C) 2009, Vincent Vinet <vince.vinet@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
"""
Action tests

The behavior of the actions must be tested here.
"""

import unittest
import gtk

from sugar.tutorius.actions import Action, OnceWrapper, DisableWidgetAction
from sugar.tutorius.services import ObjectStore

class CountAction(Action):
    """
    This action counts how many times it's do and undo methods get called
    """
    def __init__(self):
        self.do_count = 0
        self.undo_count = 0

    def do(self):
        self.do_count += 1

    def undo(self):
        self.undo_count += 1


class BaseActionTests(unittest.TestCase):
    def test_do_unimplemented(self):
        act = Action()
        try:
            act.do()
            assert False, "do() should trigger a NotImplemented"
        except NotImplementedError:
            assert True, "do() should trigger a NotImplemented"

    def test_undo(self):
        act = Action()
        act.undo()
        assert True, "undo() should never fail on the base action"


class OnceWrapperTests(unittest.TestCase):
    def test_onceaction_toggle(self):
        """
        Validate that the OnceWrapper wrapper works properly using the
        CountAction
        """
        act = CountAction()
        wrap = OnceWrapper(act)

        assert act.do_count == 0, "do() should not have been called in __init__()"
        assert act.undo_count == 0, "undo() should not have been called in __init__()"

        wrap.undo()

        assert act.undo_count == 0, "undo() should not be called if do() has not been called"

        wrap.do()
        assert act.do_count == 1, "do() should have been called once"

        wrap.do()
        assert act.do_count == 1, "do() should have been called only once"

        wrap.undo()
        assert act.undo_count == 1, "undo() should have been called once"

        wrap.undo()
        assert act.undo_count == 1, "undo() should have been called only once"

class DisableWidgetActionTests(unittest.TestCase):
    def test_disable(self):
        btn = gtk.Button()
        ObjectStore().activity = btn
        btn.set_sensitive(True)
        
        assert btn.props.sensitive is True, "Callback should have been called"

        act = DisableWidgetAction("0")
        assert btn.props.sensitive is True, "Callback should have been called again"
        act.do()
        assert btn.props.sensitive is False, "Callback should not have been called again"
        act.undo()
        assert btn.props.sensitive is True, "Callback should have been called again"

class PropertyAction(Action):
    def __init__(self, na):
        self._a = na
    
    def set_a(self, na):
        self._a = na
        
    def get_a(self):
        return self._a
    
    a = property(fget=get_a, fset=set_a)
    
class PropsTest(unittest.TestCase):
    
    def test_get_properties(self):
        prop = PropertyAction(8)
        
        assert prop.get_properties() == ['a'], "Action does not contain property 'a'"
    
if __name__ == "__main__":
    unittest.main()