fastlane-plugin-instrumented_tests 0.1.1 → 0.1.2

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: 85f9b58e24abc1295eca1af888789dc922c73d2d
4
- data.tar.gz: 3fef50aa36cb239263fec444da4162652fb5d984
3
+ metadata.gz: 44fb638f00eb58f13471775fe1efa67db839e815
4
+ data.tar.gz: a2f1a28d771d8f431cedea9f0fa203ef0af45bfe
5
5
  SHA512:
6
- metadata.gz: f835bf89786381419422ef3895e28a27721237c08b8a3808a994de2ac4844397dc17a0c380d3fe4e5aba810e04d00d936712b5500ed1b2183c71e3f15f6b80ec
7
- data.tar.gz: 5c6b0d709dcb145fb48f9c1698d75038dabed3975146ffa0e7fb68384167f67111838820d07d4c386605a566753b065690db25bf77b6d2f583fa1a667dd768bc
6
+ metadata.gz: 53daa02770fb89b387444ce37be34f0fa145b30dde20507e857b44fd9d6ace9b894fa73871a298f58ddb241bfeb5069c775ad055bf733b6a189d3240f4e47178
7
+ data.tar.gz: 480a0bfcfef42cef95b847a4249bbefaac5ddf6a76130968e2f174c867bfe1658ffa124af681330d51c83f97b627fadbe2f82a43dac59498a5a594d9e13ec425
@@ -8,71 +8,90 @@ module Fastlane
8
8
 
9
9
  class InstrumentedTestsAction < Action
10
10
  def self.run(params)
11
- file = Tempfile.new('emulator_output')
11
+ setup_parameters(params)
12
+ begin
13
+ delete_old_emulators(params)
14
+ create_emulator(params)
15
+ start_emulator(params)
16
+
17
+ begin
18
+ wait_emulator_boot(params)
19
+ execute_gradle(params)
20
+ ensure
21
+ stop_emulator(params)
22
+ end
23
+ ensure
24
+ @emulator_output.close
25
+ @emulator_output.unlink
26
+ end
27
+ end
28
+
29
+ def self.setup_parameters(params)
30
+ # port must be an even integer number between 5554 and 5680
31
+ params[:avd_port]=Random.rand(50)*2+5580 if params[:avd_port].nil?
32
+ raise ":avd_port must be at least 5554" if params[:avd_port]<5554
33
+ raise ":avd_port must be lower than 5680" if params[:avd_port]>5680
34
+ raise ":avd_port must be an even number" if params[:avd_port]%2 != 0
35
+
36
+ params[:avd_hide]=Helper.is_ci? if params[:avd_hide].nil?
12
37
 
