mohawk 0.4.3 → 1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: c7ab94d6b93e2f14327fa9747ea153e5216b1853
4
- data.tar.gz: dc8fc1469e763cd93b400518145f1142b5c06443
2
+ SHA256:
3
+ metadata.gz: 0f4d2928187d326a0466a236d0f7ef8fd9e87540eae09307991f979b1f629bca
4
+ data.tar.gz: 49c6314e0a4d35df36c6269477fe757c6ea78af19aad43e2c2a3a84f81102142
5
5
  SHA512:
6
- metadata.gz: 43ec9b93a18ef6a7dc047eae81dfb1b90b3cd44a67887dd8972060d9744a373e902914c12fa5995975ba43b2ddb7494fadecf117cfaf79e870b48a1602e040fb
7
- data.tar.gz: d3ce5ebdcfc9841dacb8dd6e3d28021f31f9428994ceec8a7955ecb3e355ca4412e66f01b4c1ac3e26396d849afa1373025c2ecdb1faa13a6f5e32a823b69bb2
6
+ metadata.gz: 1b549539d638f68b7259415772e87a49e86b714bb7e62d90e4774994b00a13519af5517235e62f29f4eb02dde37ae83f09ce19ff92c56e2bdf1a62dfb0036bf4
7
+ data.tar.gz: 1c9f4b2d339b75f188fdb8192d20ec2c1c5086a6f06ebd4bec4de758a7d7c6e835ce45bff6fca8e5b1113f5d6e90f09233458f373cc9b568d7d5ef292474dc26
@@ -4,8 +4,8 @@ When /^we are observing the people table$/ do
4
4
  end
5
5
 
6
6
  Then /^the table row information should look like the following:$/ do |row_items|
7
- row_items.map_column!("row") { |r| r.to_i }
8
- row_items.map_headers!("text" => :text, "row" => :row)
7
+ row_items = row_items.map_column("row") { |r| r.to_i }
8
+ row_items = row_items.map_headers("text" => :text, "row" => :row)
9
9
  on(DataEntryForm).people.map(&:to_hash).should eq row_items.hashes
10
10
  end
11
11
 
Binary file
@@ -0,0 +1,6 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <configuration>
3
+ <startup>
4
+ <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8"/>
5
+ </startup>
6
+ </configuration>
@@ -52,7 +52,7 @@ module Mohawk
52
52
  # text(:first_name, :id => 'textFieldId')
53
53
  # # will generate 'first_name', 'first_name=' and 'clear_first_name' methods
54
54
  #
55
- # @param [String] the name used for the generated methods
55
+ # @param [String] name used for the generated methods
56
56
  # @param [Hash] locator for how the text is found
57
57
  #
58
58
  def text(name, locator)
@@ -81,7 +81,7 @@ module Mohawk
81
81
  # button(:close, :value => '&Close')
82
82
  # # will generate 'close' and 'close_value' methods
83
83
  #
84
- # @param [String] the name used for the generated methods
84
+ # @param [String] name used for the generated methods
85
85
  # @param [Hash] locator for how the button is found
86
86
  #
87
87
  def button(name, locator)
@@ -102,37 +102,70 @@ module Mohawk
102
102
  #
103
103
  # @example
104
104
  # combo_box(:status, :id => 'statusComboBox')
105
- # # will generate 'status', 'status_selections', 'status=', 'select_status','clear_status' and 'status_options' methods
105
+ # # will generate 'status', 'status=', 'select_status', and 'status_options' methods
106
106
  #
107
- # @param [String] the name used for the generated methods
107
+ # @param [String] name used for the generated methods
108
108
  # @param [Hash] locator for how the combo box is found
109
109
  #
110
110
  # === Aliases
111
111
  # * combobox
112
112
  # * dropdown / drop_down
113
- # * select_list
113
+
114
114
  #
115
115
  def combo_box(name, locator)
116
116
  define_method("#{name}") do
