1 |
# 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 |
support.initthuban() |
20 |
|
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 |
edit_items = ["cut", "copy", "paste"] |
86 |
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 |
# 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 |
editmenu.InsertItem("copy", after="cut") # for convenience for |
100 |
# the following tests |
101 |
|
102 |
# 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 |
|
120 |
|
121 |
if __name__ == "__main__": |
122 |
unittest.main() |