cuesmash 0.1.9.7 → 0.1.9.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2244008a2a82ab3d841eeb6aad059845f51ed2d0
4
- data.tar.gz: e957ef861ff401b811ed75114764f51489ac587b
3
+ metadata.gz: 067457f9c6c472d3454a377bf4ac0e5cae11e64f
4
+ data.tar.gz: 6aacdaf46ff9f6ff7377d62db8807f15afca6863
5
5
  SHA512:
6
- metadata.gz: 8a74afd9d48022dad0976adfad88b577a82713f809611545e4699ce114138ceeebc90367237276fcf5b9dc8cae29216909f2c6a50f8e7c5c2ddd0137c6ba2b38
7
- data.tar.gz: d6a513d450bd2be86d3b95ebd45cb18926487b273ee2d739057c38ab656bc901f54e37b796bc6cbb65997e27c754adcf343ce9971de4fec386dfd44def293788
6
+ metadata.gz: 6a758e3b2ce774ec53a2b6c83a32bcdd77c11d48622a01827f113d1c8640f2482500fea1972e42b786d25e0cc5df7a5078e6bfc22490080d716ae98020af185c
7
+ data.tar.gz: 44b6537513e85b2ca66e1c4bc0016b1a417c5fa72808edfa5ba7426cf5ceb0dfe7dedb9054419609ee375c3067c608f3ca2cb9a66690c39c10bd91da6034fee5
data/.gitignore CHANGED
@@ -17,3 +17,12 @@ tmp
17
17
  .yardoc
18
18
  _yardoc
19
19
  doc/
20
+ .idea/.name
21
+ .idea/.rakeTasks
22
+ .idea/cuesmash.iml
23
+ .idea/encodings.xml
24
+ .idea/misc.xml
25
+ .idea/modules.xml
26
+ .idea/vcs.xml
27
+ .idea/workspace.xml
28
+ .idea/scopes/scope_settings.xml
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- cuesmash (0.1.9.7)
4
+ cuesmash (0.1.9.8)
5
5
  CFPropertyList (>= 2.2.8)
6
6
  rest-client (~> 1.7.2)
7
7
  thor (>= 0.19.1)
@@ -10,7 +10,7 @@ PATH
10
10
  GEM
11
11
  remote: https://rubygems.org/
12
12
  specs:
13
- CFPropertyList (2.3.0)
13
+ CFPropertyList (2.3.1)
14
14
  byebug (3.5.1)
15
15
  columnize (~> 0.8)
16
16
  debugger-linecache (~> 1.2)
data/cuesmash.gemspec CHANGED
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = "cuesmash"
7
- spec.version = "0.1.9.7"
7
+ spec.version = "0.1.9.8"
8
8
  spec.authors = ["Alex Fish", "Jarod McBride", "Tiago Castro"]
9
9
  spec.email = ["fish@ustwo.co.uk", "jarod@ustwo.com", "castro@ustwo.com"]
10
10
  spec.description = "Appium project manager"
@@ -2,12 +2,10 @@
2
2
  # coding: utf-8
3
3
 
4
4
  module Cuesmash
5
-
6
5
  #
7
6
  # Provides an object to get information about the ios app that is being built.
8
7
  #
9
8
  class AndroidApp < App
10
-
11
9
  # app/build/outputs/apk/
12
10
  attr_reader :app_dir
13
11
 
@@ -25,12 +23,9 @@ module Cuesmash
25
23
  #
26
24
  # @return [App] A app instance
27
25
  def initialize(project_name:, build_configuration:)
28
- @app_name = "#{project_name}-#{build_configuration}" << ".apk"
29
-
30
- @app_dir = File.expand_path("./app/build/outputs/apk/")
31
-
26
+ @app_name = "#{project_name}-#{build_configuration}" << '.apk'
27
+ @app_dir = File.expand_path('./app/build/outputs/apk/')
32
28
  @app_path = "#{@app_dir}/" << "#{@app_name}"
33
29
  end
34
-
35
30
  end # class AndroidApp
36
- end # module Cuesmash
31
+ end # module Cuesmash
@@ -2,27 +2,25 @@
2
2
  # coding: utf-8
3
3
 
4
4
  module Cuesmash
5
-
6
5
  #
7
6
  # Creates the appium.txt file that is needed by appium
8
7
  #
9
8
  # @author [jarod]
10
9
  #
11
10
  class AndroidAppiumText
12
-
13
11
  attr_accessor :appium_avd
14
12
  attr_accessor :appium_app
15
13
  attr_accessor :appium_platform_name
16
14
  attr_accessor :appium_new_command_timeout
17
15
  attr_accessor :appium_text_for_file
18
16
 
19
- #
17
+ #
20
18
  # [initialize description]
21
19
  # @param platform_name: [type] [description]
22
20
  # @param avd: [type] [description]
23
21
  # @param app: [type] [description]
24
22
  # @param new_command_timeout: 60 [type] [description]
25
- #
23
+ #
26
24
  # @return [type] [description]
27
25
  def initialize(platform_name:, avd:, app:, new_command_timeout: 60)
28
26
  @appium_platform_name = platform_name
@@ -40,16 +38,16 @@ module Cuesmash
40
38
  private
41
39
 
42
40
  def started
43
- Logger.info "Updating appium.txt"
41
+ Logger.info 'Updating appium.txt'
44
42
  end
45
43
 
46
44
  def update
47
45
  @appium_text_for_file = file_text
48
- IO.write("features/support/appium.txt", @appium_text_for_file)
46
+ IO.write('features/support/appium.txt', @appium_text_for_file)
49
47
  end
50
48
 
51
49
  def completed
52
- Logger.info "appium.txt updated 👌"
50
+ Logger.info 'appium.txt updated 👌'
53
51
  end
54
52
 
55
53
  # [caps]
@@ -3,7 +3,6 @@
3
3
  require 'cuesmash/android_appium_text'
4
4
 
5
5
  module Cuesmash
6
-
7
6
  #
8
7
  # The main point of entry for all commands, Command parses command line arguments
9
8
  # and decides what to do about them.
@@ -11,12 +10,11 @@ module Cuesmash
11
10
  # @author [alexfish]
12
11
  #
13
12
  class AndroidCommand
14
-
15
13
  #
