uia 0.0.7.2 → 0.0.7.3

Sign up to get free protection for your applications and to get access to all the features.
data/ChangeLog CHANGED
@@ -1,3 +1,8 @@
1
+ === Version 0.0.7.3 / 2013-11-02
2
+ * Enhancements
3
+ * Element#visible?
4
+ * added support for RangeValuePattern
5
+
1
6
  === Version 0.0.7.2 / 2013-11-02
2
7
  * Enhancements
3
8
  * Element#find can specify the scope of the search
@@ -47,6 +47,11 @@ namespace UIA.Helper
47
47
  get { return _element.Current.IsEnabled; }
48
48
  }
49
49
 
50
+ public virtual bool IsVisible
51
+ {
52
+ get { return _element.Current.IsOffscreen == false; }
53
+ }
54
+
50
55
  public virtual int NativeWindowHandle
51
56
  {
52
57
  get { return _element.Current.NativeWindowHandle; }
@@ -34,6 +34,12 @@ public:
34
34
  void set(bool value) { _isEnabled = value; }
35
35
  }
36
36
 
37
+ virtual property bool IsVisible
38
+ {
39
+ bool get() override { return _isVisible; }
40
+ void set(bool value) { _isVisible = value; }
41
+ }
42
+
37
43
  virtual property array<int>^ RuntimeId
38
44
  {
39
45
  array<int>^ get() override { return _runtimeIds; }
@@ -70,4 +76,5 @@ private:
70
76
  int _nativeWindowHandle;
71
77
  int _controlTypeId;
72
78
  bool _isEnabled;
79
+ bool _isVisible;
73
80
  };
@@ -14,6 +14,7 @@ typedef struct _ElementInformation {
14
14
  char* id;
15
15
 
16
16
  bool isEnabled;
17
+ bool isVisible;
17
18
 
18
19
  _ElementInformation() : name(NULL), nativeWindowHandle(0), runtimeId(NULL), patterns(NULL), id(NULL), className(NULL) {}
19
20
 
@@ -50,6 +51,7 @@ typedef struct _ElementInformation {
50
51
  patternsLength = element->SupportedPatternIds->Length;
51
52
 
52
53
  isEnabled = element->IsEnabled;
54
+ isVisible = element->IsVisible;
53
55
  }
54
56
 
55
57
  ~_ElementInformation() {
@@ -163,4 +163,22 @@ typedef struct _TableItemInformation {
163
163
  Row = tableItemInfo->Row;
164
164
  }
165
165
 
166
- } TableItemInformation, *TableItemInformationPtr;
166
+ } TableItemInformation, *TableItemInformationPtr;
167
+
168
+ typedef struct _RangeValueInformation {
169
+ double Value;
170
+ double Minimum;
171
+ double Maximum;
172
+ double SmallChange;
173
+ double LargeChange;
174
+ bool IsReadOnly;
175
+
176
+ _RangeValueInformation(RangeValuePattern::RangeValuePatternInformation^ rangeValueInfo) {
177
+ Value = rangeValueInfo->Value;
178
+ Minimum = rangeValueInfo->Minimum;
179
+ Maximum = rangeValueInfo->Maximum;
180
+ SmallChange = rangeValueInfo->SmallChange;
181
+ LargeChange = rangeValueInfo->LargeChange;
182
+ IsReadOnly = rangeValueInfo->IsReadOnly;
183
+ }
184
+ } RangeValueInformation, *RangeValueInformationPtr;
@@ -0,0 +1,25 @@
1
+ #include "Stdafx.h"
2
+
3
+ extern "C" {
4
+ __declspec(dllexport) void RangeValue_Release(RangeValueInformationPtr rangeValueInfo) {
5
+ delete rangeValueInfo;
6
+ }
7
+
8
+ __declspec(dllexport) RangeValueInformationPtr RangeValue_Information(ElementInformationPtr element, char* errorInfo, const int errorInfoLength) {
9
+ try {
10
+ return new RangeValueInformation(Find(element)->As<RangeValuePattern^>(RangeValuePattern::Pattern)->Current);
11
+ } catch(Exception^ e) {
12
+ StringHelper::CopyToUnmanagedString(e->Message, errorInfo, errorInfoLength);
13
+ return NULL;
14
+ }
15
+ }
16
+
17
+ __declspec(dllexport) void RangeValue_SetValue(ElementInformationPtr element, double value, char* errorInfo, const int errorInfoLength) {
18
+ try {
19
+ return Find(element)->As<RangeValuePattern^>(RangeValuePattern::Pattern)->SetValue(value);
20
+ } catch(Exception^ e) {
21
+ StringHelper::CopyToUnmanagedString(e->Message, errorInfo, errorInfoLength);
22
+ }
23
+ }
24
+
25
+ }
@@ -92,6 +92,7 @@
92
92
  <ClCompile Include="ElementMethods.cpp" />