117
117
  adapter.combo(locator).value
118
118
  end
119
+
120
+ define_method("#{name}=") do |item|
121
+ adapter.combo(locator).with(:combo_box).set item
122
+ end
123
+ alias_method "select_#{name}", "#{name}="
124
+
125
+ define_method("#{name}_options") do
126
+ adapter.combo(locator).options
127
+ end
128
+ define_method("#{name}_view") do
129
+ adapter.combo(locator).view
130
+ end
131
+ end
132
+
133
+ #
134
+ # Generates methods to get the value of a list box, set the selected
135
+ # item by both index and value as well as to see the available options
136
+ #
137
+ # @example
138
+ # select_list(:status, :id => 'statusListBox')
139
+ # # will generate 'status', 'status_selections', 'status=', 'select_status','clear_status' and 'status_options' methods
140
+ #
141
+ # @param [String] name used for the generated methods
142
+ # @param [Hash] locator for how the list box is found
143
+ #
144
+ # === Aliases
145
+ # * selectlist
146
+ # * list_box
147
+ #
148
+ def select_list(name, locator)
149
+ define_method("#{name}") do
150
+ adapter.select_list(locator).value
151
+ end
119
152
  define_method("clear_#{name}") do |item|
120
- adapter.combo(locator).clear item
153
+ adapter.select_list(locator).clear item
121
154
  end
122
155
  define_method("#{name}_selections") do
123
- adapter.combo(locator).values
156
+ adapter.select_list(locator).values
124
157
  end
125
158
 
126
159
  define_method("#{name}=") do |item|
127
- adapter.combo(locator).set item
160
+ adapter.select_list(locator).set item
128
161
  end
129
162
  alias_method "select_#{name}", "#{name}="
130
163
 
131
164
  define_method("#{name}_options") do
132
- adapter.combo(locator).options
165
+ adapter.select_list(locator).options
133
166
  end
134
167
  define_method("#{name}_view") do
135
- adapter.combo(locator).view
168
+ adapter.select_list(locator).view
136
169
  end
137
170
  end
138
171
 
@@ -144,7 +177,7 @@ module Mohawk
144
177
  # checkbox(:include, :id => 'checkBoxId')
145
178
  # # will generate 'include', 'include=' and 'include_value' methods
146
179
  #
147
- # @param [String] the name used for the generated methods
180
+ # @param [String] name used for the generated methods
148
181
  # @param [Hash] locator for how the checkbox is found
149
182
  #
150
183
  def checkbox(name, locator)
@@ -170,7 +203,7 @@ module Mohawk
170
203
  # radio(:morning, :id => 'morningRadio')
171
204
  # # will generate 'morning' and 'morning?' methods
172
205
  #
173
- # @param [String] the name used for the generated methods
206
+ # @param [String] name used for the generated methods
174
207
  # @param [Hash] locator for how the radio is found
175
208
  #
176
209
  def radio(name, locator)
@@ -192,7 +225,7 @@ module Mohawk
192
225
  # label(:login_info, :id => 'loginInfoLabel')
193
226
  # # will generate a 'login_info' method
194
227
  #
195
- # @param [String] the name used for the generated methods
228
+ # @param [String] name used for the generated methods
196
229
  # @param [Hash] locator for how the label is found
197
230
  #
198
231
  def label(name, locator)
@@ -211,7 +244,7 @@ module Mohawk
211
244
  # link(:send_info_link, :id => 'sendInfoId')
212
245
  # # will generate 'send_info_link_text' and 'click_send_info_link' methods
213
246
  #
214
- # @param [String] the name used for the generated methods
247
+ # @param [String] name used for the generated methods
215
248
  # @param [Hash] locator for how the label is found
216
249
  #
217
250
  def link(name, locator)
@@ -232,16 +265,14 @@ module Mohawk
232
265
  # menu_item(:some_menu_item, :path => ["Path", "To", "A", "Menu Item"])