16
14
  # Execute a command with some arguments
17
15
  # then figure out what we're supposed to be doing with
18
16
  # the arguments
19
- #
17
+ #
20
18
  # @param avd: [type] [description]
21
19
  # @param server: [type] [description]
22
20
  # @param tags: [type] [description]
@@ -27,13 +25,12 @@ module Cuesmash
27
25
  # @param profile: [type] [description]
28
26
  # @param quiet: false [type] [description]
29
27
  # @param timeout: [type] [description]
30
- #
28
+ #
31
29
  # @return [type] [description]
32
30
  def self.execute(avd:, server:, tags:, debug: false, format: nil, output: nil, app:, profile:, quiet: false, timeout:)
33
-
34
31
  if debug
35
32
  Logger.level = ::Logger::DEBUG
36
- Logger.formatter = proc do |serverity, time, progname, msg|
33
+ Logger.formatter = proc do |serverity, time, _progname, msg|
37
34
  "\n#{time}\t#{serverity}\t#{msg.rstrip}"
38
35
  end
39
36
  end
@@ -47,10 +44,6 @@ module Cuesmash
47
44
 
48
45
  # Run the tests
49
46
  run_tests(tags: tags, profile: profile, format: format, output: output, quiet: quiet)
50
-
51
- # Stop the Appium server
52
- # app_server.stop_server
53
-
54
47
  end # execute
55
48
 
56
49
  #
@@ -78,8 +71,11 @@ module Cuesmash
78
71
  # @param app [String] path to built .app file
79
72
  # @param timeout [String] time in seconds to set the newCommandTimeout to.
80
73
  #
81
- def self.create_appium_txt(platform_name: "Android", app:, timeout:, avd:)
82
- appium = Cuesmash::AndroidAppiumText.new(platform_name: platform_name, avd: avd, app: app, new_command_timeout: timeout)
74
+ def self.create_appium_txt(platform_name: 'Android', app:, timeout:, avd:)
75
+ appium = Cuesmash::AndroidAppiumText.new(platform_name: platform_name,
76
+ avd: avd,
77
+ app: app,
78
+ new_command_timeout: timeout)
83
79
  appium.execute
84
80
  end
85
81
  end # class Command
@@ -1,13 +1,11 @@
1
1
  # coding: utf-8
2
2
 
3
3
  module Cuesmash
4
-
5
4
  #
6
5
  # iOS Specific compiler
7
- #
6
+ #
8
7
  class AndroidCompiler < Compiler
9
-
10
- OUTPUT_PATH = "app/build/outputs/apk"
8
+ OUTPUT_PATH = 'app/build/outputs/apk'
11
9
 
12
10
  attr_accessor :project_name
13
11
  attr_accessor :build_configuration
@@ -23,18 +21,18 @@ module Cuesmash
23
21
  #
24
22
  # @return [String] The full gradle build command with args
25
23
  def command
26
-
27
24
  case
28
- when @build_configuration == 'debug'
29
- gradle_command = './gradlew assembleDebug'
30
- when @build_configuration == 'release'
31
- gradle_command = './gradlew assemble'
32
- else
33
- puts '/nBuild configuration not found or invalid build configuration'
25
+ when @build_configuration == 'debug'
26
+ gradle_assemble_command = './gradlew assembleDebug'
27
+ when @build_configuration == 'bdd-debug'
28
+ gradle_assemble_command = './gradlew assembleBddDebug'
29
+ when @build_configuration == 'release'
30
+ gradle_assemble_command = './gradlew assemble'
31
+ else
32
+ puts '/nBuild configuration not found or invalid build configuration'
34
33
  end
35
-
36
- Logger.info "gradle_command == #{gradle_command}"
37
- gradle_command
34
+ Logger.info "gradle_assemble_command == #{gradle_assemble_command}"
35
+ gradle_assemble_command
38
36
  end # command
39
37
  end # class AndroidCompiler
40
- end # module Cuesmash
38
+ end # module Cuesmash
data/lib/cuesmash/app.rb CHANGED
@@ -2,12 +2,10 @@
2
2
  # coding: utf-8
3
3
 
4
4
  module Cuesmash
5
-
6
5
  #
7
6
  # Provides an object to get information about the ios app that is being built
8
7
  #
9
8
  class App
10
-
11
9
  # Public: the xcode Derived Data temp directory
12
10
  attr_reader :tmp_dir
13
11
 
@@ -15,7 +13,7 @@ module Cuesmash
15
13
  # Create a new App instance
16
14
  #
17
15
  # @return [App] A app instance
18
- def initialize()
16
+ def initialize
19
17
  @tmp_dir = Dir.mktmpdir(file_name)
20
18
  end
21
19
  end
@@ -2,14 +2,12 @@
2
2
  # coding: utf-8
3
3
 
4
4
  module Cuesmash
5
-
6
5
  #
7
6
  # Provides an interface for starting the appium server
8
7
  #
9
8
  # @author [jarod]
10
9
  #
11
10
  class AppiumServer
12
-
13
11
  # Public: the output directory for the tests
14
12
  attr_accessor :output
15
13
 
@@ -19,7 +17,7 @@ module Cuesmash
19
17
  #
20
18
  # Create a new instance of AppiumServer
21
19
  #
22
- def initialize()
20
+ def initialize
23
21
  end
24
22
 
25
23
  #
@@ -28,7 +26,7 @@ module Cuesmash
28
26
  def start_server
29
27
  started
30
28
 
31
- command = "appium --log-level debug"
29
+ command = 'appium --log-level debug'
32
30
 
33
31
  @stdin, @stdout, @stderr, @wait_thr = Open3.popen3(command)
34
32
  Logger.info "Appium running with pid: #{@wait_thr.pid}"
@@ -36,7 +34,7 @@ module Cuesmash
36
34
  if Logger.debug?
37
35
  [@stdout, @stderr].each do |stream|
38
36
  Thread.new do
39
- until (line = stream.gets).nil? do
37
+ until (line = stream.gets).nil?
40
38
  Logger.debug line
41
39
  end
42
40
  end
@@ -62,14 +60,14 @@ module Cuesmash
62
60
  # Output a nice message for starting
63
61
  #
64
62
  def started
65
- Logger.info "Starting Appium Server"
63
+ Logger.info 'Starting Appium Server'
66
64
  end
