calabash-cucumber 0.19.0 → 0.19.1
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.
- checksums.yaml +4 -4
- data/dylibs/libCalabashDyn.dylib +0 -0
- data/dylibs/libCalabashDynSim.dylib +0 -0
- data/lib/calabash-cucumber/console_helpers.rb +3 -1
- data/lib/calabash-cucumber/device.rb +2 -1
- data/lib/calabash-cucumber/failure_helpers.rb +7 -3
- data/lib/calabash-cucumber/http/http.rb +1 -1
- data/lib/calabash-cucumber/keyboard_helpers.rb +46 -176
- data/lib/calabash-cucumber/launcher.rb +1 -1
- data/lib/calabash-cucumber/map.rb +17 -8
- data/lib/calabash-cucumber/uia.rb +11 -2
- data/lib/calabash-cucumber/version.rb +2 -2
- data/scripts/.irbrc +3 -2
- data/staticlib/calabash.framework.zip +0 -0
- data/staticlib/libFrankCalabash.a +0 -0
- metadata +19 -5
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 025464e725f8c4d6ff249aaf250a6685896a75f6
         | 
| 4 | 
            +
              data.tar.gz: 37858349091f137c9888024cd77cbb856c60c41d
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: c635ff3050323a9233fedc5a000eb7ba3ece0d93fa7708d6365c89a38b55757794bf9fa311e276e5406cac166b87cf7930adeab1d9a5c1d02618356415972cda
         | 
| 7 | 
            +
              data.tar.gz: 62dd3aa71a22c78c10ec5377a53277af29701cfa291941ce03db779505f6f9eaeb316b7d1d8aac16d20b95cddc8a10b6a7ece2b865c1309091f5176ddb4ee903
         | 
    
        data/dylibs/libCalabashDyn.dylib
    CHANGED
    
    | Binary file | 
| Binary file | 
| @@ -279,7 +279,9 @@ Please report this issue. | |
| 279 279 | 
             
                      str_id = data["id"] ? "[id:#{RunLoop::Color.blue(data["id"])}] " : ""
         | 
| 280 280 | 
             
                      str_label = data["label"] ? "[label:#{RunLoop::Color.green(data["label"])}] " : ""
         | 
| 281 281 | 
             
                      str_text = data["value"] ? "[text:#{RunLoop::Color.magenta(data["value"])}] " : ""
         | 
| 282 | 
            -
                       | 
| 282 | 
            +
                      str_node_type = data["nodeType"] ? "[nodeType:#{RunLoop::Color.red(data["nodeType"])}] " : ""
         | 
| 283 | 
            +
             | 
| 284 | 
            +
                      output("#{str_type}#{str_id}#{str_label}#{str_text}#{str_node_type}", indentation)
         | 
| 283 285 | 
             
                      output("\n", indentation)
         | 
| 284 286 | 
             
                    end
         | 
| 285 287 | 
             
                  end
         | 
| @@ -51,7 +51,12 @@ module Calabash | |
| 51 51 | 
             
                  def screenshot_embed(options={:prefix => nil, :name => nil, :label => nil})
         | 
| 52 52 | 
             
                    path = screenshot(options)
         | 
| 53 53 | 
             
                    filename = options[:label] || File.basename(path)
         | 
| 54 | 
            -
                    embed | 
| 54 | 
            +
                    if self.respond_to?(:embed)
         | 
| 55 | 
            +
                      embed(path, 'image/png', filename)
         | 
| 56 | 
            +
                    else
         | 
| 57 | 
            +
                      RunLoop.log_info2("Embed is not available in this context. Will not embed.")
         | 
| 58 | 
            +
                    end
         | 
| 59 | 
            +
                    true
         | 
| 55 60 | 
             
                  end
         | 
| 56 61 |  | 
| 57 62 | 
             
                  # Generates a screenshot of the app UI by calling screenshot_embed and raises an error.
         | 
| @@ -82,7 +87,6 @@ module Calabash | |
| 82 87 | 
             
                  def fail(msg='Error. Check log for details.', options={:prefix => nil, :name => nil, :label => nil})
         | 
| 83 88 | 
             
                    screenshot_and_raise(msg, options)
         | 
| 84 89 | 
             
                  end
         | 
| 85 | 
            -
             | 
| 86 90 | 
             
                end
         | 
| 87 91 | 
             
              end
         | 
| 88 | 
            -
            end
         | 
| 92 | 
            +
            end
         | 