233
266
  # # will generate a 'some_menu_item' method to select a menu item
234
267
  #
235
- # @param [String] the name used for the generated methods
268
+ # @param [String] name used for the generated methods
236
269
  # @param [Hash] locator for how the label is found
237
270
  #
238
271
  def menu_item(name, locator)
239
- define_method("#{name}") do
240
- adapter.menu_item(locator).select
241
- end
242
272
  define_method("click_#{name}") do
243
273
  adapter.menu_item(locator).click
244
274
  end
275
+ alias_method "#{name}", "click_#{name}"
245
276
  end
246
277
 
247
278
  # Generates methods for working with table or list view controls
@@ -252,7 +283,7 @@ module Mohawk
252
283
  # # find_some_table and 'some_table_view' methods to get an Enumerable of table rows,
253
284
  # # select a table item, clear a table item, return all of the headers and get the raw view
254
285
  #
255
- # @param [String] the name used for the generated methods
286
+ # @param [String] name used for the generated methods
256
287
  # @param [Hash] locator for how the label is found
257
288
  #
258
289
  # === Aliases
@@ -294,7 +325,7 @@ module Mohawk
294
325
  # # methods to get the tree value, set the tree value (index or string), get all of the
295
326
  # # items, expand an item (index or string) and collapse an item (index or string)
296
327
  #
297
- # @param [String] the name used for the generated methods
328
+ # @param [String] name used for the generated methods
298
329
  # @param [Hash] locator for how the label is found
299
330
  #
300
331
  # === Aliases
@@ -329,7 +360,7 @@ module Mohawk
329
360
  # # will generate 'age', 'age=' methods to get the spinner value and
330
361
  # # set the spinner value.
331
362
  #
332
- # @param [String] the name used for the generated methods
363
+ # @param [String] name used for the generated methods
333
364
  # @param [Hash] locator for how the spinner control is found
334
365
  #
335
366
  def spinner(name, locator)
@@ -358,7 +389,7 @@ module Mohawk
358
389
  # # set the currently selected tab (Fixnum, String or RegEx) and to get the
359
390
  # # available tabs to be selected
360
391
  #
361
- # @param [String] the name used for the generated methods
392
+ # @param [String] name used for the generated methods
362
393
  # @param [Hash] locator for how the tab control is found
363
394
  #
364
395
  def tabs(name, locator)
@@ -395,7 +426,10 @@ module Mohawk
395
426
  alias_method :combobox, :combo_box
396
427
  alias_method :dropdown, :combo_box
397
428
  alias_method :drop_down, :combo_box
398
- alias_method :select_list, :combo_box
429
+
430
+ # select_list aliases
431
+ alias_method :selectlist, :select_list
432
+ alias_method :list_box, :select_list
399
433
 
400
434
  # table aliases
401
435
  alias_method :listview, :table
@@ -1,3 +1,5 @@
1
+ require_rel 'control'
2
+
1
3
  module Mohawk
2
4
  module Adapters
3
5
  module UIA
@@ -0,0 +1,58 @@
1
+ require_relative 'value_control'
2
+ require_relative 'element_locator'
3
+
4
+ module Mohawk
5
+ module Adapters
6
+ module UIA
7
+ class ComboBoxControl < ValueControl
8
+ include ElementLocator
9
+
10
+ alias_method :ctrl_element, :element
11
+
12
+ def value
13
+ if supports_selection?
14
+ selection_pattern.selected_items.map(&:name).first || ''
15
+ else
16
+ value_pattern.value
17
+ end
18
+ end
19
+
20
+ def options
21
+ if supports_selection?
22
+ all_items.map &:name
23
+ else
24
+ element.items.map &:name
25
+ end
26
+ end
27
+
28
+ private
29
+
30
+ def all_items
31
+ selection_pattern.selection_items
32
+ end
33
+
34
+ def click_or_select(item)
35
+ item.click
36
+ rescue
37
+ item.select
38
+ end
39
+
40
+ def selection_pattern
41
+ element.as :selection
42
+ end
43
+
44
+ def supports_selection?
45
+ selection_pattern
46
+ true
47
+ rescue
48
+ false
49
+ end
50
+
51
+ private
52
+ def element
53
+ ctrl_element.with(:combo_box)
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
@@ -35,6 +35,10 @@ module Mohawk
35
35
  end
