briar 0.0.4

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.
Files changed (57) hide show
  1. checksums.yaml +15 -0
  2. data/.gitignore +29 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE.txt +36 -0
  5. data/README.md +25 -0
  6. data/Rakefile +12 -0
  7. data/briar.gemspec +26 -0
  8. data/dotirbc_briar_additions +31 -0
  9. data/features/step_definitions/alerts_and_sheets/action_sheet_steps.rb +8 -0
  10. data/features/step_definitions/alerts_and_sheets/alert_view_steps.rb +25 -0
  11. data/features/step_definitions/bars/navbar_steps.rb +95 -0
  12. data/features/step_definitions/bars/tabbar_steps.rb +32 -0
  13. data/features/step_definitions/bars/toolbar_steps.rb +17 -0
  14. data/features/step_definitions/briar_core_steps.rb +9 -0
  15. data/features/step_definitions/control/button_steps.rb +57 -0
  16. data/features/step_definitions/control/segmented_control_steps.rb +85 -0
  17. data/features/step_definitions/control/slider_steps.rb +9 -0
  18. data/features/step_definitions/email_steps.rb +59 -0
  19. data/features/step_definitions/image_view_steps.rb +9 -0
  20. data/features/step_definitions/keyboard_steps.rb +21 -0
  21. data/features/step_definitions/label_steps.rb +21 -0
  22. data/features/step_definitions/picker/date_picker_steps.rb +216 -0
  23. data/features/step_definitions/picker/picker_steps.rb +58 -0
  24. data/features/step_definitions/scroll_view_steps.rb +20 -0
  25. data/features/step_definitions/table_steps.rb +186 -0
  26. data/features/step_definitions/text_field_steps.rb +37 -0
  27. data/features/step_definitions/text_view_steps.rb +44 -0
  28. data/features/support/env.rb +0 -0
  29. data/features/support/hooks.rb +0 -0
  30. data/features/support/launch.rb +0 -0
  31. data/lib/briar.rb +72 -0
  32. data/lib/briar/alerts_and_sheets/alert_view.rb +16 -0
  33. data/lib/briar/bars/navbar.rb +104 -0
  34. data/lib/briar/bars/tabbar.rb +38 -0
  35. data/lib/briar/bars/toolbar.rb +36 -0
  36. data/lib/briar/briar_core.rb +56 -0
  37. data/lib/briar/briar_steps.rb +26 -0
  38. data/lib/briar/control/button.rb +47 -0
  39. data/lib/briar/control/segmented_control.rb +22 -0
  40. data/lib/briar/control/slider.rb +34 -0
  41. data/lib/briar/cucumber.rb +49 -0
  42. data/lib/briar/email.rb +58 -0
  43. data/lib/briar/gestalt.rb +80 -0
  44. data/lib/briar/image_view.rb +27 -0
  45. data/lib/briar/keyboard.rb +104 -0
  46. data/lib/briar/label.rb +34 -0
  47. data/lib/briar/picker/date_picker.rb +598 -0
  48. data/lib/briar/picker/picker.rb +32 -0
  49. data/lib/briar/picker/picker_shared.rb +34 -0
  50. data/lib/briar/scroll_view.rb +10 -0
  51. data/lib/briar/table.rb +237 -0
  52. data/lib/briar/text_field.rb +57 -0
  53. data/lib/briar/text_view.rb +21 -0
  54. data/lib/briar/version.rb +3 -0
  55. data/spec/briar/gestalt_spec.rb +62 -0
  56. data/spec/spec_helper.rb +17 -0
  57. metadata +164 -0