| @@ -66,7 +66,7 @@ module Calabash | |
| 66 66 |  | 
| 67 67 | 
             
                      begin
         | 
| 68 68 | 
             
                        success, body = self.ping_app
         | 
| 69 | 
            -
                        RunLoop.log_debug("Connected to  | 
| 69 | 
            +
                        RunLoop.log_debug("Connected to Calabash Server on try: #{try + 1} of #{max_retry_count}")
         | 
| 70 70 | 
             
                        return success, body if success
         | 
| 71 71 | 
             
                      rescue => e
         | 
| 72 72 | 
             
                        last_error = e
         | 
| @@ -229,17 +229,8 @@ module Calabash | |
| 229 229 | 
             
                    return if opts[:skip]
         | 
| 230 230 |  | 
| 231 231 | 
             
                    screenshot = opts[:screenshot]
         | 
| 232 | 
            -
                     | 
| 233 | 
            -
                      msg =  | 
| 234 | 
            -
                      if screenshot
         | 
| 235 | 
            -
                        screenshot_and_raise msg
         | 
| 236 | 
            -
                      else
         | 
| 237 | 
            -
                        raise msg
         | 
| 238 | 
            -
                      end
         | 
| 239 | 
            -
                    end
         | 
| 240 | 
            -
             | 
| 241 | 
            -
                    if split_keyboard_visible? and uia_not_available?
         | 
| 242 | 
            -
                      msg = 'cannot type on a split keyboard without launching with Instruments'
         | 
| 232 | 
            +
                    if !keyboard_visible?
         | 
| 233 | 
            +
                      msg = "No visible keyboard."
         | 
| 243 234 | 
             
                      if screenshot
         | 
| 244 235 | 
             
                        screenshot_and_raise msg
         | 
| 245 236 | 
             
                      else
         | 
| @@ -291,46 +282,32 @@ module Calabash | |
| 291 282 | 
             
                    _ensure_can_enter_text({:screenshot => should_screenshot,
         | 
| 292 283 | 
             
                                            :skip => (not should_screenshot)})
         | 
| 293 284 |  | 
| 294 | 
            -
                    if  | 
| 295 | 
            -
                       | 
| 296 | 
            -
             | 
| 297 | 
            -
                       | 
| 298 | 
            -
                        code = UIA_SUPPORTED_CHARS[chr]
         | 
| 299 | 
            -
             | 
| 300 | 
            -
                        unless code
         | 
| 301 | 
            -
                          raise "typing character '#{chr}' is not yet supported when running with Instruments"
         | 
| 302 | 
            -
                        end
         | 
| 285 | 
            +
                    if chr.length == 1
         | 
| 286 | 
            +
                      uia_type_string_raw chr
         | 
| 287 | 
            +
                    else
         | 
| 288 | 
            +
                      code = UIA_SUPPORTED_CHARS[chr]
         | 
| 303 289 |  | 
| 304 | 
            -
             | 
| 305 | 
            -
                         | 
| 306 | 
            -
                        #           on numeric keyboards, it is actually a button on the
         | 
| 307 | 
            -
                        #           keyboard and not a key
         | 
| 308 | 
            -
                        if code.eql?(UIA_SUPPORTED_CHARS['Delete'])
         | 
| 309 | 
            -
                          js_tap_delete = "(function() {"\
         | 
| 310 | 
            -
                              "var deleteElement = uia.keyboard().elements().firstWithName('Delete');"\
         | 
| 311 | 
            -
                              "deleteElement = deleteElement.isValid() ? deleteElement : uia.keyboard().elements().firstWithName('delete');"\
         | 
| 312 | 
            -
                              "deleteElement.tap();"\
         | 
| 313 | 
            -
                            "})();"
         | 
| 314 | 
            -
                          uia(js_tap_delete)
         | 
| 315 | 
            -
                        else
         | 
| 316 | 
            -
                          uia_type_string_raw(code)
         | 
| 317 | 
            -
                        end
         | 
| 290 | 
            +
                      unless code
         | 
| 291 | 
            +
                        raise "typing character '#{chr}' is not yet supported when running with Instruments"
         | 
| 318 292 | 
             
                      end
         | 
| 319 | 
            -
             | 
| 320 | 
            -
                       | 
| 321 | 
            -
             | 
| 322 | 
            -
                       | 
| 323 | 
            -
             | 
| 324 | 
            -
                       | 
| 325 | 
            -
             | 
| 326 | 
            -
             | 
| 327 | 
            -
             | 
| 328 | 
            -
                           | 
| 329 | 
            -
             | 
| 330 | 
            -
             | 
| 331 | 
            -
             | 
| 293 | 
            +
             | 
| 294 | 
            +
                      # on iOS 6, the Delete char code is _not_ \b
         | 
| 295 | 
            +
                      # on iOS 7, the Delete char code is \b on non-numeric keyboards
         | 
| 296 | 
            +
                      #           on numeric keyboards, it is actually a button on the
         | 
| 297 | 
            +
                      #           keyboard and not a key
         | 
| 298 | 
            +
                      if code.eql?(UIA_SUPPORTED_CHARS['Delete'])
         | 
| 299 | 
            +
                        js_tap_delete = "(function() {"\
         | 
| 300 | 
            +
                          "var deleteElement = uia.keyboard().elements().firstWithName('Delete');"\
         | 
| 301 | 
            +
                          "deleteElement = deleteElement.isValid() ? deleteElement : uia.keyboard().elements().firstWithName('delete');"\
         | 
| 302 | 
            +
                          "deleteElement.tap();"\
         | 
| 303 | 
            +
                          "})();"
         | 
| 304 | 
            +
                        uia(js_tap_delete)
         | 
| 305 | 
            +
                      else
         | 
| 306 | 
            +
                        uia_type_string_raw(code)
         | 
| 332 307 | 
             
                      end
         | 
| 333 308 | 
             
                    end
         | 
| 309 | 
            +
                    # noinspection RubyStringKeysInHashInspection
         | 
| 310 | 
            +
                    res = {'results' => []}
         | 
| 334 311 |  | 
| 335 312 | 
             
                    if ENV['POST_ENTER_KEYBOARD']
         | 
| 336 313 | 
             
                      w = ENV['POST_ENTER_KEYBOARD'].to_f
         | 
| @@ -349,19 +326,9 @@ module Calabash | |
| 349 326 | 
             
                  # @raise [RuntimeError] if the text cannot be typed.
         | 
| 350 327 | 
             
                  def keyboard_enter_text(text)
         | 
| 351 328 | 
             
                    _ensure_can_enter_text
         | 
| 352 | 
            -
                     | 
| 353 | 
            -
             | 
| 354 | 
            -
             | 
| 355 | 
            -
                      uia_type_string(text, text_before)
         | 
| 356 | 
            -
                    else
         | 
| 357 | 
            -
                      text.each_char do |ch|
         | 
| 358 | 
            -
                        begin
         | 
| 359 | 
            -
                          keyboard_enter_char(ch, {:should_screenshot => false})
         | 
| 360 | 
            -
                        rescue
         | 
| 361 | 
            -
                          _search_keyplanes_and_enter_char(ch)
         | 
| 362 | 
            -
                        end
         | 
| 363 | 
            -
                      end
         | 
| 364 | 
            -
                    end
         | 
| 329 | 
            +
                    text_before = _text_from_first_responder()
         | 
| 330 | 
            +
                    text_before = text_before.gsub("\n","\\n") if text_before
         | 
| 331 | 
            +
                    uia_type_string(text, text_before)
         | 
| 365 332 | 
             
                  end
         | 
| 366 333 |  | 
| 367 334 | 
             
                  # @!visibility private
         | 
| @@ -406,14 +373,9 @@ module Calabash | |
| 406 373 | 
             
                  # @param [String] text the text to enter
         | 
| 407 374 | 
             
                  def fast_enter_text(text)
         | 
| 408 375 | 
             
                    _ensure_can_enter_text
         | 
| 409 | 
            -
                     | 
| 410 | 
            -
                      uia_set_responder_value(text)
         | 
| 411 | 
            -
                    else
         | 
| 412 | 
            -
                      keyboard_enter_text(text)
         | 
| 413 | 
            -
                    end
         | 
| 376 | 
            +
                    uia_set_responder_value(text)
         | 
| 414 377 | 
             
                  end
         | 
| 415 378 |  | 
| 416 | 
            -
             | 
| 417 379 | 
             
                  # Touches the keyboard action key.
         | 
| 418 380 | 
             
                  #
         | 
| 419 381 | 
             
                  # The action key depends on the keyboard.  Some examples include:
         | 
| @@ -528,13 +490,8 @@ module Calabash | |
| 528 490 | 
             
                  #
         | 
| 529 491 | 
             
                  # @raise [RuntimeError] if the device is not an iPad
         | 
| 530 492 | 
             
                  def dismiss_ipad_keyboard
         | 
| 531 | 
            -
                    screenshot_and_raise  | 
| 532 | 
            -
             | 
| 533 | 
            -
                    if uia_available?
         | 
| 534 | 
            -
                      send_uia_command({:command =>  "#{_query_uia_hide_keyboard_button}.tap()"})
         | 
| 535 | 
            -
                    else
         | 
| 536 | 
            -
                      touch(_query_for_keyboard_mode_key)
         | 
| 537 | 
            -
                    end
         | 
| 493 | 
            +
                    screenshot_and_raise "Cannot dismiss keyboard on iPhone" if device_family_iphone?
         | 
| 494 | 
            +
                    send_uia_command({:command =>  "#{_query_uia_hide_keyboard_button}.tap()"})
         | 
| 538 495 |  | 
| 539 496 | 
             
                    opts = {:timeout_message => 'keyboard did not disappear'}
         | 
| 540 497 | 
             
                    wait_for(opts) do
         | 
| @@ -553,78 +510,12 @@ module Calabash | |
| 553 510 | 
             
                  # @raise [RuntimeError] when the device is not an iPad
         | 
| 554 511 | 
             
                  # @raise [RuntimeError] the app was not launched with instruments
         | 
| 555 512 | 
             
                  def _point_for_ipad_keyboard_mode_key
         | 
| 556 | 
            -
                    raise  | 
| 557 | 
            -
                    raise 'cannot detect keyboard mode key without launching with instruments' unless uia_available?
         | 
| 513 | 
            +
                    raise "The keyboard mode does not exist on the on the iphone" if device_family_iphone?
         | 
| 558 514 | 
             
                    res = send_uia_command({:command => "#{_query_uia_hide_keyboard_button}.rect()"})
         | 
| 559 515 | 
             
                    origin = res['value']['origin']
         | 
| 560 516 | 
             
                    {:x => origin['x'], :y => origin['y']}
         | 
| 561 517 | 
             
                  end
         | 
| 562 518 |  | 
| 563 | 
            -
                  # @!visibility private
         | 
| 564 | 
            -
                  # Returns a query string for touching one of the options that appears when
         | 
| 565 | 
            -
                  # the iPad mode key is touched and held.
         | 
| 566 | 
            -
                  #
         | 
| 567 | 
            -
                  # The mode key is also know as the 'Hide keyboard' key.
         | 
| 568 | 
            -
                  #
         | 
| 569 | 
            -
                  # @note
         | 
| 570 | 
            -
                  #  This is only available when running outside of instruments.
         | 
| 571 | 
            -
                  #
         | 
| 572 | 
            -
                  # @param [Symbol] top_or_bottom can be one of `{:top | :bottom}`
         | 
| 573 | 
            -
                  # @param [Symbol] mode `{:docked | :undocked | :skipped}`
         | 
| 574 | 
            -
                  #
         | 
| 575 | 
            -
                  # @raise [RuntimeError] the device is not an iPad
         | 
| 576 | 
            -
                  # @raise [RuntimeError] the app was not launched with instruments
         | 
| 577 | 
            -
                  # @raise [RuntimeError] the method is passed invalid arguments
         | 
| 578 | 
            -
                  def _query_for_touch_for_keyboard_mode_option(top_or_bottom, mode)
         | 
| 579 | 
            -
                    raise 'the keyboard mode does not exist on the iphone' if device_family_iphone?
         | 
| 580 | 
            -
             | 
| 581 | 
            -
                    if uia_available?
         | 
| 582 | 
            -
                      raise "UIA is available, use '_point_for_keyboard_mode_key' instead"
         | 
| 583 | 
            -
                    end
         | 
| 584 | 
            -
             | 
| 585 | 
            -
                    valid = [:top, :bottom]
         | 
| 586 | 
            -
                    unless valid.include? top_or_bottom
         | 
| 587 | 
            -
                      raise "expected '#{top_or_bottom}' to be one of '#{valid}'"
         | 
| 588 | 
            -
                    end
         | 
| 589 | 
            -
             | 
| 590 | 
            -
                    valid = [:split, :undocked, :docked]
         | 
| 591 | 
            -
                    unless valid.include? mode
         | 
| 592 | 
            -
                      raise "expected '#{mode}' to be one of '#{valid}'"
         | 
| 593 | 
            -
                    end
         | 
| 594 | 
            -
             | 
| 595 | 
            -
                    hash = {:split => {:top => 'Merge',
         | 
| 596 | 
            -
                                       :bottom => 'Dock and Merge'},
         | 
| 597 | 
            -
                            :undocked => {:top => 'Dock',
         | 
| 598 | 
            -
                                          :bottom => 'Split'},
         | 
| 599 | 
            -
                            :docked => {:top => 'Undock',
         | 
| 600 | 
            -
                                        :bottom => 'Split'}}
         | 
| 601 | 
            -
                    mark = hash[mode][top_or_bottom]
         | 
| 602 | 
            -
                    "label marked:'#{mark}'"
         | 
| 603 | 
            -
                  end
         | 
| 604 | 
            -
             | 
| 605 | 
            -
                  # @!visibility private
         | 
| 606 | 
            -
                  # Returns a query for touching the iPad keyboard mode key.
         | 
| 607 | 
            -
                  #
         | 
| 608 | 
            -
                  # The mode key is also know as the 'Hide keyboard' key.
         | 
| 609 | 
            -
                  #
         | 
| 610 | 
            -
                  # @note
         | 
| 611 | 
            -
                  #  This is only available when running outside of instruments.  Use
         | 
| 612 | 
            -
                  #  ` _point_for_ipad_keyboard_mode_key` when the app is _not_ launched
         | 
| 613 | 
            -
                  #  with instruments.
         | 
| 614 | 
            -
                  #
         | 
| 615 | 
            -
                  # raises an error when
         | 
| 616 | 
            -
                  # * the device is not an iPad
         | 
| 617 | 
            -
                  # * the app was launched with Instruments i.e. there is a <tt>run_loop</tt>
         | 
| 618 | 
            -
                  def _query_for_keyboard_mode_key
         | 
| 619 | 
            -
                    raise 'cannot detect keyboard mode key on iphone' if device_family_iphone?
         | 
| 620 | 
            -
                    if uia_available?
         | 
| 621 | 
            -
                      raise "UIA is available, use '_point_for_keyboard_mode_key' instead"
         | 
| 622 | 
            -
                    end
         | 
| 623 | 
            -
                    qstr = "view:'UIKBKeyView'"
         | 
| 624 | 
            -
                    idx = query(qstr).count - 1
         | 
| 625 | 
            -
                    "#{qstr} index:#{idx}"
         | 
| 626 | 
            -
                  end
         | 
| 627 | 
            -
             | 
| 628 519 | 
             
                  # @!visibility private
         | 
| 629 520 | 
             
                  # Touches the bottom option on the popup dialog that is presented when the
         | 
| 630 521 | 
             
                  # the iPad keyboard `mode` key is touched and held.
         | 
| @@ -633,19 +524,12 @@ module Calabash | |
| 633 524 | 
             
                  #
         | 
| 634 525 | 
             
                  # The `mode` key allows the user to undock, dock, or split the keyboard.
         | 
| 635 526 | 
             
                  def _touch_bottom_keyboard_mode_row
         | 
| 636 | 
            -
                     | 
| 637 | 
            -
                     | 
| 638 | 
            -
             | 
| 639 | 
            -
             | 
| 640 | 
            -
             | 
| 641 | 
            -
             | 
| 642 | 
            -
                      uia_pan_offset(start_pt, end_pt, {})
         | 
| 643 | 
            -
                    else
         | 
| 644 | 
            -
                      pan(_query_for_keyboard_mode_key, nil, {:duration => 1.0})
         | 
| 645 | 
            -
                      touch(_query_for_touch_for_keyboard_mode_option(:bottom, mode))
         | 
| 646 | 
            -
                      sleep(0.5)
         | 
| 647 | 
            -
                    end
         | 
| 648 | 
            -
                    2.times { sleep(0.5) }
         | 
| 527 | 
            +
                    start_pt = _point_for_ipad_keyboard_mode_key
         | 
| 528 | 
            +
                    # there are 10 pt btw the key and the popup and the row is 50 pt
         | 
| 529 | 
            +
                    y_offset = 10 + 25
         | 
| 530 | 
            +
                    end_pt = {:x => (start_pt[:x] - 40), :y => (start_pt[:y] - y_offset)}
         | 
| 531 | 
            +
                    uia_pan_offset(start_pt, end_pt, {})
         | 
| 532 | 
            +
                    sleep(1.0)
         | 
| 649 533 | 
             
                  end
         | 
| 650 534 |  | 
| 651 535 | 
             
                  # Touches the top option on the popup dialog that is presented when the
         | 
| @@ -655,23 +539,15 @@ module Calabash | |
| 655 539 | 
             
                  #
         | 
| 656 540 | 
             
                  # The `mode` key allows the user to undock, dock, or split the keyboard.
         | 
| 657 541 | 
             
                  def _touch_top_keyboard_mode_row
         | 
| 658 | 
            -
                     | 
| 659 | 
            -
                     | 
| 660 | 
            -
             | 
| 661 | 
            -
             | 
| 662 | 
            -
             | 
| 663 | 
            -
             | 
| 664 | 
            -
             | 
| 665 | 
            -
             | 
| 666 | 
            -
             | 
| 667 | 
            -
                      end_pt = {:x => (start_pt[:x] - x_offset), :y => (start_pt[:y] - y_offset)}
         | 
| 668 | 
            -
                      uia_pan_offset(start_pt, end_pt, {:duration => 1.0})
         | 
| 669 | 
            -
                    else
         | 
| 670 | 
            -
                      pan(_query_for_keyboard_mode_key, nil, {})
         | 
| 671 | 
            -
                      touch(_query_for_touch_for_keyboard_mode_option(:top, mode))
         | 
| 672 | 
            -
                      sleep(0.5)
         | 
| 673 | 
            -
                    end
         | 
| 674 | 
            -
                    2.times { sleep(0.5) }
         | 
| 542 | 
            +
                    start_pt = _point_for_ipad_keyboard_mode_key
         | 
| 543 | 
            +
                    # there are 10 pt btw the key and the popup and each row is 50 pt
         | 
| 544 | 
            +
                    # NB: no amount of offsetting seems to allow touching the top row
         | 
| 545 | 
            +
                    #     when the keyboard is split
         | 
| 546 | 
            +
             | 
| 547 | 
            +
                    x_offset = 40
         | 
| 548 | 
            +
                    y_offset = 10 + 50 + 25
         | 
| 549 | 
            +
                    end_pt = {:x => (start_pt[:x] - x_offset), :y => (start_pt[:y] - y_offset)}
         | 
| 550 | 
            +
                    uia_pan_offset(start_pt, end_pt, {:duration => 1.0})
         | 
| 675 551 | 
             
                  end
         | 
| 676 552 |  | 
| 677 553 | 
             
                  # Ensures that the iPad keyboard is docked.
         | 
| @@ -847,9 +723,6 @@ module Calabash | |
| 847 723 | 
             
                  #
         | 
| 848 724 | 
             
                  # @raise [RuntimeError] if the app was not launched with instruments
         | 
| 849 725 | 
             
                  def uia_keyboard_visible?
         | 
| 850 | 
            -
                    unless uia_available?
         | 
| 851 | 
            -
                      screenshot_and_raise 'only available if there is a run_loop i.e. the app was launched with Instruments'
         | 
| 852 | 
            -
                    end
         | 
| 853 726 | 
             
                    res = uia_query_windows(:keyboard)
         | 
| 854 727 | 
             
                    not res.eql?(':nil')
         | 
| 855 728 | 
             
                  end
         | 
| @@ -865,9 +738,6 @@ module Calabash | |
| 865 738 | 
             
                  #
         | 
| 866 739 | 
             
                  # @raise [RuntimeError] if the app was not launched with instruments
         | 
| 867 740 | 
             
                  def uia_wait_for_keyboard(opts={})
         | 
| 868 | 
            -
                    unless uia_available?
         | 
| 869 | 
            -
                      screenshot_and_raise 'only available if there is a run_loop i.e. the app was launched with Instruments'
         | 
| 870 | 
            -
                    end
         | 
| 871 741 | 
             
                    default_opts = {:timeout => 10,
         | 
| 872 742 | 
             
                                    :retry_frequency => 0.1,
         | 
| 873 743 | 
             
                                    :post_timeout => 0.5}
         | 
| @@ -82,7 +82,7 @@ module Calabash | |
| 82 82 | 
             
                    else
         | 
| 83 83 | 
             
                      msg << "Not attached to instruments."
         | 
| 84 84 | 
             
                      msg << "Start your app with `start_test_server_in_background`"
         | 
| 85 | 
            -
                      msg << "If  | 
| 85 | 
            +
                      msg << "If your app is already running, try `console_attach`"
         | 
| 86 86 | 
             
                    end
         | 
| 87 87 | 
             
                    msg.join("\n")
         | 
| 88 88 | 
             
                  end
         | 
| @@ -82,20 +82,23 @@ module Calabash | |
| 82 82 | 
             
                        :arguments => method_args
         | 
| 83 83 | 
             
                    }
         | 
