uia 0.0.5.1 → 0.0.6

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.
Files changed (47) hide show
  1. data/ChangeLog +17 -2
  2. data/Gemfile +1 -0
  3. data/Rakefile +13 -0
  4. data/ext/UiaDll/UIA.Helper/{AutomationProperty.cs → AutomationPropertyCondition.cs} +1 -1
  5. data/ext/UiaDll/UIA.Helper/Element.cs +46 -6
  6. data/ext/UiaDll/UIA.Helper/Extensions.cs +13 -0
  7. data/ext/UiaDll/UIA.Helper/UIA.Helper.csproj +1 -1
  8. data/ext/UiaDll/UiaDll.Test/ElementInformationTest.cpp +20 -4
  9. data/ext/UiaDll/UiaDll.Test/ElementStub.h +16 -2
  10. data/ext/UiaDll/UiaDll.Test/PatternInformationTest.cpp +35 -0
  11. data/ext/UiaDll/UiaDll.Test/UiaDll.Test.vcxproj +6 -4
  12. data/ext/UiaDll/UiaDll.Test/UiaDll.Test.vcxproj.filters +3 -0
  13. data/ext/UiaDll/UiaDll/ElementMethods.cpp +62 -17
  14. data/ext/UiaDll/UiaDll/ElementStructures.h +19 -9
  15. data/ext/UiaDll/UiaDll/ExpandCollapseMethods.cpp +33 -0
  16. data/ext/UiaDll/UiaDll/InvokePatternMethods.cpp +11 -0
  17. data/ext/UiaDll/UiaDll/PatternInformationStructures.h +90 -0
  18. data/ext/UiaDll/UiaDll/SelectionItemMethods.cpp +40 -0
  19. data/ext/UiaDll/UiaDll/SelectionMethods.cpp +16 -0
  20. data/ext/UiaDll/UiaDll/Stdafx.h +3 -0
  21. data/ext/UiaDll/UiaDll/ToggleMethods.cpp +25 -0
  22. data/ext/UiaDll/UiaDll/UiaDll.vcxproj +9 -0
  23. data/ext/UiaDll/UiaDll/UiaDll.vcxproj.filters +24 -0
  24. data/ext/UiaDll/UiaDll/ValuePatternMethods.cpp +25 -0
  25. data/lib/uia.rb +14 -6
  26. data/lib/uia/element.rb +35 -11
  27. data/lib/uia/finder.rb +33 -0
  28. data/lib/uia/library.rb +48 -6
  29. data/lib/uia/library/element_attributes.rb +11 -0
  30. data/lib/uia/library/structs.rb +93 -5
  31. data/lib/uia/patterns/expand_collapse.rb +17 -0
  32. data/lib/uia/patterns/invoke.rb +9 -0
  33. data/lib/uia/patterns/selection.rb +17 -0
  34. data/lib/uia/patterns/selection_item.rb +25 -0
  35. data/lib/uia/patterns/toggle.rb +17 -0
  36. data/lib/uia/patterns/value.rb +22 -0
  37. data/lib/uia/version.rb +1 -1
  38. data/spec/spec_helper.rb +0 -2
  39. data/spec/uia/element_spec.rb +35 -8
  40. data/spec/uia/patterns/expand_collapse_spec.rb +24 -0
  41. data/spec/uia/patterns/invoke_spec.rb +15 -0
  42. data/spec/uia/patterns/selection_item_spec.rb +55 -0
  43. data/spec/uia/patterns/selection_spec.rb +30 -0
  44. data/spec/uia/patterns/toggle_spec.rb +41 -0
  45. data/spec/uia/patterns/value_spec.rb +16 -0
  46. data/spec/uia_spec.rb +26 -7
  47. metadata +37 -4
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+
3
+ describe Uia::Patterns::ExpandCollapse do
4
+ let(:main) { Uia.find_element id: 'MainFormWindow' }
5
+
6
+ Given(:parent_one) { main.find(name: 'Parent One').as :expand_collapse }
7
+
8
+ context 'properties' do
9
+ context '#expand_collapse_state' do
10
+ Then { parent_one.expand_collapse_state == :collapsed }
11
+ end
12
+ end
13
+
14
+ context '#expand' do
15
+ When { parent_one.expand }
16
+ Then { parent_one.expand_collapse_state == :expanded }
17
+ end
18
+
19
+ context '#collapse' do
20
+ Given { parent_one.expand }
21
+ When { parent_one.collapse }
22
+ Then { parent_one.expand_collapse_state == :collapsed }
23
+ end
24
+ end
@@ -0,0 +1,15 @@
1
+ require 'spec_helper'
2
+
3
+ describe Uia::Patterns::Invoke do
4
+ let(:main) { Uia.find_element id: 'MainFormWindow' }
5
+ let(:radio_label) { main.find(id: 'radioButtonLabel') }
6
+
7
+ Given(:reset) { main.find(name: 'Reset').as :invoke }
8
+
9
+ context '#invoke' do
10
+ Given { main.find(name: 'Option 2').click }
11
+
12
+ When { reset.invoke }
13
+ Then { radio_label.name == 'No option selected' }
14
+ end
15
+ end
@@ -0,0 +1,55 @@
1
+ require 'spec_helper'
2
+
3
+ describe Uia::Patterns::SelectionItem do
4
+ let(:main) { Uia.find_element id: 'MainFormWindow' }
5
+ let(:reset) { main.find(name: 'Reset').as :invoke }
6
+ let(:radio_label) { main.find id: 'radioButtonLabel' }
7
+
8
+ Given { reset.invoke }
9
+
10
+ context 'properties' do
11
+ Given(:radio) { main.find(id: 'radioButton2').as :selection_item }
12
+ Then { expect(radio).to_not be_selected }
13
+
14
+ context '#selected?' do
15
+ When { radio.select }
16
+ Then { expect(radio).to be_selected }
17
+ end
18
+
19
+ context '#container' do
20
+ Given(:parent_two) { main.find(name: 'Parent Two').as :selection_item }
21
+ Then { parent_two.container.id == 'treeView' }
22
+ end
23
+ end
24
+
25
+ context '#select' do
26
+ Given(:radio) { main.find id: 'radioButton2' }
27
+ When { radio.as(:selection_item).select }
28
+ Then { radio_label.name == 'Option 2 selected' }
29
+ end
30
+
31
+ context 'multi-select' do
32
+ let(:toggle) { main.find(name: 'Toggle Multi-Select').as :invoke }
33
+
34
+ def select_list
35
+ main.find(id: 'FruitListBox').as :selection
36
+ end
37
+
38
+ Given(:multi_select) do
39
+ toggle.invoke unless select_list.multi_select?
40
+ select_list
41
+ end
42
+ Given(:apple) { multi_select.find(name: 'Apple').as :selection_item }
43
+
44
+ context '#add_to_selection' do
45
+ When { apple.add_to_selection }
46
+ Then { expect(apple).to be_selected }
47
+ end
48
+
49
+ context '#remove_from_selection' do
50
+ Given { multi_select.selection_items.each(&:add_to_selection) }
51
+ When { apple.remove_from_selection }
52
+ Then { expect(apple).to_not be_selected }
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+
3
+ describe Uia::Patterns::Selection do
4
+ let(:main) { Uia.find_element id: 'MainFormWindow' }
5
+ Given(:select_list) { main.find(id: 'FruitListBox').as :selection }
6
+
7
+ context 'properties' do
8
+ context '#multi_select?' do
9
+ Then { expect(select_list).to_not be_multi_select }
10
+ end
11
+
12
+ context '#selection_required?' do
13
+ Then { expect(select_list).to_not be_selection_required }
14
+ end
15
+
16
+ context '#selection_items' do
17
+ let(:respond_to_selections) { lambda { |e| e.respond_to? :add_to_selection } }
18
+
19
+ Then { select_list.selection_items.map(&:name) == ['Apple', 'Orange', 'Mango'] }
20
+ Then { select_list.selection_items.all?(&respond_to_selections) == true }
21
+
22
+ context 'multiple levels of #selection_items' do
23
+ Given(:tree_view) { main.find(id: 'treeView').as :selection }
24
+
25
+ When { tree_view.selection_items.first.as(:expand_collapse).expand }
26
+ Then { tree_view.selection_items.map(&:name) == ['Parent One', 'Child 1', 'Child 2', 'Parent Two'] }
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,41 @@
1
+ require 'spec_helper'
2
+
3
+ describe Uia::Patterns::Toggle do
4
+ let(:main) { Uia.find_element id: 'MainFormWindow' }
5
+ let(:label) { main.find id: 'checkBoxLabel' }
6
+
7
+ Given(:check_box) { main.find(id: 'checkBox').as :toggle }
8
+
9
+ context 'properties' do
10
+ When { check_box.toggle }
11
+
12
+ Then { check_box.toggle_state == :on }
13
+ Then { check_box.toggle_state == :off }
14
+ end
15
+
16
+ context '#toggle' do
17
+ When { check_box.toggle }
18
+ Then { label.name == 'checkBox is on' }
19
+ end
20
+
21
+ context '#toggle=' do
22
+ Given { check_box.toggle unless check_box.toggle_state == :off }
23
+
24
+ context ':off to :on' do
25
+ When { check_box.toggle_state = :on }
26
+ Then { check_box.toggle_state == :on }
27
+ end
28
+
29
+ context ':on to :off' do
30
+ Given { check_box.toggle_state = :on }
31
+ When { check_box.toggle_state = :off }
32
+ Then { check_box.toggle_state == :off }
33
+ end
34
+
35
+ context '<state> to <same state>' do
36
+ Given!(:original_state) { check_box.toggle_state }
37
+ When { check_box.toggle_state = original_state }
38
+ Then { check_box.toggle_state == original_state }
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,16 @@
1
+ require 'spec_helper'
2
+
3
+ describe Uia::Patterns::Value do
4
+ Given(:text_field) do
5
+ Uia.find_element(id: 'MainFormWindow').children.find { |e| e.id == 'textField' }
6
+ end
7
+
8
+ context 'properties' do
9
+ Given(:value_field) { text_field.as(:value) }
10
+
11
+ Then { expect(value_field).to_not be_read_only }
12
+
13
+ When { value_field.value = 'Expected value' }
14
+ Then { value_field.value == 'Expected value' }
15
+ end
16
+ end
data/spec/uia_spec.rb CHANGED
@@ -1,28 +1,47 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Uia do
4
+ context '#children' do
5
+ Then { Uia.children.find { |e| e.name =~ /MainFormWindow/ } != nil }
6
+ end
7
+
4
8
  context '#find_element' do