93
93
  <ClCompile Include="ExpandCollapseMethods.cpp" />
94
94
  <ClCompile Include="InvokePatternMethods.cpp" />
95
+ <ClCompile Include="RangeValueMethods.cpp" />
95
96
  <ClCompile Include="SelectionItemMethods.cpp" />
96
97
  <ClCompile Include="SelectionMethods.cpp" />
97
98
  <ClCompile Include="Stdafx.cpp">
@@ -80,5 +80,8 @@
80
80
  <ClCompile Include="TableItemMethods.cpp">
81
81
  <Filter>Source Files\Patterns</Filter>
82
82
  </ClCompile>
83
+ <ClCompile Include="RangeValueMethods.cpp">
84
+ <Filter>Source Files\Patterns</Filter>
85
+ </ClCompile>
83
86
  </ItemGroup>
84
87
  </Project>
data/lib/uia/element.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'uia/library/element_attributes'
2
+ require 'uia/library/pattern_info_attributes'
2
3
 
3
4
  module Uia
4
5
  class UnsupportedPattern < StandardError
@@ -15,7 +16,9 @@ module Uia
15
16
  @default = lambda { [:unknown] }
16
17
  end
17
18
 
18
- element_attr :id, :name, :handle, :runtime_id, :enabled?, :class_name, :children, :descendants
19
+ element_attr :id, :name, :handle, :runtime_id,
20
+ :class_name, :children, :descendants
21
+ refreshed_element_attr :enabled?, :visible?
19
22
 
20
23
  def control_type
21
24
  Library::Constants::ControlTypes.find(@default) { |_, v| v == @element.control_type_id }.first
data/lib/uia/library.rb CHANGED
@@ -49,6 +49,7 @@ module Uia
49
49
  attach_function :release_table_info, :Table_Release, [:pointer], :void
50
50
  attach_function :release_table_item_info, :TableItem_Release, [:pointer], :void
51
51
  attach_function :release_expand_collapse_info, :ExpandCollapse_Release, [:pointer], :void
52
+ attach_function :release_range_value_info, :RangeValue_Release, [:pointer], :void
52
53
 
53
54
  # root methods
54
55
  elements_from :root_children, :Root_Children, []
@@ -103,6 +104,10 @@ module Uia
103
104
  # TableItemPattern methods
104
105
  attach_throwable_function :table_item_info, :TableItem_Information, [:pointer], TableItemInformation.by_ref
105
106
 
107
+ # RangeValuePattern methods
108
+ attach_throwable_function :range_value_info, :RangeValue_Information, [:pointer], RangeValueInformation.by_ref
109
+ attach_throwable_function :set_range_value, :RangeValue_SetValue, [:pointer, :double], :void
110
+
106
111
  def self.find_by_runtime_id(id)
107
112
  p = FFI::MemoryPointer.new :int, id.count
108
113
  p.write_array_of_int(id)
@@ -7,5 +7,14 @@ module Uia
7
7
  end
