class Calabash::Cucumber::Device

Device encapsulates information about the device or simulator that the app is running on. It also includes the following information about the app that is running on the current device.

Constants

GESTALT_IPAD

@!visibility private

GESTALT_IPHONE

@!visibility private

GESTALT_IPHONE5

@!visibility private

GESTALT_IPOD

@!visibility private

GESTALT_SIM_SYS

@!visibility private

Attributes

device_family[R]

The device family of this device.

@note Also know as the form factor.

@example

# will be one of
iPhone
iPod
iPad

@!attribute [r] device_family @return [String] the device family

device_name[R]

Requires calabash server > 0.16.2

For simulators, this is known to return ‘< form factor > Simulator’

For devices, this will return the name of the device as seen in Xcode.

@attribute [r] device_name

endpoint[R]

@!attribute [r] endpoint The http address of this device. @example

http://192.168.0.2:37265

@return [String] an ip address with port number.

form_factor[R]

The form factor of this device. @attribute [r] form_factor

Will be one of:

* ipad
* iphone 4in
* iphone 3.5in
* iphone 6
* iphone 6+
* ipad pro
* unknown
ios_version[R]

The ‘major.minor.` version of iOS that is running on this device.

@example

7.1
6.1.2
5.1.1

@attribute [r] ios_version @return [String] the version of the iOS that is running on this device

iphone_app_emulated_on_ipad[R]

Indicates whether or not the app under test on this device is an

iPhone-only app that is being emulated on an iPad.

@note If the ‘1x` or `2x` button is visible, then the app is being

emulated.

@attribute [r] iphone_app_emulated_on_ipad @return [Boolean] ‘true` if the app under test is emulated

model_identifier[R]

Requires calabash server > 0.16.2

  • iPhone7,1

  • iPhone5,2

  • iPad6,1

  • iPad6,8

@attribute [r] model_identifier @return [String] The low-level model identifier.

screen_dimensions[R]

For Calabash server version > 0.10.2 provides device specific screen information.

This is a hash of form:

{
  :sample => 1,
  :height => 1334,
  :width => 750,
  :scale" => 2,
  :native_scale => 2
}

@attribute [r] screen_dimensions @return [Hash] screen dimensions, scale and down/up sampling fraction.

server_version[R]

The version of the embedded Calabash server that is running in the app under test on this device.

@example

0.9.168
0.10.0.pre1

@attribute [r] server_version @return [String] the major.minor.patch version of the embedded

Calabash server
simulator_details[R]

@!visibility private @attribute [r] simulator_details @return [String] Additional details about the simulator. If this device

is a physical device, returns nil.

Public Class Methods

new(endpoint, version_data) click to toggle source

Creates a new instance of Device.

@see Calabash::Cucumber::Core#server_version

@param [String] endpoint the http address of this device @param [Hash] version_data the output of the ‘server_version` function @return [Device] a new Device instance

# File lib/calabash-cucumber/device.rb, line 141
def initialize (endpoint, version_data)
  @endpoint = endpoint
  @model_identifier = version_data['model_identifier']
  @simulator_details = version_data['simulator']
  @ios_version = version_data['ios_version']
  @server_version = version_data['version']
  @iphone_app_emulated_on_ipad = version_data['iphone_app_emulated_on_ipad']
  @form_factor = version_data['form_factor']
  @device_name = version_data['device_name']

  family = version_data['device_family']
  if family
    @device_family = family.split(' ').first
  end

  # Available 0.10.2
  screen_dimensions = version_data['screen_dimensions']
  if screen_dimensions
    @screen_dimensions = {}
    screen_dimensions.each_pair do |key,val|
      @screen_dimensions[key.to_sym] = val
    end
  end

  # 0.16.2 server adds 'ios_version' key
  unless @ios_version
    @ios_version = version_data['iOS_version']
  end
end

Public Instance Methods

device?() click to toggle source

Is this device a device or simulator? @return [Boolean] true if this device is a physical device

# File lib/calabash-cucumber/device.rb, line 184
def device?
  !simulator?
end
ios10?() click to toggle source

Is this device running iOS 10? @return [Boolean] true if the major version of the OS is 10

# File lib/calabash-cucumber/device.rb, line 256
def ios10?
  ios_version_object.major == 10
end
ios11?() click to toggle source

Is this device running iOS 11? @return [Boolean] true if the major version of the OS is 11

# File lib/calabash-cucumber/device.rb, line 250
def ios11?
  ios_version_object.major == 11