5
- Given(:main_window) { find_element id: 'MainFormWindow' }
9
+ Given(:main_window) { Uia.find_element id: 'MainFormWindow' }
6
10
 
7
11
  context 'by id' do
8
- Then { find_element(id: 'MainFormWindow') != nil}
12
+ Then { Uia.find_element(id: 'MainFormWindow') != nil }
13
+ Then { Uia.find_element(id: /[Mm]ain/) != nil }
14
+ Then { Uia.find_element(id: 'not there') == nil }
15
+ end
16
+
17
+ context 'by name' do
18
+ Then { Uia.find_element(name: 'MainFormWindow') != nil }
19
+ Then { Uia.find_element(name: /[Mm]ain.*Window/ ) != nil }
20
+ Then { Uia.find_element(name: 'not there') == nil }
9
21
  end
10
22
 
11
23
  context 'by process id' do
12
- Then { find_element(pid: @app.pid) != nil }
24
+ Then { Uia.find_element(pid: @app.pid) != nil }
25
+ Then { Uia.find_element(pid: -1) == nil }
13
26
  end
14
27
 
15
28
  context 'by runtime id' do
16
- Then { find_element(runtime_id: main_window.runtime_id) != nil }
29
+ Then { Uia.find_element(runtime_id: main_window.runtime_id) != nil }
30
+
31
+ context 'can search descendants' do
32
+ Given(:element_with_no_handle) { Uia.find_element(id: 'MainFormWindow').find(name: 'Parent Two') }
33
+ Then { element_with_no_handle.click.should be_true }
34
+ end
17
35
  end
