gametel 0.5.7 → 0.5.8
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/features/image.feature +20 -0
- data/features/step_definitions/image_steps.rb +22 -0
- data/features/support/screens/image_view_screen.rb +6 -0
- data/lib/gametel.rb +2 -1
- data/lib/gametel/accessors.rb +55 -10
- data/lib/gametel/platforms/brazenhead_platform.rb +17 -0
- data/lib/gametel/version.rb +1 -1
- data/lib/gametel/views.rb +1 -0
- data/lib/gametel/views/image.rb +27 -0
- data/spec/lib/gametel/accessors_spec.rb +40 -0
- metadata +13 -12
@@ -0,0 +1,20 @@
|
|
1
|
+
Feature: Interacting with Images
|
2
|
+
|
3
|
+
Scenario: Should be able to click an image
|
4
|
+
Given I'm on the image screen
|
5
|
+
Then I should be able to click on the first image
|
6
|
+
|
7
|
+
Scenario: Should be able to get the images view
|
8
|
+
Given I'm on the image screen
|
9
|
+
Then the first image should have the following properties:
|
10
|
+
| property | value |
|
11
|
+
| clickable | false |
|
12
|
+
| enabled | true |
|
13
|
+
| focusable | false |
|
14
|
+
| focused | false |
|
15
|
+
| selected | false |
|
16
|
+
| shown | true |
|
17
|
+
|
18
|
+
Scenario: Waiting for the drawable to load
|
19
|
+
Given I'm on the image screen
|
20
|
+
Then I should be able to wait until the images drawable has loaded
|
@@ -0,0 +1,22 @@
|
|
1
|
+
Given /^I\'m on the image screen$/ do
|
2
|
+
on(MainMenuScreen).views
|
3
|
+
on(ViewsMenuScreen).image_view
|
4
|
+
end
|
5
|
+
|
6
|
+
Then /^I should be able to click on the first image$/ do
|
7
|
+
on(ImageViewScreen).click_first
|
8
|
+
end
|
9
|
+
|
10
|
+
Then /^the first image should have the following properties:$/ do |properties|
|
11
|
+
on(ImageViewScreen) do |screen|
|
12
|
+
view = screen.first_view
|
13
|
+
properties.hashes.each do |property|
|
14
|
+
result = view.send("#{property["property"]}?")
|
15
|
+
result.to_s.should eq(property["value"]), "for field #{property["property"]}"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
Then /^I should be able to wait until the images drawable has loaded$/ do
|
21
|
+
on(ImageViewScreen).wait_for_first
|
22
|
+
end
|
data/lib/gametel.rb
CHANGED
@@ -6,6 +6,7 @@ require 'gametel/platforms/brazenhead_platform'
|
|
6
6
|
require 'gametel/views'
|
7
7
|
|
8
8
|
module Gametel
|
9
|
+
include Gametel::Waiter
|
9
10
|
|
10
11
|
attr_reader :platform
|
11
12
|
|
@@ -13,7 +14,7 @@ module Gametel
|
|
13
14
|
ROBOTIUM_RIGHT = 22
|
14
15
|
|
15
16
|
def self.included(cls)
|
16
|
-
cls.extend Gametel::Accessors
|
17
|
+
cls.extend Gametel::Accessors
|
17
18
|
end
|
18
19
|
|
19
20
|
def initialize(pform = :brazenhead)
|
data/lib/gametel/accessors.rb
CHANGED
@@ -1,5 +1,19 @@
|
|
1
1
|
module Gametel
|
2
2
|
module Accessors
|
3
|
+
|
4
|
+
#
|
5
|
+
# Generates a method named active? which will wait for the
|
6
|
+
# activity to become active
|
7
|
+
#
|
8
|
+
# returns true when successful
|
9
|
+
#
|
10
|
+
def activity(activity_name)
|
11
|
+
define_method("active?") do
|
12
|
+
platform.wait_for_activity activity_name
|
13
|
+
platform.last_json
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
3
17
|
#
|
4
18
|
# Generates methods to enter text into a text field, clear the text
|
5
19
|
# field, get the hint as well as the description
|
@@ -8,7 +22,7 @@ module Gametel
|
|
8
22
|
# text(:first_name, :index => 0)
|
9
23
|
# # will generate 'first_name', 'first_name=', 'clear_first_name', 'first_name_hint' and 'first_name_description' methods
|
10
24
|
#
|
11
|
-
# @param [
|
25
|
+
# @param [Symbol] the name used for the generated methods
|
12
26
|
# @param [Hash] locator for how the text is found The valid
|
13
27
|
# keys are:
|
14
28
|
# * :id
|
@@ -36,7 +50,7 @@ module Gametel
|
|
36
50
|
# button(:save, :text => 'Save')
|
37
51
|
# # will generate 'save' and 'save_enabled?' methods
|
38
52
|
#
|
39
|
-
# @param [
|
53
|
+
# @param [Symbol] the name used for the generated methods
|
40
54
|
# @param [Hash] locator for how the button is found The valid
|
41
55
|
# keys are:
|
42
56
|
# * :text
|
@@ -69,7 +83,7 @@ module Gametel
|
|
69
83
|
# # will generate 'details' method to select third item in the
|
70
84
|
# # first list
|
71
85
|
#
|
72
|
-
# @param [
|
86
|
+
# @param [Symbol] the name used for the generated methods
|
73
87
|
# @param [Hash] locator for how the list item is found The valid
|
74
88
|
# keys are:
|
75
89
|
# * :text
|
@@ -93,7 +107,7 @@ module Gametel
|
|
93
107
|
# checkbox(:enable, :text => 'Enable')
|
94
108
|
# # will generate 'enable' method
|
95
109
|
#
|
96
|
-
# @param [
|
110
|
+
# @param [Symbol] the name used for the generated methods
|
97
111
|
# @param [Hash] locator for how the checkbox is found The valid
|
98
112
|
# keys are:
|
99
113
|
# * :text
|
@@ -116,7 +130,7 @@ module Gametel
|
|
116
130
|
# radio_button(:circle, :text => 'Circle')
|
117
131
|
# # will generate 'circle' method
|
118
132
|
#
|
119
|
-
# @param [
|
133
|
+
# @param [Symbol] the name used for the generated methods
|
120
134
|
# @param [Hash] locator for how the checkbox is found The valid
|
121
135
|
# keys are:
|
122
136
|
# * :text
|
@@ -138,7 +152,7 @@ module Gametel
|
|
138
152
|
# view(:clickable_text, :id => 'id_name_of_your_control')
|
139
153
|
# # will generate 'clickable_text' method
|
140
154
|
#
|
141
|
-
# @param [
|
155
|
+
# @param [Symbol] the name used for the generated methods
|
142
156
|
# @param [Hash] locator indicating an id for how the view is found.
|
143
157
|
# The only valid keys are:
|
144
158
|
# * :id
|
@@ -160,7 +174,7 @@ module Gametel
|
|
160
174
|
# spinner(:progress_item, :id => 'id_name_of_your_control')
|
161
175
|
# # will generate progress_item, progress_item=, progress_item_secondary, progress_item_secondary=
|
162
176
|
#
|
163
|
-
# @param [
|
177
|
+
# @param [Symbol] the name used for the generated methods
|
164
178
|
# @param [Hash] locator indicating an id for how the progress bar is found.
|
165
179
|
# The only valid keys are:
|
166
180
|
# * :id
|
@@ -188,12 +202,15 @@ module Gametel
|
|
188
202
|
end
|
189
203
|
|
190
204
|
#
|
191
|
-
# Generates
|
205
|
+
# Generates three method to interact with a spinner
|
192
206
|
# @example
|
193
207
|
# spinner(:spinner_item, :id => 'id_name_of_your_control')
|
194
|
-
# # will generate 'spinner_item' method
|
208
|
+
# # will generate 'spinner_item' method to return the spinner
|
209
|
+
# # value, 'select_spinner_item(value) to set the spinner value
|
210
|
+
# # and 'spinner_view' to return the view
|
211
|
+
|
195
212
|
#
|
196
|
-
# @param [
|
213
|
+
# @param [Symbol] the name used for the generated methods
|
197
214
|
# @param [Hash] locator indicating an id for how the spinner is found.
|
198
215
|
# The only valid keys are:
|
199
216
|
# * :id
|
@@ -210,6 +227,34 @@ module Gametel
|
|
210
227
|
Gametel::Views::Spinner.new(platform, locator)
|
211
228
|
end
|
212
229
|
end
|
230
|
+
|
231
|
+
#
|
232
|
+
# Generaes method to interact with an image.
|
233
|
+
#
|
234
|
+
# @example
|
235
|
+
# image(:headshot, :id => 'headshot')
|
236
|
+
# # will generate 'click_headshot' method to click the image,
|
237
|
+
# # 'wait_for_headshot' which will wait until the image has
|
238
|
+
# # loaded a drawable and 'headshot_view' to return the view
|
239
|
+
#
|
240
|
+
# @param [Symbol] the name used for the generated methods
|
241
|
+
# @param [Hash] locator indicating an id for how the image is found.
|
242
|
+
# The only valid keys are:
|
243
|
+
# * :index
|
244
|
+
#
|
245
|
+
def image(name, locator)
|
246
|
+
define_method("click_#{name}") do
|
247
|
+
platform.click_image(locator)
|
248
|
+
end
|
249
|
+
define_method("wait_for_#{name}") do
|
250
|
+
wait_until do
|
251
|
+
platform.has_drawable?(locator)
|
252
|
+
end
|
253
|
+
end
|
254
|
+
define_method("#{name}_view") do
|
255
|
+
Gametel::Views::Image.new(platform, locator)
|
256
|
+
end
|
257
|
+
end
|
213
258
|
end
|
214
259
|
end
|
215
260
|
|
@@ -89,6 +89,14 @@ module Gametel
|
|
89
89
|
result = click_on_radio_button(locator[:index]) if locator[:index]
|
90
90
|
end
|
91
91
|
|
92
|
+
#
|
93
|
+
# click an image
|
94
|
+
#
|
95
|
+
def click_image(locator)
|
96
|
+
result = click_on_image(locator[:index]) if locator[:index]
|
97
|
+
result = click_on_view_by_id(locator[:id]) if locator[:id]
|
98
|
+
end
|
99
|
+
|
92
100
|
#
|
93
101
|
# get the selected spinner value
|
94
102
|
#
|
@@ -130,6 +138,15 @@ module Gametel
|
|
130
138
|
result.body.include? 'windowLocation'
|
131
139
|
end
|
132
140
|
|
141
|
+
#
|
142
|
+
# return if a view has a drawable
|
143
|
+
#
|
144
|
+
def has_drawable?(locator)
|
145
|
+
view = get_view_by_id(locator) if locator[:id]
|
146
|
+
view = get_image(locator[:index]) if locator[:index]
|
147
|
+
last_json['hasDrawable']
|
148
|
+
end
|
149
|
+
|
133
150
|
#
|
134
151
|
# determine if a view is enabled
|
135
152
|
#
|
data/lib/gametel/version.rb
CHANGED
data/lib/gametel/views.rb
CHANGED
@@ -0,0 +1,27 @@
|
|
1
|
+
module Gametel
|
2
|
+
module Views
|
3
|
+
class Image < View
|
4
|
+
IMAGE_VIEW_CLASS = 'android.widget.ImageView'
|
5
|
+
|
6
|
+
protected
|
7
|
+
|
8
|
+
def build_property_methods
|
9
|
+
metaclass = class << self; self; end
|
10
|
+
properties.each do |property|
|
11
|
+
metaclass.send(:define_method, "#{property}?".to_sym) do
|
12
|
+
|
13
|
+
platform.get_view_by_id(locator[:id]) do |device|
|
14
|
+
device.send "is_#{property}"
|
15
|
+
end if locator[:id]
|
16
|
+
|
17
|
+
platform.get_view_by_index(IMAGE_VIEW_CLASS, locator[:index]) do |device|
|
18
|
+
device.send "is_#{property}"
|
19
|
+
end if locator[:index]
|
20
|
+
|
21
|
+
platform.last_response.body == "true"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -3,6 +3,8 @@ require 'spec_helper'
|
|
3
3
|
class AccessorsSampleScreen
|
4
4
|
include Gametel
|
5
5
|
|
6
|
+
activity "SomeActivity"
|
7
|
+
|
6
8
|
list_item(:first_list_item_text, :text => 'first item')
|
7
9
|
list_item(:first_list_item_index, :index => 0)
|
8
10
|
list_item(:first_list_item_index_list, :index => 0, :list => 1)
|
@@ -24,6 +26,8 @@ class AccessorsSampleScreen
|
|
24
26
|
spinner(:spinner_index, :index => 1)
|
25
27
|
progress(:progress_id, :id => 'progress_id')
|
26
28
|
progress(:progress_index, :index => 1)
|
29
|
+
image(:image_index, :index => 0)
|
30
|
+
image(:image_id, :id => 'image_id')
|
27
31
|
end
|
28
32
|
|
29
33
|
describe Gametel::Accessors do
|
@@ -43,6 +47,18 @@ describe Gametel::Accessors do
|
|
43
47
|
device.stub(:send).and_return(result)
|
44
48
|
end
|
45
49
|
|
50
|
+
context "defining the activity on a screen" do
|
51
|
+
it "should define the active? method" do
|
52
|
+
screen.should respond_to :active?
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should wait for the activity to become active" do
|
56
|
+
platform.should_receive(:wait_for_activity).with("SomeActivity")
|
57
|
+
platform.should_receive(:last_json)
|
58
|
+
screen.active?
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
46
62
|
context "list items" do
|
47
63
|
it "should know how to be chosen by text" do
|
48
64
|
platform.should_receive(:click_on_text)
|
@@ -738,5 +754,29 @@ describe Gametel::Accessors do
|
|
738
754
|
end
|
739
755
|
end
|
740
756
|
end
|
757
|
+
|
758
|
+
context "images" do
|
759
|
+
it "should click an image using the index" do
|
760
|
+
platform.should_receive(:click_on_image).with(0)
|
761
|
+
screen.click_image_index
|
762
|
+
end
|
763
|
+
|
764
|
+
it "should click an image by id" do
|
765
|
+
platform.should_receive(:click_on_view_by_id).with('image_id')
|
766
|
+
screen.click_image_id
|
767
|
+
end
|
768
|
+
|
769
|
+
it "should wait for a drawable when using index" do
|
770
|
+
platform.should_receive(:get_image).with(0)
|
771
|
+
platform.should_receive(:last_json).and_return({'hasDrawable' => 'true'})
|
772
|
+
screen.wait_for_image_index
|
773
|
+
end
|
774
|
+
|
775
|
+
it "should wait for a drawable when using index" do
|
776
|
+
platform.should_receive(:get_view_by_id).with(:id => 'image_id')
|
777
|
+
platform.should_receive(:last_json).and_return({'hasDrawable' => 'true'})
|
778
|
+
screen.wait_for_image_id
|
779
|
+
end
|
780
|
+
end
|
741
781
|
end
|
742
782
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gametel
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.8
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2013-04-
|
13
|
+
date: 2013-04-02 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: brazenhead
|
@@ -67,7 +67,7 @@ dependencies:
|
|
67
67
|
requirements:
|
68
68
|
- - ! '>='
|
69
69
|
- !ruby/object:Gem::Version
|
70
|
-
version: 2.
|
70
|
+
version: 2.13.0
|
71
71
|
type: :development
|
72
72
|
prerelease: false
|
73
73
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -75,7 +75,7 @@ dependencies:
|
|
75
75
|
requirements:
|
76
76
|
- - ! '>='
|
77
77
|
- !ruby/object:Gem::Version
|
78
|
-
version: 2.
|
78
|
+
version: 2.13.0
|
79
79
|
- !ruby/object:Gem::Dependency
|
80
80
|
name: cucumber
|
81
81
|
requirement: !ruby/object:Gem::Requirement
|
@@ -83,7 +83,7 @@ dependencies:
|
|
83
83
|
requirements:
|
84
84
|
- - ! '>='
|
85
85
|
- !ruby/object:Gem::Version
|
86
|
-
version:
|
86
|
+
version: 1.2.0
|
87
87
|
type: :development
|
88
88
|
prerelease: false
|
89
89
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -91,7 +91,7 @@ dependencies:
|
|
91
91
|
requirements:
|
92
92
|
- - ! '>='
|
93
93
|
- !ruby/object:Gem::Version
|
94
|
-
version:
|
94
|
+
version: 1.2.0
|
95
95
|
- !ruby/object:Gem::Dependency
|
96
96
|
name: require_all
|
97
97
|
requirement: !ruby/object:Gem::Requirement
|
@@ -119,6 +119,7 @@ files:
|
|
119
119
|
- features/button.feature
|
120
120
|
- features/checkbox.feature
|
121
121
|
- features/has_view.feature
|
122
|
+
- features/image.feature
|
122
123
|
- features/is_enabled.feature
|
123
124
|
- features/list_item.feature
|
124
125
|
- features/main_screen.feature
|
@@ -130,6 +131,7 @@ files:
|
|
130
131
|
- features/step_definitions/checkbox_steps.rb
|
131
132
|
- features/step_definitions/controls_steps.rb
|
132
133
|
- features/step_definitions/has_view_steps.rb
|
134
|
+
- features/step_definitions/image_steps.rb
|
133
135
|
- features/step_definitions/is_enabled_steps.rb
|
134
136
|
- features/step_definitions/list_item_steps.rb
|
135
137
|
- features/step_definitions/main_screen_steps.rb
|
@@ -153,6 +155,7 @@ files:
|
|
153
155
|
- features/support/screens/controls_screen.rb
|
154
156
|
- features/support/screens/custom_items_screen.rb
|
155
157
|
- features/support/screens/efficient_adapter_screen.rb
|
158
|
+
- features/support/screens/image_view_screen.rb
|
156
159
|
- features/support/screens/lists_menu_screen.rb
|
157
160
|
- features/support/screens/main_menu_screen.rb
|
158
161
|
- features/support/screens/never_will_exist.rb
|
@@ -175,6 +178,7 @@ files:
|
|
175
178
|
- lib/gametel/views.rb
|
176
179
|
- lib/gametel/views/button.rb
|
177
180
|
- lib/gametel/views/checkbox.rb
|
181
|
+
- lib/gametel/views/image.rb
|
178
182
|
- lib/gametel/views/list_item.rb
|
179
183
|
- lib/gametel/views/progress.rb
|
180
184
|
- lib/gametel/views/radio_button.rb
|
@@ -199,18 +203,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
199
203
|
- - ! '>='
|
200
204
|
- !ruby/object:Gem::Version
|
201
205
|
version: '0'
|
202
|
-
segments:
|
203
|
-
- 0
|
204
|
-
hash: -1788323344300920655
|
205
206
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
206
207
|
none: false
|
207
208
|
requirements:
|
208
209
|
- - ! '>='
|
209
210
|
- !ruby/object:Gem::Version
|
210
211
|
version: '0'
|
211
|
-
segments:
|
212
|
-
- 0
|
213
|
-
hash: -1788323344300920655
|
214
212
|
requirements: []
|
215
213
|
rubyforge_project:
|
216
214
|
rubygems_version: 1.8.25
|
@@ -221,6 +219,7 @@ test_files:
|
|
221
219
|
- features/button.feature
|
222
220
|
- features/checkbox.feature
|
223
221
|
- features/has_view.feature
|
222
|
+
- features/image.feature
|
224
223
|
- features/is_enabled.feature
|
225
224
|
- features/list_item.feature
|
226
225
|
- features/main_screen.feature
|
@@ -232,6 +231,7 @@ test_files:
|
|
232
231
|
- features/step_definitions/checkbox_steps.rb
|
233
232
|
- features/step_definitions/controls_steps.rb
|
234
233
|
- features/step_definitions/has_view_steps.rb
|
234
|
+
- features/step_definitions/image_steps.rb
|
235
235
|
- features/step_definitions/is_enabled_steps.rb
|
236
236
|
- features/step_definitions/list_item_steps.rb
|
237
237
|
- features/step_definitions/main_screen_steps.rb
|
@@ -255,6 +255,7 @@ test_files:
|
|
255
255
|
- features/support/screens/controls_screen.rb
|
256
256
|
- features/support/screens/custom_items_screen.rb
|
257
257
|
- features/support/screens/efficient_adapter_screen.rb
|
258
|
+
- features/support/screens/image_view_screen.rb
|
258
259
|
- features/support/screens/lists_menu_screen.rb
|
259
260
|
- features/support/screens/main_menu_screen.rb
|
260
261
|
- features/support/screens/never_will_exist.rb
|