67
65
 
68
66
  #
69
67
  # Output a nice message for completing
70
68
  #
71
69
  def completed
72
- Logger.info "Stopping Appium server 👌"
70
+ Logger.info 'Stopping Appium server 👌'
73
71
  end
74
72
  end
75
73
  end
@@ -2,14 +2,12 @@
2
2
  # coding: utf-8
3
3
 
4
4
  module Cuesmash
5
-
6
5
  #
7
6
  # Creates the appium.txt file that is needed by appium
8
7
  #
9
8
  # @author [jarod]
10
9
  #
11
10
  class AppiumText
12
-
13
11
  attr_accessor :platform_version
14
12
  attr_accessor :app
15
13
  attr_accessor :platform_name
@@ -44,28 +42,28 @@ module Cuesmash
44
42
  private
45
43
 
46
44
  def started
47
- Logger.info "Updating appium.txt"
45
+ Logger.info 'Updating appium.txt'
48
46
  end
49
47
 
50
48
  def update
51
49
  @appium_text_for_file = file_text
52
- IO.write("features/support/appium.txt", @appium_text_for_file)
50
+ IO.write('features/support/appium.txt', @appium_text_for_file)
53
51
  end
54
52
 
55
53
  def completed
56
- Logger.info "appium.txt updated 👌"
54
+ Logger.info 'appium.txt updated 👌'
57
55
  end
58
56
 
59
57
  # [caps]
60
58
  # platformName = "iOS"
61
59
  # deviceName = "iPhone Simulator"
62
60
  # platformVersion = "7.1"
63
- # app = "/Users/jarod/Library/Developer/Xcode/DerivedData/laterooms-fnlioqzgtpowdmezkwdzsyicgjiz/Build/Products/Debug-iphonesimulator/laterooms.app"
61
+ # app = "/Users/name/Library/Developer/Xcode/DerivedData/proj-xxx/Build/Products/Debug-iphonesimulator/proj.app"
64
62
  def file_text
65
63
  text = "[caps]\n"
66
64
  text << "platformName = \"#{platform_name}\"\n"
67
65
  text << "deviceName = \"#{device_name}\"\n"
68
- text << "platformVersion = \"#{platform_version}\"\n" unless platform_version == nil
66
+ text << "platformVersion = \"#{platform_version}\"\n" unless platform_version.nil?
69
67
  text << "app = \"#{app}\"\n"
70
68
  text << "newCommandTimeout = \"#{new_command_timeout}\"\n"
71
69
  Logger.debug "appium.text == #{text}"
@@ -2,7 +2,6 @@
2
2
  # coding: utf-8
3
3
 
4
4
  module Cuesmash
5
-
6
5
  #
7
6
  # The main point of entry for all commands, Command parses command line arguments
8
7
  # and decides what to do about them.
@@ -10,98 +9,102 @@ module Cuesmash
10
9
  # @author [alexfish]
11
10
  #
12
11
  class Command
13
-
14
- class << self
15
-
16
- #
17
- # Execute a command with some arguments
18
- # then figure out what we're supposed to be doing with
19
- # the arguments
20
- #
21
- # @param device [String]
22
- # @param os [String]
23
- # @param server [String]
24
- # @param tags [Array]
25
- # @param scheme [String]
26
- # @param debug [Boolean]
27
- # @param format [String]
28
- # @param output [String]
29
- # @param travis [Boolean]
30
- # @param app [IosApp Object]
31
- # @param profile [String]
32
- # @param quiet [String]
33
- # @param timeout [String] newCommandTimeout for appium in seconds
34
- #
35
- # @return [type] [description]
36
- def execute(device:, os:, server:, tags:, scheme:, debug: false, format: nil, output: nil, travis: nil, app:, profile:, quiet: false, timeout:)
37
-
38
- if debug
39
- Logger.level = ::Logger::DEBUG
40
- Logger.formatter = proc do |serverity, time, progname, msg|
41
- "\n#{time}\t#{serverity}\t#{msg.rstrip}"
42
- end
12
+ #
13
+ # Execute a command with some arguments
14
+ # then figure out what we're supposed to be doing with
15
+ # the arguments
16
+ #
17
+ # @param device [String]
18
+ # @param os [String]
19
+ # @param tags [Array]
20
+ # @param debug [Boolean]
21
+ # @param format [String]
22
+ # @param output [String]
23
+ # @param app [IosApp Object]
24
+ # @param profile [String]
25
+ # @param quiet [String]
26
+ # @param timeout [String] newCommandTimeout for appium in seconds
27
+ #
28
+ # @return [type] [description]
29
+ def self.execute(device:,
30
+ os:,
31
+ tags:,
32
+ debug: false,
33
+ format: nil,
34
+ output: nil,
35
+ app:,
36
+ profile:,
37
+ quiet: false,
38
+ timeout:)
39
+ if debug
40
+ Logger.level = ::Logger::DEBUG
41
+ Logger.formatter = proc do |serverity, time, _progname, msg|
42
+ "\n#{time}\t#{serverity}\t#{msg.rstrip}"
43
43
  end
44
+ end
44
45
 
45
- # Update the plist
46
- # update_plist(scheme, app.app_path)
47
-
48
- # Update the appium.txt file
49
- create_appium_txt(app: app.app_path, device_name: device, platform_version: os, timeout: timeout)
46
+ # Update the plist
47
+ # update_plist(scheme, app.app_path)
50
48
 
51
- # start the appium server
52
- app_server = AppiumServer.new
53
- app_server.start_server
49
+ # Update the appium.txt file
50
+ create_appium_txt(app: app.app_path, device_name: device, platform_version: os, timeout: timeout)
54
51
 
55
- # Run the tests
56
- run_tests(tags: tags, profile: profile, format: format, output: output, quiet: quiet)
52
+ # start the appium server
53
+ app_server = AppiumServer.new
54
+ app_server.start_server
57
55
 
58
- # Stop the Appium server
59
- # app_server.stop_server
56
+ # Run the tests
57
+ run_tests(tags: tags, profile: profile, format: format, output: output, quiet: quiet)
60
58
 
61
- end # execute
59
+ # Stop the Appium server
60
+ # app_server.stop_server
61
+ end # execute
62
62
 