| 84 84 |  | 
| 85 | 
            -
                     | 
| 86 | 
            -
             | 
| 87 | 
            -
             | 
| 88 | 
            -
                     | 
| 85 | 
            +
                    route = {:method => :post, :path => "map"}
         | 
| 86 | 
            +
                    parameters = {:query => query,
         | 
| 87 | 
            +
                                  :operation => operation_map}
         | 
| 88 | 
            +
                    body = self.map_factory.http(route, parameters)
         | 
| 89 | 
            +
             | 
| 90 | 
            +
                    hash = JSON.parse(body)
         | 
| 91 | 
            +
                    if hash["outcome"] != "SUCCESS"
         | 
| 89 92 | 
             
                      message = %Q[
         | 
| 90 93 | 
             
            map #{query}, #{method_name} failed for:
         | 
| 91 94 |  | 
| 92 | 
            -
             reason: #{ | 
| 93 | 
            -
            details: #{ | 
| 95 | 
            +
             reason: #{hash["reason"]}
         | 
| 96 | 
            +
            details: #{hash["details"]}
         | 
| 94 97 | 
             
            ]
         | 
| 95 | 
            -
                       | 
| 98 | 
            +
                      self.map_factory.screenshot_and_raise(message)
         | 
| 96 99 | 
             
                    end
         | 