8
8
  end
9
9
  end
10
+
11
+ def refreshed_element_attr(*attrs)
12
+ attrs.each do |attr|
13
+ define_method(attr) do
14
+ refresh
15
+ @element.send(attr)
16
+ end
17
+ end
18
+ end
10
19
  end
11
20
  end
@@ -1,10 +1,14 @@
1
1
  require 'ffi'
2
2
 
3
+ require 'uia/library/struct_attributes'
4
+
3
5
  module Uia
4
6
  module Library
5
7
  module ElementLayout
6
8
  def self.included(base)
7
9
  base.class_eval do
10
+ extend StructAttributes
11
+
8
12
  layout :handle, :int,
9
13
  :runtime_id, :pointer,
10
14
  :number_of_ids, :int,
@@ -14,28 +18,16 @@ module Uia
14
18
  :patterns, :pointer,
15
19
  :patterns_length, :int,
16
20
  :id, :string,
17
- :is_enabled, :bool
18
-
19
- def id
20
- self[:id]
21
- end
21
+ :is_enabled, :bool,
22
+ :is_visible, :bool
22
23
 
23
- def name
24
- self[:name]
25
- end
26
-
27
- def handle
28
- self[:handle]
29
- end
24
+ struct_attr :id, :name, :handle, :control_type_id, :class_name,
25
+ [:enabled?, :is_enabled], [:visible?, :is_visible]
30
26
 
31
27
  def runtime_id
32
28
  self[:runtime_id].read_array_of_int(number_of_ids)
33
29
  end
34
30
 
35
- def control_type_id
36
- self[:control_type_id]
37
- end
38
-
39
31
  def pattern_ids
40
32
  self[:patterns].read_array_of_int(self[:patterns_length])
41
33
  end
@@ -52,14 +44,6 @@ module Uia
52
44
  to_ptr.address == 0
53
45
  end
54
46
 
55
- def enabled?
56
- self[:is_enabled]
57
- end
58
-
59
- def class_name
60
- self[:class_name]
61
- end
62
-
63
47
  private
64
48
  def number_of_ids
65
49
  self[:number_of_ids]
@@ -0,0 +1,11 @@
1
+ module Uia
2
+ module PatternInfoAttributes
3
+ def pattern_attr(*attrs)
4
+ attrs.each do |attr|
5
+ define_method(attr) do
6
+ pattern_info.send(attr)
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -1,16 +1,14 @@
1
+ require 'uia/library/struct_attributes'
2
+
1
3
  module Uia
2
4
  module Library
3
5
  class ValueInformation < FFI::ManagedStruct
6
+ extend StructAttributes
7
+
4
8
  layout :is_read_only, :bool,
5
9
  :value, :string
6
10
 
7
- def read_only?
8
- self[:is_read_only]
9
- end
10
-
11
- def value
12
- self[:value]
13
- end
11
+ struct_attr [:read_only?, :is_read_only], :value
14
12
 
15
13
  def self.release(pointer)
16
14
  Library.release_value_info(pointer)
@@ -76,6 +74,8 @@ module Uia
76
74
  end
77
75
 
78
76
  class WindowInformation < FFI::ManagedStruct
77
+ extend StructAttributes
78
+
79
79
  layout :visual_state, :string,
80
80
  :interaction_state, :string,
81
81
  :can_minimize, :bool,
@@ -83,29 +83,8 @@ module Uia
83
83
  :is_modal, :bool,
84
84
  :is_topmost, :bool
85
85
 
86
- def visual_state
87
- self[:visual_state]
88
- end
89
-
90
- def can_minimize?
91
- self[:can_minimize]
92
- end
93
-
94
- def can_maximize?
95
- self[:can_maximize]
96
- end
97
-
98
- def modal?
99
- self[:is_modal]
100
- end
101
-
102
- def topmost?
103
- self[:is_topmost]
104
- end
105
-
106
- def interaction_state
107
- self[:interaction_state]
108
- end
86
+ struct_attr :visual_state, [:can_minimize?, :can_minimize], [:can_maximize?, :can_maximize],
87
+ [:modal?, :is_modal], [:topmost?, :is_topmost], :interaction_state
109
88
 