13
- # Set up params
38
+ @android_serial="emulator-#{params[:avd_port]}"
39
+ # maybe create this in a way that the creation and destruction are in the same method
40
+ @emulator_output = Tempfile.new('emulator_output')
41
+ end
42
+
43
+ def self.delete_old_emulators(params)
44
+ devices = `#{params[:sdk_path]}/tools/android list avd`.chomp
45
+
46
+ unless devices.match(/#{params[:avd_name]}/).nil?
47
+ Action.sh("#{params[:sdk_path]}/tools/android delete avd -n #{params[:avd_name]}")
48
+ end
49
+ end
50
+
51
+ def self.create_emulator(params)
14
52
  avd_name = "--name \"#{params[:avd_name]}\""
15
53
  target_id = "--target #{params[:target_id]}"
16
54
  avd_options = params[:avd_options] unless params[:avd_options].nil?
17
55
  avd_abi = "--abi #{params[:avd_abi]}" unless params[:avd_abi].nil?
18
56
  avd_tag = "--tag #{params[:avd_tag]}" unless params[:avd_tag].nil?
19
57
  create_avd = ["#{params[:sdk_path]}/tools/android", "create avd", avd_name, target_id, avd_abi, avd_tag, avd_options].join(" ")
20
- start_avd = ["#{params[:sdk_path]}/tools/emulator", "-avd #{params[:avd_name]}", "-gpu on -no-boot-anim &>#{file.path} &"]
21
- devices = `#{params[:sdk_path]}/tools/android list avd`.chomp
22
-
23
- # Delete avd if one already exists for clean state.
24
- unless devices.match(/#{params[:avd_name]}/).nil?
25
- Action.sh("#{params[:sdk_path]}/tools/android delete avd -n #{params[:avd_name]}")
26
- end
27
58
 
28
59
  UI.important("Creating AVD...")
29
60
  Action.sh(create_avd)
61
+ end
30
62
 
63
+ def self.start_emulator(params)
31
64
  UI.important("Starting AVD...")
32
- begin
33
- Action.sh(start_avd)
34
-
35
- # Wait for device to be fully
36
- boot_emulator(params)
37
-
38
- begin
39
- Fastlane::Actions::GradleAction.run(task: params[:task], flags: params[:flags], project_dir: params[:project_dir],
40
- print_command: true, print_command_output: true)
41
- ensure
42
- stop_emulator(params, file)
43
- end
44
- ensure
45
- file.close
46
- file.unlink
47
- end
65
+ ui_args="-gpu on"
66
+ ui_args="-gpu on -no-audio -no-window" if params[:avd_hide]
67
+ start_avd = ["#{params[:sdk_path]}/tools/emulator", "-avd #{params[:avd_name]}", "#{ui_args}", "-port #{params[:avd_port]} &>#{@emulator_output.path} &"]
68
+ Action.sh(start_avd)
48
69
  end
49
70
 
50
- def self.boot_emulator(params)
71
+ def self.wait_emulator_boot(params)
51
72
  UI.important("Waiting for emulator to finish booting... May take a few minutes...")
73
+ adb = Helper::AdbHelper.new(adb_path: "#{params[:sdk_path]}/platform-tools/adb")
52
74
  loop do
53
- bootCompletedCommand = "#{params[:sdk_path]}/platform-tools/adb shell getprop sys.boot_completed"
54
- stdout, _stdeerr, _status = Open3.capture3(bootCompletedCommand)
75
+ boot_complete_cmd = "ANDROID_SERIAL=#{@android_serial} #{params[:sdk_path]}/platform-tools/adb shell getprop sys.boot_completed"
76
+ stdout, _stdeerr, _status = Open3.capture3(boot_complete_cmd)
55
77
 
56
78
  if stdout.strip == "1"
57
79
  UI.success("Emulator Booted!")
58
80
  break
59
81
  end
82
+ sleep(1)
60
83
  end
61
84
  end
62
85
 
63
- def self.stop_emulator(params, file)
86
+ def self.execute_gradle(params)
87
+ Fastlane::Actions::GradleAction.run(task: params[:task], flags: params[:flags], project_dir: params[:project_dir],
88
+ serial: @android_serial, print_command: true, print_command_output: true)
89
+ end
90
+
91
+ def self.stop_emulator(params)
64
92
  UI.important("Shutting down emulator...")
65
93
  adb = Helper::AdbHelper.new(adb_path: "#{params[:sdk_path]}/platform-tools/adb")
66
- temp = File.open(file.path).read
67
- port = temp.match(/console on port (\d+),/)
68
- if port
69
- port = port[1]
70
- else
71
- UI.important("Could not find emulator port number, using default port.")
72
- port = "5554"
73
- end
74
-
75
- adb.trigger(command: "emu kill", serial: "emulator-#{port}")
94
+ adb.trigger(command: "emu kill", serial: @android_serial)
76
95
 
77
96
  UI.success("Deleting emulator...")
78
97
  Action.sh("#{params[:sdk_path]}/tools/android delete avd -n #{params[:avd_name]}")
@@ -117,6 +136,16 @@ module Fastlane
117
136
  description: "The sys-img tag to use for the AVD. The default is to auto-select if the platform has only one tag for its system images",
118
137
  is_string: true,
119
138
  optional: true),
139
+ FastlaneCore::ConfigItem.new(key: :avd_port,
140
+ env_name: "AVD_PORT",
141
+ description: "The port used for communication with the emulator. If not set it is randomly selected",
142
+ is_string: false,
143
+ optional: true),
144
+ FastlaneCore::ConfigItem.new(key: :avd_hide,
145
+ env_name: "AVD_HIDE",
146
+ description: "Hide the avd interface, required for CI. Default true if on CI, false if not on CI",
147
+ is_string: false,
148
+ optional: true),
120
149
  FastlaneCore::ConfigItem.new(key: :sdk_path,
121
150
  env_name: "ANDROID_HOME",
122
151
  description: "The path to your android sdk directory",
@@ -147,7 +176,7 @@ module Fastlane
147
176
  end
148
177
 
149
178
  def self.authors
150
- ["joshrlesch"]
179
+ ["joshrlesch", "lexxdark"]
151
180
  end
152
181
 
153
182
  def self.is_supported?(platform)
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
2
  module InstrumentedTests
3
- VERSION = "0.1.1"
3
+ VERSION = "0.1.2"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fastlane-plugin-instrumented_tests
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Silviu Paragina
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-07-05 00:00:00.000000000 Z
11
+ date: 2016-07-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pry