mohawk 0.1.4 → 0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitmodules +3 -3
- data/Changelog +6 -1
- data/Rakefile +2 -3
- data/cucumber.yml +1 -1
- data/features/combo_box.feature +8 -0
- data/features/menu.feature +8 -0
- data/features/step_definitions/button_steps.rb +1 -1
- data/features/step_definitions/combo_box_steps.rb +13 -1
- data/features/step_definitions/control_steps.rb +1 -1
- data/features/step_definitions/menu_steps.rb +7 -2
- data/features/support/WindowsForms.exe +0 -0
- data/features/support/screens/main_screen.rb +3 -0
- data/features/table.feature +7 -7
- data/features/text.feature +4 -0
- data/lib/mohawk/accessors.rb +3 -0
- data/lib/mohawk/adapters/uia/button.rb +14 -0
- data/lib/mohawk/adapters/uia/checkbox.rb +22 -0
- data/lib/mohawk/adapters/uia/control.rb +83 -0
- data/lib/mohawk/adapters/uia/element_locator.rb +19 -0
- data/lib/mohawk/adapters/uia/menu_item.rb +48 -0
- data/lib/mohawk/adapters/uia/radio.rb +22 -0
- data/lib/mohawk/adapters/uia/select_list.rb +53 -0
- data/lib/mohawk/adapters/uia/spinner.rb +30 -0
- data/lib/mohawk/adapters/uia/tab_control.rb +26 -0
- data/lib/mohawk/adapters/uia/table.rb +62 -0
- data/lib/mohawk/adapters/uia/table_row.rb +73 -0
- data/lib/mohawk/adapters/uia/text_box.rb +47 -0
- data/lib/mohawk/adapters/uia/tree_view.rb +22 -0
- data/lib/mohawk/adapters/uia/value_control.rb +20 -0
- data/lib/mohawk/adapters/uia/window.rb +64 -0
- data/lib/mohawk/adapters/uia_adapter.rb +36 -50
- data/lib/mohawk/version.rb +1 -1
- data/lib/mohawk/waiter.rb +18 -0
- data/lib/mohawk/win_32.rb +12 -0
- data/lib/mohawk.rb +26 -14
- data/mohawk.gemspec +2 -2
- data/spec/lib/mohawk/adapters/uia/control_spec.rb +46 -0
- data/spec/lib/mohawk/adapters/uia/table_row_spec.rb +36 -0
- data/spec/lib/mohawk/waiter_spec.rb +39 -0
- data/spec/lib/mohawk_spec.rb +115 -92
- data/spec/lib/navigation_spec.rb +14 -20
- data/spec/spec_helper.rb +1 -1
- metadata +49 -67
- data/lib/mohawk/accessors/button.rb +0 -20
- data/lib/mohawk/accessors/checkbox.rb +0 -24
- data/lib/mohawk/accessors/combo.rb +0 -37
- data/lib/mohawk/accessors/control.rb +0 -24
- data/lib/mohawk/accessors/label.rb +0 -15
- data/lib/mohawk/accessors/link.rb +0 -9
- data/lib/mohawk/accessors/menu_item.rb +0 -21
- data/lib/mohawk/accessors/radio.rb +0 -19
- data/lib/mohawk/accessors/spinner.rb +0 -27
- data/lib/mohawk/accessors/table.rb +0 -69
- data/lib/mohawk/accessors/table_row.rb +0 -62
- data/lib/mohawk/accessors/tabs.rb +0 -30
- data/lib/mohawk/accessors/text.rb +0 -29
- data/lib/mohawk/accessors/tree_view.rb +0 -32
- data/spec/lib/mohawk/accessors/button_spec.rb +0 -45
- data/spec/lib/mohawk/accessors/checkbox_spec.rb +0 -46
- data/spec/lib/mohawk/accessors/combo_spec.rb +0 -119
- data/spec/lib/mohawk/accessors/control_spec.rb +0 -47
- data/spec/lib/mohawk/accessors/label_spec.rb +0 -29
- data/spec/lib/mohawk/accessors/link_spec.rb +0 -34
- data/spec/lib/mohawk/accessors/menu_spec.rb +0 -32
- data/spec/lib/mohawk/accessors/radio_spec.rb +0 -35
- data/spec/lib/mohawk/accessors/spinner_spec.rb +0 -43
- data/spec/lib/mohawk/accessors/table_row_spec.rb +0 -28
- data/spec/lib/mohawk/accessors/table_spec.rb +0 -262
- data/spec/lib/mohawk/accessors/tabs_spec.rb +0 -58
- data/spec/lib/mohawk/accessors/text_spec.rb +0 -51
- data/spec/lib/mohawk/accessors/tree_view_spec.rb +0 -98
- data/spec/lib/mohawk/adapters/uia_adapter_spec.rb +0 -55
- data/spec/table_stubber.rb +0 -55
@@ -1,43 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
class SpinnerScreen
|
4
|
-
include Mohawk
|
5
|
-
window(:id => 123)
|
6
|
-
|
7
|
-
spinner(:price_is_right, :id => 'barker')
|
8
|
-
end
|
9
|
-
|
10
|
-
describe Mohawk::Accessors::Spinner do
|
11
|
-
let(:window) { double('RAutomation Window') }
|
12
|
-
let(:spinner) { double('RAutomation Spinner') }
|
13
|
-
subject { SpinnerScreen.new }
|
14
|
-
|
15
|
-
before(:each) do
|
16
|
-
RAutomation::Window.stub(:new).and_return(window)
|
17
|
-
window.should_receive(:spinner).with(:id => 'barker').and_return(spinner)
|
18
|
-
end
|
19
|
-
|
20
|
-
it 'knows the value' do
|
21
|
-
spinner.should_receive(:value).and_return(11.0)
|
22
|
-
subject.price_is_right.should eq(11.0)
|
23
|
-
end
|
24
|
-
|
25
|
-
it 'can set the value' do
|
26
|
-
spinner.should_receive(:set).with(11.0)
|
27
|
-
subject.price_is_right = 11.0
|
28
|
-
end
|
29
|
-
|
30
|
-
it 'can be incremented' do
|
31
|
-
spinner.should_receive(:increment).and_return(11.0)
|
32
|
-
subject.increment_price_is_right.should eq(11.0)
|
33
|
-
end
|
34
|
-
|
35
|
-
it 'can be decremented' do
|
36
|
-
spinner.should_receive(:decrement).and_return(11.0)
|
37
|
-
subject.decrement_price_is_right.should eq(11.0)
|
38
|
-
end
|
39
|
-
|
40
|
-
it 'can get the view' do
|
41
|
-
subject.price_is_right_view.should be(spinner)
|
42
|
-
end
|
43
|
-
end
|
@@ -1,28 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Mohawk::Accessors::TableRow do
|
4
|
-
let(:table) { double('RAutomation Table') }
|
5
|
-
let(:adapter) { double('mohawk adapter') }
|
6
|
-
let(:mohawk_table) { Mohawk::Accessors::Table.new(adapter, value: 'whatever') }
|
7
|
-
let(:stubber) do
|
8
|
-
TableStubber.stub(table)
|
9
|
-
.with_headers('Name', 'Age')
|
10
|
-
.and_row('Levi', '33')
|
11
|
-
end
|
12
|
-
|
13
|
-
subject { Mohawk::Accessors::TableRow.new(mohawk_table, 0) }
|
14
|
-
|
15
|
-
before(:each) do
|
16
|
-
adapter.stub_chain(:window, :table).and_return(table)
|
17
|
-
end
|
18
|
-
|
19
|
-
it '#add_to_selection' do
|
20
|
-
stubber.rows[0].should_receive(:select)
|
21
|
-
subject.add_to_selection
|
22
|
-
end
|
23
|
-
|
24
|
-
it '#select' do
|
25
|
-
stubber.should_singly_select_row(0)
|
26
|
-
subject.select
|
27
|
-
end
|
28
|
-
end
|
@@ -1,262 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
class TableScreen
|
4
|
-
include Mohawk
|
5
|
-
window(:id => nil)
|
6
|
-
|
7
|
-
table(:top, :id => 'tableId')
|
8
|
-
|
9
|
-
# aliases
|
10
|
-
table(:my_default, :id => 'defaultAliasId')
|
11
|
-
listview(:my_listview, :id => 'listviewAliasId')
|
12
|
-
list_view(:my_list_view, :id => 'list_viewAliasId')
|
13
|
-
end
|
14
|
-
|
15
|
-
include RAutomation::Adapter::MsUia
|
16
|
-
|
17
|
-
describe Mohawk::Accessors::Table do
|
18
|
-
let(:screen) { TableScreen.new }
|
19
|
-
let(:window) { double('RAutomation Window') }
|
20
|
-
let(:table) { double('Table') }
|
21
|
-
|
22
|
-
before(:each) do
|
23
|
-
RAutomation::Window.stub(:new).and_return(window)
|
24
|
-
end
|
25
|
-
|
26
|
-
context 'working with table controls' do
|
27
|
-
before(:each) do
|
28
|
-
window.should_receive(:table).with(:id => 'tableId').and_return(table)
|
29
|
-
end
|
30
|
-
|
31
|
-
it 'can select a row by index' do
|
32
|
-
stubber = TableStubber.stub(table)
|
33
|
-
.with_headers('Name')
|
34
|
-
.and_row('First Person')
|
35
|
-
.and_row('Second Person')
|
36
|
-
|
37
|
-
stubber.should_singly_select_row 1
|
38
|
-
screen.top = 1
|
39
|
-
end
|
40
|
-
|
41
|
-
it 'can select a row by value' do
|
42
|
-
stubber = TableStubber.stub(table)
|
43
|
-
.with_headers('Name')
|
44
|
-
.and_row('John Elway')
|
45
|
-
|
46
|
-
stubber.should_singly_select_row 0
|
47
|
-
screen.top = 'John Elway'
|
48
|
-
end
|
49
|
-
|
50
|
-
it 'can clear a row by index' do
|
51
|
-
stubber = TableStubber.stub(table)
|
52
|
-
.with_headers('Name').and_row('Whomever')
|
53
|
-
|
54
|
-
stubber.rows[0].should_receive(:clear)
|
55
|
-
screen.clear_top(0)
|
56
|
-
end
|
57
|
-
|
58
|
-
it 'can clear a row by value' do
|
59
|
-
stubber = TableStubber.stub(table)
|
60
|
-
.with_headers('Name').and_row('John Elway')
|
61
|
-
|
62
|
-
stubber.rows[0].should_receive(:clear)
|
63
|
-
screen.clear_top('John Elway')
|
64
|
-
end
|
65
|
-
|
66
|
-
context 'finding rows by Hash' do
|
67
|
-
it 'can find a row by hash' do
|
68
|
-
TableStubber.stub(table)
|
69
|
-
.with_headers('Favorite Color', 'Favorite Number', 'Name')
|
70
|
-
.and_row('Blue', '7', 'Levi')
|
71
|
-
.and_row('Purple', '9', 'Larry')
|
72
|
-
|
73
|
-
found_row = screen.find_top :favorite_number => 9
|
74
|
-
found_row.favorite_color.should eq('Purple')
|
75
|
-
found_row.favorite_number.should eq('9')
|
76
|
-
found_row.name.should eq('Larry')
|
77
|
-
end
|
78
|
-
|
79
|
-
it 'matches all values' do
|
80
|
-
stubber = TableStubber.stub(table)
|
81
|
-
.with_headers('Column One', 'Column Two', 'Column Three')
|
82
|
-
.and_row('first', 'something', 'foo')
|
83
|
-
.and_row('second', 'another', 'bar')
|
84
|
-
|
85
|
-
screen.find_top(:column_one => 'second', :column_three => 'bar').row.should eq(stubber.rows[1])
|
86
|
-
end
|
87
|
-
|
88
|
-
it 'can handle non-string values' do
|
89
|
-
stubber = TableStubber.stub(table)
|
90
|
-
.with_headers('name', 'age')
|
91
|
-
.and_row('Levi', '33')
|
92
|
-
|
93
|
-
screen.find_top(:age => 33).row.should eq(stubber.rows.first)
|
94
|
-
end
|
95
|
-
|
96
|
-
it 'raises if no row is found' do
|
97
|
-
TableStubber.stub(table)
|
98
|
-
.with_headers('Column One', 'Column Two', 'Column Three')
|
99
|
-
.and_row('first', 'something', 'foo')
|
100
|
-
|
101
|
-
expect { screen.find_top :column_one => 'not found' }.to raise_error "A row with {:column_one=>\"not found\"} was not found"
|
102
|
-
end
|
103
|
-
end
|
104
|
-
|
105
|
-
context 'selecting a row by hash' do
|
106
|
-
it 'singly selects the row' do
|
107
|
-
stubber = TableStubber.stub(table)
|
108
|
-
.with_headers('name', 'age')
|
109
|
-
.and_row('Levi', '33')
|
110
|
-
.and_row('John', '54')
|
111
|
-
|
112
|
-
stubber.should_singly_select_row(1)
|
113
|
-
screen.select_top(:age => 54)
|
114
|
-
end
|
115
|
-
|
116
|
-
it 'returns the row that it selected' do
|
117
|
-
stubber = TableStubber.stub(table)
|
118
|
-
.with_headers('name', 'age')
|
119
|
-
.and_row('Levi', '33')
|
120
|
-
|
121
|
-
stubber.should_singly_select_row(0)
|
122
|
-
screen.select_top(:age => 33).name.should eq('Levi')
|
123
|
-
end
|
124
|
-
|
125
|
-
it 'uses the find_row semantics' do
|
126
|
-
stubber = TableStubber.stub(table)
|
127
|
-
.with_headers('name', 'age')
|
128
|
-
.and_row('Levi', '33')
|
129
|
-
|
130
|
-
Mohawk::Accessors::Table.any_instance.should_receive(:find_row_with).with(:age => 33).and_call_original
|
131
|
-
|
132
|
-
stubber.should_singly_select_row(0)
|
133
|
-
screen.select_top :age => 33
|
134
|
-
end
|
135
|
-
end
|
136
|
-
|
137
|
-
context 'clearing a row by hash' do
|
138
|
-
it 'returns the row that it cleared' do
|
139
|
-
stubber = TableStubber.stub(table)
|
140
|
-
.with_headers('name', 'age')
|
141
|
-
.and_row('Levi', '33')
|
142
|
-
|
143
|
-
stubber.rows[0].should_receive(:clear)
|
144
|
-
screen.clear_top(:age => 33).name.should eq('Levi')
|
145
|
-
end
|
146
|
-
|
147
|
-
it 'uses the find_row semantics' do
|
148
|
-
stubber = TableStubber.stub(table)
|
149
|
-
.with_headers('name', 'age')
|
150
|
-
.and_row('Levi', '33')
|
151
|
-
|
152
|
-
Mohawk::Accessors::Table.any_instance.should_receive(:find_row_with).with(:age => 33).and_call_original
|
153
|
-
|
154
|
-
stubber.rows[0].should_receive(:clear)
|
155
|
-
screen.clear_top :age => 33
|
156
|
-
end
|
157
|
-
end
|
158
|
-
|
159
|
-
context 'adding a row to the selection' do
|
160
|
-
let(:stubber) do
|
161
|
-
TableStubber.stub(table)
|
162
|
-
.with_headers('name')
|
163
|
-
.and_row('Levi')
|
164
|
-
.and_row('John')
|
165
|
-
end
|
166
|
-
|
167
|
-
it 'returns the row that is added' do
|
168
|
-
stubber.rows[1].should_receive(:select)
|
169
|
-
screen.add_top(name: 'John').name.should eq('John')
|
170
|
-
end
|
171
|
-
|
172
|
-
it 'uses the find_row semantics' do
|
173
|
-
Mohawk::Accessors::Table.any_instance.should_receive(:find_row_with).with(name: 'Levi').and_call_original
|
174
|
-
|
175
|
-
stubber.rows[0].should_receive(:select)
|
176
|
-
screen.add_top name: 'Levi'
|
177
|
-
end
|
178
|
-
end
|
179
|
-
|
180
|
-
it 'has rows' do
|
181
|
-
TableStubber.stub(table)
|
182
|
-
.with_headers('Column')
|
183
|
-
.and_row('First Row')
|
184
|
-
.and_row('Second Row')
|
185
|
-
|
186
|
-
screen.top.map(&:column).should eq(['First Row', 'Second Row'])
|
187
|
-
end
|
188
|
-
|
189
|
-
it 'has headers' do
|
190
|
-
TableStubber.stub(table).with_headers('first header', 'second header')
|
191
|
-
screen.top_headers.should eq(['first header', 'second header'])
|
192
|
-
end
|
193
|
-
|
194
|
-
it 'can return the raw view' do
|
195
|
-
screen.top_view.should_not be_nil
|
196
|
-
end
|
197
|
-
|
198
|
-
describe Mohawk::Accessors::TableRow do
|
199
|
-
let(:table_stubber) { TableStubber.stub(table) }
|
200
|
-
before(:each) do
|
201
|
-
table_stubber.with_headers('column').and_row('first row')
|
202
|
-
end
|
203
|
-
|
204
|
-
it 'can get an individual row' do
|
205
|
-
screen.top[0].should_not be_nil
|
206
|
-
end
|
207
|
-
|
208
|
-
it 'knows if it is selected' do
|
209
|
-
table_stubber.rows[0].should_receive(:selected?).and_return(true)
|
210
|
-
screen.top[0].should be_selected
|
211
|
-
end
|
212
|
-
|
213
|
-
it 'can be selected' do
|
214
|
-
table_stubber.should_singly_select_row(0)
|
215
|
-
screen.top[0].select
|
216
|
-
end
|
217
|
-
|
218
|
-
it 'has cells' do
|
219
|
-
TableStubber.stub(table)
|
220
|
-
.with_headers('first', 'second')
|
221
|
-
.and_row('Cell 1', 'Cell 2')
|
222
|
-
|
223
|
-
screen.top[0].cells.should eq(['Cell 1', 'Cell 2'])
|
224
|
-
end
|
225
|
-
|
226
|
-
it 'can get cell values by header name' do
|
227
|
-
TableStubber.stub(table)
|
228
|
-
.with_headers('First Header', 'Second Header')
|
229
|
-
.and_row('Item 1', 'Item 2')
|
230
|
-
|
231
|
-
screen.top[0].second_header.should eq('Item 2')
|
232
|
-
end
|
233
|
-
|
234
|
-
it 'clearly lets you know if a header is not there' do
|
235
|
-
TableStubber.stub(table)
|
236
|
-
.with_headers('First Header', 'Second Header')
|
237
|
-
.and_row('Item 1', 'Item 2')
|
238
|
-
|
239
|
-
lambda { screen.top[0].does_not_exist }.should raise_error ArgumentError, 'does_not_exist column does not exist in [:first_header, :second_header]'
|
240
|
-
end
|
241
|
-
end
|
242
|
-
end
|
243
|
-
|
244
|
-
context 'aliases for table' do
|
245
|
-
let(:null_table) { double('Null ComboBox Field').as_null_object }
|
246
|
-
let(:table_aliases) { ['default', 'listview', 'list_view'] }
|
247
|
-
|
248
|
-
def expected_alias(id)
|
249
|
-
window.should_receive(:table).with(:id => "#{id}AliasId").ordered.and_return(null_table)
|
250
|
-
end
|
251
|
-
|
252
|
-
it 'has many aliases' do
|
253
|
-
table_aliases.each do |which_alias|
|
254
|
-
expected_alias which_alias
|
255
|
-
end
|
256
|
-
|
257
|
-
table_aliases.each do |which_alias|
|
258
|
-
screen.send "my_#{which_alias}_view"
|
259
|
-
end
|
260
|
-
end
|
261
|
-
end
|
262
|
-
end
|
@@ -1,58 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
class TabsScreen
|
4
|
-
include Mohawk
|
5
|
-
window(:id => 123)
|
6
|
-
|
7
|
-
tabs(:tab, :id => 'tabsId')
|
8
|
-
end
|
9
|
-
|
10
|
-
class TabItem
|
11
|
-
attr_reader :text, :index
|
12
|
-
def initialize(text, index)
|
13
|
-
@text, @index = text, index
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
describe Mohawk::Accessors::Tabs do
|
18
|
-
let(:window) { double('RAutomation Window') }
|
19
|
-
let(:tab_control) { double('RAutomation TabControl') }
|
20
|
-
subject { TabsScreen.new }
|
21
|
-
|
22
|
-
before(:each) do
|
23
|
-
RAutomation::Window.stub(:new).and_return(window)
|
24
|
-
window.should_receive(:tab_control).with(:id => 'tabsId').and_return(tab_control)
|
25
|
-
end
|
26
|
-
|
27
|
-
def tabs_are(*tabs)
|
28
|
-
expected = tabs.each_with_index.map {|t, i| TabItem.new(t, i) }
|
29
|
-
tab_control.should_receive(:items).and_return(expected)
|
30
|
-
end
|
31
|
-
|
32
|
-
it 'knows the currently selected tab' do
|
33
|
-
tab_control.should_receive(:value).and_return('Current Tab')
|
34
|
-
|
35
|
-
subject.tab.should eq('Current Tab')
|
36
|
-
end
|
37
|
-
|
38
|
-
it 'knows the available tabs' do
|
39
|
-
tabs_are('first', 'second')
|
40
|
-
subject.tab_items.should eq(['first', 'second'])
|
41
|
-
end
|
42
|
-
|
43
|
-
it 'can select tabs by index' do
|
44
|
-
tab_control.should_receive(:select).with(1)
|
45
|
-
subject.tab = 1
|
46
|
-
end
|
47
|
-
|
48
|
-
it 'can select tabs by value' do
|
49
|
-
tab_control.should_receive(:set).with('The Tab')
|
50
|
-
subject.tab = 'The Tab'
|
51
|
-
end
|
52
|
-
|
53
|
-
it 'can select tabs by regex' do
|
54
|
-
tabs_are('Something', 'With the Number 7')
|
55
|
-
tab_control.should_receive(:set).with('With the Number 7')
|
56
|
-
subject.tab = /\d+/
|
57
|
-
end
|
58
|
-
end
|
@@ -1,51 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
class TextScreen
|
4
|
-
include Mohawk
|
5
|
-
window(:id => nil)
|
6
|
-
|
7
|
-
text(:text_id, :id => "textId")
|
8
|
-
end
|
9
|
-
|
10
|
-
describe Mohawk::Accessors::Text do
|
11
|
-
let(:screen) { TextScreen.new }
|
12
|
-
let(:window) { double("RAutomation Window") }
|
13
|
-
let(:text_field) { double("Text Field") }
|
14
|
-
let(:text_field_window) { double("Text Field Window") }
|
15
|
-
|
16
|
-
before(:each) do
|
17
|
-
RAutomation::Window.stub(:new).and_return(window)
|
18
|
-
window.should_receive(:text_field).with(:id => "textId").and_return(text_field)
|
19
|
-
end
|
20
|
-
|
21
|
-
context "accessing text controls" do
|
22
|
-
|
23
|
-
it "sets the text" do
|
24
|
-
text_field.should_receive(:set).with("the text value")
|
25
|
-
screen.text_id = "the text value"
|
26
|
-
end
|
27
|
-
|
28
|
-
it "retrieves the text" do
|
29
|
-
text_field.should_receive(:value).and_return("the text")
|
30
|
-
screen.text_id.should eq("the text")
|
31
|
-
end
|
32
|
-
|
33
|
-
it "clears the text" do
|
34
|
-
text_field.should_receive(:clear)
|
35
|
-
screen.clear_text_id
|
36
|
-
end
|
37
|
-
|
38
|
-
it "enters the text" do
|
39
|
-
text_field.should_receive(:hwnd).and_return 123
|
40
|
-
window.should_receive(:child).with(:hwnd => 123).and_return(text_field_window)
|
41
|
-
text_field_window.should_receive(:send_keys).with("entered text".split(//))
|
42
|
-
|
43
|
-
screen.enter_text_id "entered text"
|
44
|
-
end
|
45
|
-
|
46
|
-
it "can dish out the text view" do
|
47
|
-
screen.text_id_view.should be(text_field)
|
48
|
-
end
|
49
|
-
|
50
|
-
end
|
51
|
-
end
|
@@ -1,98 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
class TreeViewScreen
|
4
|
-
include Mohawk
|
5
|
-
window(:id => nil)
|
6
|
-
|
7
|
-
tree_view(:oak, :id => "treeViewId")
|
8
|
-
|
9
|
-
# aliases
|
10
|
-
tree_view(:my_default, :id => "defaultAliasId")
|
11
|
-
treeview(:my_treeview, :id => "treeviewAliasId")
|
12
|
-
tree(:my_tree, :id => "treeAliasId")
|
13
|
-
end
|
14
|
-
|
15
|
-
class FakeTreeItem
|
16
|
-
attr_reader :text
|
17
|
-
|
18
|
-
def initialize(item_text)
|
19
|
-
@text = item_text
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
describe Mohawk::Accessors::TreeView do
|
24
|
-
let(:screen) { TreeViewScreen.new }
|
25
|
-
let(:window) { double("RAutomation Window") }
|
26
|
-
let(:tree_field) { double("TreeView Field") }
|
27
|
-
let(:options) { double("TreeView Options") }
|
28
|
-
let(:option) { double("TreeView Option") }
|
29
|
-
|
30
|
-
before(:each) do
|
31
|
-
RAutomation::Window.stub(:new).and_return(window)
|
32
|
-
tree_field.stub(:options).and_return(options)
|
33
|
-
end
|
34
|
-
|
35
|
-
context "working with TreeView controls" do
|
36
|
-
before(:each) do
|
37
|
-
window.should_receive(:select_list).with(:id => "treeViewId").and_return(tree_field)
|
38
|
-
end
|
39
|
-
|
40
|
-
it "has a value" do
|
41
|
-
tree_field.should_receive(:value).and_return("tree value")
|
42
|
-
screen.oak.should eq "tree value"
|
43
|
-
end
|
44
|
-
|
45
|
-
it "can select items by index" do
|
46
|
-
options.should_receive(:[]).with(7).and_return(option)
|
47
|
-
option.should_receive(:select)
|
48
|
-
|
49
|
-
screen.oak = 7
|
50
|
-
end
|
51
|
-
|
52
|
-
it "can select items by their value" do
|
53
|
-
tree_field.should_receive(:option).with(text: 'item value').and_return(option)
|
54
|
-
option.should_receive(:select)
|
55
|
-
|
56
|
-
screen.oak = "item value"
|
57
|
-
end
|
58
|
-
|
59
|
-
it "can return the tree items" do
|
60
|
-
tree_field.should_receive(:options).and_return([FakeTreeItem.new("Item One"), FakeTreeItem.new("Item Two")])
|
61
|
-
screen.oak_items.should eq ["Item One", "Item Two"]
|
62
|
-
end
|
63
|
-
|
64
|
-
it "can expand items" do
|
65
|
-
tree_field.should_receive(:expand).with(7)
|
66
|
-
screen.expand_oak_item 7
|
67
|
-
end
|
68
|
-
|
69
|
-
it "can collapse items" do
|
70
|
-
tree_field.should_receive(:collapse).with("some item")
|
71
|
-
screen.collapse_oak_item "some item"
|
72
|
-
end
|
73
|
-
|
74
|
-
it "can work with the raw view" do
|
75
|
-
tree_field.should_receive(:visible?).and_return(true)
|
76
|
-
screen.oak_view.should be_visible
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
context "aliases for tree_view" do
|
81
|
-
let(:null_tree_view) { double("Null TreeView Field").as_null_object }
|
82
|
-
let(:tree_view_aliases) { ["default", "treeview", "tree"] }
|
83
|
-
|
84
|
-
def expected_alias(id)
|
85
|
-
window.should_receive(:select_list).with(:id => "#{id}AliasId").ordered.and_return(null_tree_view)
|
86
|
-
end
|
87
|
-
|
88
|
-
it "has many aliases" do
|
89
|
-
tree_view_aliases.each do |which_alias|
|
90
|
-
expected_alias which_alias
|
91
|
-
end
|
92
|
-
|
93
|
-
tree_view_aliases.each do |which_alias|
|
94
|
-
screen.send "my_#{which_alias}"
|
95
|
-
end
|
96
|
-
end
|
97
|
-
end
|
98
|
-
end
|
@@ -1,55 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
class AnyScreen
|
4
|
-
include Mohawk
|
5
|
-
window(:title => /Some Title/, :children_only => true)
|
6
|
-
end
|
7
|
-
|
8
|
-
RSpec::Matchers.define(:use_the_cached) do |control_type, the_alias=nil|
|
9
|
-
match do |screen|
|
10
|
-
screen.adapter.window.stub(the_alias || control_type).and_return(double('first control'), double('second control'))
|
11
|
-
first, second = 2.times.map { screen.adapter.send(control_type, :id => 'id') }
|
12
|
-
first.eql?(second)
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
RSpec::Matchers.define(:only_search_children_for_a) do |control_type, the_alias=nil|
|
17
|
-
match do |screen|
|
18
|
-
screen.adapter.window.should_receive(the_alias || control_type).with(:id => 'id', :children_only => true).and_return(double('child control'))
|
19
|
-
screen.adapter.send(control_type, :id => 'id')
|
20
|
-
true
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
describe Mohawk::Adapters::UiaAdapter do
|
25
|
-
subject(:screen) { AnyScreen.new }
|
26
|
-
|
27
|
-
let(:window) { double('RAutomation Window') }
|
28
|
-
before(:each) { RAutomation::Window.stub(:new).and_return(window) }
|
29
|
-
|
30
|
-
context 'limiting searches to children only' do
|
31
|
-
it { should only_search_children_for_a(:combo, :select_list) }
|
32
|
-
it { should only_search_children_for_a(:checkbox) }
|
33
|
-
it { should only_search_children_for_a(:text, :text_field) }
|
34
|
-
it { should only_search_children_for_a(:button) }
|
35
|
-
it { should only_search_children_for_a(:radio) }
|
36
|
-
it { should only_search_children_for_a(:label) }
|
37
|
-
it { should only_search_children_for_a(:link, :label) }
|
38
|
-
it { should only_search_children_for_a(:table) }
|
39
|
-
it { should only_search_children_for_a(:tree_view, :select_list) }
|
40
|
-
it { should only_search_children_for_a(:value_control) }
|
41
|
-
end
|
42
|
-
|
43
|
-
context 'caching controls' do
|
44
|
-
it { should use_the_cached(:combo, :select_list) }
|
45
|
-
it { should use_the_cached(:checkbox) }
|
46
|
-
it { should use_the_cached(:text, :text_field) }
|
47
|
-
it { should use_the_cached(:button) }
|
48
|
-
it { should use_the_cached(:radio) }
|
49
|
-
it { should use_the_cached(:label) }
|
50
|
-
it { should use_the_cached(:link, :label) }
|
51
|
-
it { should use_the_cached(:table) }
|
52
|
-
it { should use_the_cached(:tree_view, :select_list) }
|
53
|
-
it { should use_the_cached(:value_control) }
|
54
|
-
end
|
55
|
-
end
|
data/spec/table_stubber.rb
DELETED
@@ -1,55 +0,0 @@
|
|
1
|
-
require 'securerandom'
|
2
|
-
|
3
|
-
class TableStubber
|
4
|
-
include RSpec::Mocks::ExampleMethods, RAutomation::Adapter::MsUia
|
5
|
-
|
6
|
-
attr_reader :table, :rows
|
7
|
-
|
8
|
-
def initialize(table)
|
9
|
-
@table = table
|
10
|
-
@id = SecureRandom.base64
|
11
|
-
@table.stub(:search_information).and_return(@id)
|
12
|
-
@table.stub(:selected_rows).and_return []
|
13
|
-
@rows = []
|
14
|
-
end
|
15
|
-
|
16
|
-
def self.stub(table)
|
17
|
-
TableStubber.new(table)
|
18
|
-
end
|
19
|
-
|
20
|
-
def with_headers(*headers)
|
21
|
-
UiaDll.stub(:table_headers).with(@id).and_return(headers.map(&:to_s))
|
22
|
-
self
|
23
|
-
end
|
24
|
-
|
25
|
-
def and_row(*values)
|
26
|
-
stub_cells_for(add_row, values)
|
27
|
-
self
|
28
|
-
end
|
29
|
-
|
30
|
-
def should_singly_select_row(which)
|
31
|
-
UiaDll.should_receive(:table_single_select).with(@id, which)
|
32
|
-
end
|
33
|
-
|
34
|
-
private
|
35
|
-
def add_row
|
36
|
-
row = double("table #{@id}, row #{rows.count}")
|
37
|
-
row.stub(:row).and_return(rows.count)
|
38
|
-
Row.stub(:new).with(table, :index => rows.count).and_return(row)
|
39
|
-
rows << row
|
40
|
-
table.stub(:row_count).and_return(rows.count)
|
41
|
-
row
|
42
|
-
end
|
43
|
-
|
44
|
-
def stub_cells_for(row, values)
|
45
|
-
cells = []
|
46
|
-
values.each_with_index do |value, index|
|
47
|
-
cell = double("Cell at #{row.row}, #{index}")
|
48
|
-
Cell.stub(:new).with(row, :index => index).and_return(cell)
|
49
|
-
cell.stub(:text).and_return(value)
|
50
|
-
cells << cell
|
51
|
-
end
|
52
|
-
row.stub(:value).and_return(values.first)
|
53
|
-
row.stub(:cells).and_return(cells)
|
54
|
-
end
|
55
|
-
end
|