63
- #
64
- # Update the applications plist so that the application
65
- # connects to sinatra
66
- #
67
- # @param scheme [String] The scheme related to the application
68
- # @param app_path [String] The path to the app
69
- #
70
- def update_plist(scheme, app_path)
71
- plist = Cuesmash::Plist.new(scheme, app_path)
72
- plist.execute
73
- end
63
+ #
64
+ # Update the applications plist so that the application
65
+ # connects to sinatra
66
+ #
67
+ # @param scheme [String] The scheme related to the application
68
+ # @param app_path [String] The path to the app
69
+ #
70
+ def self.update_plist(scheme, app_path)
71
+ plist = Cuesmash::Plist.new(scheme, app_path)
72
+ plist.execute
73
+ end
74
74
 
75
- #
76
- # Run the cucumber tests, that's why we're here afterall
77
- #
78
- # @param ios [String] The iOS version to test with
79
- # @param tags [Array] The cucumber tags to test with
80
- # @param profile [String] cucumber profile to use
81
- # @param format [String] The output format for the cucumber tests, Optional
82
- # @param output [String] The path to the output directory to output test reports to, Optional
83
- # @param quiet [Boolean] quiet flag for cucumber
84
- #
85
- def run_tests(tags:, profile:, format: nil, output: nil, quiet: false)
86
- cucumber = Cuesmash::Cucumber.new(tags, profile, quiet)
87
- cucumber.format = format if format
88
- cucumber.output = output if output
89
- cucumber.test
90
- end
75
+ #
76
+ # Run the cucumber tests, that's why we're here afterall
77
+ #
78
+ # @param ios [String] The iOS version to test with
79
+ # @param tags [Array] The cucumber tags to test with
80
+ # @param profile [String] cucumber profile to use
81
+ # @param format [String] The output format for the cucumber tests, Optional
82
+ # @param output [String] The path to the output directory to output test reports to, Optional
83
+ # @param quiet [Boolean] quiet flag for cucumber
84
+ #
85
+ def self.run_tests(tags:, profile:, format: nil, output: nil, quiet: false)
86
+ cucumber = Cuesmash::Cucumber.new(tags, profile, quiet)
87
+ cucumber.format = format if format
88
+ cucumber.output = output if output
89
+ cucumber.test
90
+ end
91
91
 
92
- #
93
- # Update appium.txt file with the directory of the build product
94
- #
95
- # @param platform_name [String] default 'iOS' name of platform to test on (Android or iOS)
96
- # @param device_name [String] deviceName = "iPhone Simulator"
97
- # @param platform_version [String] platformVersion = "7.1"
98
- # @param app [String] path to built .app file
99
- # @param timeout [String] time in seconds to set the newCommandTimeout to.
100
- #
101
- def create_appium_txt(platform_name: "iOS", device_name:, platform_version:, app:, timeout:)
102
- appium = AppiumText.new(platform_name: platform_name, device_name: device_name, platform_version: platform_version, app: app, new_command_timeout: timeout)
103
- appium.execute
104
- end
105
- end # self
92
+ #
93
+ # Update appium.txt file with the directory of the build product
94
+ #
95
+ # @param platform_name [String] default 'iOS' name of platform to test on (Android or iOS)
96
+ # @param device_name [String] deviceName = "iPhone Simulator"
97
+ # @param platform_version [String] platformVersion = "7.1"
98
+ # @param app [String] path to built .app file
99
+ # @param timeout [String] time in seconds to set the newCommandTimeout to.
100
+ #
101
+ def self.create_appium_txt(platform_name: 'iOS', device_name:, platform_version:, app:, timeout:)
102
+ appium = AppiumText.new(platform_name: platform_name,
103
+ device_name: device_name,
104
+ platform_version: platform_version,
105
+ app: app,
106
+ new_command_timeout: timeout)
107
+ appium.execute
108
+ end
106
109
  end # class Command
107
110
  end # module Cuesmash
@@ -1,13 +1,11 @@
1
1
  # coding: utf-8
2
2
 
3
3
  module Cuesmash
4
-
5
4
  #
6
5
  # The calamsash compiler will compiles the Xcode project with the
7
6
  # scheme it's told to compile with.
8
7
  #
9
8
  class Compiler
10
-
11
9
  # Public: the Scheme the compiler is compiling
12
10
  attr_accessor :scheme
13
11
  attr_accessor :tmp_dir
@@ -25,11 +23,11 @@ module Cuesmash
25
23
  started
26
24
  status = nil
27
25
 
28
- Open3.popen3 command do |stdin, out, err, wait_thr|
26
+ Open3.popen3 command do |_stdin, out, err, wait_thr|
29
27
  print "\n"
30
28
  [out, err].each do |stream|
31
29
  Thread.new do
32
- until (line = stream.gets).nil? do
30
+ until (line = stream.gets).nil?
33
31
  Logger.info line
34
32
  end
35
33
  end
@@ -53,14 +51,14 @@ module Cuesmash
53
51
  # Output a nice message for starting
54
52
  #
55
53
  def started
56
- Logger.info "Compiling"
54
+ Logger.info 'Compiling'
57
55
  end
58
56
 
59
57
  #
60
58
  # Output a nice message for completing
61
59
  #
62
60
  def completed
63
- Logger.info "Compiled 👌"
61
+ Logger.info 'Compiled 👌'
64
62
  end
65
63
  end # class compiler
66
64
  end # module cuesmash
@@ -2,7 +2,6 @@
2
2
  # coding: utf-8
3
3
 
4
4
  module Cuesmash
5
-
6
5
  #
7
6
  # Provides a nice interface to cucumber, allowing
8
7
  # us to run the cucumber test suite
@@ -10,7 +9,6 @@ module Cuesmash
10
9
  # @author [alexfish]
11
10
  #
12
11
  class Cucumber
13
-
14
12
  # Public: the output directory for the tests
15
13
  attr_accessor :output
16
14
 
@@ -43,16 +41,13 @@ module Cuesmash
43
41
  started
44
42
 
45
43
  status = nil
46
- output = ""
47
-
48
- cucumber_command = command
49
- Logger.debug "cucumber_command == #{cucumber_command}"
50
44
 
51
- Open3.popen3 cucumber_command do |stdin, out, err, wait_thr|
45
+ Logger.debug "cucumber_command == #{command}"
52
46
 
