lib/calabash/android/interactions.rb in calabash-1.9.9.pre3 vs lib/calabash/android/interactions.rb in calabash-2.0.0.pre1

- old
+ new

@@ -1,12 +1,14 @@ +require 'date' +require 'time' + module Calabash module Android - # @!visibility private module Interactions - # Go back. + # Go back. If the keyboard is shown, it will be dismissed. def go_back - dismiss_keyboard + Device.default.perform_action('hide_soft_keyboard') press_back_button end # Go to the home screen. def go_home @@ -34,9 +36,108 @@ # # @return [String] The name of the currently focused package def focused_package Device.default.current_focus[:package] end + + # Sets the date of the first visible date picker widget. + # + # @example + # set_date('2012-04-24') + # + # @example + # date = Date.parse('3rd Feb 2012') + # set_date(date) + # + # @param [Date, String] date The date to set. If given a String, + # `Date.parse` is called on the string. + # + # @see #set_date_in + def set_date(date) + set_date_in("android.widget.DatePicker index:0", date) + end + + # Sets the date of a date picker widget. If `query` matches multiple date + # pickers, the date is set for all of them. + # + # @param [String, Hash, Calabash::Query] query The query to match the + # date picker. + # @param [Date, String] date The date to set. If given a String, + # `Date.parse` is called on the string. + # @see #set_date + def set_date_in(query, date) + if date.is_a?(String) + date = Date.parse(date) + end + + wait_for_view(query, timeout: Calabash::Gestures::DEFAULT_GESTURE_WAIT_TIMEOUT) + result = query(query, updateDate: [date.year, date.month, date.day]) + + if result.length != 1 + raise "Failed to set the date of '#{query}'" + end + + if result.first.is_a?(Hash) && result.first.has_key?('error') + raise result.first['error'] + end + + true + end + + # Sets the time of the first visible time picker widget. + # + # @example + # set_time('14:42') + # + # @example + # time = Time.parse('8:30 AM') + # set_time(time) + # + # @param [Time, String] time The time to set. If given a String, + # `Time.parse` is called on the string. + # + # @see #set_time_in + def set_time(time) + set_time_in("android.widget.TimePicker index:0", time) + end + + # Sets the time of a time picker widget. If `query` matches multiple time + # pickers, the time is set for all of them. + # + # @param [String, Hash, Calabash::Query] query The query to match the + # time picker. + # @param [Time, String] time The time to set. If given a String, + # `Time.parse` is called on the string. + # @see #set_time + def set_time_in(query, time) + if time.is_a?(String) + time = Time.parse(time) + end + + wait_for_view(query, timeout: Calabash::Gestures::DEFAULT_GESTURE_WAIT_TIMEOUT) + result = query(query, setCurrentHour: time.hour) + + if result.length != 1 + raise "Failed to set the time of '#{query}'" + end + + if result.first.is_a?(Hash) && result.first.has_key?('error') + raise result.first['error'] + end + + result = query(query, setCurrentMinute: time.min) + + if result.length != 1 + raise "Failed to set the time of '#{query}'" + end + + if result.first.is_a?(Hash) && result.first.has_key?('error') + raise result.first['error'] + end + + true + end + # @!visibility private def _evaluate_javascript_in(query, javascript) Device.default.evaluate_javascript_in(query, javascript) end