18
36
 
19
37
  context 'by window handle' do
20
- Then { find_element(handle: main_window.handle) != nil }
38
+ Then { Uia.find_element(handle: main_window.handle) != nil }
39
+ Then { expect { Uia.find_element(handle: 0x0) }.to raise_error }
21
40
  end
22
41
 
23
42
  context 'invalid locators' do
24
- When(:bad_input) { find_element(bad: 123) }
25
- Then { bad_input.should have_failed(BadLocator, '{:bad=>123} is not a valid locator') }
43
+ When(:bad_input) { Uia.find_element(bad: 123) }
44
+ Then { bad_input.should have_failed(Uia::BadLocator, '{:bad=>123} is not a valid locator') }
26
45
  end
27
46
  end
28
47
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: uia
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5.1
4
+ version: 0.0.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-10-17 00:00:00.000000000 Z
12
+ date: 2013-10-23 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: ffi
@@ -122,7 +122,7 @@ files:
122
122
  - README.md
123
123
  - Rakefile
124
124
  - ext/.gitignore
125
- - ext/UiaDll/UIA.Helper/AutomationProperty.cs
125
+ - ext/UiaDll/UIA.Helper/AutomationPropertyCondition.cs
126
126
  - ext/UiaDll/UIA.Helper/Clicker.cs
127
127
  - ext/UiaDll/UIA.Helper/Element.cs
128
128
  - ext/UiaDll/UIA.Helper/Extensions.cs
@@ -133,6 +133,7 @@ files:
133
133
  - ext/UiaDll/UiaDll.Test/ElementStub.h
134
134
  - ext/UiaDll/UiaDll.Test/ElementsTest.cpp
135
135
  - ext/UiaDll/UiaDll.Test/MemoryLeakDetector.h