47
+ Open3.popen3 command do |_stdin, out, err, wait_thr|
53
48
  [out, err].each do |stream|
54
49
  Thread.new do
55
- until (line = stream.gets).nil? do
50
+ until (line = stream.gets).nil?
56
51
  Logger.info line
57
52
  end
58
53
  end
@@ -63,8 +58,7 @@ module Cuesmash
63
58
  end
64
59
 
65
60
  if status != 0
66
- Logger.info "Cucumber failed"
67
- # exit status
61
+ Logger.info 'Cucumber failed'
68
62
  status
69
63
  else
70
64
  completed
@@ -77,14 +71,14 @@ module Cuesmash
77
71
  # Output a nice message for starting
78
72
  #
79
73
  def started
80
- Logger.info "Running Cucumber"
74
+ Logger.info 'Running Cucumber'
81
75
  end
82
76
 
83
77
  #
84
78
  # Output a nice message for completing
85
79
  #
86
80
  def completed
87
- Logger.info "Cucumber Completed 👌"
81
+ Logger.info 'Cucumber Completed 👌'
88
82
  end
89
83
 
90
84
  #
@@ -93,13 +87,13 @@ module Cuesmash
93
87
  #
94
88
  # @return [String] The cucumber command string
95
89
  def command
96
- command_string = "cucumber"
97
- command_string += " --format #{self.format}" if self.format
98
- command_string += " --out #{self.output}" if self.output
99
- command_string += " --profile #{self.profile}" if self.profile
100
- command_string += @tags.to_a.empty? ? "" : tag_arguments
101
- command_string += " --quiet" if self.quiet
102
- command_string += " -c"
90
+ command_string = 'cucumber'
91
+ command_string += " --format #{format}" if format
92
+ command_string += " --out #{output}" if output
93
+ command_string += " --profile #{profile}" if profile
94
+ command_string += @tags.to_a.empty? ? '' : tag_arguments
95
+ command_string += ' --quiet' if quiet
96
+ command_string += ' -c'
103
97
 
104
98
  Logger.debug "cucumber command == #{command_string}"
105
99
 
@@ -112,9 +106,9 @@ module Cuesmash
112
106
  #
113
107
  # @return [String] The --tags commands ready to go
114
108
  def tag_arguments
115
- command_tag = ""
109
+ command_tag = ''
116
110
  @tags.each do |tag_set|
117
- command_tag = "" unless command_tag
111
+ command_tag = '' unless command_tag
118
112
  command_tag += " --tags #{tag_set}"
119
113
  end
120
114
 
@@ -4,12 +4,10 @@
4
4
  require 'cuesmash/app'
5
5
 
6
6
  module Cuesmash
7
-
8
7
  #
9
8
  # Provides an object to get information about the ios app that is being built.
10
9
  #
11
10
  class IosApp < App
12
-
13
11
  # Public: the path to the dir containing the built app i.e. /tmp/MyAppQWERQW/Build/Products/Debug-iphonesimulator/
14
12
  attr_reader :app_dir
15
13
 
@@ -30,13 +28,13 @@ module Cuesmash
30
28
  #
31
29
  # @return [App] A app instance
32
30
  def initialize(file_name:, build_configuration:)
33
- @app_name = "#{file_name}" << ".app"
31
+ @app_name = "#{file_name}" << '.app'
34
32
  @tmp_dir = Dir.mktmpdir(file_name)
35
33
  @build_configuration = build_configuration
36
34
 
37
35
  @app_dir = "#{@tmp_dir}" << "/#{@build_configuration}-iphonesimulator/"
38
-
36
+
39
37
  @app_path = "#{@app_dir}" << "#{@app_name}"
40
38
  end
41
39
  end # class IosApp
42
- end # module Cuesmash
40
+ end # module Cuesmash
@@ -1,14 +1,12 @@
1
1
  # coding: utf-8
2
2
 
3
3
  module Cuesmash
4
-
5
4
  require 'shellwords'
6
5
 
7
6
  #
8
7
  # iOS Specific compiler
9
8
  #
10
9
  class IosCompiler < Compiler
11
-
12
10
  attr_accessor :scheme
13
11
  attr_accessor :tmp_dir
14
12
  attr_accessor :build_configuration
@@ -37,13 +35,13 @@ module Cuesmash
37
35
  #
38
36
  # @return [String] The name of the workspace file that was found along with the -workspace flag
39
37
  def workspace
40
- wp = Dir["*.xcworkspace"].first
38
+ wp = Dir['*.xcworkspace'].first
41
39
  if wp
42
40
  flag = "-workspace #{wp}"
43
41
  Logger.debug "workspace == #{wp}"
44
42
  return flag
45
43
  else
46
- Logger.debug "no workspace found"
44
+ Logger.debug 'no workspace found'
47
45
  return wp
48
46
  end
49
47
  end # workspace
@@ -2,7 +2,6 @@
2
2
  # coding: utf-8
3
3
 
4
4
  module Cuesmash
5
-
6
5
  #
7
6
  # Does some fun stuff with Xcode plists, cuesmash needs to update
8
7
  # the Xcode projects plist to trick the simulator into connecting
@@ -25,7 +24,7 @@ module Cuesmash
25
24
  # @param plist_name [String] Default: server_config. The name of the file with the server configurations.
26
25
  #
27
26
  # @return [Plist] A plist instance
28
- def initialize(scheme, app_path, plist_name="server_config")
27
+ def initialize(scheme, app_path, plist_name = 'server_config')
29
28
  @scheme = scheme
30
29
  @tmp_dir = tmp_dir
31
30
  @plist_name = plist_name
@@ -49,14 +48,14 @@ module Cuesmash
49
48
  # Output a nice message for starting
50
49
  #
51
50
  def started
52
- Logger.info "Updating plist"
51
+ Logger.info 'Updating plist'
53
52
  end
54
53
 
55
54
  #
56
55
  # Output a nice message for completing
57
56
  #
58
57
  def completed
59
- Logger.info "Plist updated 👌"
58
+ Logger.info 'Plist updated 👌'
60
59
  end
61
60
 
62
61
  #
@@ -64,11 +63,11 @@ module Cuesmash
64
63
  # with sinatras port and URL
