Implement ActionList::Entry#clear.
[kaya.git] / test / test_gui_builder.rb
blobf96b83473c79bd59a7b7adc8ae23f4a0a56c8885
1 # Copyright (c) 2009 Paolo Capriotti <p.capriotti@gmail.com>
2
3 # This program is free software; you can redistribute it and/or modify
4 # it under the terms of the GNU General Public License as published by
5 # the Free Software Foundation; either version 2 of the License, or
6 # (at your option) any later version.
8 require 'test/unit'
9 require 'toolkits/kde'
10 require 'rexml/document'
12 class TestGuiBuilder < Test::Unit::TestCase
13   def test_empty_gui
14     xml = REXML::Document.new(KDE::gui(:gui_test))
15     assert_equal "<!DOCTYPE kpartgui SYSTEM \"kpartgui.dtd\">", xml.doctype.to_s
16     assert_equal "gui", xml.root.name
17     assert_equal "2", xml.root.attributes["version"]
18     assert_equal "gui_test", xml.root.attributes["name"]
19   end
20   
21   def test_menu_bar
22     gui = KDE::gui(:gui_test) do |g|
23       g.menu_bar
24     end
25     xml = REXML::Document.new(gui)
26     
27     assert_equal "gui", xml.root.name
28     assert xml.root.elements["MenuBar"]
29   end
30   
31   def test_empty_menus
32     gui = KDE::gui(:gui_test) do |g|
33       g.menu_bar do |mb|
34         mb.menu(:file)
35       end
36     end
37     xml = REXML::Document.new(gui)
38     
39     assert xml.elements["gui/MenuBar/Menu"]
40     assert_equal "file", xml.elements["gui/MenuBar/Menu"].attributes["name"]
41   end
42   
43   def test_menu_with_actions
44     gui = KDE::gui(:gui_test) do |g|
45       g.menu_bar do |mb|
46         mb.menu(:file) do |m|
47           m.action :open
48           m.action :save
49           m.action :exit
50         end
51         mb.menu(:edit, :text => "Edit") do |m|
52           m.action :cut
53           m.action :copy
54           m.action :paste
55         end
56       end
57     end
58     xml = REXML::Document.new(gui)
59     
60     file_menu = xml.elements["gui/MenuBar/Menu[1]"]
61     assert file_menu
62     assert_equal "file", file_menu.attributes["name"]
63     assert_equal ["open", "save", "exit"], 
64                  file_menu.to_enum(:each_element, "Action").
65                    map{|x| x.attributes["name"] }
66     
67     edit_menu = xml.elements["gui/MenuBar/Menu[2]"]
68     assert edit_menu
69     assert_equal "Edit", edit_menu.elements["text"].text
70     assert_equal "edit", edit_menu.attributes["name"]
71     assert_equal ["cut", "copy", "paste"], 
72                  edit_menu.to_enum(:each_element, "Action").
73                    map{|x| x.attributes["name"] }
74   end
75   
76   def test_menu_with_separators
77     gui = KDE::gui(:gui_test) do |g|
78       g.menu_bar do |mb|
79         mb.menu(:file) do |m|
80           m.action :open
81           m.action :save
82           m.separator
83           m.action :exit
84         end
85       end
86     end
87     xml = REXML::Document.new(gui)
88     
89     menu = xml.elements["gui/MenuBar/Menu"]
90     assert menu
91     assert_equal "file", menu.attributes["name"]
92     assert menu.elements["Separator"]
93   end
94   
95   def test_toolbar
96     gui = KDE::gui(:gui_test) do |g|
97       g.tool_bar(:file, :text => "File") do |tb|
98         tb.action :open
99         tb.action :save
100         tb.action :exit
101       end
102     end
103     xml = REXML::Document.new(gui)
104     
105     tool_bar = xml.elements["gui/ToolBar"]
106     assert tool_bar
107     assert_equal "file", tool_bar.attributes["name"]
108     assert_equal "File", tool_bar.elements["text"].text
109     assert_equal ["open", "save", "exit"], 
110                  tool_bar.to_enum(:each_element, "Action").
111                    map{|x| x.attributes["name"] }
112   end
113   
114   def test_action_list
115     gui = KDE::gui(:gui_test) do |g|
116       g.menu_bar do |mb|
117         mb.menu("file") do |m|
118           m.action :open
119           m.action :save
120           m.separator
121           m.action_list :recent_files
122           m.action :exit
123         end
124       end
125     end
126     xml = REXML::Document.new(gui)
127     
128     menu = xml.elements["gui/MenuBar/Menu"]
129     assert menu
130     assert "recent_files", menu.elements["ActionList"].attributes["name"]
131   end
132   
133   def test_group
134     gui = KDE::gui(:gui_test) do |g|
135       g.menu_bar do |mb|
136         mb.menu("file") do |m|
137           m.action :open
138           m.action :save
139           m.separator
140           m.group :extension
141           m.action :exit
142         end
143       end
144     end
145     xml = REXML::Document.new(gui)
146     
147     menu = xml.elements["gui/MenuBar/Menu"]
148     assert menu
149     assert "extension", menu.elements["DefineGroup"].attributes["name"]    
150   end
151   
152   def test_group_actions
153     gui = KDE::gui(:gui_test) do |g|
154       g.menu_bar do |mb|
155         mb.menu(:file) do |m|
156           m.action :open
157           m.group(:extension) do |g|
158             g.action :connect
159             g.action :disconnect
160           end
161           m.action :quit
162         end
163       end
164     end
165     xml = REXML::Document.new(gui)
166     
167     menu = xml.elements["gui/MenuBar/Menu"]
168     assert menu
169     assert_nil menu.elements["DefineGroup"]
170     assert_equal "extension", menu.elements["Action[@name='connect']"].
171                               attributes["group"]
172   end