briar 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
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