fastlane-plugin-instrumented_tests 0.1.1 → 0.1.2

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 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