briar 0.0.7 → 0.0.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.
Files changed (43) hide show
  1. checksums.yaml +8 -8
  2. data/Rakefile +6 -11
  3. data/bin/briar +58 -0
  4. data/bin/briar_helpers.rb +28 -2
  5. data/briar.gemspec +3 -2
  6. data/features/step_definitions/alerts_and_sheets/action_sheet_steps.rb +10 -4
  7. data/features/step_definitions/alerts_and_sheets/alert_view_steps.rb +3 -10
  8. data/features/step_definitions/bars/navbar_steps.rb +1 -9
  9. data/features/step_definitions/bars/tabbar_steps.rb +2 -4
  10. data/features/step_definitions/bars/toolbar_steps.rb +2 -11
  11. data/features/step_definitions/control/button_steps.rb +3 -8
  12. data/features/step_definitions/control/segmented_control_steps.rb +20 -58
  13. data/features/step_definitions/email_steps.rb +10 -7
  14. data/features/step_definitions/keyboard_steps.rb +7 -2
  15. data/features/step_definitions/picker/date_picker_steps.rb +21 -177
  16. data/features/step_definitions/table_steps.rb +35 -71
  17. data/features/step_definitions/text_field_steps.rb +1 -5
  18. data/features/step_definitions/text_view_steps.rb +2 -2
  19. data/install-calabash-framework.sh.example +10 -0
  20. data/lib/briar.rb +31 -5
  21. data/lib/briar/alerts_and_sheets/action_sheet.rb +99 -0
  22. data/lib/briar/alerts_and_sheets/alert_view.rb +25 -4
  23. data/lib/briar/bars/navbar.rb +30 -19
  24. data/lib/briar/bars/tabbar.rb +7 -4
  25. data/lib/briar/bars/toolbar.rb +14 -1
  26. data/lib/briar/briar_core.rb +46 -15
  27. data/lib/briar/control/button.rb +35 -1
  28. data/lib/briar/control/segmented_control.rb +69 -8
  29. data/lib/briar/control/slider.rb +2 -2
  30. data/lib/briar/cucumber.rb +3 -1
  31. data/lib/briar/email.rb +19 -13
  32. data/lib/briar/keyboard.rb +50 -10
  33. data/lib/briar/label.rb +20 -0
  34. data/lib/briar/picker/date_picker.rb +88 -584
  35. data/lib/briar/picker/date_picker_core.rb +293 -0
  36. data/lib/briar/picker/date_picker_manipulation.rb +255 -0
  37. data/lib/briar/picker/picker.rb +10 -0
  38. data/lib/briar/table.rb +261 -93
  39. data/lib/briar/version.rb +1 -1
  40. data/spec/spec_helper.rb +0 -2
  41. metadata +14 -13
  42. data/lib/briar/gestalt.rb +0 -87
  43. data/spec/briar/gestalt_spec.rb +0 -66