@@ -0,0 +1,85 @@
1
+ #include Briar::Control::Segmented_Control
2
+
3
+ Then /^I should see segmented control "([^"]*)" with titles "([^"]*)"$/ do |control_name, titles|
4
+ @control_name = control_name
5
+ should_see_view control_name
6
+ tokens = titles.split(",")
7
+ tokens.each do |token|
8
+ token.strip!
9
+ end
10
+ idx = index_of_control_with_name control_name
11
+ if idx
12
+ actual_titles = query("segmentedControl index:#{idx} child segment child segmentLabel", :text).reverse
13
+ counter = 0
14
+ tokens.zip(actual_titles).each do |expected, actual|
15
+ unless actual.eql? expected
16
+ screenshot_and_raise "when inspecting #{control_name} i expected title: #{expected} but found: #{actual} at index #{counter}"
17
+ end
18
+ counter = counter + 1
19
+ end
20
+ else
21
+ screenshot_and_raise "could not find segmented control with name #{control_name}"
22
+ end
23
+ end
24
+
25
+ Then /^I touch segment "([^"]*)" in segmented control "([^"]*)"$/ do |segment_name, control_name|
26
+ @segment_name = segment_name
27
+ @control_name = control_name
28
+ idx = index_of_control_with_name control_name
29
+ if idx
30
+ touch("segmentedControl index:#{idx} child segment child segmentLabel marked:'#{segment_name}'")
31
+ wait_for_animation
32
+ else
33
+ screenshot_and_raise "could not find segmented control with name #{control_name}"
34
+ end
35
+ end
36
+
37
+
38
+ Then /^I should see segment "([^"]*)" in segmented control "([^"]*)" (is|is not) selected$/ do |segment_name, control_name, selectedness|
39
+ @segment_name = segment_name
40
+ @control_name = control_name
41
+ control_idx = index_of_control_with_name control_name
42
+ if control_idx
43
+ segment_idx = index_of_segment_with_name_in_control_with_name(segment_name, control_name)
44
+ if segment_idx
45
+ selected_arr = query("segmentedControl index:#{control_idx} child segment", :isSelected).reverse
46
+ res = selected_arr[segment_idx]
47
+ target = selectedness.eql?("is") ? 1 : 0
48
+ unless res.to_i == target
49
+ screenshot_and_raise "found segment named #{segment_name} in #{control_name}, but it was _not_ selected"
50
+ end
51
+ else
52
+ screenshot_and_raise "could not find #{segment_name} in #{control_name}"
53
+ end
54
+ else
55
+ screenshot_and_raise "could not find control named #{control_name}"
56
+ end
57
+ end
58
+
59
+ Then /^I should see the segment I touched (is|is not) selected and the "([^"]*)" should be set correctly$/ do |selectedness, label_id|
60
+ @associated_label = label_id
61
+ wait_for_animation
62
+ macro %Q|I should see segment "#{@segment_name}" in segmented control "#{@control_name}" #{selectedness} selected|
63
+ macro %Q|I should see label "#{label_id}" with text "#{@segment_name}"|
64
+ end
65
+
66
+ Then /^I touch the segment again$/ do
67
+ macro %Q|I touch segment "#{@segment_name}" in segmented control "#{@control_name}"|
68
+ end
69
+
70
+ Then /^I should see the segment is not selected and the detail label is cleared$/ do
71
+ macro %Q|I should see segment "#{@segment_name}" in segmented control "#{@control_name}" is not selected|
72
+ macro %Q|I should see label "#{@associated_label}" with text ""|
73
+ end
74
+
75
+ Then /^I should see the segment I touched (is|is not) selected and the "([^"]*)" in the "([^"]*)" row should be set correctly$/ do |selectedness, label_id, row_id|
76
+ @associated_label = label_id
77
+ @associated_row = row_id
78
+ macro %Q|I should see segment "#{@segment_name}" in segmented control "#{@control_name}" #{selectedness} selected|
79
+ should_see_row_with_label_with_text @associated_row, @associated_label, "#{@segment_name}"
80
+ end
81
+
82
+ Then /^I should see the segment is not selected and the label in the row is cleared$/ do
83
+ macro %Q|I should see segment "#{@segment_name}" in segmented control "#{@control_name}" is not selected|
84
+ should_see_row_with_label_with_text @associated_row, @associated_label, ""
85
+ end
@@ -0,0 +1,9 @@
1
+ #include Briar::Control::Slider
2
+
3
+ When /^I change the "([^"]*)" slider to (\d+)$/ do |slider_id, value|
4
+ change_slider_value_to slider_id, value
5
+ @slider_that_was_changed = slider_id
6
+ @slider_new_value = value
7
+ end
8
+
9
+
@@ -0,0 +1,59 @@
1
+ #include Briar::Email
2
+ #include Briar::Core
3
+
4
+ Then /^I should see email body that contains "([^"]*)"$/ do |text|
5
+ wait_for_animation
6
+ unless email_body_first_line_is? text
7
+ screenshot_and_raise "i did not see an email body (MFComposeTextContentView) containing '#{text}'"
8
+ end
9
+ end
10
+
11
+ Then /^I touch the "([^"]*)" row and wait to see the email view$/ do |row_id|
12
+ should_see_row row_id
13
+ touch("tableViewCell marked:'#{row_id}'")
14
+ wait_for_animation
15
+ should_see_mail_view
16
+ end
17
+
18
+ Then /^I should see email view with "([^"]*)" in the subject$/ do |text|
19
+ wait_for_animation
20
+ should_see_mail_view
21
+ unless email_subject_is? text
22
+ screenshot_and_raise "expected to see '#{text}' in 'subjectField' but found '#{actual.first}'"
23
+ end
24
+ end
25
+
26
+ Then /^I should see email view with to field set to "([^"]*)"$/ do |text|
27
+ should_see_mail_view
28
+ wait_for_animation
29
+
30
+ unless email_to_field_is? text
31
+ screenshot_and_raise "expected to see '#{text}' in 'subjectField' but found '#{actual.first}'"
32
+ end
33
+ end
34
+
35
+ Then /^I should see email view with text like "([^"]*)" in the subject$/ do |text|
36
+ should_see_mail_view
37
+ wait_for_animation
38
+
39
+ unless email_subject_has_text_like? text
40
+ actual = query("view marked:'subjectField'", :text)
41
+ screenshot_and_raise "expected to see '#{text}' in 'subjectField' but found '#{actual.first}'"
42
+ end
43
+ end
44
+
45
+ When /^I cancel email editing I should see the "([^"]*)" view$/ do |view_id|
46
+ should_see_mail_view
47
+ wait_for_animation
48
+
49
+ if gestalt.is_ios6?
50
+ puts "WARN: iOS6 detected - navbar cancel button is not visible on iOS 6"
51
+ else
52
+ touch_navbar_item "Cancel"
53
+ wait_for_animation
54
+ touch_transition("button marked:'Delete Draft'",
55
+ "view marked:'#{view_id}'",
56
+ {:timeout=>TOUCH_TRANSITION_TIMEOUT,
57
+ :retry_frequency=>TOUCH_TRANSsITION_RETRY_FREQ})
58
+ end
59
+ end
@@ -0,0 +1,9 @@
1
+ #include Briar::ImageView
2
+
3
+ Then /^I should (see|not see) (?:image|a image|an image) named "([^"]*)"$/ do |visibility, name|
4
+ if visibility.eql? "see"
5
+ should_see_image_view name
6
+ else
7
+ should_not_see_image_view name
8
+ end
9
+ end
@@ -0,0 +1,21 @@
1
+ #include Briar::Keyboard
2
+
3
+ Then /^I should see the keyboard$/ do
4
+ should_see_keyboard
5
+ end
6
+
7
+ Then /^I should not see the keyboard$/ do
8
+ should_not_see_keyboard
9
+ end
10
+
11
+
12
+ Then /^I use the keyboard to enter "([^"]*)"$/ do |text|
13
+ wait_for_animation
14
+ should_see_keyboard
15
+ @text_entered_by_keyboard = keyboard_enter_text text
16
+ end
17
+
18
+ When /^I touch the done button the keyboard disappears$/ do
19
+ done
20
+ should_not_see_keyboard
21
+ end
@@ -0,0 +1,21 @@
1
+ #include Briar::Label
2
+
3
+ Then /^I should (see|not see) "([^"]*)" in label "([^"]*)"$/ do |visibility, text, name|
4
+ if visibility.eql? "see"
5
+ should_see_label_with_text(name, text)
6
+ else
7
+ should_not_see_label_with_text(name, text)
8
+ end
9
+ end
10
+
11
+ Then /^I should (see|not see) label "([^"]*)" with text "([^"]*)"$/ do |visibility, name, text|
12
+ if visibility.eql? "see"
13
+ should_see_label_with_text(name, text)
14
+ else
15
+ should_not_see_label_with_text(name, text)
16
+ end
17
+ end
18
+
19
+ Then /^I should see an "([^"]*)" label$/ do |label_id|
20
+ should_see_label label_id
21
+ end
@@ -0,0 +1,216 @@
1
+ #include Briar::Picker::Date
2
+
3
+ # steps
4
+
5
+ Then /^I change the time on the picker to "([^"]*)"$/ do |target_time|
6
+ screenshot_and_raise "picker is not in date time or time mode" unless picker_is_in_time_mode or picker_is_in_date_and_time_mode
7
+ if picker_has_calabash_additions
8
+ date_str_to_send = date_str_to_send_to_picker_from_time_str target_time
9
+ set_picker_date_with_date_time_str (date_str_to_send)
10
+ else
11
+ tokens = target_time.split(/[: ]/)
12
+ screenshot_and_raise "could not parse '#{target_time}' into a valid time" if tokens.count > 3 or tokens.count < 1
13
+ time_in_24h_locale = tokens.count == 2
14
+ hour_token = tokens[0].to_i
15
+ period_token = tokens[2]
16
+ if time_in_24h_locale
17
+ screenshot_and_raise "'#{hour_token}' is not on (0, 23)" unless (0..23).member?(hour_token)
18
+ period_token = hour_token > 11 ? PICKER_PM : PICKER_AM
19
+ else
20
+ screenshot_and_raise "'#{hour_token}' is not on (1, 12)" unless (0..12).member?(hour_token)
21
+ am_pm_token = tokens[2]
22
+ screenshot_and_raise "'#{am_pm_token}' is not a recognized period (AM or PM)" unless (am_pm_token.eql? PICKER_AM or am_pm_token.eql? PICKER_PM)
23
+ hour_token = 0 if hour_token == 12 and am_pm_token.eql? PICKER_AM
24
+ hour_token = hour_token + 12 if hour_token < 12 and am_pm_token.eql? PICKER_PM
25
+ end
26
+
27
+ minute_token = tokens[1].to_i
28
+ screenshot_and_raise "'#{minute_token}'is not on (0, 59)" unless (0..59).member?(minute_token)
29
+
30
+ # rollback the date by 1 to avoid maxi date problems
31
+ # decided this was not a good idea because sometimes the rollback step below
32
+ # would not fire
33
+ # picker_scroll_down_on_column 0 if picker_is_in_date_and_time_mode
34
+
35
+ picker_scroll_to_hour hour_token
36
+ picker_scroll_to_minute minute_token
37
+
38
+ picker_scroll_to_period period_token if picker_is_in_12h_locale
39
+
40
+ # rollback the change we made above
41
+ # decided this was not a good idea
42
+ # sometimes this does not fire so you can end up with inconsistent dates
43
+ # see the test below
44
+ # picker_scroll_up_on_column 0 if picker_is_in_date_and_time_mode
45
+ end
46
+
47
+ @date_picker_time_12h = picker_is_in_12h_locale ? picker_time_12h_str : picker_time_for_other_locale
48
+ @date_picker_time_24h = picker_is_in_24h_locale ? picker_time_24h_str : picker_time_for_other_locale
49
+
50
+ # this test catches problems (it is how i caught the scroll down/scroll up
51
+ # described in the comment block above)
52
+ unless time_strings_are_equivalent(@date_picker_time_12h, @date_picker_time_24h)
53
+ screenshot_and_raise "ERROR: changing the picker resulted in two different times: 12H => '#{@date_picker_time_12h}' 24H => '#{@date_picker_time_24h}'"
54
+ end
55
+
56
+ if picker_is_in_date_and_time_mode
57
+ @date_picker_date_time_12h = picker_is_in_12h_locale ? picker_date_and_time_str_12h : picker_date_and_time_str_for_other_locale
58
+ @date_picker_date_time_24h = picker_is_in_24h_locale ? picker_date_and_time_str_24h : picker_date_and_time_str_for_other_locale
59
+ # this test catches problems (it is how i caught the scroll down/scroll up
60
+ # described in the comment block above)
61
+ unless date_time_strings_are_equivalent(@date_picker_date_time_12h, @date_picker_date_time_24h)
62
+ screenshot_and_raise "ERROR: changing the picker resulted in two different dates: 12H => '#{@date_picker_date_time_12h}' 24H => '#{@date_picker_date_time_24h}'"
63
+ end
64
+ end
65
+
66
+ unless target_time.eql? @date_picker_time_12h or target_time.eql? @date_picker_time_24h
67
+ screenshot_and_raise "tried to change the time to '#{target_time}' but found '#{@date_picker_time_12h}' or '#{@date_picker_time_24h}'"
68
+ end
69
+ end
70
+
71
+ Then /^I change the date on the picker to "([^"]*)"$/ do |target_date|
72
+ if picker_has_calabash_additions
73
+ date_str_to_send = date_str_to_send_to_picker_from_date_str target_date
74
+ set_picker_date_with_date_time_str (date_str_to_send)
75
+ else
76
+ unless picker_weekday_month_day_is(target_date)
77
+ # figure out which way to turn the picker
78
+ # target = Date.parse(target_date)
79
+ dir = (Date.parse(target_date) < Date.today) ? "down" : "up"
80
+ limit = 60
81
+ count = 0
82
+ begin
83
+ dir.eql?("down") ? picker_scroll_down_on_column(0) : picker_scroll_up_on_column(0)
84
+ sleep(PICKER_STEP_PAUSE)
85
+ count = count + 1
86
+ end while ((not picker_weekday_month_day_is(target_date)) and count < limit)
87
+ end
88
+ unless picker_weekday_month_day_is(target_date)
89
+ screenshot_and_raise "scrolled '#{limit}' and could not change date to #{target_date}"
90
+ end
91
+
92
+ @date_picker_date_time_12h = picker_is_in_12h_locale ? picker_date_and_time_str_12h : picker_date_and_time_str_for_other_locale
93
+ @date_picker_date_time_24h = picker_is_in_24h_locale ? picker_date_and_time_str_24h : picker_date_and_time_str_for_other_locale
94
+ if picker_is_in_date_and_time_mode
95
+ @date_picker_time_12h = picker_is_in_12h_locale ? picker_time_12h_str : picker_time_for_other_locale
96
+ @date_picker_time_24h = picker_is_in_24h_locale ? picker_time_24h_str : picker_time_for_other_locale
97
+ unless time_strings_are_equivalent(@date_picker_time_12h, @date_picker_time_24h)
98
+ screenshot_and_raise "ERROR: changing the picker resulted in two different times: 12H => '#{@date_picker_time_12h}' 24H => '#{@date_picker_time_24h}'"
99
+ end
100
+ end
101
+ end
102
+ end
103
+
104
+
105
+ Then /^I change the picker date to "([^"]*)" and the time to "([^"]*)"$/ do |target_date, target_time|
106
+ macro %Q|I change the date on the picker to "#{target_date}"|
107
+ macro %Q|I change the time on the picker to "#{target_time}"|
108
+ end
109
+
110
+ Then /^I change the picker to (\d+) days? ago$/ do |days_ago|
111
+ today = Date.today
112
+ days_ago = today -= days_ago.to_i
113
+ fmt = picker_is_in_24h_locale ? PICKER_24H_DATE_FMT : PICKER_12H_DATE_FMT
114
+ target_date = days_ago.strftime(fmt).squeeze(" ").strip
115
+ macro %Q|I change the date on the picker to "#{target_date}"|
116
+ end
117
+
118
+
119
+ Then /^I change the picker to (\d+) days? ago at "([^"]*)"$/ do |days_ago, target_time|
120
+ today = Date.today
121
+ days_ago = today -= days_ago.to_i
122
+ fmt = picker_is_in_24h_locale ? PICKER_24H_DATE_FMT : PICKER_12H_DATE_FMT
123
+ target_date = days_ago.strftime(fmt).squeeze(" ").strip
124
+ macro %Q|I change the picker date to "#{target_date}" and the time to "#{target_time}"|
125
+ end
126
+
127
+ # requires that the picker is visible
128
+ Then /^the text in the "([^"]*)" label should match picker date and time$/ do |label_id|
129
+ text = query("view marked:'#{label_id}'", :text).first
130
+ screenshot_and_raise "could not find label with id '#{label_id}'"
131
+ date_time_24h = picker_is_in_24h_locale ? picker_date_and_time_str_24h : picker_date_and_time_str_for_other_locale
132
+ date_time_12h = picker_is_in_12h_locale ? picker_date_and_time_str_12h : picker_date_and_time_str_for_other_locale
133
+ unless (text.eql? date_time_12h) or (text.eql? date_time_24h)
134
+ screenshot_and_raise "expected '#{text}' to match '#{date_time_12h}' or '#{date_time_24h}'"
135
+ end
136
+ end
137
+
138
+ Then /^I change the picker date time to "([^"]*)"$/ do |target_time|
139
+ date_str = picker_date_str
140
+ macro %Q|I change the picker date to "#{date_str}" and the time to "#{target_time}"|
141
+ end
142
+
143
+ Then /^I should see that the date picker is in time mode$/ do
144
+ res = query("datePicker", :datePickerMode).first
145
+ unless res
146
+ screenshot_and_raise "expected to a date picker"
147
+ end
148
+ unless res == UIDatePickerModeTime
149
+ screenshot_and_raise "expected to see picker with time mode but found mode '#{res}'"
150
+ end
151
+ end
152
+
153
+ # requires picker is visible
154
+ Then /^I should see that the time on the picker is now$/ do
155
+ time_hash = time_hash_by_add_minutes_until_at_closest_interval (now_time_12h_locale)
156
+ at_interval_12h = time_hash[:h12]
157
+ at_interval_24h = time_hash[:h24]
158
+ picker_time = picker_time_str
159
+ unless picker_time.eql? at_interval_12h or picker_time.eql? at_interval_24h
160
+ screenshot_and_raise "expected to picker time to be '#{at_interval_12h}' or '#{at_interval_24h}' but found '#{picker_time}'"
161
+ end
162
+ end
163
+
164
+ # requires a time or date change. picker does not need to be visible
165
+ Then /^I should see that the "([^"]*)" row has the time I just entered in the "([^"]*)" label$/ do |row_id, label_id|
166
+ arr = query("tableViewCell marked:'#{row_id}' isHidden:0 descendant label marked:'#{label_id}'", :text)
167
+ screenshot_and_raise "could not find '#{label_id}' in the '#{row_id}' row" if arr.empty?
168
+ actual_text = arr.first
169
+ unless (actual_text.eql? @date_picker_time_12h) or (actual_text.eql? @date_picker_time_24h)
170
+ screenshot_and_raise "expected to see '#{@date_picker_time_12h}' or '#{@date_picker_time_24h}' in '#{label_id}' but found '#{actual_text}'"
171
+ end
172
+ end
173
+
174
+ # does not require a time or date change. picker needs to be visible
175
+ Then /^I should see that the "([^"]*)" row has the same time as the picker in the "([^"]*)" label$/ do |row_id, label_id|
176
+ arr = query("tableViewCell marked:'#{row_id}' isHidden:0 descendant label marked:'#{label_id}'", :text)
177
+ screenshot_and_raise "could not find '#{label_id}' in the '#{row_id}'" if arr.empty?
178
+ time_str_12h = picker_is_in_12h_locale ? picker_time_12h_str : picker_time_for_other_locale
179
+ time_str_24h = picker_is_in_24h_locale ? picker_time_24h_str : picker_time_for_other_locale
180
+ actual_text = arr.first
181
+ unless (actual_text.eql? time_str_12h) or (actual_text.eql? time_str_24h)
182
+ screenshot_and_raise "expected to see '#{time_str_12h}' or '#{time_str_24h}' in '#{label_id}' but found '#{actual_text}'"
183
+ end
184
+ end
185
+
186
+ # requires a time or date change. picker does not need to be visible
187
+ Then /^I should see that the "([^"]*)" row has the date and time I just entered in the "([^"]*)" label$/ do |row_id, label_id|
188
+ arr = query("tableViewCell marked:'#{row_id}' isHidden:0 descendant label marked:'#{label_id}'", :text)
189
+ screenshot_and_raise "could not find '#{label_id}' in the '#{row_id}' row" if arr.empty?
190
+ actual_text = arr.first
191
+ unless (actual_text.eql? @date_picker_date_time_12h) or (actual_text.eql? @date_picker_date_time_24h)
192
+ screenshot_and_raise "expected to see '#{@date_picker_date_time_12h}' or '#{@date_picker_date_time_24h}' in '#{label_id}' but found '#{actual_text}'"
193
+ end
194
+ end
195
+
196
+ Then /^I change the minute interval on the picker to (1|5|10|30) minutes?$/ do |target_interval|
197
+ res = query("datePicker", [{setMinuteInterval:target_interval.to_i}])
198
+ screenshot_and_raise "did not find a date picker - could not set the minute interval" if res.empty?
199
+ sleep(PICKER_STEP_PAUSE * 5)
200
+ @picker_minute_interval = target_interval.to_i
201
+ end
202
+
203
+ Then /^I change the time on the picker to (\d+) minutes? from now$/ do |target_minute|
204
+ future = Time.new + (60 * target_minute.to_i)
205
+ time_str = future.strftime(PICKER_12H_TIME_FMT).squeeze(" ").strip
206
+ macro %Q|I change the time on the picker to "#{time_str}"|
207
+ sleep(PICKER_STEP_PAUSE)
208
+ end
209
+
210
+ Then /^I change the time on the picker to (\d+) minutes? before now$/ do |target_minute|
211
+ past = Time.new - (60 * target_minute.to_i)
212
+ time_str = past.strftime(PICKER_12H_TIME_FMT).squeeze(" ").strip
213
+ macro %Q|I change the time on the picker to "#{time_str}"|
214
+ sleep(PICKER_STEP_PAUSE)
215
+ end
216
+
@@ -0,0 +1,58 @@
1
+ #include Briar::Picker
2
+
3
+ # may only work on circular pickers - does _not_ work on non-circular pickers
4
+ # because the visible titles do _not_ follow the selected index
5
+ Then /^I should see picker "([^"]*)" with row "([^"]*)" selected$/ do |picker_name, row_named|
6
+ should_see_picker picker_name
7
+ selected_title = selected_title_for_column 0
8
+ unless selected_title.eql?(row_named)
9
+ screenshot_and_raise "found picker named #{picker_name} but #{row_named} was not selected - found #{selected_title}"
10
+ end
11
+ end
12
+
13
+ Then /^I scroll (up|down) on picker "([^"]*)"$/ do |dir, picker_name|
14
+ should_see_picker picker_name
15
+ if dir.eql? "down"
16
+ picker_scroll_down_on_column 0
17
+ else
18
+ picker_scroll_up_on_column 0
19
+ end
20
+ step_pause
21
+ end
22
+
23
+ Then /^I scroll (up|down) on picker "([^"]*)" to row (\d+)$/ do |dir, picker, row|
24
+ should_see_picker picker
25
+ target_row = row.to_i
26
+ unless picker_current_index_for_column_is(0, target_row)
27
+ count = 0
28
+ begin
29
+ if dir.eql? "down"
30
+ picker_scroll_down_on_column 0
31
+ else
32
+ picker_scroll_up_on_column 0
33
+ end
34
+ count = count + 1
35
+ step_pause
36
+ end while ((not picker_current_index_for_column_is(0, target_row)) and count < 20)
37
+ end
38
+
39
+ unless picker_current_index_for_column_is(0, target_row)
40
+ screenshot_and_raise "scrolled #{dir} on picker 20 times but never found row #{row}"
41
+ end
42
+ end
43
+
44
+ Then /^I should see picker "([^"]*)" has selected row (\d+)$/ do |picker, row|
45
+ should_see_picker picker
46
+ unless picker_current_index_for_column_is(0, row.to_i)
47
+ screenshot_and_raise "expected picker #{picker} to have #{row} selected but found #{picker_current_index_for_column 0}"
48
+ end
49
+ end
50
+
51
+ Then /^I should (see|not see) picker "([^"]*)"$/ do |visibility, picker|
52
+ target = visibility.eql? "see"
53
+ if target
54
+ should_see_picker picker
55
+ else
56
+ should_not_see_picker picker
57
+ end
58
+ end