1 |
bh |
292 |
# Copyright (c) 2002 by Intevation GmbH |
2 |
|
|
# Authors: |
3 |
|
|
# Bernhard Herzog <[email protected]> |
4 |
|
|
# |
5 |
|
|
# This program is free software under the GPL (>=v2) |
6 |
|
|
# Read the file COPYING coming with Thuban for details. |
7 |
|
|
|
8 |
|
|
""" |
9 |
|
|
Test the Menu |
10 |
|
|
""" |
11 |
|
|
|
12 |
|
|
__version__ = "$Revision$" |
13 |
|
|
# $Source$ |
14 |
|
|
# $Id$ |
15 |
|
|
|
16 |
|
|
import unittest |
17 |
|
|
|
18 |
|
|
import support |
19 |
bh |
325 |
support.initthuban() |
20 |
bh |
292 |
|
21 |
|
|
from Thuban.UI.menu import Menu |
22 |
|
|
|
23 |
|
|
|
24 |
|
|
class MenuTest(unittest.TestCase): |
25 |
|
|
|
26 |
|
|
def compare_menus(self, menu1, menu2): |
27 |
|
|
eq = self.assertEquals |
28 |
|
|
ass = self.assert_ |
29 |
|
|
ass(isinstance(menu1, Menu)) |
30 |
|
|
ass(isinstance(menu2, Menu)) |
31 |
|
|
eq(menu1.name, menu2.name) |
32 |
|
|
self.compare_items(menu1.items, menu2.items) |
33 |
|
|
|
34 |
|
|
def compare_items(self, items1, items2): |
35 |
|
|
eq = self.assertEquals |
36 |
|
|
eq(len(items1), len(items2), "Item lists have different lengths") |
37 |
|
|
for i in range(len(items1)): |
38 |
|
|
i1 = items1[i] |
39 |
|
|
i2 = items2[i] |
40 |
|
|
if isinstance(i1, Menu): |
41 |
|
|
self.compare_menus(i1, i2) |
42 |
|
|
else: |
43 |
|
|
eq(i1, i2) |
44 |
|
|
|
45 |
|
|
def test(self): |
46 |
|
|
"""Menu operations (adding new items and submenus)""" |
47 |
|
|
eq = self.assertEquals |
48 |
|
|
|
49 |
|
|
# Build a typical main menu for an application. Here we have |
50 |
|
|
# only the file menu as sub-menu at first. |
51 |
|
|
# Make sure we copy the file_items list so that it won't be |
52 |
|
|
# modified |
53 |
|
|
file_items = ["new", None, "open", "save"] |
54 |
|
|
menu = Menu("<main>", "<main>", |
55 |
|
|
[Menu("file", "File", file_items[:])]) |
56 |
|
|
|
57 |
|
|
# fetch the file submenu |
58 |
|
|
filemenu = menu.find_menu("file") |
59 |
|
|
# check whether it's the right one |
60 |
|
|
self.compare_menus(filemenu, Menu("file", "File", file_items[:])) |
61 |
|
|
|
62 |
|
|
# append a separator and an item to the file menu |
63 |
|
|
filemenu.InsertSeparator() |
64 |
|
|
filemenu.InsertItem("exit") |
65 |
|
|
file_items.extend([None, "exit"]) |
66 |
|
|
self.compare_menus(filemenu, Menu("file", "File", file_items[:])) |
67 |
|
|
|
68 |
|
|
# append an item to the file menu |
69 |
|
|
filemenu.InsertItem("save_as", after="save") |
70 |
|
|
file_items.insert(4, "save_as") |
71 |
|
|
self.compare_menus(filemenu, Menu("file", "File", file_items[:])) |
72 |
|
|
|
73 |
|
|
# add a new sub-menu to the main menu |
74 |
|
|
help_items = ["about", "manual"] |
75 |
|
|
helpmenu = menu.InsertMenu("help", "Help") |
76 |
|
|
helpmenu.SetItems(help_items[:]) |
77 |
|
|
|
78 |
|
|
self.compare_menus(menu, Menu("<main>", "<main>", |
79 |
|
|
[Menu("file", "File", file_items[:]), |
80 |
|
|
Menu("help", "Help", help_items[:])])) |
81 |
|
|
|
82 |
|
|
self.compare_menus(helpmenu, Menu("help", "Help", help_items[:])) |
83 |
|
|
|
84 |
|
|
# add new sub-menu after the file menu but before the help menu |
85 |
jan |
1060 |
edit_items = ["cut", "copy", "paste"] |
86 |
bh |
292 |
editmenu = menu.InsertMenu("edit", "Edit", after="file") |
87 |
|
|
editmenu.SetItems(edit_items[:]) |
88 |
|
|
|
89 |
|
|
self.compare_menus(editmenu, Menu("edit", "Edit", edit_items[:])) |
90 |
|
|
self.compare_menus(menu, Menu("<main>", "<main>", |
91 |
|
|
[Menu("file", "File", file_items[:]), |
92 |
|
|
Menu("edit", "Edit", edit_items[:]), |
93 |
|
|
Menu("help", "Help", help_items[:])])) |
94 |
|
|
|
95 |
jan |
1060 |
# remove an item from the menu |
96 |
|
|
self.compare_menus(editmenu, Menu("edit", "Edit", edit_items[:])) |
97 |
|
|
editmenu.RemoveItem("copy") |
98 |
|
|
self.compare_menus(editmenu, Menu("edit", "Edit", ['cut', 'paste'])) |
99 |
jan |
2205 |
editmenu.InsertItem("copy", after="cut") # for convenience for |
100 |
|
|
# the following tests |
101 |
bh |
292 |
|
102 |
jan |
2205 |
# find-or-insert a menu |
103 |
|
|
self.compare_menus(menu, Menu("<main>", "<main>", |
104 |
|
|
[Menu("file", "File", file_items[:]), |
105 |
|
|
Menu("edit", "Edit", edit_items[:]), |
106 |
|
|
Menu("help", "Help", help_items[:])])) |
107 |
|
|
menu.FindOrInsertMenu("extensions", "Extensions") |
108 |
|
|
self.compare_menus(menu, Menu("<main>", "<main>", |
109 |
|
|
[Menu("file", "File", file_items[:]), |
110 |
|
|
Menu("edit", "Edit", edit_items[:]), |
111 |
|
|
Menu("help", "Help", help_items[:]), |
112 |
|
|
Menu("extensions", "Extensions", [])])) |
113 |
|
|
menu.FindOrInsertMenu("extensions", "Extensions") |
114 |
|
|
self.compare_menus(menu, Menu("<main>", "<main>", |
115 |
|
|
[Menu("file", "File", file_items[:]), |
116 |
|
|
Menu("edit", "Edit", edit_items[:]), |
117 |
|
|
Menu("help", "Help", help_items[:]), |
118 |
|
|
Menu("extensions", "Extensions", [])])) |
119 |
jan |
1060 |
|
120 |
jan |
2205 |
|
121 |
bh |
292 |
if __name__ == "__main__": |
122 |
|
|
unittest.main() |