# frozen_string_literal: true

# Copyright 2021 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# Auto-generated by gapic-generator-ruby. DO NOT EDIT!


module Google
  module Devtools
    module Testing
      module V1
        # TestMatrix captures all details about a test. It contains the environment
        # configuration, test specification, test executions and overall state and
        # outcome.
        # @!attribute [rw] test_matrix_id
        #   @return [::String]
        #     Output only. Unique id set by the service.
        # @!attribute [rw] project_id
        #   @return [::String]
        #     The cloud project that owns the test matrix.
        # @!attribute [rw] client_info
        #   @return [::Google::Devtools::Testing::V1::ClientInfo]
        #     Information about the client which invoked the test.
        # @!attribute [rw] test_specification
        #   @return [::Google::Devtools::Testing::V1::TestSpecification]
        #     Required. How to run the test.
        # @!attribute [rw] environment_matrix
        #   @return [::Google::Devtools::Testing::V1::EnvironmentMatrix]
        #     Required. The devices the tests are being executed on.
        # @!attribute [rw] test_executions
        #   @return [::Array<::Google::Devtools::Testing::V1::TestExecution>]
        #     Output only. The list of test executions that the service creates for
        #     this matrix.
        # @!attribute [rw] result_storage
        #   @return [::Google::Devtools::Testing::V1::ResultStorage]
        #     Required. Where the results for the matrix are written.
        # @!attribute [rw] state
        #   @return [::Google::Devtools::Testing::V1::TestState]
        #     Output only. Indicates the current progress of the test matrix.
        # @!attribute [rw] timestamp
        #   @return [::Google::Protobuf::Timestamp]
        #     Output only. The time this test matrix was initially created.
        # @!attribute [rw] invalid_matrix_details
        #   @return [::Google::Devtools::Testing::V1::InvalidMatrixDetails]
        #     Output only. Describes why the matrix is considered invalid.
        #     Only useful for matrices in the INVALID state.
        # @!attribute [rw] flaky_test_attempts
        #   @return [::Integer]
        #     The number of times a TestExecution should be re-attempted if one or more
        #     of its test cases fail for any reason.
        #     The maximum number of reruns allowed is 10.
        #
        #     Default is 0, which implies no reruns.
        # @!attribute [rw] outcome_summary
        #   @return [::Google::Devtools::Testing::V1::OutcomeSummary]
        #     Output Only. The overall outcome of the test.
        #     Only set when the test matrix state is FINISHED.
        # @!attribute [rw] fail_fast
        #   @return [::Boolean]
        #     If true, only a single attempt at most will be made to run each
        #     execution/shard in the matrix. Flaky test attempts are not affected.
        #
        #     Normally, 2 or more attempts are made if a potential infrastructure issue
        #     is detected.
        #
        #     This feature is for latency sensitive workloads. The incidence of
        #     execution failures may be significantly greater for fail-fast matrices
        #     and support is more limited because of that expectation.
        class TestMatrix
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # A single test executed in a single environment.
        # @!attribute [rw] id
        #   @return [::String]
        #     Output only. Unique id set by the service.
        # @!attribute [rw] matrix_id
        #   @return [::String]
        #     Output only. Id of the containing TestMatrix.
        # @!attribute [rw] project_id
        #   @return [::String]
        #     Output only. The cloud project that owns the test execution.
        # @!attribute [rw] test_specification
        #   @return [::Google::Devtools::Testing::V1::TestSpecification]
        #     Output only. How to run the test.
        # @!attribute [rw] shard
        #   @return [::Google::Devtools::Testing::V1::Shard]
        #     Output only. Details about the shard.
        # @!attribute [rw] environment
        #   @return [::Google::Devtools::Testing::V1::Environment]
        #     Output only. How the host machine(s) are configured.
        # @!attribute [rw] state
        #   @return [::Google::Devtools::Testing::V1::TestState]
        #     Output only. Indicates the current progress of the test execution
        #     (e.g., FINISHED).
        # @!attribute [rw] tool_results_step
        #   @return [::Google::Devtools::Testing::V1::ToolResultsStep]
        #     Output only. Where the results for this execution are written.
        # @!attribute [rw] timestamp
        #   @return [::Google::Protobuf::Timestamp]
        #     Output only. The time this test execution was initially created.
        # @!attribute [rw] test_details
        #   @return [::Google::Devtools::Testing::V1::TestDetails]
        #     Output only. Additional details about the running test.
        class TestExecution
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # A description of how to run the test.
        # @!attribute [rw] test_timeout
        #   @return [::Google::Protobuf::Duration]
        #     Max time a test execution is allowed to run before it is
        #     automatically cancelled.
        #     The default value is 5 min.
        # @!attribute [rw] test_setup
        #   @return [::Google::Devtools::Testing::V1::TestSetup]
        #     Test setup requirements for Android e.g. files to install, bootstrap
        #     scripts.
        # @!attribute [rw] ios_test_setup
        #   @return [::Google::Devtools::Testing::V1::IosTestSetup]
        #     Test setup requirements for iOS.
        # @!attribute [rw] android_instrumentation_test
        #   @return [::Google::Devtools::Testing::V1::AndroidInstrumentationTest]
        #     An Android instrumentation test.
        # @!attribute [rw] android_robo_test
        #   @return [::Google::Devtools::Testing::V1::AndroidRoboTest]
        #     An Android robo test.
        # @!attribute [rw] android_test_loop
        #   @return [::Google::Devtools::Testing::V1::AndroidTestLoop]
        #     An Android Application with a Test Loop.
        # @!attribute [rw] ios_xc_test
        #   @return [::Google::Devtools::Testing::V1::IosXcTest]
        #     An iOS XCTest, via an .xctestrun file.
        # @!attribute [rw] ios_test_loop
        #   @return [::Google::Devtools::Testing::V1::IosTestLoop]
        #     An iOS application with a test loop.
        # @!attribute [rw] disable_video_recording
        #   @return [::Boolean]
        #     Disables video recording. May reduce test latency.
        # @!attribute [rw] disable_performance_metrics
        #   @return [::Boolean]
        #     Disables performance metrics recording. May reduce test latency.
        class TestSpecification
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # @!attribute [rw] duration_seconds
        #   @return [::Integer]
        #     Systrace duration in seconds.
        #     Should be between 1 and 30 seconds. 0 disables systrace.
        class SystraceSetup
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # A description of how to set up the Android device prior to running the test.
        # @!attribute [rw] files_to_push
        #   @return [::Array<::Google::Devtools::Testing::V1::DeviceFile>]
        #     List of files to push to the device before starting the test.
        # @!attribute [rw] directories_to_pull
        #   @return [::Array<::String>]
        #     List of directories on the device to upload to GCS at the end of the test;
        #     they must be absolute paths under /sdcard, /storage or /data/local/tmp.
        #     Path names are restricted to characters a-z A-Z 0-9 _ - . + and /
        #
        #     Note: The paths /sdcard and /data will be made available and treated as
        #     implicit path substitutions. E.g. if /sdcard on a particular device does
        #     not map to external storage, the system will replace it with the external
        #     storage path prefix for that device.
        # @!attribute [rw] additional_apks
        #   @return [::Array<::Google::Devtools::Testing::V1::Apk>]
        #     APKs to install in addition to those being directly tested.
        #     Currently capped at 100.
        # @!attribute [rw] account
        #   @return [::Google::Devtools::Testing::V1::Account]
        #     The device will be logged in on this account for the duration of the test.
        # @!attribute [rw] network_profile
        #   @return [::String]
        #     The network traffic profile used for running the test.
        #     Available network profiles can be queried by using the
        #     NETWORK_CONFIGURATION environment type when calling
        #     TestEnvironmentDiscoveryService.GetTestEnvironmentCatalog.
        # @!attribute [rw] environment_variables
        #   @return [::Array<::Google::Devtools::Testing::V1::EnvironmentVariable>]
        #     Environment variables to set for the test (only applicable for
        #     instrumentation tests).
        # @!attribute [rw] systrace
        #   @return [::Google::Devtools::Testing::V1::SystraceSetup]
        #     Systrace configuration for the run.
        #     If set a systrace will be taken, starting on test start and lasting for the
        #     configured duration. The systrace file thus obtained is put in the results
        #     bucket together with the other artifacts from the run.
        # @!attribute [rw] dont_autogrant_permissions
        #   @return [::Boolean]
        #     Whether to prevent all runtime permissions to be granted at app install
        class TestSetup
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # A description of how to set up an iOS device prior to running the test.
        # @!attribute [rw] network_profile
        #   @return [::String]
        #     The network traffic profile used for running the test.
        #     Available network profiles can be queried by using the
        #     NETWORK_CONFIGURATION environment type when calling
        #     TestEnvironmentDiscoveryService.GetTestEnvironmentCatalog.
        # @!attribute [rw] additional_ipas
        #   @return [::Array<::Google::Devtools::Testing::V1::FileReference>]
        #     iOS apps to install in addition to those being directly tested.
        # @!attribute [rw] push_files
        #   @return [::Array<::Google::Devtools::Testing::V1::IosDeviceFile>]
        #     List of files to push to the device before starting the test.
        # @!attribute [rw] pull_directories
        #   @return [::Array<::Google::Devtools::Testing::V1::IosDeviceFile>]
        #     List of directories on the device to upload to Cloud Storage at the end of
        #     the test.
        #
        #     Directories should either be in a shared directory
        #     (e.g. /private/var/mobile/Media) or within an accessible directory inside
        #     the app's filesystem (e.g. /Documents) by specifying the bundle id.
        class IosTestSetup
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # A key-value pair passed as an environment variable to the test.
        # @!attribute [rw] key
        #   @return [::String]
        #     Key for the environment variable.
        # @!attribute [rw] value
        #   @return [::String]
        #     Value for the environment variable.
        class EnvironmentVariable
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Identifies an account and how to log into it.
        # @!attribute [rw] google_auto
        #   @return [::Google::Devtools::Testing::V1::GoogleAuto]
        #     An automatic google login account.
        class Account
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Enables automatic Google account login.
        # If set, the service automatically generates a Google test account and adds
        # it to the device, before executing the test. Note that test accounts might be
        # reused.
        # Many applications show their full set of functionalities when an account is
        # present on the device. Logging into the device with these generated accounts
        # allows testing more functionalities.
        class GoogleAuto
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # An Android package file to install.
        # @!attribute [rw] location
        #   @return [::Google::Devtools::Testing::V1::FileReference]
        #     The path to an APK to be installed on the device before the test begins.
        # @!attribute [rw] package_name
        #   @return [::String]
        #     The java package for the APK to be installed.
        #     Value is determined by examining the application's manifest.
        class Apk
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # An Android App Bundle file format, containing a BundleConfig.pb file,
        # a base module directory, zero or more dynamic feature module directories.
        # <p>See https://developer.android.com/guide/app-bundle/build for guidance on
        # building App Bundles.
        # @!attribute [rw] bundle_location
        #   @return [::Google::Devtools::Testing::V1::FileReference]
        #     .aab file representing the app bundle under test.
        class AppBundle
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # A single device file description.
        # @!attribute [rw] obb_file
        #   @return [::Google::Devtools::Testing::V1::ObbFile]
        #     A reference to an opaque binary blob file.
        # @!attribute [rw] regular_file
        #   @return [::Google::Devtools::Testing::V1::RegularFile]
        #     A reference to a regular file.
        class DeviceFile
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # An opaque binary blob file to install on the device before the test starts.
        # @!attribute [rw] obb_file_name
        #   @return [::String]
        #     Required. OBB file name which must conform to the format as specified by
        #     Android
        #     e.g. [main|patch].0300110.com.example.android.obb
        #     which will be installed into
        #       \<shared-storage\>/Android/obb/\<package-name\>/
        #     on the device.
        # @!attribute [rw] obb
        #   @return [::Google::Devtools::Testing::V1::FileReference]
        #     Required. Opaque Binary Blob (OBB) file(s) to install on the device.
        class ObbFile
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # A file or directory to install on the device before the test starts.
        # @!attribute [rw] content
        #   @return [::Google::Devtools::Testing::V1::FileReference]
        #     Required. The source file.
        # @!attribute [rw] device_path
        #   @return [::String]
        #     Required. Where to put the content on the device. Must be an absolute,
        #     allowlisted path. If the file exists, it will be replaced.
        #     The following device-side directories and any of their subdirectories are
        #     allowlisted:
        #     <p>$\\{EXTERNAL_STORAGE}, /sdcard, or /storage</p>
        #     <p>$\\{ANDROID_DATA}/local/tmp, or /data/local/tmp</p>
        #     <p>Specifying a path outside of these directory trees is invalid.
        #
        #     <p> The paths /sdcard and /data will be made available and treated as
        #     implicit path substitutions. E.g. if /sdcard on a particular device does
        #     not map to external storage, the system will replace it with the external
        #     storage path prefix for that device and copy the file there.
        #
        #     <p> It is strongly advised to use the <a href=
        #     "http://developer.android.com/reference/android/os/Environment.html">
        #     Environment API</a> in app and test code to access files on the device in a
        #     portable way.
        class RegularFile
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # A file or directory to install on the device before the test starts.
        # @!attribute [rw] content
        #   @return [::Google::Devtools::Testing::V1::FileReference]
        #     The source file
        # @!attribute [rw] bundle_id
        #   @return [::String]
        #     The bundle id of the app where this file lives.
        #
        #     iOS apps sandbox their own filesystem, so app files must specify which app
        #     installed on the device.
        # @!attribute [rw] device_path
        #   @return [::String]
        #     Location of the file on the device, inside the app's sandboxed filesystem
        class IosDeviceFile
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # A test of an Android Application with a Test Loop.
        # The intent \<intent-name\> will be implicitly added, since Games is the only
        # user of this api, for the time being.
        # @!attribute [rw] app_apk
        #   @return [::Google::Devtools::Testing::V1::FileReference]
        #     The APK for the application under test.
        # @!attribute [rw] app_bundle
        #   @return [::Google::Devtools::Testing::V1::AppBundle]
        #     A multi-apk app bundle for the application under test.
        # @!attribute [rw] app_package_id
        #   @return [::String]
        #     The java package for the application under test.
        #     The default is determined by examining the application's manifest.
        # @!attribute [rw] scenarios
        #   @return [::Array<::Integer>]
        #     The list of scenarios that should be run during the test.
        #     The default is all test loops, derived from the application's
        #     manifest.
        # @!attribute [rw] scenario_labels
        #   @return [::Array<::String>]
        #     The list of scenario labels that should be run during the test.
        #     The scenario labels should map to labels defined in the application's
        #     manifest. For example, player_experience and
        #     com.google.test.loops.player_experience add all of the loops labeled in the
        #     manifest with the com.google.test.loops.player_experience name to the
        #     execution.
        #     Scenarios can also be specified in the scenarios field.
        class AndroidTestLoop
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # A test of an iOS application that uses the XCTest framework.
        # Xcode supports the option to "build for testing", which generates an
        # .xctestrun file that contains a test specification (arguments, test methods,
        # etc). This test type accepts a zip file containing the .xctestrun file and
        # the corresponding contents of the Build/Products directory that contains all
        # the binaries needed to run the tests.
        # @!attribute [rw] tests_zip
        #   @return [::Google::Devtools::Testing::V1::FileReference]
        #     Required. The .zip containing the .xctestrun file and the contents of the
        #     DerivedData/Build/Products directory.
        #     The .xctestrun file in this zip is ignored if the xctestrun field is
        #     specified.
        # @!attribute [rw] xctestrun
        #   @return [::Google::Devtools::Testing::V1::FileReference]
        #     An .xctestrun file that will override the .xctestrun file in the
        #     tests zip. Because the .xctestrun file contains environment variables along
        #     with test methods to run and/or ignore, this can be useful for sharding
        #     tests. Default is taken from the tests zip.
        # @!attribute [rw] xcode_version
        #   @return [::String]
        #     The Xcode version that should be used for the test.
        #     Use the TestEnvironmentDiscoveryService to get supported options.
        #     Defaults to the latest Xcode version Firebase Test Lab supports.
        # @!attribute [rw] app_bundle_id
        #   @return [::String]
        #     Output only. The bundle id for the application under test.
        # @!attribute [rw] test_special_entitlements
        #   @return [::Boolean]
        #     The option to test special app entitlements. Setting this would re-sign the
        #     app having special entitlements with an explicit application-identifier.
        #     Currently supports testing aps-environment entitlement.
        class IosXcTest
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # A test of an iOS application that implements one or more game loop scenarios.
        # This test type accepts an archived application (.ipa file) and a list of
        # integer scenarios that will be executed on the app sequentially.
        # @!attribute [rw] app_ipa
        #   @return [::Google::Devtools::Testing::V1::FileReference]
        #     Required. The .ipa of the application to test.
        # @!attribute [rw] scenarios
        #   @return [::Array<::Integer>]
        #     The list of scenarios that should be run during the test. Defaults to the
        #     single scenario 0 if unspecified.
        # @!attribute [rw] app_bundle_id
        #   @return [::String]
        #     Output only. The bundle id for the application under test.
        class IosTestLoop
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # A test of an Android application that can control an Android component
        # independently of its normal lifecycle.
        # Android instrumentation tests run an application APK and test APK inside the
        # same process on a virtual or physical AndroidDevice.  They also specify
        # a test runner class, such as com.google.GoogleTestRunner, which can vary
        # on the specific instrumentation framework chosen.
        #
        # See <http://developer.android.com/tools/testing/testing_android.html> for
        # more information on types of Android tests.
        # @!attribute [rw] app_apk
        #   @return [::Google::Devtools::Testing::V1::FileReference]
        #     The APK for the application under test.
        # @!attribute [rw] app_bundle
        #   @return [::Google::Devtools::Testing::V1::AppBundle]
        #     A multi-apk app bundle for the application under test.
        # @!attribute [rw] test_apk
        #   @return [::Google::Devtools::Testing::V1::FileReference]
        #     Required. The APK containing the test code to be executed.
        # @!attribute [rw] app_package_id
        #   @return [::String]
        #     The java package for the application under test.
        #     The default value is determined by examining the application's manifest.
        # @!attribute [rw] test_package_id
        #   @return [::String]
        #     The java package for the test to be executed.
        #     The default value is determined by examining the application's manifest.
        # @!attribute [rw] test_runner_class
        #   @return [::String]
        #     The InstrumentationTestRunner class.
        #     The default value is determined by examining the application's manifest.
        # @!attribute [rw] test_targets
        #   @return [::Array<::String>]
        #     Each target must be fully qualified with the package name or class name,
        #     in one of these formats:
        #      - "package package_name"
        #      - "class package_name.class_name"
        #      - "class package_name.class_name#method_name"
        #
        #     If empty, all targets in the module will be run.
        # @!attribute [rw] orchestrator_option
        #   @return [::Google::Devtools::Testing::V1::OrchestratorOption]
        #     The option of whether running each test within its own invocation of
        #     instrumentation with Android Test Orchestrator or not.
        #     ** Orchestrator is only compatible with AndroidJUnitRunner version 1.0 or
        #     higher! **
        #     Orchestrator offers the following benefits:
        #      - No shared state
        #      - Crashes are isolated
        #      - Logs are scoped per test
        #
        #     See
        #     <https://developer.android.com/training/testing/junit-runner.html#using-android-test-orchestrator>
        #     for more information about Android Test Orchestrator.
        #
        #     If not set, the test will be run without the orchestrator.
        # @!attribute [rw] sharding_option
        #   @return [::Google::Devtools::Testing::V1::ShardingOption]
        #     The option to run tests in multiple shards in parallel.
        class AndroidInstrumentationTest
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # A test of an android application that explores the application on a virtual
        # or physical Android Device, finding culprits and crashes as it goes.
        # Next tag: 30
        # @!attribute [rw] app_apk
        #   @return [::Google::Devtools::Testing::V1::FileReference]
        #     The APK for the application under test.
        # @!attribute [rw] app_bundle
        #   @return [::Google::Devtools::Testing::V1::AppBundle]
        #     A multi-apk app bundle for the application under test.
        # @!attribute [rw] app_package_id
        #   @return [::String]
        #     The java package for the application under test.
        #     The default value is determined by examining the application's manifest.
        # @!attribute [rw] app_initial_activity
        #   @return [::String]
        #     The initial activity that should be used to start the app.
        # @!attribute [rw] max_depth
        #   @return [::Integer]
        #     The max depth of the traversal stack Robo can explore. Needs to be at least
        #     2 to make Robo explore the app beyond the first activity.
        #     Default is 50.
        # @!attribute [rw] max_steps
        #   @return [::Integer]
        #     The max number of steps Robo can execute.
        #     Default is no limit.
        # @!attribute [rw] robo_directives
        #   @return [::Array<::Google::Devtools::Testing::V1::RoboDirective>]
        #     A set of directives Robo should apply during the crawl.
        #     This allows users to customize the crawl. For example, the username and
        #     password for a test account can be provided.
        # @!attribute [rw] robo_script
        #   @return [::Google::Devtools::Testing::V1::FileReference]
        #     A JSON file with a sequence of actions Robo should perform as a prologue
        #     for the crawl.
        # @!attribute [rw] starting_intents
        #   @return [::Array<::Google::Devtools::Testing::V1::RoboStartingIntent>]
        #     The intents used to launch the app for the crawl.
        #     If none are provided, then the main launcher activity is launched.
        #     If some are provided, then only those provided are launched (the main
        #     launcher activity must be provided explicitly).
        class AndroidRoboTest
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Directs Robo to interact with a specific UI element if it is encountered
        # during the crawl. Currently, Robo can perform text entry or element click.
        # @!attribute [rw] resource_name
        #   @return [::String]
        #     Required. The android resource name of the target UI element.
        #     For example,
        #        in Java: R.string.foo
        #        in xml: @string/foo
        #     Only the "foo" part is needed.
        #     Reference doc:
        #     https://developer.android.com/guide/topics/resources/accessing-resources.html
        # @!attribute [rw] input_text
        #   @return [::String]
        #     The text that Robo is directed to set. If left empty, the directive will be
        #     treated as a CLICK on the element matching the resource_name.
        # @!attribute [rw] action_type
        #   @return [::Google::Devtools::Testing::V1::RoboActionType]
        #     Required. The type of action that Robo should perform on the specified
        #     element.
        class RoboDirective
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Message for specifying the start activities to crawl.
        # @!attribute [rw] launcher_activity
        #   @return [::Google::Devtools::Testing::V1::LauncherActivityIntent]
        #     An intent that starts the main launcher activity.
        # @!attribute [rw] start_activity
        #   @return [::Google::Devtools::Testing::V1::StartActivityIntent]
        #     An intent that starts an activity with specific details.
        # @!attribute [rw] timeout
        #   @return [::Google::Protobuf::Duration]
        #     Timeout in seconds for each intent.
        class RoboStartingIntent
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Specifies an intent that starts the main launcher activity.
        class LauncherActivityIntent
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # A starting intent specified by an action, uri, and categories.
        # @!attribute [rw] action
        #   @return [::String]
        #     Action name.
        #     Required for START_ACTIVITY.
        # @!attribute [rw] uri
        #   @return [::String]
        #     URI for the action.
        # @!attribute [rw] categories
        #   @return [::Array<::String>]
        #     Intent categories to set on the intent.
        class StartActivityIntent
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # The matrix of environments in which the test is to be executed.
        # @!attribute [rw] android_matrix
        #   @return [::Google::Devtools::Testing::V1::AndroidMatrix]
        #     A matrix of Android devices.
        # @!attribute [rw] android_device_list
        #   @return [::Google::Devtools::Testing::V1::AndroidDeviceList]
        #     A list of Android devices; the test will be run only on the specified
        #     devices.
        # @!attribute [rw] ios_device_list
        #   @return [::Google::Devtools::Testing::V1::IosDeviceList]
        #     A list of iOS devices.
        class EnvironmentMatrix
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # A list of Android device configurations in which the test is to be executed.
        # @!attribute [rw] android_devices
        #   @return [::Array<::Google::Devtools::Testing::V1::AndroidDevice>]
        #     Required. A list of Android devices.
        class AndroidDeviceList
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # A list of iOS device configurations in which the test is to be executed.
        # @!attribute [rw] ios_devices
        #   @return [::Array<::Google::Devtools::Testing::V1::IosDevice>]
        #     Required. A list of iOS devices.
        class IosDeviceList
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # A set of Android device configuration permutations is defined by the
        # the cross-product of the given axes. Internally, the given AndroidMatrix
        # will be expanded into a set of AndroidDevices.
        #
        # Only supported permutations will be instantiated.  Invalid permutations
        # (e.g., incompatible models/versions) are ignored.
        # @!attribute [rw] android_model_ids
        #   @return [::Array<::String>]
        #     Required. The ids of the set of Android device to be used.
        #     Use the TestEnvironmentDiscoveryService to get supported options.
        # @!attribute [rw] android_version_ids
        #   @return [::Array<::String>]
        #     Required. The ids of the set of Android OS version to be used.
        #     Use the TestEnvironmentDiscoveryService to get supported options.
        # @!attribute [rw] locales
        #   @return [::Array<::String>]
        #     Required. The set of locales the test device will enable for testing.
        #     Use the TestEnvironmentDiscoveryService to get supported options.
        # @!attribute [rw] orientations
        #   @return [::Array<::String>]
        #     Required. The set of orientations to test with.
        #     Use the TestEnvironmentDiscoveryService to get supported options.
        class AndroidMatrix
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Information about the client which invoked the test.
        # @!attribute [rw] name
        #   @return [::String]
        #     Required. Client name, such as gcloud.
        # @!attribute [rw] client_info_details
        #   @return [::Array<::Google::Devtools::Testing::V1::ClientInfoDetail>]
        #     The list of detailed information about client.
        class ClientInfo
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Key-value pair of detailed information about the client which invoked the
        # test. Examples: \\{'Version', '1.0'}, \\{'Release Track', 'BETA'}.
        # @!attribute [rw] key
        #   @return [::String]
        #     Required. The key of detailed client information.
        # @!attribute [rw] value
        #   @return [::String]
        #     Required. The value of detailed client information.
        class ClientInfoDetail
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Locations where the results of running the test are stored.
        # @!attribute [rw] google_cloud_storage
        #   @return [::Google::Devtools::Testing::V1::GoogleCloudStorage]
        #     Required.
        # @!attribute [rw] tool_results_history
        #   @return [::Google::Devtools::Testing::V1::ToolResultsHistory]
        #     The tool results history that contains the tool results execution that
        #     results are written to.
        #
        #     If not provided, the service will choose an appropriate value.
        # @!attribute [rw] tool_results_execution
        #   @return [::Google::Devtools::Testing::V1::ToolResultsExecution]
        #     Output only. The tool results execution that results are written to.
        # @!attribute [rw] results_url
        #   @return [::String]
        #     Output only. URL to the results in the Firebase Web Console.
        class ResultStorage
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Represents a tool results history resource.
        # @!attribute [rw] project_id
        #   @return [::String]
        #     Required. The cloud project that owns the tool results history.
        # @!attribute [rw] history_id
        #   @return [::String]
        #     Required. A tool results history ID.
        class ToolResultsHistory
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Represents a tool results execution resource.
        #
        # This has the results of a TestMatrix.
        # @!attribute [rw] project_id
        #   @return [::String]
        #     Output only. The cloud project that owns the tool results execution.
        # @!attribute [rw] history_id
        #   @return [::String]
        #     Output only. A tool results history ID.
        # @!attribute [rw] execution_id
        #   @return [::String]
        #     Output only. A tool results execution ID.
        class ToolResultsExecution
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Represents a tool results step resource.
        #
        # This has the results of a TestExecution.
        # @!attribute [rw] project_id
        #   @return [::String]
        #     Output only. The cloud project that owns the tool results step.
        # @!attribute [rw] history_id
        #   @return [::String]
        #     Output only. A tool results history ID.
        # @!attribute [rw] execution_id
        #   @return [::String]
        #     Output only. A tool results execution ID.
        # @!attribute [rw] step_id
        #   @return [::String]
        #     Output only. A tool results step ID.
        class ToolResultsStep
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # A storage location within Google cloud storage (GCS).
        # @!attribute [rw] gcs_path
        #   @return [::String]
        #     Required. The path to a directory in GCS that will
        #     eventually contain the results for this test.
        #     The requesting user must have write access on the bucket in the supplied
        #     path.
        class GoogleCloudStorage
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # A reference to a file, used for user inputs.
        # @!attribute [rw] gcs_path
        #   @return [::String]
        #     A path to a file in Google Cloud Storage.
        #     Example: gs://build-app-1414623860166/app%40debug-unaligned.apk
        #     These paths are expected to be url encoded (percent encoding)
        class FileReference
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # The environment in which the test is run.
        # @!attribute [rw] android_device
        #   @return [::Google::Devtools::Testing::V1::AndroidDevice]
        #     An Android device which must be used with an Android test.
        # @!attribute [rw] ios_device
        #   @return [::Google::Devtools::Testing::V1::IosDevice]
        #     An iOS device which must be used with an iOS test.
        class Environment
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # A single Android device.
        # @!attribute [rw] android_model_id
        #   @return [::String]
        #     Required. The id of the Android device to be used.
        #     Use the TestEnvironmentDiscoveryService to get supported options.
        # @!attribute [rw] android_version_id
        #   @return [::String]
        #     Required. The id of the Android OS version to be used.
        #     Use the TestEnvironmentDiscoveryService to get supported options.
        # @!attribute [rw] locale
        #   @return [::String]
        #     Required. The locale the test device used for testing.
        #     Use the TestEnvironmentDiscoveryService to get supported options.
        # @!attribute [rw] orientation
        #   @return [::String]
        #     Required. How the device is oriented during the test.
        #     Use the TestEnvironmentDiscoveryService to get supported options.
        class AndroidDevice
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # A single iOS device.
        # @!attribute [rw] ios_model_id
        #   @return [::String]
        #     Required. The id of the iOS device to be used.
        #     Use the TestEnvironmentDiscoveryService to get supported options.
        # @!attribute [rw] ios_version_id
        #   @return [::String]
        #     Required. The id of the iOS major software version to be used.
        #     Use the TestEnvironmentDiscoveryService to get supported options.
        # @!attribute [rw] locale
        #   @return [::String]
        #     Required. The locale the test device used for testing.
        #     Use the TestEnvironmentDiscoveryService to get supported options.
        # @!attribute [rw] orientation
        #   @return [::String]
        #     Required. How the device is oriented during the test.
        #     Use the TestEnvironmentDiscoveryService to get supported options.
        class IosDevice
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Additional details about the progress of the running test.
        # @!attribute [rw] progress_messages
        #   @return [::Array<::String>]
        #     Output only. Human-readable, detailed descriptions of the test's progress.
        #     For example: "Provisioning a device", "Starting Test".
        #
        #     During the course of execution new data may be appended
        #     to the end of progress_messages.
        # @!attribute [rw] error_message
        #   @return [::String]
        #     Output only. If the TestState is ERROR, then this string will contain
        #     human-readable details about the error.
        class TestDetails
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Details behind an invalid request.
        # @!attribute [rw] reason
        #   @return [::Google::Devtools::Testing::V1::InvalidRequestDetail::Reason]
        #     The reason behind the error.
        class InvalidRequestDetail
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods

          # Possible invalid request reasons.
          module Reason
            # No reason has been specified - the default.
            REASON_UNSPECIFIED = 0

            # The request is not valid.
            REQUEST_INVALID = 1

            # One or more of the resources specified in the request is too large.
            RESOURCE_TOO_BIG = 2

            # One or more resources specified in the request cannot be found.
            RESOURCE_NOT_FOUND = 3

            # This request is not (currently) supported.
            UNSUPPORTED = 4

            # This request is not currently implemented.
            NOT_IMPLEMENTED = 5
          end
        end

        # Options for enabling sharding.
        # @!attribute [rw] uniform_sharding
        #   @return [::Google::Devtools::Testing::V1::UniformSharding]
        #     Uniformly shards test cases given a total number of shards.
        # @!attribute [rw] manual_sharding
        #   @return [::Google::Devtools::Testing::V1::ManualSharding]
        #     Shards test cases into the specified groups of packages, classes, and/or
        #     methods.
        class ShardingOption
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Uniformly shards test cases given a total number of shards.
        #
        # For Instrumentation test, it will be translated to "-e numShard" "-e
        # shardIndex" AndroidJUnitRunner arguments. With uniform sharding enabled,
        # specifying these sharding arguments via environment_variables is invalid.
        # @!attribute [rw] num_shards
        #   @return [::Integer]
        #     Required. Total number of shards. When any physical devices are selected,
        #     the number must be >= 1 and <= 50. When no physical devices are selected,
        #     the number must be >= 1 and <= 500.
        class UniformSharding
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Shards test cases into the specified groups of packages, classes, and/or
        # methods.
        #
        # With manual sharding enabled, specifying test targets via
        # environment_variables or in InstrumentationTest is invalid.
        # @!attribute [rw] test_targets_for_shard
        #   @return [::Array<::Google::Devtools::Testing::V1::TestTargetsForShard>]
        #     Required. Group of packages, classes, and/or test methods to be run for
        #     each shard. When any physical devices are selected,  the number of
        #     test_targets_for_shard must be >= 1 and <= 50. When no physical devices are
        #     selected, the number must be >= 1 and <= 500.
        class ManualSharding
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Test targets for a shard.
        # @!attribute [rw] test_targets
        #   @return [::Array<::String>]
        #     Group of packages, classes, and/or test methods to be run for each shard.
        #     The targets need to be specified in AndroidJUnitRunner argument format. For
        #     example, "package com.my.packages" "class com.my.package.MyClass".
        #
        #     The number of shard_test_targets must be greater than 0.
        class TestTargetsForShard
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Output only. Details about the shard.
        # @!attribute [rw] shard_index
        #   @return [::Integer]
        #     Output only. The index of the shard among all the shards.
        # @!attribute [rw] num_shards
        #   @return [::Integer]
        #     Output only. The total number of shards.
        # @!attribute [rw] test_targets_for_shard
        #   @return [::Google::Devtools::Testing::V1::TestTargetsForShard]
        #     Output only. Test targets for each shard.
        class Shard
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Request to submit a matrix of tests for execution.
        # @!attribute [rw] project_id
        #   @return [::String]
        #     The GCE project under which this job will run.
        # @!attribute [rw] test_matrix
        #   @return [::Google::Devtools::Testing::V1::TestMatrix]
        #     The matrix of tests that the user wants to run.
        # @!attribute [rw] request_id
        #   @return [::String]
        #     A string id used to detect duplicated requests.
        #     Ids are automatically scoped to a project, so
        #     users should ensure the ID is unique per-project.
        #     A UUID is recommended.
        #
        #     Optional, but strongly recommended.
        class CreateTestMatrixRequest
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Request to get the Test Matrix with the given id.
        # @!attribute [rw] project_id
        #   @return [::String]
        #     Cloud project that owns the test matrix.
        # @!attribute [rw] test_matrix_id
        #   @return [::String]
        #     Unique test matrix id which was assigned by the service.
        class GetTestMatrixRequest
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Request to stop running all of the tests in the specified matrix.
        # @!attribute [rw] project_id
        #   @return [::String]
        #     Cloud project that owns the test.
        # @!attribute [rw] test_matrix_id
        #   @return [::String]
        #     Test matrix that will be canceled.
        class CancelTestMatrixRequest
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Response containing the current state of the specified test matrix.
        # @!attribute [rw] test_state
        #   @return [::Google::Devtools::Testing::V1::TestState]
        #     The current rolled-up state of the test matrix.
        #     If this state is already final, then the cancelation request will
        #     have no effect.
        class CancelTestMatrixResponse
          include ::Google::Protobuf::MessageExts
          extend ::Google::Protobuf::MessageExts::ClassMethods
        end

        # Specifies how to execute the test.
        module OrchestratorOption
          # Default value: the server will choose the mode. Currently implies that
          # the test will run without the orchestrator. In the future,
          # all instrumentation tests will be run with the orchestrator.
          # Using the orchestrator is highly encouraged because of all the benefits it
          # offers.
          ORCHESTRATOR_OPTION_UNSPECIFIED = 0

          # Run test using orchestrator.
          # ** Only compatible with AndroidJUnitRunner version 1.0 or higher! **
          # Recommended.
          USE_ORCHESTRATOR = 1

          # Run test without using orchestrator.
          DO_NOT_USE_ORCHESTRATOR = 2
        end

        # Actions which Robo can perform on UI elements.
        module RoboActionType
          # DO NOT USE. For proto versioning only.
          ACTION_TYPE_UNSPECIFIED = 0

          # Direct Robo to click on the specified element. No-op if specified element
          # is not clickable.
          SINGLE_CLICK = 1

          # Direct Robo to enter text on the specified element. No-op if specified
          # element is not enabled or does not allow text entry.
          ENTER_TEXT = 2

          # Direct Robo to ignore interactions with a specific element.
          IGNORE = 3
        end

        # The detailed reason that a Matrix was deemed INVALID.
        module InvalidMatrixDetails
          # Do not use. For proto versioning only.
          INVALID_MATRIX_DETAILS_UNSPECIFIED = 0

          # The matrix is INVALID, but there are no further details available.
          DETAILS_UNAVAILABLE = 1

          # The input app APK could not be parsed.
          MALFORMED_APK = 2

          # The input test APK could not be parsed.
          MALFORMED_TEST_APK = 3

          # The AndroidManifest.xml could not be found.
          NO_MANIFEST = 4

          # The APK manifest does not declare a package name.
          NO_PACKAGE_NAME = 5

          # The APK application ID (aka package name) is invalid.
          # See also
          # https://developer.android.com/studio/build/application-id
          INVALID_PACKAGE_NAME = 31

          # The test package and app package are the same.
          TEST_SAME_AS_APP = 6

          # The test apk does not declare an instrumentation.
          NO_INSTRUMENTATION = 7

          # The input app apk does not have a signature.
          NO_SIGNATURE = 20

          # The test runner class specified by user or in the test APK's manifest file
          # is not compatible with Android Test Orchestrator.
          # Orchestrator is only compatible with AndroidJUnitRunner version 1.0 or
          # higher.
          # Orchestrator can be disabled by using DO_NOT_USE_ORCHESTRATOR
          # OrchestratorOption.
          INSTRUMENTATION_ORCHESTRATOR_INCOMPATIBLE = 18

          # The test APK does not contain the test runner class specified by user or in
          # the manifest file.
          # This can be caused by either of the following reasons:
          # - the user provided a runner class name that's incorrect, or
          # - the test runner isn't built into the test APK (might be in the app APK
          # instead).
          NO_TEST_RUNNER_CLASS = 19

          # A main launcher activity could not be found.
          NO_LAUNCHER_ACTIVITY = 8

          # The app declares one or more permissions that are not allowed.
          FORBIDDEN_PERMISSIONS = 9

          # There is a conflict in the provided robo_directives.
          INVALID_ROBO_DIRECTIVES = 10

          # There is at least one invalid resource name in the provided
          # robo directives
          INVALID_RESOURCE_NAME = 33

          # Invalid definition of action in the robo directives
          # (e.g. a click or ignore action includes an input text field)
          INVALID_DIRECTIVE_ACTION = 34

          # There is no test loop intent filter, or the one that is given is
          # not formatted correctly.
          TEST_LOOP_INTENT_FILTER_NOT_FOUND = 12

          # The request contains a scenario label that was not declared in the
          # manifest.
          SCENARIO_LABEL_NOT_DECLARED = 13

          # There was an error when parsing a label's value.
          SCENARIO_LABEL_MALFORMED = 14

          # The request contains a scenario number that was not declared in the
          # manifest.
          SCENARIO_NOT_DECLARED = 15

          # Device administrator applications are not allowed.
          DEVICE_ADMIN_RECEIVER = 17

          # The zipped XCTest was malformed. The zip did not contain a single
          # .xctestrun file and the contents of the DerivedData/Build/Products
          # directory.
          MALFORMED_XC_TEST_ZIP = 11

          # The zipped XCTest was built for the iOS simulator rather than for a
          # physical device.
          BUILT_FOR_IOS_SIMULATOR = 24

          # The .xctestrun file did not specify any test targets.
          NO_TESTS_IN_XC_TEST_ZIP = 25

          # One or more of the test targets defined in the .xctestrun file specifies
          # "UseDestinationArtifacts", which is disallowed.
          USE_DESTINATION_ARTIFACTS = 26

          # XC tests which run on physical devices must have
          # "IsAppHostedTestBundle" == "true" in the xctestrun file.
          TEST_NOT_APP_HOSTED = 28

          # An Info.plist file in the XCTest zip could not be parsed.
          PLIST_CANNOT_BE_PARSED = 30

          # The APK is marked as "testOnly".
          # Deprecated and not currently used.
          TEST_ONLY_APK = 21

          # The input IPA could not be parsed.
          MALFORMED_IPA = 22

          # The application doesn't register the game loop URL scheme.
          MISSING_URL_SCHEME = 35

          # The iOS application bundle (.app) couldn't be processed.
          MALFORMED_APP_BUNDLE = 36

          # APK contains no code.
          # See also
          # https://developer.android.com/guide/topics/manifest/application-element.html#code
          NO_CODE_APK = 23

          # Either the provided input APK path was malformed,
          # the APK file does not exist, or the user does not have permission to
          # access the APK file.
          INVALID_INPUT_APK = 27

          # APK is built for a preview SDK which is unsupported
          INVALID_APK_PREVIEW_SDK = 29
        end

        # The state (i.e., progress) of a test execution or matrix.
        module TestState
          # Do not use.  For proto versioning only.
          TEST_STATE_UNSPECIFIED = 0

          # The execution or matrix is being validated.
          VALIDATING = 8

          # The execution or matrix is waiting for resources to become available.
          PENDING = 1

          # The execution is currently being processed.
          #
          # Can only be set on an execution.
          RUNNING = 2

          # The execution or matrix has terminated normally.
          #
          # On a matrix this means that the matrix level processing completed normally,
          # but individual executions may be in an ERROR state.
          FINISHED = 3

          # The execution or matrix has stopped because it encountered an
          # infrastructure failure.
          ERROR = 4

          # The execution was not run because it corresponds to a unsupported
          # environment.
          #
          # Can only be set on an execution.
          UNSUPPORTED_ENVIRONMENT = 5

          # The execution was not run because the provided inputs are incompatible with
          # the requested environment.
          #
          # Example: requested AndroidVersion is lower than APK's minSdkVersion
          #
          # Can only be set on an execution.
          INCOMPATIBLE_ENVIRONMENT = 9

          # The execution was not run because the provided inputs are incompatible with
          # the requested architecture.
          #
          # Example: requested device does not support running the native code in
          # the supplied APK
          #
          # Can only be set on an execution.
          INCOMPATIBLE_ARCHITECTURE = 10

          # The user cancelled the execution.
          #
          # Can only be set on an execution.
          CANCELLED = 6

          # The execution or matrix was not run because the provided inputs are not
          # valid.
          #
          # Examples: input file is not of the expected type, is malformed/corrupt, or
          # was flagged as malware
          INVALID = 7
        end

        # Outcome summary for a finished test matrix.
        module OutcomeSummary
          # Do not use. For proto versioning only.
          OUTCOME_SUMMARY_UNSPECIFIED = 0

          # The test matrix run was successful, for instance:
          # - All the test cases passed.
          # - Robo did not detect a crash of the application under test.
          SUCCESS = 1

          # A run failed, for instance:
          # - One or more test case failed.
          # - A test timed out.
          # - The application under test crashed.
          FAILURE = 2

          # Something unexpected happened. The run should still be considered
          # unsuccessful but this is likely a transient problem and re-running the
          # test might be successful.
          INCONCLUSIVE = 3

          # All tests were skipped, for instance:
          # - All device configurations were incompatible.
          SKIPPED = 4
        end
      end
    end
  end
end