| 97 100 |  | 
| 98 | 
            -
                     | 
| 101 | 
            +
                    hash
         | 
| 99 102 | 
             
                  end
         | 
| 100 103 |  | 
| 101 104 | 
             
                  # Asserts the result of a calabash `map` call and raises an error with
         | 
| @@ -139,6 +142,12 @@ details: #{res["details"]} | |
| 139 142 | 
             
                      Map.new.screenshot_and_raise msg
         | 
| 140 143 | 
             
                    end
         | 
| 141 144 | 
             
                  end
         | 
| 145 | 
            +
             | 
| 146 | 
            +
                  private
         | 
| 147 | 
            +
             | 
| 148 | 
            +
                  def self.map_factory
         | 
| 149 | 
            +
                    Map.new
         | 
| 150 | 
            +
                  end
         | 
| 142 151 | 
             
                end
         | 
| 143 152 | 
             
              end
         | 
| 144 153 | 
             
            end
         | 
| @@ -12,11 +12,20 @@ module Calabash | |
| 12 12 | 
             
                  # @param {String} command the JavaScript snippet to execute
         | 
| 13 13 | 
             
                  # @return {Object} the result returned by the UIA process
         | 
| 14 14 | 
             
                  def uia(command, options={})
         | 
| 15 | 
            +
                    raise ArgumentError, "Please supply :command" unless command
         | 