65
64
  #
66
65
  def update
67
- plist_file = CFPropertyList::List.new(:file => server_plist_path)
66
+ plist_file = CFPropertyList::List.new(file: server_plist_path)
68
67
  plist = CFPropertyList.native_types(plist_file.value)
69
68
 
70
- plist["url_preference"] = server_ip
71
- plist["port_preference"] = Cuesmash::PORT
69
+ plist['url_preference'] = server_ip
70
+ plist['port_preference'] = Cuesmash::PORT
72
71
 
73
72
  plist_file.value = CFPropertyList.guess(plist)
74
73
  plist_file.save(server_plist_path, CFPropertyList::List::FORMAT_XML)
@@ -78,7 +77,7 @@ module Cuesmash
78
77
  # Clear the existing plist from the iOS simulator
79
78
  #
80
79
  def clear
81
- FileUtils.rm(simulator_plist_path, :force => true)
80
+ FileUtils.rm(simulator_plist_path, force: true)
82
81
  end
83
82
 
84
83
  #
@@ -86,7 +85,7 @@ module Cuesmash
86
85
  #
87
86
  # @return [String] The mock backends IP
88
87
  def server_ip
89
- Socket.ip_address_list.find {|a| a.ipv4? && !a.ipv4_loopback?}.ip_address
88
+ Socket.ip_address_list.find { |a| a.ipv4? && !a.ipv4_loopback? }.ip_address
90
89
  end
91
90
 
92
91
  #
@@ -104,6 +103,5 @@ module Cuesmash
104
103
  def server_plist_path
105
104
  @app_path + "/#{@plist_name}.plist"
106
105
  end
107
-
108
106
  end
109
107
  end
@@ -38,22 +38,22 @@ module Cuesmash
38
38
  # come find me and I'll beat you with a ruby hammer.
39
39
  #
40
40
  def install_cucumber
41
- command_runner(command: "gem install --no-rdoc --no-ri cucumber")
41
+ command_runner(command: 'gem install --no-rdoc --no-ri cucumber')
42
42
  end
43
43
 
44
44
  # TODO: check if these exist already
45
45
  def create_features_dir
46
- command_runner(command: "mkdir -p features/{support,step_definitions}")
46
+ command_runner(command: 'mkdir -p features/{support,step_definitions}')
47
47
  end
48
48
 
49
49
  # TODO: check if this file exists already. If so ask if you want to overwrite it.
50
50
  def create_env_rb
51
- download_gist(gist_id:"9fa5e495758463ee5340", final_file:"features/support/env.rb")
51
+ download_gist(gist_id: '9fa5e495758463ee5340', final_file: 'features/support/env.rb')
52
52
  end
53
53
 
54
54
  # TODO: this is failing.
55
55
  def install_appium_console
56
- command_runner(command: "gem install --no-rdoc --no-ri appium_console")
56
+ command_runner(command: 'gem install --no-rdoc --no-ri appium_console')
57
57
  end
58
58
 
59
59
  def install_brew
@@ -61,33 +61,33 @@ module Cuesmash
61
61
  if brew_path == 0
62
62
  command_runner(command: "ruby -e \"$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)\"")
63
63
  else
64
- Logger.info "Brew already installed."
64
+ Logger.info 'Brew already installed.'
65
65
  end
66
66
  end
67
67
 
68
68
  def install_node
69
- command_runner(command: "brew update; brew upgrade node; brew install node")
69
+ command_runner(command: 'brew update; brew upgrade node; brew install node')
70
70
  end
71
71
 
72
72
  def create_travis_yml
73
- download_gist(gist_id:"74cc418331bd81651746", final_file:".travis.yml")
73
+ download_gist(gist_id: '74cc418331bd81651746', final_file: '.travis.yml')
74
74
  end
75
75
 
76
76
  def create_scripts_dir
77
- puts "creating scripts dir"
78
- command_runner(command: "mkdir -p scripts")
77
+ puts 'creating scripts dir'
78
+ command_runner(command: 'mkdir -p scripts')
79
79
  end
80
80
 
81
81
  def create_build_sh
82
- download_gist(gist_id:"8df9762a103c694f5773", final_file:"scripts/build.sh")
82
+ download_gist(gist_id: '8df9762a103c694f5773', final_file: 'scripts/build.sh')
83
83
  end
84
84
 
85
85
  def create_gemfile
86
- download_gist(gist_id:"ea786f1cf0fdbe0febb3", final_file:"Gemfile")
86
+ download_gist(gist_id: 'ea786f1cf0fdbe0febb3', final_file: 'Gemfile')
87
87
  end
88
88
 
89
89
  def create_cuesmash_yml
90
- download_gist(gist_id:"146a3b40991e68cb261b", final_file:".cuesmash.yml")
90
+ download_gist(gist_id: '146a3b40991e68cb261b', final_file: '.cuesmash.yml')
91
91
  end
92
92
 
93
93
  #
@@ -98,10 +98,10 @@ module Cuesmash
98
98
  def command_runner(command:)
99
99
  status = nil
100
100
  Logger.info "Starting: #{command}"
101
- Open3.popen3 command do |stdin, out, err, wait_thr|
101
+ Open3.popen3 command do |_stdin, out, err, wait_thr|
102
102
  [out, err].each do |stream|
103
103
  Thread.new do
104
- until (line = stream.gets).nil? do
104
+ until (line = stream.gets).nil?
105
105
  Logger.info line
106
106
  end # until
107
107
  end # Thread.new
@@ -116,7 +116,6 @@ module Cuesmash
116
116
  else
117
117
  Logger.info "Finished: #{command}"
118
118
  end
119
- return
120
119
  end # command_runner
121
120
 
122
121
  #
@@ -125,7 +124,7 @@ module Cuesmash
125
124
  # @param final_file: [String] where the final file gets saved in relationship to the directory where the script is run.
126
125
  #
127
126
  def download_gist(gist_id:, final_file:)
128
- base_url = URI("https://api.github.com/gists/")
127
+ base_url = URI('https://api.github.com/gists/')
129
128
  json = JSON.parse(RestClient.get(URI.join(base_url, gist_id).to_s))
130
129
  file_name = json['files'].keys[0]
131
130
  raw_url = json['files'][file_name]['raw_url']