36
36
 
37
37
  def combo(locator)
38
+ ComboBoxControl.new self, merge(locator)
39
+ end
40
+
41
+ def select_list(locator)
38
42
  SelectList.new self, merge(locator)
39
43
  end
40
44
 
@@ -1,3 +1,3 @@
1
1
  module Mohawk
2
- VERSION = '0.4.3'
2
+ VERSION = '1.0'
3
3
  end
data/mohawk.gemspec CHANGED
@@ -18,8 +18,8 @@ Gem::Specification.new do |gem|
18
18
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
19
19
  gem.require_paths = ["lib"]
20
20
 
21
- gem.add_dependency 'uia', '~> 0.5'
22
- gem.add_dependency 'require_all'
21
+ gem.add_dependency 'uia', '~> 1.0'
22
+ gem.add_dependency 'require_all', '~> 3.0'
23
23
  gem.add_dependency 'page_navigation', '>= 0.7'
24
24
  gem.add_dependency 'childprocess', '~> 0.5'
25
25
 
@@ -32,5 +32,5 @@ Gem::Specification.new do |gem|
32
32
  gem.add_development_dependency 'guard'
33
33
  gem.add_development_dependency 'guard-rspec'
34
34
  gem.add_development_dependency 'terminal-notifier-guard'
35
- gem.add_development_dependency 'json', '~> 2.1.0'
35
+ gem.add_development_dependency 'json', '~> 2.1'
36
36
  end
@@ -19,6 +19,14 @@ describe 'combo boxes' do
19
19
  Then { main_form.fruits == 'Orange' }
20
20
  end
21
21
 
22
+ context '#options' do
23
+ Then { main_form.fruits_options == ["Apple", "Caimito", "Coconut", "Orange", "Passion Fruit"] }
24
+ end
25
+ end
26
+
27
+ describe 'list boxes' do
28
+ Given(:main_form) { start_app }
29
+
22
30
  context 'multi-select' do
23
31
  Given { main_form.toggle_multi }
24
32
  When { (0..2).each {|n| main_form.select_fruits_list n } }
@@ -42,11 +50,11 @@ describe 'combo boxes' do
42
50
  end
43
51
  end
44
52
  end
45
- end
46
53
 
47
- context 'list boxes' do
48
- # ListBox controls are special with regard to raising events
49
- When { main_form.fruits_list = 'Orange' }
50
- Then { main_form.fruits_label == 'Orange' }
54
+ context 'events' do
55
+ # ListBox controls are special with regard to raising events
56
+ When { main_form.fruits_list = 'Orange' }
57
+ Then { main_form.fruits_label == 'Orange' }
58
+ end
51
59
  end
52
- end
60
+ end
@@ -11,11 +11,11 @@ describe Mohawk::Adapters::UIA::Window do
11
11
  on(Class.new do
12
12
  include Mohawk
13
13
  window(title: /MainForm/)
14
- parent(id: 'numericUpDown')
14
+ parent(id: 'groupBox2')
15
15
  end)
16
16
  end
17
17
 
18
- Then { container.adapter.window.title == 'linkLabel1' }
18
+ Then { container.adapter.window.title == 'Drop down list' }
19
19
  end
20
20
 
21
21
  context 'children_only' do
@@ -34,7 +34,10 @@ describe Mohawk::Adapters::UIA::Window do
34
34
  end
35
35
 
36
36
  context '#active?' do