136
+ - ext/UiaDll/UiaDll.Test/PatternInformationTest.cpp
136
137
  - ext/UiaDll/UiaDll.Test/ReadMe.txt
137
138
  - ext/UiaDll/UiaDll.Test/StringHelperTest.cpp
138
139
  - ext/UiaDll/UiaDll.Test/UiaDll.Test.cpp
@@ -150,26 +151,47 @@ files:
150
151
  - ext/UiaDll/UiaDll/DynamicAssemblyResolver.h
151
152
  - ext/UiaDll/UiaDll/ElementMethods.cpp
152
153
  - ext/UiaDll/UiaDll/ElementStructures.h
154
+ - ext/UiaDll/UiaDll/ExpandCollapseMethods.cpp
155
+ - ext/UiaDll/UiaDll/InvokePatternMethods.cpp
156
+ - ext/UiaDll/UiaDll/PatternInformationStructures.h
153
157
  - ext/UiaDll/UiaDll/ReadMe.txt
158
+ - ext/UiaDll/UiaDll/SelectionItemMethods.cpp
159
+ - ext/UiaDll/UiaDll/SelectionMethods.cpp
154
160
  - ext/UiaDll/UiaDll/Stdafx.cpp
155
161
  - ext/UiaDll/UiaDll/Stdafx.h
156
162
  - ext/UiaDll/UiaDll/StringHelper.h
163
+ - ext/UiaDll/UiaDll/ToggleMethods.cpp
157
164
  - ext/UiaDll/UiaDll/UiaDll.cpp
158
165
  - ext/UiaDll/UiaDll/UiaDll.h
159
166
  - ext/UiaDll/UiaDll/UiaDll.vcxproj
160
167
  - ext/UiaDll/UiaDll/UiaDll.vcxproj.filters
168
+ - ext/UiaDll/UiaDll/ValuePatternMethods.cpp
161
169
  - ext/UiaDll/UiaDll/app.rc
162
170
  - lib/uia.rb
163
171
  - lib/uia/element.rb
172
+ - lib/uia/finder.rb
164
173
  - lib/uia/library.rb
165
174
  - lib/uia/library/constants.rb
175
+ - lib/uia/library/element_attributes.rb
166
176
  - lib/uia/library/structs.rb
177
+ - lib/uia/patterns/expand_collapse.rb
178
+ - lib/uia/patterns/invoke.rb
179
+ - lib/uia/patterns/selection.rb
180
+ - lib/uia/patterns/selection_item.rb
181
+ - lib/uia/patterns/toggle.rb
182
+ - lib/uia/patterns/value.rb
167
183
  - lib/uia/version.rb
168
184
  - spec/app/FizzWare.NBuilder.dll
169
185
  - spec/app/UIA.Extensions.dll
170
186
  - spec/app/WindowsForms.exe
171
187
  - spec/spec_helper.rb
172
188
  - spec/uia/element_spec.rb
189
+ - spec/uia/patterns/expand_collapse_spec.rb
190
+ - spec/uia/patterns/invoke_spec.rb
191
+ - spec/uia/patterns/selection_item_spec.rb
192
+ - spec/uia/patterns/selection_spec.rb
193
+ - spec/uia/patterns/toggle_spec.rb
194
+ - spec/uia/patterns/value_spec.rb
173
195
  - spec/uia_spec.rb
174
196
  - uia.gemspec
175
197
  - ext/UiaDll/Release/UiaDll.dll
@@ -187,12 +209,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
187
209
  - - ! '>='
188
210
  - !ruby/object:Gem::Version
189
211
  version: '0'
212
+ segments:
213
+ - 0
214
+ hash: 149401647
190
215
  required_rubygems_version: !ruby/object:Gem::Requirement
191
216
  none: false
192
217
  requirements:
193
218
  - - ! '>='
194
219
  - !ruby/object:Gem::Version
195
220
  version: '0'
221
+ segments:
222
+ - 0
223
+ hash: 149401647
196
224
  requirements: []
197
225
  rubyforge_project:
198
226
  rubygems_version: 1.8.24
@@ -205,5 +233,10 @@ test_files:
205
233
  - spec/app/WindowsForms.exe
206
234
  - spec/spec_helper.rb
207
235
  - spec/uia/element_spec.rb
236
+ - spec/uia/patterns/expand_collapse_spec.rb
237
+ - spec/uia/patterns/invoke_spec.rb
238
+ - spec/uia/patterns/selection_item_spec.rb
239
+ - spec/uia/patterns/selection_spec.rb
240
+ - spec/uia/patterns/toggle_spec.rb
241
+ - spec/uia/patterns/value_spec.rb
208
242
  - spec/uia_spec.rb
209
- has_rdoc: