bugsnag-maze-runner 7.22.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (112) hide show
  1. checksums.yaml +7 -0
  2. data/bin/bugsnag-print-load-paths +6 -0
  3. data/bin/download-logs +74 -0
  4. data/bin/maze-runner +174 -0
  5. data/bin/upload-app +56 -0
  6. data/lib/features/scripts/await-android-emulator.sh +11 -0
  7. data/lib/features/scripts/clear-android-app-data.sh +8 -0
  8. data/lib/features/scripts/force-stop-android-app.sh +8 -0
  9. data/lib/features/scripts/install-android-app.sh +15 -0
  10. data/lib/features/scripts/launch-android-app.sh +38 -0
  11. data/lib/features/scripts/launch-android-emulator.sh +15 -0
  12. data/lib/features/steps/android_steps.rb +51 -0
  13. data/lib/features/steps/app_automator_steps.rb +228 -0
  14. data/lib/features/steps/aws_sam_steps.rb +212 -0
  15. data/lib/features/steps/breadcrumb_steps.rb +80 -0
  16. data/lib/features/steps/browser_steps.rb +93 -0
  17. data/lib/features/steps/build_api_steps.rb +25 -0
  18. data/lib/features/steps/document_server_steps.rb +7 -0
  19. data/lib/features/steps/error_reporting_steps.rb +358 -0
  20. data/lib/features/steps/feature_flag_steps.rb +190 -0
  21. data/lib/features/steps/header_steps.rb +72 -0
  22. data/lib/features/steps/log_steps.rb +29 -0
  23. data/lib/features/steps/multipart_request_steps.rb +142 -0
  24. data/lib/features/steps/network_steps.rb +135 -0
  25. data/lib/features/steps/payload_steps.rb +257 -0
  26. data/lib/features/steps/proxy_steps.rb +34 -0
  27. data/lib/features/steps/query_parameter_steps.rb +31 -0
  28. data/lib/features/steps/request_assertion_steps.rb +186 -0
  29. data/lib/features/steps/runner_steps.rb +428 -0
  30. data/lib/features/steps/session_tracking_steps.rb +116 -0
  31. data/lib/features/steps/trace_steps.rb +206 -0
  32. data/lib/features/steps/value_steps.rb +119 -0
  33. data/lib/features/support/env.rb +7 -0
  34. data/lib/features/support/internal_hooks.rb +207 -0
  35. data/lib/maze/api/appium/file_manager.rb +29 -0
  36. data/lib/maze/appium_server.rb +112 -0
  37. data/lib/maze/assertions/request_set_assertions.rb +97 -0
  38. data/lib/maze/aws/sam.rb +112 -0
  39. data/lib/maze/aws_public_ip.rb +53 -0
  40. data/lib/maze/bugsnag_config.rb +42 -0
  41. data/lib/maze/checks/assert_check.rb +69 -0
  42. data/lib/maze/checks/noop_check.rb +34 -0
  43. data/lib/maze/client/appium/base_client.rb +131 -0
  44. data/lib/maze/client/appium/bb_client.rb +102 -0
  45. data/lib/maze/client/appium/bb_devices.rb +127 -0
  46. data/lib/maze/client/appium/bs_client.rb +91 -0
  47. data/lib/maze/client/appium/bs_devices.rb +141 -0
  48. data/lib/maze/client/appium/bs_legacy_client.rb +31 -0
  49. data/lib/maze/client/appium/local_client.rb +67 -0
  50. data/lib/maze/client/appium.rb +23 -0
  51. data/lib/maze/client/bb_api_client.rb +102 -0
  52. data/lib/maze/client/bb_client_utils.rb +181 -0
  53. data/lib/maze/client/bs_client_utils.rb +168 -0
  54. data/lib/maze/client/selenium/base_client.rb +15 -0
  55. data/lib/maze/client/selenium/bb_browsers.yml +188 -0
  56. data/lib/maze/client/selenium/bb_client.rb +38 -0
  57. data/lib/maze/client/selenium/bs_browsers.yml +257 -0
  58. data/lib/maze/client/selenium/bs_client.rb +89 -0
  59. data/lib/maze/client/selenium/local_client.rb +16 -0
  60. data/lib/maze/client/selenium.rb +16 -0
  61. data/lib/maze/compare.rb +161 -0
  62. data/lib/maze/configuration.rb +182 -0
  63. data/lib/maze/docker.rb +147 -0
  64. data/lib/maze/document_server.rb +46 -0
  65. data/lib/maze/driver/appium.rb +198 -0
  66. data/lib/maze/driver/browser.rb +124 -0
  67. data/lib/maze/errors.rb +52 -0
  68. data/lib/maze/generator.rb +55 -0
  69. data/lib/maze/helper.rb +122 -0
  70. data/lib/maze/hooks/appium_hooks.rb +55 -0
  71. data/lib/maze/hooks/browser_hooks.rb +15 -0
  72. data/lib/maze/hooks/command_hooks.rb +9 -0
  73. data/lib/maze/hooks/error_code_hook.rb +49 -0
  74. data/lib/maze/hooks/hooks.rb +61 -0
  75. data/lib/maze/http_request.rb +21 -0
  76. data/lib/maze/interactive_cli.rb +173 -0
  77. data/lib/maze/logger.rb +86 -0
  78. data/lib/maze/macos_utils.rb +14 -0
  79. data/lib/maze/maze_output.rb +88 -0
  80. data/lib/maze/network.rb +49 -0
  81. data/lib/maze/option/parser.rb +240 -0
  82. data/lib/maze/option/processor.rb +130 -0
  83. data/lib/maze/option/validator.rb +155 -0
  84. data/lib/maze/option.rb +62 -0
  85. data/lib/maze/plugins/bugsnag_reporting_plugin.rb +49 -0
  86. data/lib/maze/plugins/cucumber_report_plugin.rb +101 -0
  87. data/lib/maze/plugins/error_code_plugin.rb +21 -0
  88. data/lib/maze/plugins/global_retry_plugin.rb +38 -0
  89. data/lib/maze/proxy.rb +114 -0
  90. data/lib/maze/request_list.rb +87 -0
  91. data/lib/maze/request_repeater.rb +49 -0
  92. data/lib/maze/retry_handler.rb +67 -0
  93. data/lib/maze/runner.rb +149 -0
  94. data/lib/maze/schemas/OtelTraceSchema.json +390 -0
  95. data/lib/maze/schemas/trace_schema.rb +7 -0
  96. data/lib/maze/schemas/trace_validator.rb +98 -0
  97. data/lib/maze/server.rb +251 -0
  98. data/lib/maze/servlets/base_servlet.rb +27 -0
  99. data/lib/maze/servlets/command_servlet.rb +47 -0
  100. data/lib/maze/servlets/log_servlet.rb +64 -0
  101. data/lib/maze/servlets/reflective_servlet.rb +70 -0
  102. data/lib/maze/servlets/servlet.rb +199 -0
  103. data/lib/maze/servlets/temp.rb +0 -0
  104. data/lib/maze/servlets/trace_servlet.rb +13 -0
  105. data/lib/maze/store.rb +15 -0
  106. data/lib/maze/terminating_server.rb +129 -0
  107. data/lib/maze/timers.rb +51 -0
  108. data/lib/maze/wait.rb +35 -0
  109. data/lib/maze.rb +27 -0
  110. data/lib/utils/deep_merge.rb +17 -0
  111. data/lib/utils/selenium_money_patch.rb +17 -0
  112. metadata +451 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 25918b6a96c58be96023fec6acae1dca6463db11c722fe9ef612f1faa1137f48
4
+ data.tar.gz: 68af4db3ee29db253541685361060a0b969371752a22c7c7e7e78bfd51c7dc31
5
+ SHA512:
6
+ metadata.gz: 5734aa0594c7286ebe127cb4261b0d029f7241a88c090eea5c52a059459e3f7deed26a3fc14d754155ae8d1000b5001d65b3b903e2d98822ccc6cf7a824573e4
7
+ data.tar.gz: 91d4e5a297ec91c2f71bc2f023632eab9c328fe70bcd61bf511f8eab688b7e85c4cba8a9d5dc5ccec3017a2240daee180f6c0364db490e71376389f77cc5a45f
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ CUKE_LOAD_DIR = File.expand_path(File.dirname(File.dirname(__FILE__)))
4
+
5
+ paths = Dir.glob("#{CUKE_LOAD_DIR}/lib/features/**/*.rb")
6
+ print paths.join(" ")
data/bin/download-logs ADDED
@@ -0,0 +1,74 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require_relative '../lib/maze'
5
+ require_relative '../lib/maze/client/bs_client_utils'
6
+ require_relative '../lib/maze/logger'
7
+ require 'net/http'
8
+ require 'json'
9
+ require 'uri'
10
+ require 'optimist'
11
+ require 'fileutils'
12
+
13
+ class DownloadLogEntry
14
+ def start(args)
15
+ p = Optimist::Parser.new do
16
+ text 'Download device sessions logs from BrowserStack using the build ID'
17
+ text ''
18
+ text 'Requires BROWSER_STACK_USERNAME and BROWSER_STACK_ACCESS_KEY'
19
+ text ''
20
+ text 'Usage [OPTIONS] <filenames>'
21
+ text ''
22
+ opt :help,
23
+ 'Print this help.'
24
+ opt :build_id,
25
+ "ID of the BrowserStack build",
26
+ :type => :string
27
+ end
28
+
29
+ opts = Optimist::with_standard_exception_handling p do
30
+ raise Optimist::HelpNeeded if ARGV.empty? # show help screen
31
+ p.parse ARGV
32
+ end
33
+
34
+ # Get browserstack username and access key from the environment
35
+ username = ENV['BROWSER_STACK_USERNAME']
36
+ access_key = ENV['BROWSER_STACK_ACCESS_KEY']
37
+
38
+ # Check if BROWSER_STACK_USERNAME or BROWSER_STACK_ACCESS_KEY has been set
39
+ if username.nil? || access_key.nil?
40
+ $logger.warn "BROWSER_STACK_USERNAME or BROWSER_STACK_ACCESS_KEY has not been set"
41
+ Optimist::with_standard_exception_handling p do
42
+ raise Optimist::HelpNeeded
43
+ end
44
+ end
45
+
46
+
47
+ build_info = Maze::Client::BrowserStackClientUtils.build_info username,
48
+ access_key,
49
+ opts[:build_id]
50
+
51
+ $logger.info "Getting logs for build: #{opts[:build_id]}"
52
+
53
+ build_info.each_with_index do |session, index|
54
+ $logger.info "Downloading Device Logs for Session: #{index + 1} to #{Dir.pwd}/maze_output"
55
+
56
+ log_name = "#{opts[:build_id]}-#{index + 1}"
57
+
58
+ Maze::Client::BrowserStackClientUtils.download_log username,
59
+ access_key,
60
+ log_name,
61
+ session['automation_session']['device_logs_url'],
62
+ :device
63
+
64
+ $logger.info "Downloading Appium Logs for Session: #{index + 1}"
65
+ Maze::Client::BrowserStackClientUtils.download_log username,
66
+ access_key,
67
+ log_name,
68
+ session['automation_session']['appium_logs_url'],
69
+ :appium
70
+ end
71
+ end
72
+ end
73
+
74
+ DownloadLogEntry.new.start(ARGV)
data/bin/maze-runner ADDED
@@ -0,0 +1,174 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'cucumber/cli/main'
5
+
6
+ require_relative '../lib/utils/deep_merge'
7
+
8
+ require_relative '../lib/maze'
9
+
10
+ require_relative '../lib/maze/appium_server'
11
+ require_relative '../lib/maze/api/appium/file_manager'
12
+ require_relative '../lib/maze/bugsnag_config'
13
+ require_relative '../lib/maze/client/bb_api_client'
14
+ require_relative '../lib/maze/client/bb_client_utils'
15
+ require_relative '../lib/maze/client/bs_client_utils'
16
+ require_relative '../lib/maze/client/appium'
17
+ require_relative '../lib/maze/client/appium/base_client'
18
+ require_relative '../lib/maze/client/appium/bb_client'
19
+ require_relative '../lib/maze/client/appium/bb_devices'
20
+ require_relative '../lib/maze/client/appium/bs_client'
21
+ require_relative '../lib/maze/client/appium/bs_legacy_client'
22
+ require_relative '../lib/maze/client/appium/bs_devices'
23
+ require_relative '../lib/maze/client/appium/local_client'
24
+ require_relative '../lib/maze/client/selenium'
25
+ require_relative '../lib/maze/client/selenium/base_client'
26
+ require_relative '../lib/maze/client/selenium/bb_client'
27
+ require_relative '../lib/maze/client/selenium/bs_client'
28
+ require_relative '../lib/maze/client/selenium/local_client'
29
+ require_relative '../lib/maze/aws_public_ip'
30
+ require_relative '../lib/maze/compare'
31
+ require_relative '../lib/maze/docker'
32
+ require_relative '../lib/maze/document_server'
33
+ require_relative '../lib/maze/errors'
34
+ require_relative '../lib/maze/generator'
35
+ require_relative '../lib/maze/helper'
36
+ require_relative '../lib/maze/http_request'
37
+ require_relative '../lib/maze/logger'
38
+ require_relative '../lib/maze/macos_utils'
39
+ require_relative '../lib/maze/maze_output'
40
+ require_relative '../lib/maze/network'
41
+ require_relative '../lib/maze/proxy'
42
+ require_relative '../lib/maze/retry_handler'
43
+ require_relative '../lib/maze/request_repeater'
44
+ require_relative '../lib/maze/runner'
45
+ require_relative '../lib/maze/terminating_server'
46
+
47
+ require_relative '../lib/maze/servlets/base_servlet'
48
+ require_relative '../lib/maze/servlets/command_servlet'
49
+ require_relative '../lib/maze/servlets/servlet'
50
+ require_relative '../lib/maze/servlets/log_servlet'
51
+ require_relative '../lib/maze/servlets/trace_servlet'
52
+ require_relative '../lib/maze/servlets/reflective_servlet'
53
+ require_relative '../lib/maze/server'
54
+
55
+ require_relative '../lib/maze/assertions/request_set_assertions'
56
+
57
+ require_relative '../lib/maze/schemas/trace_schema'
58
+ require_relative '../lib/maze/schemas/trace_validator'
59
+
60
+ require_relative '../lib/maze/store'
61
+ require_relative '../lib/maze/timers'
62
+
63
+ require_relative '../lib/maze/checks/noop_check'
64
+ require_relative '../lib/maze/checks/assert_check'
65
+
66
+ require_relative '../lib/maze/option'
67
+ require_relative '../lib/maze/option/parser'
68
+ require_relative '../lib/maze/option/processor'
69
+ require_relative '../lib/maze/option/validator'
70
+
71
+
72
+ require_relative '../lib/maze/hooks/hooks'
73
+ require_relative '../lib/maze/hooks/appium_hooks'
74
+ require_relative '../lib/maze/hooks/browser_hooks'
75
+ require_relative '../lib/maze/hooks/command_hooks'
76
+ require_relative '../lib/maze/hooks/error_code_hook'
77
+
78
+ require_relative '../lib/maze/driver/appium'
79
+ require_relative '../lib/maze/driver/browser'
80
+
81
+ require_relative '../lib/maze/plugins/bugsnag_reporting_plugin'
82
+ require_relative '../lib/maze/plugins/cucumber_report_plugin'
83
+ require_relative '../lib/maze/plugins/error_code_plugin'
84
+ require_relative '../lib/maze/plugins/global_retry_plugin'
85
+
86
+ # Require monkey-patches after everything else
87
+ require_relative '../lib/utils/selenium_money_patch'
88
+
89
+ # Encapsulates the MazeRunner entry point
90
+ class MazeRunnerEntry
91
+
92
+ # Removes Maze Runner specific args from the array, as these will cause Cucumber to error.
93
+ def remove_maze_runner_args
94
+ Maze::Option.constants.each do |opt|
95
+ name = Maze::Option.const_get(opt)
96
+ @args.reject! { |arg| arg == "--#{name}" || (arg.start_with? "--#{name}=") || arg == "--no-#{name}" }
97
+ end
98
+ end
99
+
100
+ # Adds arguments to Cucumber
101
+ def add_cucumber_args
102
+ @args << 'features' if @args.empty?
103
+ @args << '--publish-quiet'
104
+ @args << '--color'
105
+
106
+ # Pass strict mode options through to cucumber if present
107
+ # If not we default to strict for undefined and pending results,
108
+ # but no-strict for flaky in order to allow retries
109
+ regex = /--(no-)?strict(-(undefined|pending|flaky))?/
110
+ if @args.all? { |arg| regex.match(arg).nil? }
111
+ @args << '--strict-undefined' << '--strict-pending' << '--no-strict-flaky'
112
+ end
113
+
114
+ # Load internal steps and helper functions
115
+ load_dir = File.expand_path(File.dirname(File.dirname(__FILE__))).freeze
116
+ paths = Dir.glob("#{load_dir}/lib/features/**/*.rb")
117
+
118
+ # Load project-specific steps and helper functions
119
+ paths += Dir.glob('features/{support,steps}/*.rb')
120
+ paths.each { |path| @args << '-r' << path }
121
+ end
122
+
123
+ # List devices for the given device farm, or all otherwise
124
+
125
+ def start(args)
126
+ $logger.info "Maze Runner v#{Maze::VERSION}"
127
+
128
+ # Parse args, processing any Maze Runner specific options
129
+ @args = args.dup
130
+ options = Maze::Option::Parser.parse args
131
+
132
+ if options[Maze::Option::LIST_DEVICES]
133
+ case options[Maze::Option::FARM].to_sym
134
+ when :bs
135
+ Maze::Client::Appium::BrowserStackDevices.list_devices('ios')
136
+ Maze::Client::Appium::BrowserStackDevices.list_devices('android')
137
+ when :bb
138
+ unless options[Maze::Option::ACCESS_KEY]
139
+ puts 'Listing BitBar devices or device groups available requires a valid access key'
140
+ exit 1
141
+ end
142
+ access_key = options[Maze::Option::ACCESS_KEY]
143
+ if options[Maze::Option::DEVICE] && !options[Maze::Option::DEVICE].empty?
144
+ options[Maze::Option::DEVICE].each do |device_group|
145
+ Maze::Client::Appium::BitBarDevices.list_devices_for_group(device_group, access_key)
146
+ end
147
+ else
148
+ Maze::Client::Appium::BitBarDevices.list_device_groups(access_key)
149
+ end
150
+ else
151
+ Maze::Client::Appium::BrowserStackDevices.list_devices('ios')
152
+ Maze::Client::Appium::BrowserStackDevices.list_devices('android')
153
+ end
154
+ exit 0
155
+ end
156
+
157
+ # Validate CL options
158
+ errors = Maze::Option::Validator.new.validate options
159
+ unless errors.empty?
160
+ puts errors
161
+ exit 1
162
+ end
163
+
164
+ Maze::Option::Processor.populate Maze.config, options
165
+
166
+ # Adjust CL options before calling down to Cucumber
167
+ remove_maze_runner_args
168
+ add_cucumber_args
169
+
170
+ Cucumber::Cli::Main.new(@args).execute!
171
+ end
172
+ end
173
+
174
+ MazeRunnerEntry.new.start(ARGV)
data/bin/upload-app ADDED
@@ -0,0 +1,56 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require_relative '../lib/maze'
5
+ require_relative '../lib/maze/client/bs_client_utils'
6
+ require_relative '../lib/maze/logger'
7
+ require_relative '../lib/maze/helper'
8
+ require 'optimist'
9
+ require 'uri'
10
+ require 'net/http'
11
+
12
+ class UploadAppEntry
13
+ def start(args)
14
+ p = Optimist::Parser.new do
15
+ text 'Upload app files to BrowserStack'
16
+ text ''
17
+ text 'Requires BROWSER_STACK_USERNAME and BROWSER_STACK_ACCESS_KEY'
18
+ text ''
19
+ text 'Usage [OPTIONS]'
20
+ text ''
21
+ opt :help,
22
+ 'Print this help.'
23
+ opt :app,
24
+ 'The app to upload.',
25
+ :type => :string
26
+ opt :app_id_file,
27
+ 'The file to write the uploaded app ID back to',
28
+ :type => :string
29
+ end
30
+
31
+ opts = Optimist::with_standard_exception_handling p do
32
+ raise Optimist::HelpNeeded if ARGV.empty? # show help screen
33
+ p.parse ARGV
34
+ end
35
+
36
+ # Get browserstack username and access key from the environment
37
+ username = ENV['BROWSER_STACK_USERNAME']
38
+ access_key = ENV['BROWSER_STACK_ACCESS_KEY']
39
+
40
+ # Check if BROWSER_STACK_USERNAME or BROWSER_STACK_ACCESS_KEY has been set
41
+ if username.nil? || access_key.nil?
42
+ $logger.warn "BROWSER_STACK_USERNAME or BROWSER_STACK_ACCESS_KEY has not been set"
43
+ Optimist::with_standard_exception_handling p do
44
+ raise Optimist::HelpNeeded
45
+ end
46
+ end
47
+
48
+ Maze::Client::BrowserStackClientUtils.upload_app username,
49
+ access_key,
50
+ opts[:app],
51
+ opts[:app_id_file]
52
+
53
+ end
54
+ end
55
+
56
+ UploadAppEntry.new.start(ARGV)
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # Wait for device to finish booting
4
+ `adb wait-for-device`
5
+
6
+ while `adb shell getprop sys.boot_completed`.strip != "1"
7
+ puts "Awaiting boot completion..."
8
+ sleep 1
9
+ end
10
+
11
+ puts "Device Ready!"
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+
3
+ if [ -z "$APP_BUNDLE" ]; then
4
+ echo APP_BUNDLE environment variable is not set
5
+ exit 1
6
+ fi
7
+
8
+ adb shell pm clear $APP_BUNDLE
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+
3
+ if [ -z "$APP_BUNDLE" ]; then
4
+ echo APP_BUNDLE environment variable is not set
5
+ exit 1
6
+ fi
7
+
8
+ adb shell am force-stop $APP_BUNDLE
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env bash
2
+
3
+ if [ -z "$APP_BUNDLE" ]; then
4
+ echo APP_BUNDLE environment variable is not set
5
+ exit 1
6
+ fi
7
+ if [ -z "$APK_PATH" ]; then
8
+ echo APK_PATH environment variable is not set
9
+ exit 1
10
+ fi
11
+
12
+ echo "Uninstalling '$APP_BUNDLE'"
13
+ adb uninstall "$APP_BUNDLE"
14
+ echo "Installing '$APK_PATH'"
15
+ adb install "$APK_PATH"
@@ -0,0 +1,38 @@
1
+ #!/usr/bin/env bash
2
+
3
+ if [ -z "$APP_BUNDLE" ]; then
4
+ echo APP_BUNDLE environment variable is not set
5
+ exit 1
6
+ fi
7
+
8
+ if [ -z "$APP_ACTIVITY" ]; then
9
+ echo APP_ACTIVITY environment variable is not set
10
+ exit 1
11
+ fi
12
+
13
+ if [ -z "$EVENT_TYPE" ]; then
14
+ echo EVENT_TYPE environment variable is not set
15
+ exit 1
16
+ fi
17
+
18
+ if [ -z "$EVENT_METADATA" ]; then
19
+ EVENT_METADATA="none"
20
+ fi
21
+
22
+ if [ -z "$MOCK_API_PORT" ]; then
23
+ echo MOCK_API_PORT environment variable is not set
24
+ exit 1
25
+ fi
26
+
27
+ if [ -z "$BUGSNAG_API_KEY" ]; then
28
+ echo BUGSNAG_API_KEY environment variable is not set
29
+ exit 1
30
+ fi
31
+ echo "Launching MainActivity with '$EVENT_TYPE'"
32
+ adb shell am start -n "$APP_BUNDLE/$APP_ACTIVITY" \
33
+ --es EVENT_TYPE "$EVENT_TYPE" \
34
+ --es EVENT_METADATA "$EVENT_METADATA" \
35
+ --es BUGSNAG_PORT "$MOCK_API_PORT" \
36
+ --es BUGSNAG_API_KEY "$BUGSNAG_API_KEY"
37
+
38
+ echo "Ran Android Test case"
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env bash
2
+
3
+ if [ -z "$ANDROID_EMULATOR" ]; then
4
+ echo EMULATOR environment variable is not set
5
+ exit 1
6
+ fi
7
+
8
+ if [ -z "$ANDROID_HOME" ]; then
9
+ echo ANDROID_HOME environment variable is not set
10
+ exit 1
11
+ fi
12
+
13
+ echo "Launching $ANDROID_EMULATOR emulator"
14
+ $ANDROID_HOME/emulator/emulator @$ANDROID_EMULATOR -no-boot-anim -noaudio -no-snapshot
15
+
@@ -0,0 +1,51 @@
1
+ # @!group Android steps
2
+
3
+ # Starts an Android emulator available within the local environment
4
+ #
5
+ # @step_input emulator [String] The name of the emulator to start
6
+ When("I start Android emulator {string}") do |emulator|
7
+ steps %Q{
8
+ When I set environment variable "ANDROID_EMULATOR" to "#{emulator}"
9
+ And I run the script "launch-android-emulator.sh"
10
+ And I run the script "await-android-emulator.sh" synchronously
11
+ }
12
+ end
13
+
14
+ # Synchronously clears the data for the test application
15
+ # Requires an ADB connection
16
+ When("I clear the Android app data") do
17
+ step('I run the script "clear-android-app-data.sh" synchronously')
18
+ end
19
+
20
+ # Force stops the test application
21
+ # Requires an ADB connection
22
+ When("I force stop the Android app") do
23
+ step('I run the script "force-stop-android-app.sh" synchronously')
24
+ end
25
+
26
+ # Installs a given bundle from an APK onto a device
27
+ # Requires an ADB connection
28
+ #
29
+ # @step_input bundle [String] The bundle to be installed
30
+ # @step_input filepath [String] The path to the application's .apk
31
+ When("I install the {string} Android app from {string}") do |bundle, filepath|
32
+ steps %Q{
33
+ When I set environment variable "APP_BUNDLE" to "#{bundle}"
34
+ And I set environment variable "APK_PATH" to "#{filepath}"
35
+ And I run the script "install-android-app.sh" synchronously
36
+ }
37
+ end
38
+
39
+ # Starts a specific activity for a given app
40
+ # Requires an ADB connection
41
+ #
42
+ # @step_input app [String] The application name
43
+ # @step_input activity [String] The activity to start
44
+ When("I start the {string} Android app using the {string} activity") do |app, activity|
45
+ steps %Q{
46
+ When I set environment variable "APP_BUNDLE" to "#{app}"
47
+ When I set environment variable "APP_ACTIVITY" to "#{activity}"
48
+ And I run the script "launch-android-app.sh" synchronously
49
+ And I wait for 4 seconds
50
+ }
51
+ end