end
ios5?() click to toggle source

Is this device running iOS 5? @return [Boolean] true if the major version of the OS is 5

# File lib/calabash-cucumber/device.rb, line 286
def ios5?
  ios_version_object.major == 5
end
ios6?() click to toggle source

Is this device running iOS 6? @return [Boolean] true if the major version of the OS is 6

# File lib/calabash-cucumber/device.rb, line 280
def ios6?
  ios_version_object.major == 6
end
ios7?() click to toggle source

Is this device running iOS 7? @return [Boolean] true if the major version of the OS is 7

# File lib/calabash-cucumber/device.rb, line 274
def ios7?
  ios_version_object.major == 7
end
ios8?() click to toggle source

Is this device running iOS 8? @return [Boolean] true if the major version of the OS is 8

# File lib/calabash-cucumber/device.rb, line 268
def ios8?
  ios_version_object.major == 8
end
ios9?() click to toggle source

Is this device running iOS 9? @return [Boolean] true if the major version of the OS is 9

# File lib/calabash-cucumber/device.rb, line 262
def ios9?
  ios_version_object.major == 9
end
ios_gte_11?() click to toggle source

Is this device running iOS 11? @return [Boolean] true if the major version of the OS is 11

# File lib/calabash-cucumber/device.rb, line 244
def ios_gte_11?
  ios_version_object.major >= 11
end
ios_major_version() click to toggle source

The major iOS version of this device. @return [String] the major version of the OS

# File lib/calabash-cucumber/device.rb, line 238
def ios_major_version
  ios_version_object.major.to_s
end
ipad?() click to toggle source

Is this device an iPad? @return [Boolean] true if this device is an ipad

# File lib/calabash-cucumber/device.rb, line 202
def ipad?
  device_family.eql? GESTALT_IPAD
end
ipad_pro?() click to toggle source

Is this device an iPad Pro? @return [Boolean] true if this device is an iPad Pro

# File lib/calabash-cucumber/device.rb, line 232
def ipad_pro?
  form_factor == 'ipad pro'
end
iphone?() click to toggle source

Is this device an iPhone? @return [Boolean] true if this device is an iphone

# File lib/calabash-cucumber/device.rb, line 190
def iphone?
  device_family.eql? GESTALT_IPHONE
end
iphone_35in?() click to toggle source

Is this device an iPhone 3.5in? @return [Boolean] true if this device is an iPhone 3.5in?

# File lib/calabash-cucumber/device.rb, line 226
def iphone_35in?
  form_factor == 'iphone 3.5in'
end
iphone_4in?() click to toggle source

Is this device a 4in iPhone? @return [Boolean] true if this device is a 4in iphone

# File lib/calabash-cucumber/device.rb, line 208
def iphone_4in?
  form_factor == 'iphone 4in'
end
iphone_6?() click to toggle source

Is this device an iPhone 6? @return [Boolean] true if this device is an iPhone 6

# File lib/calabash-cucumber/device.rb, line 214
def iphone_6?
  form_factor == 'iphone 6'
end
iphone_6_plus?() click to toggle source

Is this device an iPhone 6+? @return [Boolean] true if this device is an iPhone 6+

# File lib/calabash-cucumber/device.rb, line 220
def iphone_6_plus?
  form_factor == 'iphone 6+'
end
iphone_app_emulated_on_ipad?() click to toggle source

Is the app that is running an iPhone-only app emulated on an iPad?

@note If the app is running in emulation mode, there will be a 1x or 2x

scale button visible on the iPad.

@return [Boolean] true if the app running on this devices is an

iPhone-only app emulated on an iPad
# File lib/calabash-cucumber/device.rb, line 297
def iphone_app_emulated_on_ipad?
  iphone_app_emulated_on_ipad
end
ipod?() click to toggle source

Is this device an iPod? @return [Boolean] true if this device is an ipod

# File lib/calabash-cucumber/device.rb, line 196
def ipod?
  device_family.eql? GESTALT_IPOD
end
simulator?() click to toggle source

Is this device a simulator or physical device? @return [Boolean] true if this device is a simulator

# File lib/calabash-cucumber/device.rb, line 173
def simulator?
  details = simulator_details
  if details
    details != ""
  else
    false
  end
end

Private Instance Methods

ios_version_object() click to toggle source

@!visibility private

# File lib/calabash-cucumber/device.rb, line 304
def ios_version_object
  @ios_version_object ||= RunLoop::Version.new(ios_version)
end