@@ -0,0 +1,293 @@
1
+ UIDatePickerModeTime = 0
2
+ UIDatePickerModeDate = 1
3
+ UIDatePickerModeDateAndTime = 2
4
+ UIDatePickerModeCountDownTimer = 3
5
+
6
+ # most locales and situations prefer _not_ to have leading zeros on hours in 24h
7
+ # see usage below to find out when and if the zeros are stripped
8
+ BRIAR_PICKER_24H_TIME_FMT = '%H:%M'
9
+ BRIAR_PICKER_12H_TIME_FMT = '%l:%M %p'
10
+
11
+ BRIAR_TIME_FORMATS = {:h24 => BRIAR_PICKER_24H_TIME_FMT,
12
+ :h12 => BRIAR_PICKER_12H_TIME_FMT}
13
+
14
+ BRIAR_REMOVE_LEADING_ZERO_REGEX = /\A^0/
15
+
16
+ # 24h locales - Fri 16 Nov - 24h locales
17
+ BRIAR_PICKER_24H_BRIEF_DATE_FMT = '%a %e %b'
18
+ # common format for US Fri Nov 16
19
+ BRIAR_PICKER_12H_BRIEF_DATE_FMT = '%a %b %e'
20
+
21
+ BRIAR_DATE_FORMATS = {:brief_24h => BRIAR_PICKER_24H_BRIEF_DATE_FMT,
22
+ :brief_12h => BRIAR_PICKER_12H_BRIEF_DATE_FMT}
23
+
24
+
25
+ module Briar
26
+ module Picker
27
+ module DateCore
28
+
29
+ def query_string_for_picker (picker_id = nil)
30
+ picker_id.nil? ? 'datePicker' : "datePicker marked:'#{picker_id}'"
31
+ end
32
+
33
+ def should_see_date_picker (picker_id=nil)
34
+ query_str = query_string_for_picker picker_id
35
+ if query(query_str).empty?
36
+ screenshot_and_raise "should see picker with query '#{query_str}'"
37
+ end
38
+ query_str
39
+ end
40
+
41
+ def ruby_time_from_picker (options = {:picker_id => nil,
42
+ :convert_time_to_utc => false})
43
+ picker_id = picker_id_from_options options
44
+
45
+ if picker_is_in_countdown_mode picker_id
46
+ screenshot_and_raise 'method is not available for pickers that are not in date or date time mode'
47
+ end
48
+ query_str = should_see_date_picker picker_id
49
+ res = query(query_str, :date)
50
+ if res.empty?
51
+ screenshot_and_raise "should be able to get date from picker with query '#{query_str}'"
52
+ end
53
+
54
+ rdt = DateTime.parse(res.first)
55
+ convert = convert_to_utc_from_options options
56
+ if convert
57
+ rdt.to_time.utc
58
+ else
59
+ rdt.to_time
60
+ end
61
+ end
62
+
63
+
64
+ # appledoc ==> The property is an NSDate object or nil (the default),
65
+ # which means no maximum date.
66
+ def picker_maximum_date_time (picker_id = nil)
67
+ if picker_is_in_countdown_mode picker_id
68
+ screenshot_and_raise 'method is not available for pickers that are not in date or date time mode'
69
+ end
70
+
71
+ query_str = should_see_date_picker picker_id
72
+ res = query(query_str, :maximumDate)
73
+ if res.empty?
74
+ screenshot_and_raise "should be able to get max date from picker with query '#{query_str}'"
75
+ end
76
+ return nil if res.first.nil?
77
+ DateTime.parse(res.first)
78
+ end
79
+
80
+ # appledoc ==> The property is an NSDate object or nil (the default),
81
+ # which means no minimum date.
82
+ def picker_minimum_date_time (picker_id = nil)
83
+ if picker_is_in_countdown_mode picker_id
84
+ screenshot_and_raise 'method is not available for pickers that are not in date or date time mode'
85
+ end
86
+
87
+ query_str = should_see_date_picker picker_id
88
+ res = query(query_str, :minimumDate)
89
+ if res.empty?
90
+ screenshot_and_raise "should be able to get min date from picker with query '#{query_str}'"
91
+ end
92
+ return nil if res.first.nil?
93
+ DateTime.parse(res.first)
94
+ end
95
+
96
+ def picker_mode(picker_id=nil)
97
+ query_str = should_see_date_picker picker_id
98
+ res = query(query_str, :datePickerMode)
99
+ if res.empty?
100
+ screenshot_and_raise "should be able to get mode from picker with query '#{query_str}'"
101
+ end
102
+ res.first
103
+ end
104
+
105
+ def picker_is_in_time_mode(picker_id=nil)
106
+ picker_mode(picker_id) == UIDatePickerModeTime
107
+ end
108
+
109
+ def picker_is_in_date_mode(picker_id=nil)
110
+ picker_mode(picker_id) == UIDatePickerModeDate
111
+ end
112
+
113
+ def picker_is_in_date_and_time_mode(picker_id=nil)
114
+ picker_mode(picker_id) == UIDatePickerModeDateAndTime
115
+ end
116
+
117
+ def picker_is_in_countdown_mode(picker_id=nil)
118
+ picker_mode(picker_id) == UIDatePickerModeCountDownTimer
119
+ end
120
+
121
+ def picker_id_from_options (options={:picker_id => nil})
122
+ options == nil ? nil : options[:picker_id]
123
+ end
124
+
125
+ def convert_to_utc_from_options(options={:convert_time_to_utc => false})
126
+ return false if options.nil?
127
+ return false if not options.has_key?(:convert_time_to_utc)
128
+ options[:convert_time_to_utc]
129
+ end
130
+
131
+ # apple docs
132
+ # You can use this property to set the interval displayed by the minutes wheel
133
+ # (for example, 15 minutes). The interval value must be evenly divided into 60;
134
+ # if it is not, the default value is used. The default and minimum values are 1;
135
+ # the maximum value is 30.
136
+ def picker_minute_interval(picker_id = nil)
137
+ screenshot_and_raise 'there is no minute in date mode' if picker_is_in_date_mode
138
+ query_str = should_see_date_picker picker_id
139
+ res = query(query_str, :minuteInterval)
140
+ if res.empty?
141
+ screenshot_and_raise "should be able to get minute interval from picker with '#{query_str}'"
142
+ end
143
+ @picker_minute_interval = res.first
144
+ end
145
+
146
+ # funky little bugger - used to change a picker to the nearest minute
147
+ # based on the minute interval
148
+ def time_hash_by_add_minutes_until_at_closest_interval (time_str, interval=picker_minute_interval())
149
+ screenshot_and_raise "interval '#{interval}' is not on (0, 59) which is not allowed" unless (0..59).member?(interval)
150
+ time = Time.parse(time_str)
151
+ # normalize to zero
152
+ time = time - time.sec
153
+ minute = time.min
154
+ count = 0
155
+ unless (minute % interval) == 0
156
+ begin
157
+ minute = (minute > 59) ? 0 : minute + 1
158
+ count = count + 1
159
+ end
160
+ end while ((minute % interval) != 0)
161
+ time = time + (count * 60)
162
+
163
+ {:h12 => time.strftime(BRIAR_PICKER_12H_TIME_FMT).squeeze(' ').strip,
164
+ :h24 => time.strftime(BRIAR_PICKER_24H_TIME_FMT).squeeze(' ').strip.sub(BRIAR_REMOVE_LEADING_ZERO_REGEX, ''),
165
+ :time => time}
166
+ end
167
+
168
+
169
+ # is the picker in 12h or 24h mode
170
+ def picker_column_for_period(picker_id = nil)
171
+ if picker_is_in_date_mode picker_id or picker_is_in_countdown_mode picker_id
172
+ screenshot_and_raise '12h/24h mode is not applicable to this mode'
173
+ end
174
+ picker_is_in_time_mode ? 2 : 3
175
+ end
176
+
177
+ # 12h or 24h locale
178
+ def picker_is_in_12h_locale(picker_id = nil)
179
+ if picker_is_in_date_mode picker_id or picker_is_in_countdown_mode picker_id
180
+ screenshot_and_raise '12h/24h mode is not applicable to this mode'
181
+ end
182
+
183
+ column = picker_column_for_period(picker_id=nil)
184
+ !query("pickerTableView index:#{column}").empty?
185
+ end
186
+
187
+ def picker_is_in_24h_locale(picker_id=nil)
188
+ if picker_is_in_date_mode picker_id or picker_is_in_countdown_mode picker_id
189
+ screenshot_and_raise '12h/24h mode is not applicable to this mode'
190
+ end
191
+ !picker_is_in_12h_locale picker_id
192
+ end
193
+
194
+ # get the times off the picker in 12h and 24h format
195
+ def picker_time_str(format_key, options={:picker_id => nil,
196
+ :convert_time_to_utc => false})
197
+ picker_id = picker_id_from_options options
198
+
199
+ if picker_is_in_date_mode picker_id or picker_is_in_countdown_mode picker_id
200
+ screenshot_and_raise 'the time is not applicable for this mode'
201
+ end
202
+ format = BRIAR_TIME_FORMATS[format_key]
203
+ unless format
204
+ screenshot_and_raise "format '#{format_key}' was not one of '#{BRIAR_TIME_FORMATS}'"
205
+ end
206
+
207
+ time = ruby_time_from_picker options
208
+ time.strftime(format).strip.sub(BRIAR_REMOVE_LEADING_ZERO_REGEX, '')
209
+ end
210
+
211
+
212
+ def picker_time_strs_hash(options={:picker_id => nil,
213
+ :convert_time_to_utc => false})
214
+ picker_id = picker_id_from_options options
215
+ if picker_is_in_date_mode picker_id or picker_is_in_countdown_mode picker_id
216
+ screenshot_and_raise 'the time is not applicable for this mode'
217
+ end
218
+
219
+ {:h24 => picker_time_str(:h24, options),
220
+ :h12 => picker_time_str(:h12, options)}
221
+ end
222
+
223
+ def picker_time_strs_arr(options={:picker_id => nil,
224
+ :convert_time_to_utc => false})
225
+ picker_id = picker_id_from_options options
226
+ if picker_is_in_date_mode picker_id or picker_is_in_countdown_mode picker_id
227
+ screenshot_and_raise 'the time is not applicable for this mode'
228
+ end
229
+ [picker_time_str(:h24, options), picker_time_str(:h12, options)]
230
+ end
231
+
232
+ def picker_brief_date_str(format_key, options={:picker_id => nil,
233
+ :convert_time_to_utc => false})
234
+ picker_id = picker_id_from_options options
235
+ if picker_is_in_countdown_mode picker_id
236
+ screenshot_and_raise 'date is not applicable for this mode'
237
+ end
238
+ format = BRIAR_DATE_FORMATS[format_key]
239
+ unless format
240
+ screenshot_and_raise "format '#{format_key}' is not one of '#{BRIAR_DATE_FORMATS.keys}'"
241
+ end
242
+ time = ruby_time_from_picker options
243
+ time.strftime(format).strip.squeeze(' ')
244
+ end
245
+
246
+ def picker_brief_date_strs_hash(options={:picker_id => nil,
247
+ :convert_time_to_utc => false})
248
+ picker_id = picker_id_from_options options
249
+ if picker_is_in_countdown_mode picker_id
250
+ screenshot_and_raise 'date is not applicable for this mode'
251
+ end
252
+ {:brief_24h => picker_brief_date_str(:brief_24h, options),
253
+ :brief_12h => picker_brief_date_str(:brief_12h, options)}
254
+ end
255
+
256
+ def picker_brief_date_strs_arr(options={:picker_id => nil,
257
+ :convert_time_to_utc => false})
258
+ picker_id = picker_id_from_options options
259
+ if picker_is_in_countdown_mode picker_id
260
+ screenshot_and_raise 'date is not applicable for this mode'
261
+ end
262
+ [picker_brief_date_str(:brief_24h, options), picker_brief_date_str(:brief_12h, options)]
263
+ end
264
+
265
+
266
+ def now_times_map
267
+ utc = Time.now.utc
268
+ now = Time.now
269
+
270
+ {:h12 => now.strftime(BRIAR_PICKER_12H_TIME_FMT).squeeze(' ').strip,
271
+ :h24 => now.strftime(BRIAR_PICKER_24H_TIME_FMT).squeeze(' ').strip.sub(BRIAR_REMOVE_LEADING_ZERO_REGEX, ''),
272
+ :h12_utc => utc.strftime(BRIAR_PICKER_12H_TIME_FMT).squeeze(' ').strip,
273
+ :h24_utc => utc.strftime(BRIAR_PICKER_24H_TIME_FMT).squeeze(' ').strip.sub(BRIAR_REMOVE_LEADING_ZERO_REGEX, ''),
274
+ :utc => utc,
275
+ :time => now}
276
+ end
277
+
278
+ def now_time_24h_locale
279
+ now_times_map[:h24]
280
+ end
281
+
282
+ def now_time_12h_locale
283
+ now_times_map[:h12]
284
+ end
285
+
286
+ def now_times_arr
287
+ [now_time_24h_locale, now_time_12h_locale]
288
+ end
289
+
290
+
291
+ end
292
+ end
293
+ end
@@ -0,0 +1,255 @@
1
+ require 'date'
2
+
3
+ =begin
4
+
5
+ change_picker_date_time (target_dt, options)
6
+
7
+ change_time_on_picker_with_time_str (time_str, options)
8
+ change_time_on_picker_with_time (time, options)
9
+
10
+ change_date_on_picker_with_date_str (date_str, options)
11
+ change_date_on_picker_with_date (date, options)
12
+
13
+
14
+ options ==>
15
+ {
16
+ # calabash returns dates in terms of the local timezone
17
+ # sometimes you have pickers (like alarms or reminders) that use utc timezone
18
+ # WARN: only set this if you need times converted to UTC - if you are in UTC
19
+ # timezone, don't set this
20
+ :convert_time_to_utc => false,
21
+ # animat the change
22
+ :animate => true,
23
+ # optionally pass the picker id
24
+ :picker_id => nil,
25
+ # iterate over the picker's target/action pairs and call them using
26
+ # performSelector:SEL object:<picker>
27
+ :notify_targets => true
28
+ }
29
+
30
+ =end
31
+
32
+ BRIAR_PICKER_ISO8601_TIME_FMT = '%H:%M'
33
+
34
+ # our canonical format for testing if two dates are the same
35
+ BRIAR_PICKER_ISO8601_BRIEF_DATE_FMT = '%Y-%m-%d'
36
+ BRIAR_PICKER_ISO8601_BRIEF_DATE_TIME_FMT = '%Y-%m-%d %H:%M'
37
+
38
+ # ex. 2012_11_18_16_45
39
+ BRIAR_PICKER_RUBY_DATE_AND_TIME_FMT_ZONED = '%Y_%m_%d_%H_%M_%z'
40
+ BRIAR_PICKER_OBJC_DATE_AND_TIME_FMT_ZONED = 'yyyy_MM_dd_HH_mm_Z'
41
+ BRIAR_PICKER_RUBY_DATE_AND_TIME_FMT = '%Y_%m_%d_%H_%M'
42
+ BRIAR_PICKER_OBJC_DATE_AND_TIME_FMT = 'yyyy_MM_dd_HH_mm'
43
+
44
+ BRIAR_DATE_CONVERSION_FORMATS = {:objc => {:zoned => BRIAR_PICKER_OBJC_DATE_AND_TIME_FMT_ZONED,
45
+ :default => BRIAR_PICKER_OBJC_DATE_AND_TIME_FMT},
46
+ :ruby => {:zoned => BRIAR_PICKER_RUBY_DATE_AND_TIME_FMT_ZONED,
47
+ :default => BRIAR_PICKER_RUBY_DATE_AND_TIME_FMT}}
48
+
49
+ module Briar
50
+ module Picker
51
+ module DateManipulation
52
+ include Briar::Picker::DateCore
53
+
54
+ def date_format_for_target (target, zoned)
55
+ res = BRIAR_DATE_CONVERSION_FORMATS[target][zoned]
56
+ if res.nil?
57
+ screenshot_and_raise "could not find format for target '#{target}' and zone '#{zoned}'"
58
+ end
59
+ res
60
+ end
61
+
62
+ def convert_date_time_to_objc_fmt (date_time, convert=false)
63
+ format = date_format_for_target(:ruby, convert ? :zoned : :default)
64
+ date_time.strftime(format).squeeze(' ').strip
65
+ end
66
+
67
+ def args_for_change_date_on_picker(options)
68
+ args = []
69
+ if options.has_key?(:notify_targets)
70
+ args << options[:notify_targets] ? 1 : 0
71
+ else
72
+ args << 1
73
+ end
74
+
75
+ if options.has_key?(:animate)
76
+ args << options[:animate] ? 1 : 0
77
+ else
78
+ args << 1
79
+ end
80
+ args
81
+ end
82
+
83
+ def target_date_for_change_time_on_picker_with_time_str(time_str, convert, picker_id=nil)
84
+ if time_str.nil? || time_str.length == 0
85
+ screenshot_and_raise "time str '#{time_str}' must be non-nil and non-empty"
86
+ end
87
+ time = Time.parse(time_str)
88
+ target_date_for_change_time_on_picker_with_time time, convert, picker_id
89
+ end
90
+
91
+ def target_date_for_change_time_on_picker_with_time(target_time, convert, picker_id=nil)
92
+ current_time = ruby_time_from_picker picker_id
93
+ tz_offset = convert ? 0 : (current_time.gmt_offset/3600)/12
94
+ DateTime.new(current_time.year, current_time.mon, current_time.day,
95
+ target_time.hour, target_time.min,
96
+ 0, tz_offset)
97
+ end
98
+
99
+
100
+ def target_date_for_change_date_on_picker_with_date_str(date_str, picker_id=nil)
101
+ if date_str.nil? || date_str.length == 0
102
+ screenshot_and_raise "date str '#{date_str}' must be non-nil and non-empty"
103
+ end
104
+ date = Date.parse(date_str)
105
+ target_date_for_change_date_on_picker_with_date date, picker_id
106
+ end
107
+
108
+ def target_date_for_change_date_on_picker_with_date(target_date, picker_id=nil)
109
+ current_time = ruby_time_from_picker picker_id
110
+ DateTime.new(target_date.year, target_date.mon, target_date.day,
111
+ current_time.hour, current_time.min, 0, current_time.offset)
112
+ end
113
+
114
+
115
+ # pickers that use utc (reminders, alerts, etc. do no usually have
116
+ # min/max dates
117
+ def ensure_can_change_picker_to_date(target_dt, picker_id=nil)
118
+ max_date = picker_maximum_date_time picker_id
119
+ if max_date and target_dt > max_date
120
+ p "target: '#{target_dt}'"
121
+ p " max: '#{max_date}'"
122
+ screenshot_and_raise "cannot change time to '#{target_dt}' because the picker has a maximum date of '#{max_date}'"
123
+ end
124
+
125
+ min_date = picker_minimum_date_time picker_id
126
+ if min_date and target_dt < min_date
127
+ p "target: '#{target_dt}'"
128
+ p " min: '#{min_date}'"
129
+ screenshot_and_raise "cannot change time to #{target_dt} because the picker has a minimum date of '#{min_date}'"
130
+ end
131
+ end
132
+
133
+
134
+ def change_picker_date_time (target_dt, options = {:convert_time_to_utc => false,
135
+ :animate => true,
136
+ :picker_id => nil,
137
+ :notify_targets => true})
138
+
139
+ picker_id = picker_id_from_options options
140
+ unless picker_is_in_time_mode picker_id or picker_is_in_date_and_time_mode picker_id
141
+ screenshot_and_raise 'picker is not in date time or time mode'
142
+ end
143
+
144
+ should_see_date_picker picker_id
145
+
146
+ convert = convert_to_utc_from_options options
147
+
148
+ ensure_can_change_picker_to_date target_dt, picker_id
149
+
150
+ target_str = convert_date_time_to_objc_fmt target_dt, convert
151
+ fmt_str = date_format_for_target(:objc, convert ? :zoned : :default)
152
+
153
+ args = args_for_change_date_on_picker options
154
+ query_str = query_string_for_picker picker_id
155
+
156
+ views_touched = map(query_str, :changeDatePickerDate, target_str, fmt_str, *args)
157
+
158
+ if views_touched.empty? or views_touched.member? '<VOID>'
159
+ screenshot_and_raise "could not change date on picker to '#{target_dt}' using query '#{query_str}' with options '#{options}'"
160
+ end
161
+
162
+ set_briar_date_picker_variables target_dt, options
163
+
164
+ step_pause
165
+ views_touched
166
+ end
167
+
168
+ def change_time_on_picker_with_time_str (time_str, options = {:convert_time_to_utc => false,
169
+ :animate => true,
170
+ :picker_id => nil,
171
+ :notify_targets => true})
172
+ convert = convert_to_utc_from_options options
173
+ picker_id = picker_id_from_options options
174
+ target_dt = target_date_for_change_time_on_picker_with_time_str time_str, convert, picker_id
175
+ change_picker_date_time target_dt, options
176
+ end
177
+
178
+
179
+ def change_time_on_picker_with_time (time, options = {:convert_time_to_utc => false,
180
+ :animate => true,
181
+ :picker_id => nil,
182
+ :notify_targets => true})
183
+ convert = convert_to_utc_from_options options
184
+ picker_id = picker_id_from_options options
185
+ target_dt = target_date_for_change_time_on_picker_with_time time, convert, picker_id
186
+ change_picker_date_time target_dt, options
187
+ end
188
+
189
+ def change_date_on_picker_with_date_str (date_str, options = {:animate => true,
190
+ :picker_id => nil,
191
+ :notify_targets => true})
192
+ picker_id = picker_id_from_options options
193
+ target_dt = target_date_for_change_date_on_picker_with_date_str date_str, picker_id
194
+ change_picker_date_time target_dt, options
195
+ end
196
+
197
+
198
+ def change_date_on_picker_with_date (date, options = {:animate => true,
199
+ :picker_id => nil,
200
+ :notify_targets => true})
201
+ picker_id = picker_id_from_options options
202
+ target_dt = target_date_for_change_date_on_picker_with_date date, picker_id
203
+ change_picker_date_time target_dt, options
204
+ end
205
+
206
+
207
+ def set_briar_date_picker_variables(target_dt, options={:picker_id => nil,
208
+ :convert_time_to_utc => false})
209
+ picker_id = picker_id_from_options options
210
+ if picker_is_in_date_and_time_mode picker_id or picker_is_in_time_mode picker_id
211
+ @date_picker_time_12h = picker_time_str :h12, options
212
+ @date_picker_time_24h = picker_time_str :h24, options
213
+ @date_picker_time_hash = picker_time_strs_hash options
214
+ @date_picker_time_arr = picker_time_strs_arr options
215
+ unless time_strings_are_equivalent @date_picker_time_12h, @date_picker_time_24h
216
+ screenshot_and_raise "ERROR: changing the picker resulted in two different times: '#{@date_picker_time_hash}'"
217
+ end
218
+ end
219
+
220
+ @date_picker_brief_date_12h = picker_brief_date_str :brief_12h, options
221
+ @date_picker_brief_date_24h = picker_brief_date_str :brief_24h, options
222
+ @date_picker_brief_date_hash = picker_brief_date_strs_hash options
223
+ @date_picker_brief_date_arr = picker_brief_date_strs_arr options
224
+
225
+ unless brief_date_strings_are_equivalent @date_picker_brief_date_12h, @date_picker_brief_date_24h
226
+ screenshot_and_raise "ERROR: changing the picker resulted in two different dates: '#{@date_picker_brief_date_hash}'"
227
+ end
228
+
229
+ @date_picker_date_time = target_dt
230
+ end
231
+
232
+
233
+ # utility
234
+ def time_strings_are_equivalent (a, b)
235
+ a_iso_str = Time.parse(a).strftime(BRIAR_PICKER_ISO8601_TIME_FMT)
236
+ b_iso_str = Time.parse(b).strftime(BRIAR_PICKER_ISO8601_TIME_FMT)
237
+ a_iso_str.eql? b_iso_str
238
+ end
239
+
240
+
241
+ def brief_date_strings_are_equivalent (a, b)
242
+ a_iso_str = Date.parse(a).strftime(BRIAR_PICKER_ISO8601_BRIEF_DATE_FMT)
243
+ b_iso_str = Date.parse(b).strftime(BRIAR_PICKER_ISO8601_BRIEF_DATE_FMT)
244
+ a_iso_str.eql? b_iso_str
245
+ end
246
+
247
+
248
+ def brief_date_time_strings_are_equivalent (a, b)
249
+ a_iso_str = Date.parse(a).strftime(BRIAR_PICKER_ISO8601_BRIEF_DATE_TIME_FMT)
250
+ b_iso_str = Date.parse(b).strftime(BRIAR_PICKER_ISO8601_BRIEF_DATE_TIME_FMT)
251
+ a_iso_str.eql? b_iso_str
252
+ end
253
+ end
254
+ end
255
+ end