110
89
  def self.release(pointer)
111
90
  Library.release_window_info(pointer)
@@ -113,17 +92,13 @@ module Uia
113
92
  end
114
93
 
115
94
  class TableInformation < FFI::ManagedStruct
95
+ extend StructAttributes
96
+
116
97
  layout :row_count, :int,
117
98
  :column_count, :int,
118
99
  :headers, Elements.ptr
119
100
 
120
- def row_count
121
- self[:row_count]
122
- end
123
-
124
- def column_count
125
- self[:column_count]
126
- end
101
+ struct_attr :row_count, :column_count
127
102
 
128
103
  def headers
129
104
  self[:headers].children
@@ -135,21 +110,33 @@ module Uia
135
110
  end
136
111
 
137
112
  class TableItemInformation < FFI::ManagedStruct
113
+ extend StructAttributes
114
+
138
115
  layout :column, :int,
139
116
  :row, :int
140
117
 
141
- def column
142
- self[:column]
143
- end
144
-
145
- def row
146
- self[:row]
147
- end
118
+ struct_attr :column, :row
148
119
 
149
120
  def self.release(pointer)
150
121
  Library.release_table_item_info(pointer)
151
122
  end
152
123
  end
153
124
 
125
+ class RangeValueInformation < FFI::ManagedStruct
126
+ extend StructAttributes
127
+
128
+ layout :value, :double,
129
+ :minimum, :double,
130
+ :maximum, :double,
131
+ :small_change, :double,
132
+ :large_change, :double,
133
+ :is_read_only, :bool
134
+
135
+ struct_attr :value, :minimum, :maximum, :small_change, :large_change, [:read_only?, :is_read_only]
136
+
137
+ def self.release(pointer)
138
+ Library.release_range_value_info(pointer)
139
+ end
140
+ end
154
141
  end
155
142
  end
@@ -0,0 +1,12 @@
1
+ module Uia
2
+ module StructAttributes
3
+ def struct_attr(*attrs)
4
+ attrs.each do |attr|
5
+ meth, aka = attr
6
+ define_method(meth) do
7
+ self[aka || meth]
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,19 @@
1
+ module Uia
2
+ module Patterns
3
+ module RangeValue
4
+ extend PatternInfoAttributes
5
+
6
+ pattern_attr :value, :minimum, :maximum,
7
+ :small_change, :large_change, :read_only?
8
+
9
+ def value=(num)
10
+ Library.set_range_value @element, num
11
+ end
12
+
13
+ private
14
+ def pattern_info
15
+ Library.range_value_info @element
16
+ end
17
+ end
18
+ end
19
+ end
data/lib/uia/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Uia
2
- VERSION = '0.0.7.2'
2
+ VERSION = '0.0.7.3'
3
3
  end
@@ -3,6 +3,7 @@ require 'spec_helper'
3
3
  describe Uia::Element do
4
4
  Given(:element) { Uia.find_element(id: 'MainFormWindow') }
5
5
  Given(:about_box) { Uia.find_element(id: 'AboutBox') }
6
+ Given { element.as(:window).visual_state = :normal }
6
7
 
7
8
  context 'properties' do
8
9
  let(:raw_element) { element.instance_variable_get(:@element) }
@@ -12,6 +13,11 @@ describe Uia::Element do
12
13
  Then { element.class_name =~ /Forms.*app/i }
13
14
  Then { expect(element.find(id: 'textField')).to be_enabled }
14
15
 
16
+ context 'visibility' do
17
+ When { element.as(:window).visual_state = :minimized }
18
+ Then { element.visible? == false }
19
+ end
20
+
15
21
  context '#control_type' do