| 16 | 
            +
             | 
| 15 17 | 
             
                    # UIA only makes sense if there is a run loop
         | 
| 16 18 | 
             
                    launcher = Calabash::Cucumber::Launcher.launcher_if_used
         | 
| 17 19 | 
             
                    run_loop = launcher && launcher.active? && launcher.run_loop
         | 
| 18 | 
            -
             | 
| 19 | 
            -
                     | 
| 20 | 
            +
             | 
| 21 | 
            +
                    # Automatically attach in the calabash console
         | 
| 22 | 
            +
                    if !run_loop && defined?(IRB)
         | 
| 23 | 
            +
                      RunLoop.log_debug("Attaching to current instruments process...")
         | 
| 24 | 
            +
                      launcher = Calabash::Cucumber::Launcher.new
         | 
| 25 | 
            +
                      Calabash::Cucumber::Launcher.attach
         | 
| 26 | 
            +
                      run_loop = launcher.run_loop
         | 
| 27 | 
            +
                      RunLoop.log_debug("Attached!")
         | 
| 28 | 
            +
                    end
         | 
| 20 29 |  | 
| 21 30 | 
             
                    strategy = run_loop[:uia_strategy]
         | 
| 22 31 | 
             
                    case strategy
         | 
| @@ -3,10 +3,10 @@ module Calabash | |
| 3 3 |  | 
| 4 4 | 
             
                # @!visibility public
         | 