37
- Then { not_created_form.active? == false }
37
+ Then do
38
+ not_created_form.exist?
39
+ expect(not_created_form.active?).to eq(false)
40
+ end
38
41
  Then { main_form.active? == true }
39
42
 
40
43
  context 'inactive --> active' do
@@ -81,4 +84,4 @@ describe Mohawk::Adapters::UIA::Window do
81
84
  context '#wait_for_control' do
82
85
  Then { main_form.wait_for_control value: 'Data Entry Form' }
83
86
  end
84
- end
87
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mohawk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.3
4
+ version: '1.0'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Levi Wilson
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-12-19 00:00:00.000000000 Z
11
+ date: 2023-01-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: uia
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0.5'
19
+ version: '1.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0.5'
26
+ version: '1.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: require_all
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0'
33
+ version: '3.0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '0'
40
+ version: '3.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: page_navigation
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -198,14 +198,14 @@ dependencies:
198
198
  requirements:
199
199
  - - "~>"
200
200
  - !ruby/object:Gem::Version
201
- version: 2.1.0
201
+ version: '2.1'
202
202
  type: :development
203
203
  prerelease: false
204
204
  version_requirements: !ruby/object:Gem::Requirement
205
205
  requirements:
206
206
  - - "~>"
207
207
  - !ruby/object:Gem::Version
208
- version: 2.1.0
208
+ version: '2.1'
209
209
  description: Mohawk is a page-object style driver that makes it easy to automate windows
210
210
  applications. It allows you to create a very flexible, clean and natural DSL around
211
211
  whatever windows application that you are trying to automate using the RAutomation
@@ -230,6 +230,7 @@ files:
230
230
  - features/support/FizzWare.NBuilder.dll
231
231
  - features/support/UIA.Extensions.dll
232
232
  - features/support/WindowsForms.exe
233
+ - features/support/WindowsForms.exe.config
233
234
  - features/support/app/WindowsForms/WindowsForms.sln
234
235
  - features/support/app/WindowsForms/WindowsForms/AboutBox.Designer.cs
235
236
  - features/support/app/WindowsForms/WindowsForms/AboutBox.cs
@@ -267,6 +268,7 @@ files:
267
268
  - lib/mohawk/accessors.rb
268
269
  - lib/mohawk/adapters/uia/button.rb
269
270
  - lib/mohawk/adapters/uia/checkbox.rb
271
+ - lib/mohawk/adapters/uia/combo_box.rb
270
272
  - lib/mohawk/adapters/uia/control.rb
271
273
  - lib/mohawk/adapters/uia/element_locator.rb
272
274
  - lib/mohawk/adapters/uia/menu_item.rb
@@ -314,7 +316,7 @@ homepage: http://github.com/leviwilson/mohawk
314
316
  licenses:
315
317
  - MIT
316
318
  metadata: {}
317
- post_install_message:
319
+ post_install_message:
318
320
  rdoc_options: []
319
321
  require_paths:
320
322
  - lib
@@ -329,9 +331,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
329
331
  - !ruby/object:Gem::Version
330
332
  version: '0'
331
333
  requirements: []
332
- rubyforge_project:
333
- rubygems_version: 2.5.2
334
- signing_key:
334
+ rubygems_version: 3.2.32
335
+ signing_key:
335
336
  specification_version: 4
336
337
  summary: Provides a page-object style driver for automating Windows applications
337
338
  test_files:
@@ -339,6 +340,7 @@ test_files:
339
340
  - features/support/FizzWare.NBuilder.dll
340
341
  - features/support/UIA.Extensions.dll
341
342
  - features/support/WindowsForms.exe
343
+ - features/support/WindowsForms.exe.config
342
344
  - features/support/app/WindowsForms/WindowsForms.sln
343
345
  - features/support/app/WindowsForms/WindowsForms/AboutBox.Designer.cs
344
346
  - features/support/app/WindowsForms/WindowsForms/AboutBox.cs