@@ -11,18 +11,16 @@ require 'cuesmash/setup'
11
11
  require 'byebug'
12
12
 
13
13
  module Cuesmash
14
-
15
14
  CONFIG_FILE = '.cuesmash.yml'
16
15
 
17
16
  # For information on how this class works see the thor documentation https://github.com/erikhuda/thor/wiki
18
17
  class Start < Thor
19
-
20
18
  desc 'init', 'set up the project'
21
19
  def init
22
20
  Cuesmash::Setup.setup
23
21
  end
24
22
 
25
- desc "test OPTIONS", "run the tests"
23
+ desc 'test OPTIONS', 'run the tests'
26
24
  long_desc <<-LONGDESC
27
25
  --tags -t the tags to pass to cucumber, for multiple tags pass one per tag. See cucumber tags for more info. https://github.com/cucumber/cucumber/wiki/Tags\n
28
26
  --output -o The output directory for the test report --not yet implemented--\n
@@ -35,16 +33,21 @@ module Cuesmash
35
33
  --profile -p which cucumber.yml profile to use\n
36
34
  --quiet -q BOOLEAN cucumber quiet mode
37
35
  LONGDESC
38
- method_option :scheme, type: :array, aliases: "-s", desc: "iOS only: the Xcode scheme to build"
39
- method_option :app_name, type: :string, aliases: "-n", desc: "Android only: the name of the app"
40
- method_option :tags, type: :array, aliases: "-t", desc: "the tags to pass to cucumber, for multiple tags pass one per tag"
41
- method_option :debug, type: :boolean, default: false, aliases: "-d", desc: "turn on debug output"
42
- method_option :travis_ci, type: :boolean, default: false, aliases: "-c", desc: "turn on settings for building on Travis CI"
43
- method_option :profile, type: :string, aliases: "-p", desc: "which cucumber.yml profile to use"
44
- method_option :quiet, type: :boolean, aliases: "-q", desc: "cucumber quiet mode"
36
+ method_option :scheme, type: :array, aliases: '-s', desc: 'iOS only: the Xcode scheme to build'
37
+ method_option :app_name, type: :string, aliases: '-n', desc: 'Android only: the name of the app'
38
+ method_option :tags,
39
+ type: :array,
40
+ aliases: '-t',
41
+ desc: 'the tags to pass to cucumber, for multiple tags pass one per tag'
42
+ method_option :debug, type: :boolean, default: false, aliases: '-d', desc: 'turn on debug output'
43
+ method_option :travis_ci,
44
+ type: :boolean,
45
+ default: false,
46
+ aliases: '-c', desc: 'turn on settings for building on Travis CI'
47
+ method_option :profile, type: :string, aliases: '-p', desc: 'which cucumber.yml profile to use'
48
+ method_option :quiet, type: :boolean, aliases: '-q', desc: 'cucumber quiet mode'
45
49
  # method_option :server, type: :string, aliases: "-r", desc: ""
46
50
  def test
47
-
48
51
  # get the cuesmash.yml config
49
52
  @config = load_config
50
53
 
@@ -52,25 +55,25 @@ module Cuesmash
52
55
  if @config['platform'] == 'iOS'
53
56
 
54
57
  # Create new IosApp object
55
- @app = IosApp.new(file_name: options[:scheme].join(" "), build_configuration: @config['build_configuration'])
58
+ @app = IosApp.new(file_name: options[:scheme].join(' '), build_configuration: @config['build_configuration'])
56
59
 
57
60
  setup_ios
58
61
 
59
62
  # enumerate over each device / OS combination and run the tests.
60
63
  @config['devices'].each do |device, oses|
61
64
  oses.each do |os|
62
- say "Cleaning up iOS Simulator"
65
+ say 'Cleaning up iOS Simulator'
63
66
  reset_ios_simulator
64
67
 
65
68
  say "\n============================\ntesting iOS #{os} on #{device}", :green