| 5 5 | 
             
                # The Calabash iOS gem version.
         | 
| 6 | 
            -
                VERSION = "0.19. | 
| 6 | 
            +
                VERSION = "0.19.1"
         | 
| 7 7 |  | 
| 8 8 | 
             
                # @!visibility public
         | 
| 9 9 | 
             
                # The minimum required version of the Calabash embedded server.
         | 
| 10 | 
            -
                MIN_SERVER_VERSION = "0.19. | 
| 10 | 
            +
                MIN_SERVER_VERSION = "0.19.1"
         | 
| 11 11 | 
             
              end
         | 
| 12 12 | 
             
            end
         | 
    
        data/scripts/.irbrc
    CHANGED
    
    | @@ -34,8 +34,9 @@ IRB.conf[:HISTORY_FILE] = ".irb-history" | |
| 34 34 |  | 
| 35 35 | 
             
            begin
         | 
| 36 36 | 
             
              require "pry"
         | 
| 37 | 
            -
              Pry.config.history.should_save =  | 
| 38 | 
            -
              Pry.config.history.should_load =  | 
| 37 | 
            +
              Pry.config.history.should_save = true
         | 
| 38 | 
            +
              Pry.config.history.should_load = true
         | 
| 39 | 
            +
              Pry.config.history.file = ".pry-history"
         | 
