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 125 126 127 128 129
|
#!/usr/bin/env python
import unittest
import gtk
from gtk import keysyms
from utils import refresh_gui
from kiwi.controllers import BaseController
from kiwi.ui.gadgets import set_foreground, get_foreground, \
set_background, get_background
from kiwi.ui.views import BaseView
class FooView(BaseView):
widgets = [ "vbox", "label" ]
def __init__(self):
self.build_ui()
BaseView.__init__(self, toplevel_name='win')
def build_ui(self):
self.win = gtk.Window()
vbox = gtk.VBox()
self.label = gtk.Label("Pick one noogie")
vbox.add(self.label)
self.button = gtk.Button(label="Noogie!")
vbox.add(self.button)
self.foo__button = gtk.Button(label="Boogie!")
vbox.add(self.foo__button)
self.win.add(vbox)
self.vbox = vbox
return vbox
class FooController(BaseController):
def __init__(self, view):
keyactions = {
keysyms.A: self.on_button__clicked,
keysyms.a: self.on_button__clicked,
keysyms.B: self.on_foo__button__clicked,
keysyms.b: self.on_foo__button__clicked
}
BaseController.__init__(self, view, keyactions)
def on_button__clicked(self, *args):
self.bar = Bar()
def on_foo__button__clicked(self, *args):
# This is subclassed
self.view.label.set_text("Good click!")
class Bar(BaseView, BaseController):
def __init__(self):
self.win = gtk.Window()
self.label = gtk.Label("foobar!")
self.win.add(self.label)
BaseView.__init__(self, toplevel=self.win)
BaseController.__init__(self, view=self)
set_foreground(self.label, "#CC99FF")
set_background(self.win, "#001100")
# these classes are bad and should trigger exceptions
class NoWinFoo(BaseView, BaseController):
def __init__(self):
self.win = 0
BaseView.__init__(self)
BaseController.__init__(self, view=self)
class NotWidgetFoo(FooView, BaseController):
def __init__(self):
self.vbox = self.build_ui()
# It's dumb, and it breaks
self.noogie = NotWidgetFoo
FooView.__init__(self)
BaseController.__init__(self, view=self)
def on_noogie__haxored(self, *args):
print "I AM NOT A NUMBER I AM A FREE MAN"
class BaseViewTest(unittest.TestCase):
def setUp(self):
self.view = FooView()
self.foo = FooController(self.view)
refresh_gui()
def tearDown(self):
self.view.win.destroy()
def testFooButton(self):
self.foo.view.foo__button.clicked()
refresh_gui()
self.assertEqual(self.foo.view.label.get_text(),
"Good click!")
def testSubView(self):
self.foo.view.button.clicked()
refresh_gui()
self.assertEqual(self.foo.bar, self.foo.bar.view)
self.assertEqual(self.foo.bar.toplevel, self.foo.bar.win)
# setting None as transient window should be an error
self.assertRaises(TypeError, self.foo.bar.set_transient_for, None)
def testColors(self):
self.foo.view.button.clicked()
refresh_gui()
win = self.foo.bar.win
win.realize()
color = get_background(win)
self.assertEqual(color, "#001100")
label = self.foo.bar.label
label.realize()
color = get_foreground(label)
self.assertEqual(color, "#CC99FF")
class BrokenViewsTest(unittest.TestCase):
def testNoWindow(self):
# A View requires an instance variable called toplevel that
# specifies the toplevel widget in it
self.assertRaises(TypeError, NoWinFoo)
def testNotAWidget(self):
# noogie (__main__.NotWidgetFoo) is not a widget and
# can't be connected to
self.assertRaises(AttributeError, NotWidgetFoo)
if __name__ == '__main__':
unittest.main()
|