win32-autogui 0.5.1 → 0.5.2
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/Gemfile.lock +1 -1
- data/HISTORY.markdown +4 -0
- data/LICENSE +1 -1
- data/README.markdown +2 -1
- data/TODO.markdown +2 -0
- data/VERSION +1 -1
- data/examples/quicknote/README.markdown +1 -1
- data/examples/quicknote/lib/quicknote.rb +20 -8
- data/examples/quicknote/spec/quicknote/form_about_spec.rb +2 -2
- data/examples/quicknote/spec/quicknote/form_main_spec.rb +15 -9
- data/examples/quicknote/spec/quicknote/form_splash_spec.rb +3 -3
- data/lib/win32/autogui/window.rb +15 -2
- data/lib/win32/autogui/windows/window.rb +1 -0
- data/spec/applications/calculator.rb +6 -0
- data/spec/applications/notepad.rb +9 -2
- data/spec/auto_gui/application_spec.rb +2 -2
- metadata +58 -60
data/Gemfile.lock
CHANGED
data/HISTORY.markdown
CHANGED
@@ -5,6 +5,10 @@ Most recent changes are at the top
|
|
5
5
|
Changes
|
6
6
|
-------
|
7
7
|
|
8
|
+
### 0.5.2 - 06/01/2012 ###
|
9
|
+
|
10
|
+
* Retrieving the text of windows and controls is now more robust. Issue #5. (ebertech)
|
11
|
+
|
8
12
|
### 0.5.1 - 08/20/2011 ###
|
9
13
|
|
10
14
|
* Rebuild gem without psych to work-around the 'invalid gemspec date' issue
|
data/LICENSE
CHANGED
data/README.markdown
CHANGED
@@ -34,6 +34,7 @@ Run Win32-autogui's internal specs and example programs from the system gem loca
|
|
34
34
|
|
35
35
|
# run the example quicknote specs
|
36
36
|
cd examples\quicknote
|
37
|
+
bundle install
|
37
38
|
bundle exec rake
|
38
39
|
|
39
40
|
|
@@ -327,4 +328,4 @@ Cucumber, as appropriate.
|
|
327
328
|
Copyright
|
328
329
|
---------
|
329
330
|
|
330
|
-
Copyright (c) 2010-
|
331
|
+
Copyright (c) 2010-2012 GearheadForHire, LLC. See [LICENSE](LICENSE) for details.
|
data/TODO.markdown
CHANGED
@@ -4,6 +4,8 @@ TODO
|
|
4
4
|
general
|
5
5
|
-------
|
6
6
|
|
7
|
+
* refactor application.running? to make sure the pid even exists before
|
8
|
+
looping
|
7
9
|
* (1.0) stop changing $LOAD_PATH in specs and features, modify ENV[] in before
|
8
10
|
and afters
|
9
11
|
* (1.0) implement Application.find and add option to not start application
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.5.
|
1
|
+
0.5.2
|
@@ -15,6 +15,11 @@ def initialize(options = {})
|
|
15
15
|
super defaults.merge(options)
|
16
16
|
end
|
17
17
|
|
18
|
+
# timeout in seconds to wait for desktop windows to appear
|
19
|
+
def default_window_timeout
|
20
|
+
1
|
21
|
+
end
|
22
|
+
|
18
23
|
def edit_window
|
19
24
|
main_window.children.find {|w| w.window_class == 'TMemo'}
|
20
25
|
end
|
@@ -24,18 +29,21 @@ def status_bar
|
|
24
29
|
end
|
25
30
|
|
26
31
|
def dialog_about(options={})
|
32
|
+
options[:timeout] = default_window_timeout unless options[:timeout]
|
27
33
|
Autogui::EnumerateDesktopWindows.new(options).find do |w|
|
28
34
|
w.title.match(/^About QuickNote/) && (w.pid == pid)
|
29
35
|
end
|
30
36
|
end
|
31
37
|
|
32
38
|
def splash(options={})
|
39
|
+
options[:timeout] = default_window_timeout unless options[:timeout]
|
33
40
|
Autogui::EnumerateDesktopWindows.new(options).find do |w|
|
34
41
|
w.title.match(/^FormSplash/) && (w.pid == pid)
|
35
42
|
end
|
36
43
|
end
|
37
44
|
|
38
45
|
def message_dialog_confirm(options={})
|
46
|
+
options[:timeout] = default_window_timeout unless options[:timeout]
|
39
47
|
Autogui::EnumerateDesktopWindows.new(options).find do |w|
|
40
48
|
w.title.match(/^Confirm/) && (w.pid == pid)
|
41
49
|
end
|
@@ -44,6 +52,7 @@ def message_dialog_confirm(options={})
|
|
44
52
|
# Title and class are the same as dialog_overwrite_confirm
|
45
53
|
# Use child windows to differentiate
|
46
54
|
def dialog_overwrite_confirm(options={})
|
55
|
+
options[:timeout] = default_window_timeout unless options[:timeout]
|
47
56
|
Autogui::EnumerateDesktopWindows.new(options).find do |w|
|
48
57
|
w.title.match(/^Text File Save$/) &&
|
49
58
|
(w.pid == pid) &&
|
@@ -54,6 +63,7 @@ def dialog_overwrite_confirm(options={})
|
|
54
63
|
|
55
64
|
# Title and class are the same as dialog_overwrite_confirm
|
56
65
|
def file_save_as_dialog(options={})
|
66
|
+
options[:timeout] = default_window_timeout unless options[:timeout]
|
57
67
|
Autogui::EnumerateDesktopWindows.new(options).find do |w|
|
58
68
|
w.title.match(/^Text File Save/) &&
|
59
69
|
(w.pid == pid) &&
|
@@ -63,12 +73,14 @@ def file_save_as_dialog(options={})
|
|
63
73
|
end
|
64
74
|
|
65
75
|
def file_open_dialog(options={})
|
76
|
+
options[:timeout] = default_window_timeout unless options[:timeout]
|
66
77
|
Autogui::EnumerateDesktopWindows.new(options).find do |w|
|
67
78
|
w.title.match(/^Text File Open/) && (w.pid == pid)
|
68
79
|
end
|
69
80
|
end
|
70
81
|
|
71
82
|
def error_dialog(options={})
|
83
|
+
options[:timeout] = default_window_timeout unless options[:timeout]
|
72
84
|
Autogui::EnumerateDesktopWindows.new(options).find do |w|
|
73
85
|
w.title.match(/^QuickNote$/) && (w.pid == pid) && (w.window_class == "#32770")
|
74
86
|
end
|
@@ -78,22 +90,22 @@ def error_dialog(options={})
|
|
78
90
|
def file_new(options={})
|
79
91
|
set_focus
|
80
92
|
keystroke(VK_MENU, VK_F, VK_N)
|
81
|
-
if message_dialog_confirm
|
93
|
+
if message_dialog_confirm(:timeout => 0)
|
82
94
|
options[:save] == true ? keystroke(VK_Y) : keystroke(VK_N)
|
83
95
|
end
|
84
96
|
# sanity check
|
85
|
-
raise "confirm dialog is still here" if message_dialog_confirm
|
97
|
+
raise "confirm dialog is still here" if message_dialog_confirm(:timeout => 0)
|
86
98
|
end
|
87
99
|
|
88
100
|
# menu action File, New
|
89
101
|
def file_open(filename, options={})
|
90
102
|
set_focus
|
91
103
|
keystroke(VK_MENU, VK_F, VK_O)
|
92
|
-
if message_dialog_confirm
|
104
|
+
if message_dialog_confirm(:timeout => 0)
|
93
105
|
options[:save] == true ? keystroke(VK_Y) : keystroke(VK_N)
|
94
106
|
end
|
95
107
|
|
96
|
-
raise "sanity check, confirm dialog is still here" if message_dialog_confirm
|
108
|
+
raise "sanity check, confirm dialog is still here" if message_dialog_confirm(:timeout => 0)
|
97
109
|
raise "sanity check, file_open_dialog not found" unless file_open_dialog
|
98
110
|
|
99
111
|
# Paste in filename for speed, much faster than 'type_in(filename)'
|
@@ -106,10 +118,10 @@ def file_open(filename, options={})
|
|
106
118
|
# menu action File, Exit
|
107
119
|
def file_exit
|
108
120
|
set_focus
|
109
|
-
keystroke(VK_N) if message_dialog_confirm
|
110
|
-
keystroke(VK_ESCAPE) if file_open_dialog
|
121
|
+
keystroke(VK_N) if message_dialog_confirm(:timeout => 0)
|
122
|
+
keystroke(VK_ESCAPE) if file_open_dialog(:timeout => 0)
|
111
123
|
keystroke(VK_MENU, VK_F, VK_X)
|
112
|
-
keystroke(VK_N) if message_dialog_confirm
|
124
|
+
keystroke(VK_N) if message_dialog_confirm(:timeout => 0)
|
113
125
|
end
|
114
126
|
|
115
127
|
# menu action File, Save
|
@@ -132,7 +144,7 @@ def file_save_as(filename, options={})
|
|
132
144
|
if dialog_overwrite_confirm
|
133
145
|
options[:overwrite] == true ? keystroke(VK_Y) : keystroke(VK_N)
|
134
146
|
end
|
135
|
-
raise "sanity check, overwrite confirm dialog is still here" if dialog_overwrite_confirm
|
147
|
+
raise "sanity check, overwrite confirm dialog is still here" if dialog_overwrite_confirm(:timeout => 0)
|
136
148
|
|
137
149
|
end
|
138
150
|
|
@@ -14,7 +14,7 @@
|
|
14
14
|
end
|
15
15
|
|
16
16
|
before(:each) do
|
17
|
-
@application.dialog_about.should be_nil
|
17
|
+
@application.dialog_about(:timeout => 0).should be_nil
|
18
18
|
@application.set_focus
|
19
19
|
keystroke(VK_MENU, VK_H, VK_A)
|
20
20
|
@dialog_about = @application.dialog_about
|
@@ -34,7 +34,7 @@
|
|
34
34
|
it "should close by hitting return" do
|
35
35
|
@dialog_about.set_focus
|
36
36
|
keystroke(VK_RETURN)
|
37
|
-
@application.dialog_about.should be_nil
|
37
|
+
@application.dialog_about(:timeout => 0).should be_nil
|
38
38
|
end
|
39
39
|
|
40
40
|
it "should have the title 'About QuickNote'" do
|
@@ -28,8 +28,8 @@
|
|
28
28
|
end
|
29
29
|
after(:each) do
|
30
30
|
if @application.running?
|
31
|
-
keystroke(VK_N) if @application.message_dialog_confirm || @application.dialog_overwrite_confirm
|
32
|
-
keystroke(VK_ESCAPE) if @application.error_dialog
|
31
|
+
keystroke(VK_N) if @application.message_dialog_confirm(:timeout => 0) || @application.dialog_overwrite_confirm(:timeout => 0)
|
32
|
+
keystroke(VK_ESCAPE) if @application.error_dialog(:timeout => 0)
|
33
33
|
end
|
34
34
|
puts "FormMain after(:each)" if @debug
|
35
35
|
end
|
@@ -67,8 +67,14 @@
|
|
67
67
|
@application.file_new(:save => false)
|
68
68
|
end
|
69
69
|
after(:each) do
|
70
|
-
|
71
|
-
|
70
|
+
if @application.message_dialog_confirm(:timeout => 0)
|
71
|
+
@application.message_dialog_confirm.set_focus
|
72
|
+
keystroke(VK_N)
|
73
|
+
end
|
74
|
+
if @application.file_open_dialog(:timeout => 0)
|
75
|
+
@application.file_open_dialog.set_focus
|
76
|
+
keystroke(VK_ESCAPE)
|
77
|
+
end
|
72
78
|
end
|
73
79
|
|
74
80
|
it "should prompt to save with modified text" do
|
@@ -80,7 +86,7 @@
|
|
80
86
|
it "should not prompt to save with unmodified text" do
|
81
87
|
@application.main_window.title.should_not match(/\+/)
|
82
88
|
keystroke(VK_MENU, VK_F, VK_O)
|
83
|
-
@application.message_dialog_confirm.should be_nil
|
89
|
+
@application.message_dialog_confirm(:timeout => 0).should be_nil
|
84
90
|
end
|
85
91
|
|
86
92
|
describe "succeeding" do
|
@@ -122,7 +128,7 @@
|
|
122
128
|
@application.file_new(:save => false)
|
123
129
|
@application.main_window.title.should_not match(/\+/)
|
124
130
|
keystroke(VK_MENU, VK_F, VK_N)
|
125
|
-
@application.message_dialog_confirm.should be_nil
|
131
|
+
@application.message_dialog_confirm(:timeout => 0).should be_nil
|
126
132
|
end
|
127
133
|
it "should add the filename 'untitled.txt' to the title" do
|
128
134
|
filename = "input_file.txt"
|
@@ -222,8 +228,8 @@
|
|
222
228
|
@application.file_open(fullpath(@filename), :save => false)
|
223
229
|
end
|
224
230
|
after(:each) do
|
225
|
-
keystroke(VK_N) if @application.dialog_overwrite_confirm
|
226
|
-
keystroke(VK_ESCAPE) if @application.file_save_as_dialog
|
231
|
+
keystroke(VK_N) if @application.dialog_overwrite_confirm(:timeout => 0)
|
232
|
+
keystroke(VK_ESCAPE) if @application.file_save_as_dialog(:timeout => 0)
|
227
233
|
end
|
228
234
|
|
229
235
|
it "should prompt for filename" do
|
@@ -266,7 +272,7 @@
|
|
266
272
|
end
|
267
273
|
it "should not prompt to save with unmodified text" do
|
268
274
|
keystroke(VK_MENU, VK_F, VK_X)
|
269
|
-
@application.message_dialog_confirm.should be_nil
|
275
|
+
@application.message_dialog_confirm(:timeout => 0).should be_nil
|
270
276
|
@application.main_window.is_window?.should == false
|
271
277
|
@application.should_not be_running
|
272
278
|
end
|
@@ -6,7 +6,7 @@
|
|
6
6
|
describe "FormSplash" do
|
7
7
|
after(:each) do
|
8
8
|
if @application && @application.running?
|
9
|
-
@application.splash.wait_for_close if @application.splash
|
9
|
+
@application.splash.wait_for_close if @application.splash(:timeout => 0)
|
10
10
|
@application.file_exit
|
11
11
|
# still running? force it to close
|
12
12
|
@application.close(:wait_for_close => true)
|
@@ -30,7 +30,7 @@
|
|
30
30
|
timeout(seconds) do
|
31
31
|
@application.splash.wait_for_close
|
32
32
|
end
|
33
|
-
@application.splash.should be_nil
|
33
|
+
@application.splash(:timeout => 0).should be_nil
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
@@ -38,7 +38,7 @@
|
|
38
38
|
it "should not show" do
|
39
39
|
@application = Quicknote.new :parameters => '--nosplash'
|
40
40
|
@application.should be_running
|
41
|
-
@application.splash.should be_nil
|
41
|
+
@application.splash(:timeout => 0).should be_nil
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
data/lib/win32/autogui/window.rb
CHANGED
@@ -141,7 +141,7 @@ def window_class
|
|
141
141
|
length == 0 ? '' : buffer[0..length - 1]
|
142
142
|
end
|
143
143
|
|
144
|
-
# Window text (WM_GETTEXT)
|
144
|
+
# Window text (GetWindowText or WM_GETTEXT)
|
145
145
|
#
|
146
146
|
# @param [Number] max_length (2048)
|
147
147
|
#
|
@@ -149,11 +149,24 @@ def window_class
|
|
149
149
|
#
|
150
150
|
def text(max_length = 2048)
|
151
151
|
buffer = "\0" * max_length
|
152
|
-
length =
|
152
|
+
length = if is_control?
|
153
|
+
SendMessageA(handle, WM_GETTEXT, buffer.length, buffer)
|
154
|
+
else
|
155
|
+
GetWindowText(handle, buffer, buffer.length)
|
156
|
+
end
|
157
|
+
|
153
158
|
length == 0 ? '' : buffer[0..length - 1]
|
154
159
|
end
|
155
160
|
alias :title :text
|
156
161
|
|
162
|
+
# Determines whether the specified window handle identifies a window or a control
|
163
|
+
#
|
164
|
+
# @return [Boolean]
|
165
|
+
#
|
166
|
+
def is_control?
|
167
|
+
(handle != 0) && (GetDlgCtrlID(handle) != 0)
|
168
|
+
end
|
169
|
+
|
157
170
|
# Determines whether the specified window handle identifies an existing window
|
158
171
|
#
|
159
172
|
# @return [Boolean]
|
@@ -19,8 +19,14 @@ def edit_window
|
|
19
19
|
main_window.children.find {|w| w.window_class == 'Edit'}
|
20
20
|
end
|
21
21
|
|
22
|
+
# timeout in seconds to wait for desktop windows to appear
|
23
|
+
def default_window_timeout
|
24
|
+
1
|
25
|
+
end
|
26
|
+
|
22
27
|
# About dialog, hotkey (VK_MENU, VK_H, VK_A)
|
23
28
|
def dialog_about(options = {})
|
29
|
+
options[:timeout] = default_window_timeout unless options[:timeout]
|
24
30
|
Autogui::EnumerateDesktopWindows.new(options).find do |w|
|
25
31
|
w.title.match(/About Calculator/) && (w.pid == pid)
|
26
32
|
end
|
@@ -14,6 +14,11 @@ def initialize(options = {})
|
|
14
14
|
super defaults.merge(options)
|
15
15
|
end
|
16
16
|
|
17
|
+
# timeout in seconds to wait for desktop windows to appear
|
18
|
+
def default_window_timeout
|
19
|
+
1
|
20
|
+
end
|
21
|
+
|
17
22
|
# the notepad's results window
|
18
23
|
def edit_window
|
19
24
|
main_window.children.find {|w| w.window_class == 'Edit'}
|
@@ -21,12 +26,14 @@ def edit_window
|
|
21
26
|
|
22
27
|
# About dialog, hotkey (VK_MENU, VK_H, VK_A)
|
23
28
|
def dialog_about(options = {})
|
29
|
+
options[:timeout] = default_window_timeout unless options[:timeout]
|
24
30
|
Autogui::EnumerateDesktopWindows.new(options).find do |w|
|
25
31
|
w.title.match(/About Notepad/) && (w.pid == pid)
|
26
32
|
end
|
27
33
|
end
|
28
34
|
|
29
35
|
def message_dialog_confirm(options={})
|
36
|
+
options[:timeout] = default_window_timeout unless options[:timeout]
|
30
37
|
Autogui::EnumerateDesktopWindows.new(options).find do |w|
|
31
38
|
w.title.match(/Notepad/) && (w.pid == pid) && (w.window_class == "#32770")
|
32
39
|
end
|
@@ -36,8 +43,8 @@ def message_dialog_confirm(options={})
|
|
36
43
|
def file_exit
|
37
44
|
set_focus
|
38
45
|
keystroke(VK_MENU, VK_F, VK_X)
|
39
|
-
if message_dialog_confirm
|
40
|
-
keystroke(VK_N)
|
46
|
+
if message_dialog_confirm(:timeout => 0)
|
47
|
+
keystroke(VK_N)
|
41
48
|
end
|
42
49
|
end
|
43
50
|
|
@@ -71,13 +71,13 @@
|
|
71
71
|
|
72
72
|
it "should open and close the 'About Calculator' dialog via (VK_MENU, VK_H, VK_A)" do
|
73
73
|
@calculator.set_focus
|
74
|
-
dialog_about = @calculator.dialog_about
|
74
|
+
dialog_about = @calculator.dialog_about(:timeout => 0)
|
75
75
|
dialog_about.should be_nil
|
76
76
|
keystroke(VK_MENU, VK_H, VK_A)
|
77
77
|
dialog_about = @calculator.dialog_about
|
78
78
|
dialog_about.title.should == "About Calculator"
|
79
79
|
dialog_about.close
|
80
|
-
@calculator.dialog_about.should be_nil
|
80
|
+
@calculator.dialog_about(:timeout => 0).should be_nil
|
81
81
|
end
|
82
82
|
|
83
83
|
describe "calculations" do
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: win32-autogui
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
5
|
-
prerelease:
|
4
|
+
hash: 15
|
5
|
+
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 5
|
9
|
-
-
|
10
|
-
version: 0.5.
|
9
|
+
- 2
|
10
|
+
version: 0.5.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Robert Wahler
|
@@ -15,11 +15,10 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date:
|
19
|
-
default_executable:
|
18
|
+
date: 2012-06-05 00:00:00 Z
|
20
19
|
dependencies:
|
21
20
|
- !ruby/object:Gem::Dependency
|
22
|
-
|
21
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
23
22
|
none: false
|
24
23
|
requirements:
|
25
24
|
- - ~>
|
@@ -30,12 +29,12 @@ dependencies:
|
|
30
29
|
- 4
|
31
30
|
- 0
|
32
31
|
version: 0.4.0
|
33
|
-
|
34
|
-
type: :runtime
|
35
|
-
name: windows-api
|
32
|
+
version_requirements: *id001
|
36
33
|
prerelease: false
|
34
|
+
name: windows-api
|
35
|
+
type: :runtime
|
37
36
|
- !ruby/object:Gem::Dependency
|
38
|
-
|
37
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
39
38
|
none: false
|
40
39
|
requirements:
|
41
40
|
- - ~>
|
@@ -46,12 +45,12 @@ dependencies:
|
|
46
45
|
- 2
|
47
46
|
- 0
|
48
47
|
version: 1.2.0
|
49
|
-
|
50
|
-
type: :runtime
|
51
|
-
name: windows-pr
|
48
|
+
version_requirements: *id002
|
52
49
|
prerelease: false
|
50
|
+
name: windows-pr
|
51
|
+
type: :runtime
|
53
52
|
- !ruby/object:Gem::Dependency
|
54
|
-
|
53
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
55
54
|
none: false
|
56
55
|
requirements:
|
57
56
|
- - ~>
|
@@ -62,12 +61,12 @@ dependencies:
|
|
62
61
|
- 6
|
63
62
|
- 5
|
64
63
|
version: 0.6.5
|
65
|
-
|
66
|
-
type: :runtime
|
67
|
-
name: win32-process
|
64
|
+
version_requirements: *id003
|
68
65
|
prerelease: false
|
66
|
+
name: win32-process
|
67
|
+
type: :runtime
|
69
68
|
- !ruby/object:Gem::Dependency
|
70
|
-
|
69
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
71
70
|
none: false
|
72
71
|
requirements:
|
73
72
|
- - ~>
|
@@ -78,12 +77,12 @@ dependencies:
|
|
78
77
|
- 5
|
79
78
|
- 2
|
80
79
|
version: 0.5.2
|
81
|
-
|
82
|
-
type: :runtime
|
83
|
-
name: win32-clipboard
|
80
|
+
version_requirements: *id004
|
84
81
|
prerelease: false
|
82
|
+
name: win32-clipboard
|
83
|
+
type: :runtime
|
85
84
|
- !ruby/object:Gem::Dependency
|
86
|
-
|
85
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
87
86
|
none: false
|
88
87
|
requirements:
|
89
88
|
- - ">="
|
@@ -94,12 +93,12 @@ dependencies:
|
|
94
93
|
- 1
|
95
94
|
- 9
|
96
95
|
version: 1.1.9
|
97
|
-
|
98
|
-
type: :runtime
|
99
|
-
name: log4r
|
96
|
+
version_requirements: *id005
|
100
97
|
prerelease: false
|
98
|
+
name: log4r
|
99
|
+
type: :runtime
|
101
100
|
- !ruby/object:Gem::Dependency
|
102
|
-
|
101
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
103
102
|
none: false
|
104
103
|
requirements:
|
105
104
|
- - ">="
|
@@ -110,12 +109,12 @@ dependencies:
|
|
110
109
|
- 0
|
111
110
|
- 14
|
112
111
|
version: 1.0.14
|
113
|
-
|
114
|
-
type: :development
|
115
|
-
name: bundler
|
112
|
+
version_requirements: *id006
|
116
113
|
prerelease: false
|
114
|
+
name: bundler
|
115
|
+
type: :development
|
117
116
|
- !ruby/object:Gem::Dependency
|
118
|
-
|
117
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
119
118
|
none: false
|
120
119
|
requirements:
|
121
120
|
- - ">="
|
@@ -126,12 +125,12 @@ dependencies:
|
|
126
125
|
- 6
|
127
126
|
- 0
|
128
127
|
version: 2.6.0
|
129
|
-
|
130
|
-
type: :development
|
131
|
-
name: rspec
|
128
|
+
version_requirements: *id007
|
132
129
|
prerelease: false
|
130
|
+
name: rspec
|
131
|
+
type: :development
|
133
132
|
- !ruby/object:Gem::Dependency
|
134
|
-
|
133
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
135
134
|
none: false
|
136
135
|
requirements:
|
137
136
|
- - ~>
|
@@ -141,12 +140,12 @@ dependencies:
|
|
141
140
|
- 1
|
142
141
|
- 0
|
143
142
|
version: "1.0"
|
144
|
-
|
145
|
-
type: :development
|
146
|
-
name: cucumber
|
143
|
+
version_requirements: *id008
|
147
144
|
prerelease: false
|
145
|
+
name: cucumber
|
146
|
+
type: :development
|
148
147
|
- !ruby/object:Gem::Dependency
|
149
|
-
|
148
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
150
149
|
none: false
|
151
150
|
requirements:
|
152
151
|
- - ~>
|
@@ -157,12 +156,12 @@ dependencies:
|
|
157
156
|
- 4
|
158
157
|
- 2
|
159
158
|
version: 0.4.2
|
160
|
-
|
161
|
-
type: :development
|
162
|
-
name: aruba
|
159
|
+
version_requirements: *id009
|
163
160
|
prerelease: false
|
161
|
+
name: aruba
|
162
|
+
type: :development
|
164
163
|
- !ruby/object:Gem::Dependency
|
165
|
-
|
164
|
+
requirement: &id010 !ruby/object:Gem::Requirement
|
166
165
|
none: false
|
167
166
|
requirements:
|
168
167
|
- - ">="
|
@@ -173,12 +172,12 @@ dependencies:
|
|
173
172
|
- 9
|
174
173
|
- 2
|
175
174
|
version: 0.9.2
|
176
|
-
|
177
|
-
type: :development
|
178
|
-
name: rake
|
175
|
+
version_requirements: *id010
|
179
176
|
prerelease: false
|
177
|
+
name: rake
|
178
|
+
type: :development
|
180
179
|
- !ruby/object:Gem::Dependency
|
181
|
-
|
180
|
+
requirement: &id011 !ruby/object:Gem::Requirement
|
182
181
|
none: false
|
183
182
|
requirements:
|
184
183
|
- - ">="
|
@@ -189,12 +188,12 @@ dependencies:
|
|
189
188
|
- 7
|
190
189
|
- 2
|
191
190
|
version: 0.7.2
|
192
|
-
|
193
|
-
type: :development
|
194
|
-
name: yard
|
191
|
+
version_requirements: *id011
|
195
192
|
prerelease: false
|
193
|
+
name: yard
|
194
|
+
type: :development
|
196
195
|
- !ruby/object:Gem::Dependency
|
197
|
-
|
196
|
+
requirement: &id012 !ruby/object:Gem::Requirement
|
198
197
|
none: false
|
199
198
|
requirements:
|
200
199
|
- - ">="
|
@@ -205,12 +204,12 @@ dependencies:
|
|
205
204
|
- 17
|
206
205
|
- 2
|
207
206
|
version: 1.17.2
|
208
|
-
|
209
|
-
type: :development
|
210
|
-
name: redcarpet
|
207
|
+
version_requirements: *id012
|
211
208
|
prerelease: false
|
209
|
+
name: redcarpet
|
210
|
+
type: :development
|
212
211
|
- !ruby/object:Gem::Dependency
|
213
|
-
|
212
|
+
requirement: &id013 !ruby/object:Gem::Requirement
|
214
213
|
none: false
|
215
214
|
requirements:
|
216
215
|
- - ">="
|
@@ -221,10 +220,10 @@ dependencies:
|
|
221
220
|
- 2
|
222
221
|
- 0
|
223
222
|
version: 1.2.0
|
224
|
-
|
225
|
-
type: :development
|
226
|
-
name: win32console
|
223
|
+
version_requirements: *id013
|
227
224
|
prerelease: false
|
225
|
+
name: win32console
|
226
|
+
type: :development
|
228
227
|
description: Win32 GUI testing framework
|
229
228
|
email:
|
230
229
|
- robert@gearheadforhire.com
|
@@ -318,7 +317,6 @@ files:
|
|
318
317
|
- spec/spec_helper.rb
|
319
318
|
- spec/watchr.rb
|
320
319
|
- win32-autogui.gemspec
|
321
|
-
has_rdoc: true
|
322
320
|
homepage: http://rubygems.org/gems/win32-autogui
|
323
321
|
licenses: []
|
324
322
|
|
@@ -355,7 +353,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
355
353
|
requirements: []
|
356
354
|
|
357
355
|
rubyforge_project: win32-autogui
|
358
|
-
rubygems_version: 1.
|
356
|
+
rubygems_version: 1.8.12
|
359
357
|
signing_key:
|
360
358
|
specification_version: 3
|
361
359
|
summary: Win32 GUI testing framework
|