| 39 40 | 
             
              require "pry-nav"
         | 
| 40 41 | 
             
            rescue LoadError => _
         | 
| 41 42 |  | 
| Binary file | 
| Binary file | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: calabash-cucumber
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.19. | 
| 4 | 
            +
              version: 0.19.1
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Karl Krukow
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2016- | 
| 11 | 
            +
            date: 2016-05-21 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: cucumber
         | 
| @@ -132,7 +132,7 @@ dependencies: | |
| 132 132 | 
             
                requirements:
         | 
| 133 133 | 
             
                - - ">="
         | 
| 134 134 | 
             
                  - !ruby/object:Gem::Version
         | 
| 135 | 
            -
                    version: 2.1. | 
| 135 | 
            +
                    version: 2.1.2
         | 
| 136 136 | 
             
                - - "<"
         | 
| 137 137 | 
             
                  - !ruby/object:Gem::Version
         | 
| 138 138 | 
             
                    version: '3.0'
         | 
| @@ -142,7 +142,7 @@ dependencies: | |
| 142 142 | 
             
                requirements:
         | 
| 143 143 | 
             
                - - ">="
         | 
| 144 144 | 
             
                  - !ruby/object:Gem::Version
         | 
| 145 | 
            -
                    version: 2.1. | 
| 145 | 
            +
                    version: 2.1.2
         | 