16
22
  Then { element.control_type == :window }
17
23
 
@@ -0,0 +1,19 @@
1
+ require 'spec_helper'
2
+
3
+ describe Uia::Patterns::RangeValue do
4
+ Given(:range_value) { Uia.find_element(id: /MainForm/).find(id: 'numericUpDown1').as :range_value }
5
+
6
+ context 'properties' do
7
+ Then { range_value.value == 0.0 }
8
+ Then { range_value.minimum == 0.0 }
9
+ Then { range_value.maximum == 100.0 }
10
+ Then { range_value.small_change == 1.0 }
11
+ Then { range_value.large_change == 0.0 }
12
+ Then { range_value.read_only? == false }
13
+ end
14
+
15
+ context '#value=' do
16
+ When { range_value.value = 37.3 }
17
+ Then { range_value.value == 37.3 }
18
+ end
19
+ 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.7.2
4
+ version: 0.0.7.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -170,6 +170,7 @@ files:
170
170
  - ext/UiaDll/UiaDll/ExpandCollapseMethods.cpp
171
171
  - ext/UiaDll/UiaDll/InvokePatternMethods.cpp
172
172
  - ext/UiaDll/UiaDll/PatternInformationStructures.h
173
+ - ext/UiaDll/UiaDll/RangeValueMethods.cpp
173
174
  - ext/UiaDll/UiaDll/ReadMe.txt
174
175
  - ext/UiaDll/UiaDll/SelectionItemMethods.cpp
175
176
  - ext/UiaDll/UiaDll/SelectionMethods.cpp
@@ -195,9 +196,12 @@ files:
195
196
  - lib/uia/library/constants.rb
196
197
  - lib/uia/library/element_attributes.rb
197
198
  - lib/uia/library/element_structs.rb
199
+ - lib/uia/library/pattern_info_attributes.rb
198
200
  - lib/uia/library/pattern_structs.rb
201
+ - lib/uia/library/struct_attributes.rb
199
202
  - lib/uia/patterns/expand_collapse.rb
200
203
  - lib/uia/patterns/invoke.rb
204
+ - lib/uia/patterns/range_value.rb
201
205
  - lib/uia/patterns/selection.rb
202
206
  - lib/uia/patterns/selection_item.rb
203
207
  - lib/uia/patterns/table.rb
@@ -213,6 +217,7 @@ files:
213
217
  - spec/uia/element_spec.rb
214
218
  - spec/uia/patterns/expand_collapse_spec.rb
215
219
  - spec/uia/patterns/invoke_spec.rb
220
+ - spec/uia/patterns/range_value_spec.rb
216
221
  - spec/uia/patterns/selection_item_spec.rb
217
222
  - spec/uia/patterns/selection_spec.rb
218
223
  - spec/uia/patterns/table_item_spec.rb
@@ -239,7 +244,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
239
244
  version: '0'
240
245
  segments:
241
246
  - 0
242
- hash: -527449199
247
+ hash: 100309903
243
248
  required_rubygems_version: !ruby/object:Gem::Requirement
244
249
  none: false
245
250
  requirements:
@@ -248,7 +253,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
248
253
  version: '0'
249
254
  segments:
250
255
  - 0
251
- hash: -527449199
256
+ hash: 100309903
252
257
  requirements: []
253
258
  rubyforge_project:
254
259
  rubygems_version: 1.8.24
@@ -263,6 +268,7 @@ test_files:
263
268
  - spec/uia/element_spec.rb
264
269
  - spec/uia/patterns/expand_collapse_spec.rb
265
270
  - spec/uia/patterns/invoke_spec.rb
271
+ - spec/uia/patterns/range_value_spec.rb
266
272
  - spec/uia/patterns/selection_item_spec.rb
267
273
  - spec/uia/patterns/selection_spec.rb
268
274
  - spec/uia/patterns/table_item_spec.rb