66
- Cuesmash::Command.execute(device: device,
67
- os: os,
68
- server: options[:server],
69
- tags: options[:tags],
70
- scheme: options[:scheme].join(" "),
71
- debug: options[:debug],
72
- app: @app,
73
- profile: options[:profile],
69
+ Cuesmash::Command.execute(device: device,
70
+ os: os,
71
+ server: options[:server],
72
+ tags: options[:tags],
73
+ scheme: options[:scheme].join(' '),
74
+ debug: options[:debug],
75
+ app: @app,
76
+ profile: options[:profile],
74
77
  quiet: options[:quiet],
75
78
  timeout: @config['default']['test_timeout'].to_s)
76
79
  end
@@ -79,25 +82,26 @@ module Cuesmash
79
82
  # clean up the temp dir
80
83
  Logger.info "Cleaning up tmp dir\n"
81
84
  FileUtils.remove_entry @app.tmp_dir
82
-
85
+
83
86
  elsif @config['platform'] == 'Android'
84
-
85
- say "Setting up android", :red
86
87
 
87
- @app = Cuesmash::AndroidApp.new(project_name: options[:app_name], build_configuration: @config['build_configuration'])
88
+ say 'Setting up android', :red
89
+
90
+ @app = Cuesmash::AndroidApp.new(project_name: options[:app_name],
91
+ build_configuration: @config['build_configuration'])
88
92
  setup_android
89
93
 
90
94
  # enumerate over each device / OS combination and run the tests.
91
95
  @config['devices']['emulators'].each do |emulator|
92
96
  say "\n============================\ntesting Android on #{emulator}", :green
93
- Cuesmash::AndroidCommand.execute( avd: emulator,
94
- server: options[:server],
95
- tags: options[:tags],
96
- debug: options[:debug],
97
- app: @app,
98
- profile: options[:profile],
99
- quiet: options[:quiet],
100
- timeout: @config['default']['test_timeout'].to_s)
97
+ Cuesmash::AndroidCommand.execute(avd: emulator,
98
+ server: options[:server],
99
+ tags: options[:tags],
100
+ debug: options[:debug],
101
+ app: @app,
102
+ profile: options[:profile],
103
+ quiet: options[:quiet],
104
+ timeout: @config['default']['test_timeout'].to_s)
101
105
  end # device each
102
106
  else
103
107
  say "please set platform: 'iOS' or 'Android' in your .cuesmash.yml file", :red
@@ -105,28 +109,27 @@ module Cuesmash
105
109
  end
106
110
  end # test
107
111
 
108
- desc "build OPTIONS", "compile the app and create appium.txt to use for arc"
112
+ desc 'build OPTIONS', 'compile the app and create appium.txt to use for arc'
109
113
  long_desc <<-LONGDESC
110
114
  --scheme -s iOS: the Xcode scheme to build\n
111
115
  --app_name -n Android: the app name
112
116
  LONGDESC
113
- method_option :scheme, type: :array, aliases: "-s", desc: "the Xcode scheme to build"
114
- method_option :app_name, type: :string, aliases: "-n", desc: "Android only: the name of the app"
117
+ method_option :scheme, type: :array, aliases: '-s', desc: 'the Xcode scheme to build'
118
+ method_option :app_name, type: :string, aliases: '-n', desc: 'Android only: the name of the app'
115
119
  def build
116
-
117
120
  # get the cuesmash.yml config
118
121
  @config = load_config
119
122
 
120
123
  # if no default then bail
121
- if @config['default'] == nil
122
- say "add a default device and os version to the .cuesmash.yml", :red
124
+ if @config['default'].nil?
125
+ say 'add a default device and os version to the .cuesmash.yml', :red
123
126
  return
124
127
  end
125
128
 
126
129
  if @config['platform'] == 'iOS'
127
130
  setup_ios
128
131
  elsif @config['platform'] == 'Android'
129
- say "Setting up android"
132
+ say 'Setting up android'
130
133
  setup_android
131
134
  else
132
135
  say "please set platform: 'iOS' or 'Android' in your .cuesmash.yml file", :red
@@ -142,9 +145,8 @@ module Cuesmash
142
145
  #
143
146
  # @return [YAML] yaml loaded from the config_file
144
147
  def load_config
145
-
146
- if File.exists?(CONFIG_FILE)
147
- config = YAML.load_file(CONFIG_FILE) if File.exists?(CONFIG_FILE)
148
+ if File.exist?(CONFIG_FILE)
149
+ config = YAML.load_file(CONFIG_FILE) if File.exist?(CONFIG_FILE)
148
150
  else
149
151
  say "There is no '.cuesmash.yml' file. Please create one and try again.\n", :red
150
152
  return
@@ -154,25 +156,29 @@ module Cuesmash
154
156
 
155
157
  #
156
158
  # helper methods
157
- #
159
+ #
158
160
  def setup_ios
159
- @app = IosApp.new(file_name: options[:scheme].join(" "), build_configuration: @config['build_configuration'])
161
+ @app = IosApp.new(file_name: options[:scheme].join(' '), build_configuration: @config['build_configuration'])
160
162
 
161
163
  # Compile the project
162
- compiler = Cuesmash::IosCompiler.new(scheme: options[:scheme].join(" "), tmp_dir: @app.tmp_dir, build_configuration: @config['build_configuration'])
164
+ compiler = Cuesmash::IosCompiler.new(scheme: options[:scheme].join(' '),
165
+ tmp_dir: @app.tmp_dir,
166
+ build_configuration: @config['build_configuration'])
163
167
  compiler.compile
164
168
 
165
169
  ios_appium_text
166
170
  end
167
171
 
168
- #
172
+ #
169
173
  # helper method for setting up android build
170
- #
174
+ #
171
175
  def setup_android
172
- @app = Cuesmash::AndroidApp.new(project_name: options[:app_name], build_configuration: @config['build_configuration'])
176
+ @app = Cuesmash::AndroidApp.new(project_name: options[:app_name],
177
+ build_configuration: @config['build_configuration'])
173
178
 
174
179
  # Compile the project
175
- compiler = Cuesmash::AndroidCompiler.new(project_name: options[:app_name], build_configuration: @config['build_configuration'])
180
+ compiler = Cuesmash::AndroidCompiler.new(project_name: options[:app_name],
181
+ build_configuration: @config['build_configuration'])
176
182
  compiler.compile
177
183
 
178
184
  android_appium_text
@@ -180,33 +186,32 @@ module Cuesmash
180
186
 
181
187
  #
182
188
  # iOS Appium text file set up
183
- #
189
+ #
184
190
  def ios_appium_text
185
- appium = Cuesmash::AppiumText.new(platform_name: "iOS",
186
- device_name: @config['default']['os'],
187
- platform_version: @config['default']['version'].to_s,
188
- app: @app.app_path,
191
+ appium = Cuesmash::AppiumText.new(platform_name: 'iOS',
192
+ device_name: @config['default']['os'],
193
+ platform_version: @config['default']['version'].to_s,
194
+ app: @app.app_path,
189
195
  new_command_timeout: @config['default']['test_timeout'].to_s)
190
196
  appium.execute
191
197
  end
192
198
 
193
199
  #
194
200
  # Android Appium text file set up
195
- #
201
+ #
196
202
  def android_appium_text
197
- appium = Cuesmash::AndroidAppiumText.new( platform_name: @config['platform'],
198
- avd: @config['default_emulator'],
199
- app: @app.app_path,
200
- new_command_timeout: @config['default']['test_timeout'].to_s)
203
+ appium = Cuesmash::AndroidAppiumText.new(platform_name: @config['platform'],
204
+ avd: @config['default_emulator'],
205
+ app: @app.app_path,
206
+ new_command_timeout: @config['default']['test_timeout'].to_s)
201
207
  appium.execute
202
208
  end # android_appium_text
203
209
 
204
- #
210
+ #
205
211
  # Removes the settings and contents for the iOS simulator.
206
- #
212
+ #
207
213
  # @return [type] [description]
208
214
  def reset_ios_simulator
209
-
210
215
  end
211
216
  end # no_commands
212
217
  end # Start class
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cuesmash
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.9.7
4
+ version: 0.1.9.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex Fish
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2015-01-15 00:00:00.000000000 Z
13
+ date: 2015-04-17 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: bundler
@@ -232,7 +232,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
232
232
  version: '0'
233
233
  requirements: []
234
234
  rubyforge_project:
235
- rubygems_version: 2.2.2
235
+ rubygems_version: 2.4.3
236
236
  signing_key:
237
237
  specification_version: 4
238
238
  summary: Compile an app and run cucumber with appium