uia 0.3.2 → 0.3.3
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.
- data/ChangeLog +4 -0
- data/ext/UiaDll/UiaDll/MenuItemMethods.cpp +46 -13
- data/lib/uia/control_types/menu_item.rb +4 -0
- data/lib/uia/library.rb +6 -0
- data/lib/uia/version.rb +1 -1
- data/spec/uia/control_types/menu_item_spec.rb +9 -1
- metadata +4 -4
data/ChangeLog
CHANGED
@@ -1,27 +1,60 @@
|
|
1
1
|
#include "Stdafx.h"
|
2
2
|
|
3
3
|
extern "C" {
|
4
|
+
public ref class MenuItemNotFound : Exception {
|
5
|
+
public:
|
6
|
+
MenuItemNotFound(String^ message) : Exception(message) {}
|
7
|
+
};
|
8
|
+
|
9
|
+
void SelectMenuItemPath(ElementInformationPtr, char*, const int, list<const char*>&);
|
10
|
+
bool HasMenuItemPath(ElementInformationPtr, char*, const int, list<const char*>&);
|
11
|
+
InvokePattern^ MenuItemPath(ElementInformationPtr, list<const char*>&);
|
12
|
+
|
13
|
+
__declspec(dllexport) bool MenuItem_HasPath(ElementInformationPtr element, char* errorInfo, const int errorInfoLength, const int n, const char* arg0, ...) {
|
14
|
+
GRAB_VARARGS(menuItems, const char*, n);
|
15
|
+
return HasMenuItemPath(element, errorInfo, errorInfoLength, menuItems);
|
16
|
+
}
|
17
|
+
|
18
|
+
__declspec(dllexport) void MenuItem_SelectPath(ElementInformationPtr element, char* errorInfo, const int errorInfoLength, const int n, const char* arg0, ...) {
|
19
|
+
GRAB_VARARGS(menuItems, const char*, n);
|
20
|
+
SelectMenuItemPath(element, errorInfo, errorInfoLength, menuItems);
|
21
|
+
}
|
22
|
+
|
4
23
|
void SelectMenuItemPath(ElementInformationPtr element, char* errorInfo, const int errorInfoLength, list<const char*>& items) {
|
5
24
|
try {
|
6
|
-
|
25
|
+
MenuItemPath(element, items)->Invoke();
|
26
|
+
} catch(Exception^ e) {
|
27
|
+
StringHelper::CopyToUnmanagedString(e->Message, errorInfo, errorInfoLength);
|
28
|
+
}
|
29
|
+
}
|
7
30
|
|
8
|
-
|
9
|
-
|
31
|
+
bool HasMenuItemPath(ElementInformationPtr element, char* errorInfo, const int errorInfoLength, list<const char*>& items) {
|
32
|
+
try {
|
33
|
+
return nullptr != MenuItemPath(element, items);
|
34
|
+
} catch(MenuItemNotFound^) {
|
35
|
+
return false;
|
36
|
+
} catch(Exception^ e) {
|
37
|
+
StringHelper::CopyToUnmanagedString(e->Message, errorInfo, errorInfoLength);
|
38
|
+
return false;
|
39
|
+
}
|
40
|
+
}
|
10
41
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
42
|
+
InvokePattern^ MenuItemPath(ElementInformationPtr element, list<const char*>& items) {
|
43
|
+
auto current = ElementFrom(element);
|
44
|
+
|
45
|
+
for(auto item = items.begin(); item != items.end(); ++item) {
|
46
|
+
auto name = gcnew String(*item);
|
47
|
+
|
48
|
+
current = current->MenuItem(name);
|
49
|
+
if( nullptr == current) {
|
50
|
+
throw gcnew MenuItemNotFound(String::Format("the menu item \"{0}\" was not found", name));
|
51
|
+
}
|
15
52
|
|
53
|
+
if( *item != items.back() ) {
|
16
54
|
current->As<InvokePattern^>(InvokePattern::Pattern)->Invoke();
|
17
55
|
}
|
18
|
-
} catch(Exception^ e) {
|
19
|
-
StringHelper::CopyToUnmanagedString(e->Message, errorInfo, errorInfoLength);
|
20
56
|
}
|
21
|
-
}
|
22
57
|
|
23
|
-
|
24
|
-
GRAB_VARARGS(menuItems, const char*, n);
|
25
|
-
SelectMenuItemPath(element, errorInfo, errorInfoLength, menuItems);
|
58
|
+
return current->As<InvokePattern^>(InvokePattern::Pattern);
|
26
59
|
}
|
27
60
|
}
|
data/lib/uia/library.rb
CHANGED
@@ -153,10 +153,16 @@ module Uia
|
|
153
153
|
|
154
154
|
# MenuItem methods
|
155
155
|
attach_function :MenuItem_SelectPath, [:pointer, :pointer, :int, :int, :varargs], :void
|
156
|
+
attach_function :MenuItem_HasPath, [:pointer, :pointer, :int, :int, :varargs], :bool
|
157
|
+
|
156
158
|
def self.select_menu_path(element, *path)
|
157
159
|
try_catch {|s, n| MenuItem_SelectPath element, s, n, path.count, *path.to_var_args(:string) }
|
158
160
|
end
|
159
161
|
|
162
|
+
def self.has_menu_item(element, *path)
|
163
|
+
try_catch {|s, n| MenuItem_HasPath element, s, n, path.count, *path.to_var_args(:string) }
|
164
|
+
end
|
165
|
+
|
160
166
|
def self.find_by_runtime_id(id)
|
161
167
|
p = FFI::MemoryPointer.new :int, id.count
|
162
168
|
p.write_array_of_int(id)
|
data/lib/uia/version.rb
CHANGED
@@ -1,13 +1,21 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Uia::ControlTypes::MenuItems do
|
4
|
-
Given(:main)
|
4
|
+
Given(:main) { Uia.find_element(title: 'MainFormWindow').with(:menu_items) }
|
5
5
|
|
6
6
|
after(:each) do
|
7
7
|
about = Uia.find_element(title: 'About')
|
8
8
|
about.send_keys [:alt, :f4] if about
|
9
9
|
end
|
10
10
|
|
11
|
+
context 'existence' do
|
12
|
+
Then { expect(main).not_to have_menu_item 'non-existent' }
|
13
|
+
Then { expect(main).not_to have_menu_item 'File', 'Roundabout Way', 'To', 'Not There' }
|
14
|
+
|
15
|
+
Then { expect(main).to have_menu_item 'File' }
|
16
|
+
Then { expect(main).to have_menu_item 'File', 'Roundabout Way', 'To' }
|
17
|
+
end
|
18
|
+
|
11
19
|
context 'selecting individually' do
|
12
20
|
When { main.select_menu_item 'About' }
|
13
21
|
Then { Uia.find_element(title: 'About') != nil }
|
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.3.
|
4
|
+
version: 0.3.3
|
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: 2014-05-
|
12
|
+
date: 2014-05-14 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: ffi
|
@@ -261,7 +261,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
261
261
|
version: '0'
|
262
262
|
segments:
|
263
263
|
- 0
|
264
|
-
hash:
|
264
|
+
hash: -227578093
|
265
265
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
266
266
|
none: false
|
267
267
|
requirements:
|
@@ -270,7 +270,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
270
270
|
version: '0'
|
271
271
|
segments:
|
272
272
|
- 0
|
273
|
-
hash:
|
273
|
+
hash: -227578093
|
274
274
|
requirements: []
|
275
275
|
rubyforge_project:
|
276
276
|
rubygems_version: 1.8.28
|