gnome_app_driver 0.2.1 → 0.3.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.
- checksums.yaml +4 -4
- data/Changelog.md +16 -0
- data/README.md +2 -1
- data/lib/gnome_app_driver/version.rb +5 -0
- data/lib/gnome_app_driver.rb +19 -23
- metadata +106 -28
- data/Gemfile +0 -5
- data/Rakefile +0 -19
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 994d254c191d22a73bfac301b0099a02c066e1c8caab77548fb0675d8f1f77fd
|
4
|
+
data.tar.gz: 8e32401c6763b98db599c65d33a47f06903fb5f5d74134428f4629f2fdb1239a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ce775f2b03a59782e5bbb8c83120dd2e4333930acde9680f1a574a002d984f82666c01ee8f97f4b18f0b82b68cd240f68b0ab7e6860bd8b29e1a004e74cd6397
|
7
|
+
data.tar.gz: 794b23d81491b6902aa061a7c63c3ace597cace2a3ae735b43daca82cefe297090945c65e4c33eb786f7e9ca4c96fda30eca58e22641f23dd23f7226734c2728
|
data/Changelog.md
CHANGED
@@ -1,5 +1,21 @@
|
|
1
1
|
# Change log
|
2
2
|
|
3
|
+
## 0.3.2 / 2022-09-02
|
4
|
+
|
5
|
+
* Loosen dependency on gobject-introspection to allow use with version 4.0
|
6
|
+
|
7
|
+
## 0.3.1 / 2022-01-26
|
8
|
+
|
9
|
+
* Drop support for Ruby version 2.5
|
10
|
+
* Support up to Ruby 3.1
|
11
|
+
|
12
|
+
## 0.3.0 / 2020-11-14
|
13
|
+
|
14
|
+
* Drop support for Ruby version 2.3 and 2.4
|
15
|
+
* Remove `GnomeAppDriver#press_ctrl_q` because it does not and likely will never
|
16
|
+
work on Wayland. Use a regular action to quit your application instead.
|
17
|
+
* Provide access to the main application Atspi object through `GnomeAppDriver#application`
|
18
|
+
|
3
19
|
## 0.2.1 / 2018-11-03
|
4
20
|
|
5
21
|
* Loosen dependencies
|
data/README.md
CHANGED
@@ -40,7 +40,8 @@ Say, your application is called `foo`. Then, in your tests, do something like th
|
|
40
40
|
textbox.get_text(0, 100).must_equal 'Foo bar baz'
|
41
41
|
|
42
42
|
# Quit application
|
43
|
-
|
43
|
+
menu_item = frame.find_role :menu_item, /Quit/
|
44
|
+
menu_item.do_action 0
|
44
45
|
|
45
46
|
# Check exit status
|
46
47
|
status = @driver.cleanup
|
data/lib/gnome_app_driver.rb
CHANGED
@@ -1,13 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "gobject-introspection"
|
4
|
+
require "gnome_app_driver/version"
|
4
5
|
|
5
6
|
# Namespace for Atspi classes.
|
6
7
|
module Atspi
|
7
8
|
end
|
8
9
|
|
9
10
|
# Load Atspi namespace with GObjectIntrospection.
|
10
|
-
GObjectIntrospection::Loader.new(Atspi).load(
|
11
|
+
GObjectIntrospection::Loader.new(Atspi).load("Atspi")
|
11
12
|
|
12
13
|
# Utility monkey-patches for the Atspi::Accessible class
|
13
14
|
module AtspiAccessiblePatches
|
@@ -18,19 +19,20 @@ module AtspiAccessiblePatches
|
|
18
19
|
end
|
19
20
|
end
|
20
21
|
|
21
|
-
|
22
|
-
|
22
|
+
# Find an element with the given role and label regex
|
23
|
+
def find_role(role_name, regex = //)
|
24
|
+
role = Atspi::Role.new role_name
|
23
25
|
return self if role == self.role && name =~ regex
|
24
26
|
|
25
27
|
each_child do |child|
|
26
|
-
result = child.find_role
|
28
|
+
result = child.find_role role_name, regex
|
27
29
|
return result if result
|
28
30
|
end
|
29
31
|
nil
|
30
32
|
end
|
31
33
|
|
32
34
|
def inspect_recursive(level = 0, maxlevel = 5)
|
33
|
-
puts "#{
|
35
|
+
puts "#{" " * level} > name: #{name}; role: #{role}"
|
34
36
|
each_child do |child|
|
35
37
|
child.inspect_recursive(level + 1) unless level >= maxlevel
|
36
38
|
end
|
@@ -44,7 +46,7 @@ Atspi::Accessible.include AtspiAccessiblePatches
|
|
44
46
|
class GnomeAppDriver
|
45
47
|
def initialize(app_name, app_file: nil, verbose: false)
|
46
48
|
@app_file = app_file || "bin/#{app_name}"
|
47
|
-
@lib_dir =
|
49
|
+
@lib_dir = "lib"
|
48
50
|
@app_name = app_name
|
49
51
|
@pid = nil
|
50
52
|
@verbose = verbose
|
@@ -52,10 +54,10 @@ class GnomeAppDriver
|
|
52
54
|
@thread = nil
|
53
55
|
end
|
54
56
|
|
55
|
-
attr_reader :frame
|
57
|
+
attr_reader :frame, :application
|
56
58
|
|
57
59
|
def boot(test_timeout: 30, exit_timeout: 10, arguments: [])
|
58
|
-
raise
|
60
|
+
raise "Already booted" if @pid
|
59
61
|
|
60
62
|
spawn_process(arguments)
|
61
63
|
|
@@ -64,24 +66,18 @@ class GnomeAppDriver
|
|
64
66
|
@frame = find_and_focus_frame
|
65
67
|
|
66
68
|
@thread = Thread.new do
|
67
|
-
wait_for(
|
68
|
-
wait_for(
|
69
|
+
wait_for("test to be done", test_timeout) { @cleanup }
|
70
|
+
wait_for("pid to go away", exit_timeout) { !@pid }
|
69
71
|
kill_process if @pid
|
70
72
|
end
|
71
73
|
end
|
72
74
|
|
73
75
|
def spawn_process(arguments)
|
74
|
-
command = "ruby -I#{@lib_dir} #{@app_file} #{arguments.join(
|
76
|
+
command = "ruby -I#{@lib_dir} #{@app_file} #{arguments.join(" ")}"
|
75
77
|
log "About to spawn: `#{command}`"
|
76
78
|
@pid = Process.spawn command
|
77
79
|
end
|
78
80
|
|
79
|
-
def press_ctrl_q
|
80
|
-
Atspi.generate_keyboard_event(37, nil, :press)
|
81
|
-
Atspi.generate_keyboard_event(24, nil, :pressrelease)
|
82
|
-
Atspi.generate_keyboard_event(37, nil, :release)
|
83
|
-
end
|
84
|
-
|
85
81
|
def cleanup
|
86
82
|
status = exit_status
|
87
83
|
@pid = nil
|
@@ -92,14 +88,14 @@ class GnomeAppDriver
|
|
92
88
|
private
|
93
89
|
|
94
90
|
def find_and_focus_frame
|
95
|
-
|
96
|
-
raise
|
91
|
+
@application = wait_for("app to appear", 10) { find_app }
|
92
|
+
raise "App not found" unless @application
|
97
93
|
|
98
|
-
frame =
|
94
|
+
frame = @application.get_child_at_index 0
|
99
95
|
role = frame.role
|
100
96
|
raise "Frame has unexpected role #{role.inspect}" unless role == :frame
|
101
97
|
|
102
|
-
wait_for(
|
98
|
+
wait_for("frame to be focused", 10) do
|
103
99
|
frame.state_set.contains(Atspi::StateType::ACTIVE)
|
104
100
|
end
|
105
101
|
|
@@ -108,7 +104,7 @@ class GnomeAppDriver
|
|
108
104
|
|
109
105
|
def kill_process
|
110
106
|
log "About to kill child process #{@pid}"
|
111
|
-
Process.kill
|
107
|
+
Process.kill "KILL", @pid
|
112
108
|
end
|
113
109
|
|
114
110
|
def log(message)
|
metadata
CHANGED
@@ -1,119 +1,197 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gnome_app_driver
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2
|
4
|
+
version: 0.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matijs van Zuijlen
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-09-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: gobject-introspection
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '3.2'
|
20
|
+
- - "<"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '5.0'
|
20
23
|
type: :runtime
|
21
24
|
prerelease: false
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
23
26
|
requirements:
|
24
|
-
- - "
|
27
|
+
- - ">="
|
25
28
|
- !ruby/object:Gem::Version
|
26
29
|
version: '3.2'
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '5.0'
|
27
33
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
34
|
+
name: gtk3
|
29
35
|
requirement: !ruby/object:Gem::Requirement
|
30
36
|
requirements:
|
31
37
|
- - ">="
|
32
38
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
39
|
+
version: '3.2'
|
40
|
+
- - "<"
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '5.0'
|
34
43
|
type: :development
|
35
44
|
prerelease: false
|
36
45
|
version_requirements: !ruby/object:Gem::Requirement
|
37
46
|
requirements:
|
38
47
|
- - ">="
|
39
48
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
49
|
+
version: '3.2'
|
50
|
+
- - "<"
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: '5.0'
|
41
53
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
54
|
+
name: minitest
|
43
55
|
requirement: !ruby/object:Gem::Requirement
|
44
56
|
requirements:
|
45
57
|
- - "~>"
|
46
58
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
59
|
+
version: '5.12'
|
48
60
|
type: :development
|
49
61
|
prerelease: false
|
50
62
|
version_requirements: !ruby/object:Gem::Requirement
|
51
63
|
requirements:
|
52
64
|
- - "~>"
|
53
65
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
66
|
+
version: '5.12'
|
55
67
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
68
|
+
name: pry
|
57
69
|
requirement: !ruby/object:Gem::Requirement
|
58
70
|
requirements:
|
59
71
|
- - "~>"
|
60
72
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
73
|
+
version: 0.14.0
|
62
74
|
type: :development
|
63
75
|
prerelease: false
|
64
76
|
version_requirements: !ruby/object:Gem::Requirement
|
65
77
|
requirements:
|
66
78
|
- - "~>"
|
67
79
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
80
|
+
version: 0.14.0
|
69
81
|
- !ruby/object:Gem::Dependency
|
70
82
|
name: rake
|
71
83
|
requirement: !ruby/object:Gem::Requirement
|
72
84
|
requirements:
|
73
85
|
- - "~>"
|
74
86
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
87
|
+
version: '13.0'
|
76
88
|
type: :development
|
77
89
|
prerelease: false
|
78
90
|
version_requirements: !ruby/object:Gem::Requirement
|
79
91
|
requirements:
|
80
92
|
- - "~>"
|
81
93
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
83
|
-
|
94
|
+
version: '13.0'
|
95
|
+
- !ruby/object:Gem::Dependency
|
96
|
+
name: rubocop
|
97
|
+
requirement: !ruby/object:Gem::Requirement
|
98
|
+
requirements:
|
99
|
+
- - "~>"
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '1.34'
|
102
|
+
type: :development
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
requirements:
|
106
|
+
- - "~>"
|
107
|
+
- !ruby/object:Gem::Version
|
108
|
+
version: '1.34'
|
109
|
+
- !ruby/object:Gem::Dependency
|
110
|
+
name: rubocop-minitest
|
111
|
+
requirement: !ruby/object:Gem::Requirement
|
112
|
+
requirements:
|
113
|
+
- - "~>"
|
114
|
+
- !ruby/object:Gem::Version
|
115
|
+
version: 0.21.0
|
116
|
+
type: :development
|
117
|
+
prerelease: false
|
118
|
+
version_requirements: !ruby/object:Gem::Requirement
|
119
|
+
requirements:
|
120
|
+
- - "~>"
|
121
|
+
- !ruby/object:Gem::Version
|
122
|
+
version: 0.21.0
|
123
|
+
- !ruby/object:Gem::Dependency
|
124
|
+
name: rubocop-packaging
|
125
|
+
requirement: !ruby/object:Gem::Requirement
|
126
|
+
requirements:
|
127
|
+
- - "~>"
|
128
|
+
- !ruby/object:Gem::Version
|
129
|
+
version: 0.5.1
|
130
|
+
type: :development
|
131
|
+
prerelease: false
|
132
|
+
version_requirements: !ruby/object:Gem::Requirement
|
133
|
+
requirements:
|
134
|
+
- - "~>"
|
135
|
+
- !ruby/object:Gem::Version
|
136
|
+
version: 0.5.1
|
137
|
+
- !ruby/object:Gem::Dependency
|
138
|
+
name: rubocop-performance
|
139
|
+
requirement: !ruby/object:Gem::Requirement
|
140
|
+
requirements:
|
141
|
+
- - "~>"
|
142
|
+
- !ruby/object:Gem::Version
|
143
|
+
version: '1.13'
|
144
|
+
type: :development
|
145
|
+
prerelease: false
|
146
|
+
version_requirements: !ruby/object:Gem::Requirement
|
147
|
+
requirements:
|
148
|
+
- - "~>"
|
149
|
+
- !ruby/object:Gem::Version
|
150
|
+
version: '1.13'
|
151
|
+
description: 'Driver to test the UI of applications using Ruby-GNOME2 by interacting
|
152
|
+
with them via Atspi.
|
153
|
+
|
154
|
+
'
|
84
155
|
email:
|
85
156
|
- matijs@matijs.net
|
86
157
|
executables: []
|
87
158
|
extensions: []
|
88
|
-
extra_rdoc_files:
|
159
|
+
extra_rdoc_files:
|
160
|
+
- README.md
|
161
|
+
- Changelog.md
|
89
162
|
files:
|
90
163
|
- Changelog.md
|
91
|
-
- Gemfile
|
92
164
|
- LICENSE
|
93
165
|
- README.md
|
94
|
-
- Rakefile
|
95
166
|
- lib/gnome_app_driver.rb
|
167
|
+
- lib/gnome_app_driver/version.rb
|
96
168
|
homepage: http://www.github.com/mvz/ruby-gnome2_app_driver
|
97
|
-
licenses:
|
98
|
-
|
99
|
-
|
100
|
-
|
169
|
+
licenses:
|
170
|
+
- LGPL-2.1+
|
171
|
+
metadata:
|
172
|
+
homepage_uri: http://www.github.com/mvz/ruby-gnome2_app_driver
|
173
|
+
source_code_uri: https://github.com/mvz/ruby-gnome2_app_driver
|
174
|
+
changelog_uri: https://github.com/mvzruby-gnome2_app_driver/blob/master/Changelog.md
|
175
|
+
rubygems_mfa_required: 'true'
|
176
|
+
post_install_message:
|
177
|
+
rdoc_options:
|
178
|
+
- "--main"
|
179
|
+
- README.md
|
101
180
|
require_paths:
|
102
181
|
- lib
|
103
182
|
required_ruby_version: !ruby/object:Gem::Requirement
|
104
183
|
requirements:
|
105
184
|
- - ">="
|
106
185
|
- !ruby/object:Gem::Version
|
107
|
-
version: 2.
|
186
|
+
version: 2.6.0
|
108
187
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
109
188
|
requirements:
|
110
189
|
- - ">="
|
111
190
|
- !ruby/object:Gem::Version
|
112
191
|
version: '0'
|
113
192
|
requirements: []
|
114
|
-
|
115
|
-
|
116
|
-
signing_key:
|
193
|
+
rubygems_version: 3.3.7
|
194
|
+
signing_key:
|
117
195
|
specification_version: 4
|
118
196
|
summary: Test Ruby-GNOME2 applications using Atspi
|
119
197
|
test_files: []
|
data/Gemfile
DELETED
data/Rakefile
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'rake/clean'
|
4
|
-
require 'bundler/gem_tasks'
|
5
|
-
require 'rake/testtask'
|
6
|
-
|
7
|
-
namespace :test do
|
8
|
-
Rake::TestTask.new(:end_to_end) do |t|
|
9
|
-
t.libs = ['lib']
|
10
|
-
t.test_files = FileList['test/end_to_end/*_test.rb']
|
11
|
-
t.warning = true
|
12
|
-
end
|
13
|
-
|
14
|
-
task all: [:end_to_end]
|
15
|
-
end
|
16
|
-
|
17
|
-
task test: 'test:all'
|
18
|
-
|
19
|
-
task default: 'test'
|