| 146 146 | 
             
                - - "<"
         | 
| 147 147 | 
             
                  - !ruby/object:Gem::Version
         | 
| 148 148 | 
             
                    version: '3.0'
         | 
| @@ -314,6 +314,20 @@ dependencies: | |
| 314 314 | 
             
                - - ">="
         | 
| 315 315 | 
             
                  - !ruby/object:Gem::Version
         | 
| 316 316 | 
             
                    version: '0'
         | 
| 317 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 318 | 
            +
              name: listen
         | 
| 319 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 320 | 
            +
                requirements:
         | 
| 321 | 
            +
                - - '='
         | 
| 322 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 323 | 
            +
                    version: 3.0.6
         | 
| 324 | 
            +
              type: :development
         | 
| 325 | 
            +
              prerelease: false
         | 
| 326 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 327 | 
            +
                requirements:
         | 
| 328 | 
            +
                - - '='
         | 
| 329 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 330 | 
            +
                    version: 3.0.6
         | 
| 317 331 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 318 332 | 
             
              name: growl
         | 
| 319 333 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -449,7 +463,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 449 463 | 
             
                  version: '0'
         | 
| 450 464 | 
             
            requirements: []
         | 
| 451 465 | 
             
            rubyforge_project: 
         | 
| 452 | 
            -
            rubygems_version: 2.5. | 
| 466 | 
            +
            rubygems_version: 2.5.1
         | 
| 453 467 | 
             
            signing_key: 
         | 
| 454 468 | 
             
            specification_version: 4
         | 
| 455 469 | 
             
            summary: Client for calabash-ios-server for automated functional testing on iOS
         |