3796 lines
		
	
	
		
			157 KiB
		
	
	
	
		
			Ruby
		
	
	
	
		
		
			
		
	
	
			3796 lines
		
	
	
		
			157 KiB
		
	
	
	
		
			Ruby
		
	
	
	
|  | # Copyright 2020 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 | ||
|  | # | ||
|  | #      http://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. | ||
|  | 
 | ||
|  | require 'date' | ||
|  | require 'google/apis/core/base_service' | ||
|  | require 'google/apis/core/json_representation' | ||
|  | require 'google/apis/core/hashable' | ||
|  | require 'google/apis/errors' | ||
|  | 
 | ||
|  | module Google | ||
|  |   module Apis | ||
|  |     module ToolresultsV1beta3 | ||
|  |        | ||
|  |       # Additional details for an ANR crash. | ||
|  |       class Anr | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # A stacktrace. | ||
|  |         # Corresponds to the JSON property `stackTrace` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::StackTrace] | ||
|  |         attr_accessor :stack_trace | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @stack_trace = args[:stack_trace] if args.key?(:stack_trace) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # Android app information. | ||
|  |       class AndroidAppInfo | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # The name of the app. Optional | ||
|  |         # Corresponds to the JSON property `name` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :name | ||
|  |        | ||
|  |         # The package name of the app. Required. | ||
|  |         # Corresponds to the JSON property `packageName` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :package_name | ||
|  |        | ||
|  |         # The internal version code of the app. Optional. | ||
|  |         # Corresponds to the JSON property `versionCode` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :version_code | ||
|  |        | ||
|  |         # The version name of the app. Optional. | ||
|  |         # Corresponds to the JSON property `versionName` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :version_name | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @name = args[:name] if args.key?(:name) | ||
|  |           @package_name = args[:package_name] if args.key?(:package_name) | ||
|  |           @version_code = args[:version_code] if args.key?(:version_code) | ||
|  |           @version_name = args[:version_name] if args.key?(:version_name) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # A test of an Android application that can control an Android component | ||
|  |       # independently of its normal lifecycle. See for more information on types of | ||
|  |       # Android tests. | ||
|  |       class AndroidInstrumentationTest | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # The java package for the test to be executed. Required | ||
|  |         # Corresponds to the JSON property `testPackageId` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :test_package_id | ||
|  |        | ||
|  |         # The InstrumentationTestRunner class. Required | ||
|  |         # Corresponds to the JSON property `testRunnerClass` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :test_runner_class | ||
|  |        | ||
|  |         # 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. | ||
|  |         # Corresponds to the JSON property `testTargets` | ||
|  |         # @return [Array<String>] | ||
|  |         attr_accessor :test_targets | ||
|  |        | ||
|  |         # The flag indicates whether Android Test Orchestrator will be used to run test | ||
|  |         # or not. | ||
|  |         # Corresponds to the JSON property `useOrchestrator` | ||
|  |         # @return [Boolean] | ||
|  |         attr_accessor :use_orchestrator | ||
|  |         alias_method :use_orchestrator?, :use_orchestrator | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @test_package_id = args[:test_package_id] if args.key?(:test_package_id) | ||
|  |           @test_runner_class = args[:test_runner_class] if args.key?(:test_runner_class) | ||
|  |           @test_targets = args[:test_targets] if args.key?(:test_targets) | ||
|  |           @use_orchestrator = args[:use_orchestrator] if args.key?(:use_orchestrator) | ||
|  |         end | ||
|  |       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. | ||
|  |       class AndroidRoboTest | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # The initial activity that should be used to start the app. Optional | ||
|  |         # Corresponds to the JSON property `appInitialActivity` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :app_initial_activity | ||
|  |        | ||
|  |         # The java package for the bootstrap. Optional | ||
|  |         # Corresponds to the JSON property `bootstrapPackageId` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :bootstrap_package_id | ||
|  |        | ||
|  |         # The runner class for the bootstrap. Optional | ||
|  |         # Corresponds to the JSON property `bootstrapRunnerClass` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :bootstrap_runner_class | ||
|  |        | ||
|  |         # The max depth of the traversal stack Robo can explore. Optional | ||
|  |         # Corresponds to the JSON property `maxDepth` | ||
|  |         # @return [Fixnum] | ||
|  |         attr_accessor :max_depth | ||
|  |        | ||
|  |         # The max number of steps/actions Robo can execute. Default is no limit (0). | ||
|  |         # Optional | ||
|  |         # Corresponds to the JSON property `maxSteps` | ||
|  |         # @return [Fixnum] | ||
|  |         attr_accessor :max_steps | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @app_initial_activity = args[:app_initial_activity] if args.key?(:app_initial_activity) | ||
|  |           @bootstrap_package_id = args[:bootstrap_package_id] if args.key?(:bootstrap_package_id) | ||
|  |           @bootstrap_runner_class = args[:bootstrap_runner_class] if args.key?(:bootstrap_runner_class) | ||
|  |           @max_depth = args[:max_depth] if args.key?(:max_depth) | ||
|  |           @max_steps = args[:max_steps] if args.key?(:max_steps) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # An Android mobile test specification. | ||
|  |       class AndroidTest | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # Android app information. | ||
|  |         # Corresponds to the JSON property `androidAppInfo` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::AndroidAppInfo] | ||
|  |         attr_accessor :android_app_info | ||
|  |        | ||
|  |         # A test of an Android application that can control an Android component | ||
|  |         # independently of its normal lifecycle. See for more information on types of | ||
|  |         # Android tests. | ||
|  |         # Corresponds to the JSON property `androidInstrumentationTest` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::AndroidInstrumentationTest] | ||
|  |         attr_accessor :android_instrumentation_test | ||
|  |        | ||
|  |         # A test of an android application that explores the application on a virtual or | ||
|  |         # physical Android device, finding culprits and crashes as it goes. | ||
|  |         # Corresponds to the JSON property `androidRoboTest` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::AndroidRoboTest] | ||
|  |         attr_accessor :android_robo_test | ||
|  |        | ||
|  |         # Test Loops are tests that can be launched by the app itself, determining when | ||
|  |         # to run by listening for an intent. | ||
|  |         # Corresponds to the JSON property `androidTestLoop` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::AndroidTestLoop] | ||
|  |         attr_accessor :android_test_loop | ||
|  |        | ||
|  |         # A Duration represents a signed, fixed-length span of time represented as a | ||
|  |         # count of seconds and fractions of seconds at nanosecond resolution. It is | ||
|  |         # independent of any calendar and concepts like "day" or "month". It is related | ||
|  |         # to Timestamp in that the difference between two Timestamp values is a Duration | ||
|  |         # and it can be added or subtracted from a Timestamp. Range is approximately +- | ||
|  |         # 10,000 years. | ||
|  |         # Corresponds to the JSON property `testTimeout` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::Duration] | ||
|  |         attr_accessor :test_timeout | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @android_app_info = args[:android_app_info] if args.key?(:android_app_info) | ||
|  |           @android_instrumentation_test = args[:android_instrumentation_test] if args.key?(:android_instrumentation_test) | ||
|  |           @android_robo_test = args[:android_robo_test] if args.key?(:android_robo_test) | ||
|  |           @android_test_loop = args[:android_test_loop] if args.key?(:android_test_loop) | ||
|  |           @test_timeout = args[:test_timeout] if args.key?(:test_timeout) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # Test Loops are tests that can be launched by the app itself, determining when | ||
|  |       # to run by listening for an intent. | ||
|  |       class AndroidTestLoop | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # `Any` contains an arbitrary serialized protocol buffer message along with a | ||
|  |       # URL that describes the type of the serialized message. Protobuf library | ||
|  |       # provides support to pack/unpack Any values in the form of utility functions or | ||
|  |       # additional generated methods of the Any type. Example 1: Pack and unpack a | ||
|  |       # message in C++. Foo foo = ...; Any any; any.PackFrom(foo); ... if (any. | ||
|  |       # UnpackTo(&foo)) ` ... ` Example 2: Pack and unpack a message in Java. Foo foo = | ||
|  |       # ...; Any any = Any.pack(foo); ... if (any.is(Foo.class)) ` foo = any.unpack( | ||
|  |       # Foo.class); ` Example 3: Pack and unpack a message in Python. foo = Foo(...) | ||
|  |       # any = Any() any.Pack(foo) ... if any.Is(Foo.DESCRIPTOR): any.Unpack(foo) ... | ||
|  |       # Example 4: Pack and unpack a message in Go foo := &pb.Foo`...` any, err := | ||
|  |       # ptypes.MarshalAny(foo) ... foo := &pb.Foo`` if err := ptypes.UnmarshalAny(any, | ||
|  |       # foo); err != nil ` ... ` The pack methods provided by protobuf library will by | ||
|  |       # default use 'type.googleapis.com/full.type.name' as the type URL and the | ||
|  |       # unpack methods only use the fully qualified type name after the last '/' in | ||
|  |       # the type URL, for example "foo.bar.com/x/y.z" will yield type name "y.z". # | ||
|  |       # JSON The JSON representation of an `Any` value uses the regular representation | ||
|  |       # of the deserialized, embedded message, with an additional field `@type` which | ||
|  |       # contains the type URL. Example: package google.profile; message Person ` | ||
|  |       # string first_name = 1; string last_name = 2; ` ` "@type": "type.googleapis.com/ | ||
|  |       # google.profile.Person", "firstName": , "lastName": ` If the embedded message | ||
|  |       # type is well-known and has a custom JSON representation, that representation | ||
|  |       # will be embedded adding a field `value` which holds the custom JSON in | ||
|  |       # addition to the `@type` field. Example (for message google.protobuf.Duration): | ||
|  |       # ` "@type": "type.googleapis.com/google.protobuf.Duration", "value": "1.212s" ` | ||
|  |       class Any | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # A URL/resource name that uniquely identifies the type of the serialized | ||
|  |         # protocol buffer message. This string must contain at least one "/" character. | ||
|  |         # The last segment of the URL's path must represent the fully qualified name of | ||
|  |         # the type (as in `path/google.protobuf.Duration`). The name should be in a | ||
|  |         # canonical form (e.g., leading "." is not accepted). In practice, teams usually | ||
|  |         # precompile into the binary all types that they expect it to use in the context | ||
|  |         # of Any. However, for URLs which use the scheme `http`, `https`, or no scheme, | ||
|  |         # one can optionally set up a type server that maps type URLs to message | ||
|  |         # definitions as follows: * If no scheme is provided, `https` is assumed. * An | ||
|  |         # HTTP GET on the URL must yield a google.protobuf.Type value in binary format, | ||
|  |         # or produce an error. * Applications are allowed to cache lookup results based | ||
|  |         # on the URL, or have them precompiled into a binary to avoid any lookup. | ||
|  |         # Therefore, binary compatibility needs to be preserved on changes to types. ( | ||
|  |         # Use versioned type names to manage breaking changes.) Note: this functionality | ||
|  |         # is not currently available in the official protobuf release, and it is not | ||
|  |         # used for type URLs beginning with type.googleapis.com. Schemes other than ` | ||
|  |         # http`, `https` (or the empty scheme) might be used with implementation | ||
|  |         # specific semantics. | ||
|  |         # Corresponds to the JSON property `typeUrl` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :type_url | ||
|  |        | ||
|  |         # Must be a valid serialized protocol buffer of the above specified type. | ||
|  |         # Corresponds to the JSON property `value` | ||
|  |         # NOTE: Values are automatically base64 encoded/decoded in the client library. | ||
|  |         # @return [String] | ||
|  |         attr_accessor :value | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @type_url = args[:type_url] if args.key?(:type_url) | ||
|  |           @value = args[:value] if args.key?(:value) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       #  | ||
|  |       class AppStartTime | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # A Duration represents a signed, fixed-length span of time represented as a | ||
|  |         # count of seconds and fractions of seconds at nanosecond resolution. It is | ||
|  |         # independent of any calendar and concepts like "day" or "month". It is related | ||
|  |         # to Timestamp in that the difference between two Timestamp values is a Duration | ||
|  |         # and it can be added or subtracted from a Timestamp. Range is approximately +- | ||
|  |         # 10,000 years. | ||
|  |         # Corresponds to the JSON property `fullyDrawnTime` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::Duration] | ||
|  |         attr_accessor :fully_drawn_time | ||
|  |        | ||
|  |         # A Duration represents a signed, fixed-length span of time represented as a | ||
|  |         # count of seconds and fractions of seconds at nanosecond resolution. It is | ||
|  |         # independent of any calendar and concepts like "day" or "month". It is related | ||
|  |         # to Timestamp in that the difference between two Timestamp values is a Duration | ||
|  |         # and it can be added or subtracted from a Timestamp. Range is approximately +- | ||
|  |         # 10,000 years. | ||
|  |         # Corresponds to the JSON property `initialDisplayTime` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::Duration] | ||
|  |         attr_accessor :initial_display_time | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @fully_drawn_time = args[:fully_drawn_time] if args.key?(:fully_drawn_time) | ||
|  |           @initial_display_time = args[:initial_display_time] if args.key?(:initial_display_time) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # A suggestion to use deep links for a Robo run. | ||
|  |       class AvailableDeepLinks | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # Encapsulates the metadata for basic sample series represented by a line chart | ||
|  |       class BasicPerfSampleSeries | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         #  | ||
|  |         # Corresponds to the JSON property `perfMetricType` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :perf_metric_type | ||
|  |        | ||
|  |         #  | ||
|  |         # Corresponds to the JSON property `perfUnit` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :perf_unit | ||
|  |        | ||
|  |         #  | ||
|  |         # Corresponds to the JSON property `sampleSeriesLabel` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :sample_series_label | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @perf_metric_type = args[:perf_metric_type] if args.key?(:perf_metric_type) | ||
|  |           @perf_unit = args[:perf_unit] if args.key?(:perf_unit) | ||
|  |           @sample_series_label = args[:sample_series_label] if args.key?(:sample_series_label) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # The request must provide up to a maximum of 5000 samples to be created; a | ||
|  |       # larger sample size will cause an INVALID_ARGUMENT error | ||
|  |       class BatchCreatePerfSamplesRequest | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # The set of PerfSamples to create should not include existing timestamps | ||
|  |         # Corresponds to the JSON property `perfSamples` | ||
|  |         # @return [Array<Google::Apis::ToolresultsV1beta3::PerfSample>] | ||
|  |         attr_accessor :perf_samples | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @perf_samples = args[:perf_samples] if args.key?(:perf_samples) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       #  | ||
|  |       class BatchCreatePerfSamplesResponse | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         #  | ||
|  |         # Corresponds to the JSON property `perfSamples` | ||
|  |         # @return [Array<Google::Apis::ToolresultsV1beta3::PerfSample>] | ||
|  |         attr_accessor :perf_samples | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @perf_samples = args[:perf_samples] if args.key?(:perf_samples) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # A warning that Robo encountered a screen that was mostly blank; this may | ||
|  |       # indicate a problem with the app. | ||
|  |       class BlankScreen | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # The screen id of the element | ||
|  |         # Corresponds to the JSON property `screenId` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :screen_id | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @screen_id = args[:screen_id] if args.key?(:screen_id) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       #  | ||
|  |       class CpuInfo | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # description of the device processor ie '1.8 GHz hexa core 64-bit ARMv8-A' | ||
|  |         # Corresponds to the JSON property `cpuProcessor` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :cpu_processor | ||
|  |        | ||
|  |         # the CPU clock speed in GHz | ||
|  |         # Corresponds to the JSON property `cpuSpeedInGhz` | ||
|  |         # @return [Float] | ||
|  |         attr_accessor :cpu_speed_in_ghz | ||
|  |        | ||
|  |         # the number of CPU cores | ||
|  |         # Corresponds to the JSON property `numberOfCores` | ||
|  |         # @return [Fixnum] | ||
|  |         attr_accessor :number_of_cores | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @cpu_processor = args[:cpu_processor] if args.key?(:cpu_processor) | ||
|  |           @cpu_speed_in_ghz = args[:cpu_speed_in_ghz] if args.key?(:cpu_speed_in_ghz) | ||
|  |           @number_of_cores = args[:number_of_cores] if args.key?(:number_of_cores) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # Crash dialog was detected during the test execution | ||
|  |       class CrashDialogError | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # The name of the package that caused the dialog. | ||
|  |         # Corresponds to the JSON property `crashPackage` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :crash_package | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @crash_package = args[:crash_package] if args.key?(:crash_package) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # A warning that device ran out of memory | ||
|  |       class DeviceOutOfMemory | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # A Duration represents a signed, fixed-length span of time represented as a | ||
|  |       # count of seconds and fractions of seconds at nanosecond resolution. It is | ||
|  |       # independent of any calendar and concepts like "day" or "month". It is related | ||
|  |       # to Timestamp in that the difference between two Timestamp values is a Duration | ||
|  |       # and it can be added or subtracted from a Timestamp. Range is approximately +- | ||
|  |       # 10,000 years. | ||
|  |       class Duration | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # Signed fractions of a second at nanosecond resolution of the span of time. | ||
|  |         # Durations less than one second are represented with a 0 `seconds` field and a | ||
|  |         # positive or negative `nanos` field. For durations of one second or more, a non- | ||
|  |         # zero value for the `nanos` field must be of the same sign as the `seconds` | ||
|  |         # field. Must be from -999,999,999 to +999,999,999 inclusive. | ||
|  |         # Corresponds to the JSON property `nanos` | ||
|  |         # @return [Fixnum] | ||
|  |         attr_accessor :nanos | ||
|  |        | ||
|  |         # Signed seconds of the span of time. Must be from -315,576,000,000 to +315,576, | ||
|  |         # 000,000 inclusive. Note: these bounds are computed from: 60 sec/min * 60 min/ | ||
|  |         # hr * 24 hr/day * 365.25 days/year * 10000 years | ||
|  |         # Corresponds to the JSON property `seconds` | ||
|  |         # @return [Fixnum] | ||
|  |         attr_accessor :seconds | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @nanos = args[:nanos] if args.key?(:nanos) | ||
|  |           @seconds = args[:seconds] if args.key?(:seconds) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # Additional details about encountered login screens. | ||
|  |       class EncounteredLoginScreen | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # Number of encountered distinct login screens. | ||
|  |         # Corresponds to the JSON property `distinctScreens` | ||
|  |         # @return [Fixnum] | ||
|  |         attr_accessor :distinct_screens | ||
|  |        | ||
|  |         # Subset of login screens. | ||
|  |         # Corresponds to the JSON property `screenIds` | ||
|  |         # @return [Array<String>] | ||
|  |         attr_accessor :screen_ids | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @distinct_screens = args[:distinct_screens] if args.key?(:distinct_screens) | ||
|  |           @screen_ids = args[:screen_ids] if args.key?(:screen_ids) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # Additional details about encountered screens with elements that are not | ||
|  |       # Android UI widgets. | ||
|  |       class EncounteredNonAndroidUiWidgetScreen | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # Number of encountered distinct screens with non Android UI widgets. | ||
|  |         # Corresponds to the JSON property `distinctScreens` | ||
|  |         # @return [Fixnum] | ||
|  |         attr_accessor :distinct_screens | ||
|  |        | ||
|  |         # Subset of screens which contain non Android UI widgets. | ||
|  |         # Corresponds to the JSON property `screenIds` | ||
|  |         # @return [Array<String>] | ||
|  |         attr_accessor :screen_ids | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @distinct_screens = args[:distinct_screens] if args.key?(:distinct_screens) | ||
|  |           @screen_ids = args[:screen_ids] if args.key?(:screen_ids) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # An Environment represents the set of test runs (Steps) from the parent | ||
|  |       # Execution that are configured with the same set of dimensions (Model, Version, | ||
|  |       # Locale, and Orientation). Multiple such runs occur particularly because of | ||
|  |       # features like sharding (splitting up a test suite to run in parallel across | ||
|  |       # devices) and reruns (running a test multiple times to check for different | ||
|  |       # outcomes). | ||
|  |       class Environment | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # A Timestamp represents a point in time independent of any time zone or local | ||
|  |         # calendar, encoded as a count of seconds and fractions of seconds at nanosecond | ||
|  |         # resolution. The count is relative to an epoch at UTC midnight on January 1, | ||
|  |         # 1970, in the proleptic Gregorian calendar which extends the Gregorian calendar | ||
|  |         # backwards to year one. All minutes are 60 seconds long. Leap seconds are " | ||
|  |         # smeared" so that no leap second table is needed for interpretation, using a [ | ||
|  |         # 24-hour linear smear](https://developers.google.com/time/smear). The range is | ||
|  |         # from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By restricting to | ||
|  |         # that range, we ensure that we can convert to and from [RFC 3339](https://www. | ||
|  |         # ietf.org/rfc/rfc3339.txt) date strings. | ||
|  |         # Corresponds to the JSON property `completionTime` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::Timestamp] | ||
|  |         attr_accessor :completion_time | ||
|  |        | ||
|  |         # A Timestamp represents a point in time independent of any time zone or local | ||
|  |         # calendar, encoded as a count of seconds and fractions of seconds at nanosecond | ||
|  |         # resolution. The count is relative to an epoch at UTC midnight on January 1, | ||
|  |         # 1970, in the proleptic Gregorian calendar which extends the Gregorian calendar | ||
|  |         # backwards to year one. All minutes are 60 seconds long. Leap seconds are " | ||
|  |         # smeared" so that no leap second table is needed for interpretation, using a [ | ||
|  |         # 24-hour linear smear](https://developers.google.com/time/smear). The range is | ||
|  |         # from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By restricting to | ||
|  |         # that range, we ensure that we can convert to and from [RFC 3339](https://www. | ||
|  |         # ietf.org/rfc/rfc3339.txt) date strings. | ||
|  |         # Corresponds to the JSON property `creationTime` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::Timestamp] | ||
|  |         attr_accessor :creation_time | ||
|  |        | ||
|  |         # Dimension values describing the environment. Dimension values always consist | ||
|  |         # of "Model", "Version", "Locale", and "Orientation". - In response: always set - | ||
|  |         # In create request: always set - In update request: never set | ||
|  |         # Corresponds to the JSON property `dimensionValue` | ||
|  |         # @return [Array<Google::Apis::ToolresultsV1beta3::EnvironmentDimensionValueEntry>] | ||
|  |         attr_accessor :dimension_value | ||
|  |        | ||
|  |         # A short human-readable name to display in the UI. Maximum of 100 characters. | ||
|  |         # For example: Nexus 5, API 27. | ||
|  |         # Corresponds to the JSON property `displayName` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :display_name | ||
|  |        | ||
|  |         # Output only. An Environment id. | ||
|  |         # Corresponds to the JSON property `environmentId` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :environment_id | ||
|  |        | ||
|  |         # Merged test result for environment. If the environment has only one step (no | ||
|  |         # reruns or shards), then the merged result is the same as the step result. If | ||
|  |         # the environment has multiple shards and/or reruns, then the results of shards | ||
|  |         # and reruns that belong to the same environment are merged into one environment | ||
|  |         # result. | ||
|  |         # Corresponds to the JSON property `environmentResult` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::MergedResult] | ||
|  |         attr_accessor :environment_result | ||
|  |        | ||
|  |         # Output only. An Execution id. | ||
|  |         # Corresponds to the JSON property `executionId` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :execution_id | ||
|  |        | ||
|  |         # Output only. A History id. | ||
|  |         # Corresponds to the JSON property `historyId` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :history_id | ||
|  |        | ||
|  |         # Output only. A Project id. | ||
|  |         # Corresponds to the JSON property `projectId` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :project_id | ||
|  |        | ||
|  |         # The storage for test results. | ||
|  |         # Corresponds to the JSON property `resultsStorage` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::ResultsStorage] | ||
|  |         attr_accessor :results_storage | ||
|  |        | ||
|  |         # Output only. Summaries of shards. Only one shard will present unless sharding | ||
|  |         # feature is enabled in TestExecutionService. | ||
|  |         # Corresponds to the JSON property `shardSummaries` | ||
|  |         # @return [Array<Google::Apis::ToolresultsV1beta3::ShardSummary>] | ||
|  |         attr_accessor :shard_summaries | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @completion_time = args[:completion_time] if args.key?(:completion_time) | ||
|  |           @creation_time = args[:creation_time] if args.key?(:creation_time) | ||
|  |           @dimension_value = args[:dimension_value] if args.key?(:dimension_value) | ||
|  |           @display_name = args[:display_name] if args.key?(:display_name) | ||
|  |           @environment_id = args[:environment_id] if args.key?(:environment_id) | ||
|  |           @environment_result = args[:environment_result] if args.key?(:environment_result) | ||
|  |           @execution_id = args[:execution_id] if args.key?(:execution_id) | ||
|  |           @history_id = args[:history_id] if args.key?(:history_id) | ||
|  |           @project_id = args[:project_id] if args.key?(:project_id) | ||
|  |           @results_storage = args[:results_storage] if args.key?(:results_storage) | ||
|  |           @shard_summaries = args[:shard_summaries] if args.key?(:shard_summaries) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       #  | ||
|  |       class EnvironmentDimensionValueEntry | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         #  | ||
|  |         # Corresponds to the JSON property `key` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :key | ||
|  |        | ||
|  |         #  | ||
|  |         # Corresponds to the JSON property `value` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :value | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @key = args[:key] if args.key?(:key) | ||
|  |           @value = args[:value] if args.key?(:value) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # An Execution represents a collection of Steps. For instance, it could | ||
|  |       # represent: - a mobile test executed across a range of device configurations - | ||
|  |       # a jenkins job with a build step followed by a test step The maximum size of an | ||
|  |       # execution message is 1 MiB. An Execution can be updated until its state is set | ||
|  |       # to COMPLETE at which point it becomes immutable. | ||
|  |       class Execution | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # A Timestamp represents a point in time independent of any time zone or local | ||
|  |         # calendar, encoded as a count of seconds and fractions of seconds at nanosecond | ||
|  |         # resolution. The count is relative to an epoch at UTC midnight on January 1, | ||
|  |         # 1970, in the proleptic Gregorian calendar which extends the Gregorian calendar | ||
|  |         # backwards to year one. All minutes are 60 seconds long. Leap seconds are " | ||
|  |         # smeared" so that no leap second table is needed for interpretation, using a [ | ||
|  |         # 24-hour linear smear](https://developers.google.com/time/smear). The range is | ||
|  |         # from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By restricting to | ||
|  |         # that range, we ensure that we can convert to and from [RFC 3339](https://www. | ||
|  |         # ietf.org/rfc/rfc3339.txt) date strings. | ||
|  |         # Corresponds to the JSON property `completionTime` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::Timestamp] | ||
|  |         attr_accessor :completion_time | ||
|  |        | ||
|  |         # A Timestamp represents a point in time independent of any time zone or local | ||
|  |         # calendar, encoded as a count of seconds and fractions of seconds at nanosecond | ||
|  |         # resolution. The count is relative to an epoch at UTC midnight on January 1, | ||
|  |         # 1970, in the proleptic Gregorian calendar which extends the Gregorian calendar | ||
|  |         # backwards to year one. All minutes are 60 seconds long. Leap seconds are " | ||
|  |         # smeared" so that no leap second table is needed for interpretation, using a [ | ||
|  |         # 24-hour linear smear](https://developers.google.com/time/smear). The range is | ||
|  |         # from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By restricting to | ||
|  |         # that range, we ensure that we can convert to and from [RFC 3339](https://www. | ||
|  |         # ietf.org/rfc/rfc3339.txt) date strings. | ||
|  |         # Corresponds to the JSON property `creationTime` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::Timestamp] | ||
|  |         attr_accessor :creation_time | ||
|  |        | ||
|  |         # The dimensions along which different steps in this execution may vary. This | ||
|  |         # must remain fixed over the life of the execution. Returns INVALID_ARGUMENT if | ||
|  |         # this field is set in an update request. Returns INVALID_ARGUMENT if the same | ||
|  |         # name occurs in more than one dimension_definition. Returns INVALID_ARGUMENT if | ||
|  |         # the size of the list is over 100. - In response: present if set by create - In | ||
|  |         # create request: optional - In update request: never set | ||
|  |         # Corresponds to the JSON property `dimensionDefinitions` | ||
|  |         # @return [Array<Google::Apis::ToolresultsV1beta3::MatrixDimensionDefinition>] | ||
|  |         attr_accessor :dimension_definitions | ||
|  |        | ||
|  |         # A unique identifier within a History for this Execution. Returns | ||
|  |         # INVALID_ARGUMENT if this field is set or overwritten by the caller. - In | ||
|  |         # response always set - In create/update request: never set | ||
|  |         # Corresponds to the JSON property `executionId` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :execution_id | ||
|  |        | ||
|  |         # Interprets a result so that humans and machines can act on it. | ||
|  |         # Corresponds to the JSON property `outcome` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::Outcome] | ||
|  |         attr_accessor :outcome | ||
|  |        | ||
|  |         # The details about how to run the execution. | ||
|  |         # Corresponds to the JSON property `specification` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::Specification] | ||
|  |         attr_accessor :specification | ||
|  |        | ||
|  |         # The initial state is IN_PROGRESS. The only legal state transitions is from | ||
|  |         # IN_PROGRESS to COMPLETE. A PRECONDITION_FAILED will be returned if an invalid | ||
|  |         # transition is requested. The state can only be set to COMPLETE once. A | ||
|  |         # FAILED_PRECONDITION will be returned if the state is set to COMPLETE multiple | ||
|  |         # times. If the state is set to COMPLETE, all the in-progress steps within the | ||
|  |         # execution will be set as COMPLETE. If the outcome of the step is not set, the | ||
|  |         # outcome will be set to INCONCLUSIVE. - In response always set - In create/ | ||
|  |         # update request: optional | ||
|  |         # Corresponds to the JSON property `state` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :state | ||
|  |        | ||
|  |         # TestExecution Matrix ID that the TestExecutionService uses. - In response: | ||
|  |         # present if set by create - In create: optional - In update: never set | ||
|  |         # Corresponds to the JSON property `testExecutionMatrixId` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :test_execution_matrix_id | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @completion_time = args[:completion_time] if args.key?(:completion_time) | ||
|  |           @creation_time = args[:creation_time] if args.key?(:creation_time) | ||
|  |           @dimension_definitions = args[:dimension_definitions] if args.key?(:dimension_definitions) | ||
|  |           @execution_id = args[:execution_id] if args.key?(:execution_id) | ||
|  |           @outcome = args[:outcome] if args.key?(:outcome) | ||
|  |           @specification = args[:specification] if args.key?(:specification) | ||
|  |           @state = args[:state] if args.key?(:state) | ||
|  |           @test_execution_matrix_id = args[:test_execution_matrix_id] if args.key?(:test_execution_matrix_id) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # Failed to install the APK. | ||
|  |       class FailedToInstall | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # Details for an outcome with a FAILURE outcome summary. | ||
|  |       class FailureDetail | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # If the failure was severe because the system (app) under test crashed. | ||
|  |         # Corresponds to the JSON property `crashed` | ||
|  |         # @return [Boolean] | ||
|  |         attr_accessor :crashed | ||
|  |         alias_method :crashed?, :crashed | ||
|  |        | ||
|  |         # If the device ran out of memory during a test, causing the test to crash. | ||
|  |         # Corresponds to the JSON property `deviceOutOfMemory` | ||
|  |         # @return [Boolean] | ||
|  |         attr_accessor :device_out_of_memory | ||
|  |         alias_method :device_out_of_memory?, :device_out_of_memory | ||
|  |        | ||
|  |         # If the Roboscript failed to complete successfully, e.g., because a Roboscript | ||
|  |         # action or assertion failed or a Roboscript action could not be matched during | ||
|  |         # the entire crawl. | ||
|  |         # Corresponds to the JSON property `failedRoboscript` | ||
|  |         # @return [Boolean] | ||
|  |         attr_accessor :failed_roboscript | ||
|  |         alias_method :failed_roboscript?, :failed_roboscript | ||
|  |        | ||
|  |         # If an app is not installed and thus no test can be run with the app. This | ||
|  |         # might be caused by trying to run a test on an unsupported platform. | ||
|  |         # Corresponds to the JSON property `notInstalled` | ||
|  |         # @return [Boolean] | ||
|  |         attr_accessor :not_installed | ||
|  |         alias_method :not_installed?, :not_installed | ||
|  |        | ||
|  |         # If a native process (including any other than the app) crashed. | ||
|  |         # Corresponds to the JSON property `otherNativeCrash` | ||
|  |         # @return [Boolean] | ||
|  |         attr_accessor :other_native_crash | ||
|  |         alias_method :other_native_crash?, :other_native_crash | ||
|  |        | ||
|  |         # If the test overran some time limit, and that is why it failed. | ||
|  |         # Corresponds to the JSON property `timedOut` | ||
|  |         # @return [Boolean] | ||
|  |         attr_accessor :timed_out | ||
|  |         alias_method :timed_out?, :timed_out | ||
|  |        | ||
|  |         # If the robo was unable to crawl the app; perhaps because the app did not start. | ||
|  |         # Corresponds to the JSON property `unableToCrawl` | ||
|  |         # @return [Boolean] | ||
|  |         attr_accessor :unable_to_crawl | ||
|  |         alias_method :unable_to_crawl?, :unable_to_crawl | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @crashed = args[:crashed] if args.key?(:crashed) | ||
|  |           @device_out_of_memory = args[:device_out_of_memory] if args.key?(:device_out_of_memory) | ||
|  |           @failed_roboscript = args[:failed_roboscript] if args.key?(:failed_roboscript) | ||
|  |           @not_installed = args[:not_installed] if args.key?(:not_installed) | ||
|  |           @other_native_crash = args[:other_native_crash] if args.key?(:other_native_crash) | ||
|  |           @timed_out = args[:timed_out] if args.key?(:timed_out) | ||
|  |           @unable_to_crawl = args[:unable_to_crawl] if args.key?(:unable_to_crawl) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # Additional details for a fatal exception. | ||
|  |       class FatalException | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # A stacktrace. | ||
|  |         # Corresponds to the JSON property `stackTrace` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::StackTrace] | ||
|  |         attr_accessor :stack_trace | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @stack_trace = args[:stack_trace] if args.key?(:stack_trace) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # A reference to a file. | ||
|  |       class FileReference | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # The URI of a file stored in Google Cloud Storage. For example: http://storage. | ||
|  |         # googleapis.com/mybucket/path/to/test.xml or in gsutil format: gs://mybucket/ | ||
|  |         # path/to/test.xml with version-specific info, gs://mybucket/path/to/test.xml# | ||
|  |         # 1360383693690000 An INVALID_ARGUMENT error will be returned if the URI format | ||
|  |         # is not supported. - In response: always set - In create/update request: always | ||
|  |         # set | ||
|  |         # Corresponds to the JSON property `fileUri` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :file_uri | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @file_uri = args[:file_uri] if args.key?(:file_uri) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # Graphics statistics for the App. The information is collected from 'adb shell | ||
|  |       # dumpsys graphicsstats'. For more info see: https://developer.android.com/ | ||
|  |       # training/testing/performance.html Statistics will only be present for API 23+. | ||
|  |       class GraphicsStats | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # Histogram of frame render times. There should be 154 buckets ranging from [5ms, | ||
|  |         # 6ms) to [4950ms, infinity) | ||
|  |         # Corresponds to the JSON property `buckets` | ||
|  |         # @return [Array<Google::Apis::ToolresultsV1beta3::GraphicsStatsBucket>] | ||
|  |         attr_accessor :buckets | ||
|  |        | ||
|  |         # Total "high input latency" events. | ||
|  |         # Corresponds to the JSON property `highInputLatencyCount` | ||
|  |         # @return [Fixnum] | ||
|  |         attr_accessor :high_input_latency_count | ||
|  |        | ||
|  |         # Total frames with slow render time. Should be <= total_frames. | ||
|  |         # Corresponds to the JSON property `jankyFrames` | ||
|  |         # @return [Fixnum] | ||
|  |         attr_accessor :janky_frames | ||
|  |        | ||
|  |         # Total "missed vsync" events. | ||
|  |         # Corresponds to the JSON property `missedVsyncCount` | ||
|  |         # @return [Fixnum] | ||
|  |         attr_accessor :missed_vsync_count | ||
|  |        | ||
|  |         # 50th percentile frame render time in milliseconds. | ||
|  |         # Corresponds to the JSON property `p50Millis` | ||
|  |         # @return [Fixnum] | ||
|  |         attr_accessor :p50_millis | ||
|  |        | ||
|  |         # 90th percentile frame render time in milliseconds. | ||
|  |         # Corresponds to the JSON property `p90Millis` | ||
|  |         # @return [Fixnum] | ||
|  |         attr_accessor :p90_millis | ||
|  |        | ||
|  |         # 95th percentile frame render time in milliseconds. | ||
|  |         # Corresponds to the JSON property `p95Millis` | ||
|  |         # @return [Fixnum] | ||
|  |         attr_accessor :p95_millis | ||
|  |        | ||
|  |         # 99th percentile frame render time in milliseconds. | ||
|  |         # Corresponds to the JSON property `p99Millis` | ||
|  |         # @return [Fixnum] | ||
|  |         attr_accessor :p99_millis | ||
|  |        | ||
|  |         # Total "slow bitmap upload" events. | ||
|  |         # Corresponds to the JSON property `slowBitmapUploadCount` | ||
|  |         # @return [Fixnum] | ||
|  |         attr_accessor :slow_bitmap_upload_count | ||
|  |        | ||
|  |         # Total "slow draw" events. | ||
|  |         # Corresponds to the JSON property `slowDrawCount` | ||
|  |         # @return [Fixnum] | ||
|  |         attr_accessor :slow_draw_count | ||
|  |        | ||
|  |         # Total "slow UI thread" events. | ||
|  |         # Corresponds to the JSON property `slowUiThreadCount` | ||
|  |         # @return [Fixnum] | ||
|  |         attr_accessor :slow_ui_thread_count | ||
|  |        | ||
|  |         # Total frames rendered by package. | ||
|  |         # Corresponds to the JSON property `totalFrames` | ||
|  |         # @return [Fixnum] | ||
|  |         attr_accessor :total_frames | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @buckets = args[:buckets] if args.key?(:buckets) | ||
|  |           @high_input_latency_count = args[:high_input_latency_count] if args.key?(:high_input_latency_count) | ||
|  |           @janky_frames = args[:janky_frames] if args.key?(:janky_frames) | ||
|  |           @missed_vsync_count = args[:missed_vsync_count] if args.key?(:missed_vsync_count) | ||
|  |           @p50_millis = args[:p50_millis] if args.key?(:p50_millis) | ||
|  |           @p90_millis = args[:p90_millis] if args.key?(:p90_millis) | ||
|  |           @p95_millis = args[:p95_millis] if args.key?(:p95_millis) | ||
|  |           @p99_millis = args[:p99_millis] if args.key?(:p99_millis) | ||
|  |           @slow_bitmap_upload_count = args[:slow_bitmap_upload_count] if args.key?(:slow_bitmap_upload_count) | ||
|  |           @slow_draw_count = args[:slow_draw_count] if args.key?(:slow_draw_count) | ||
|  |           @slow_ui_thread_count = args[:slow_ui_thread_count] if args.key?(:slow_ui_thread_count) | ||
|  |           @total_frames = args[:total_frames] if args.key?(:total_frames) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       #  | ||
|  |       class GraphicsStatsBucket | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # Number of frames in the bucket. | ||
|  |         # Corresponds to the JSON property `frameCount` | ||
|  |         # @return [Fixnum] | ||
|  |         attr_accessor :frame_count | ||
|  |        | ||
|  |         # Lower bound of render time in milliseconds. | ||
|  |         # Corresponds to the JSON property `renderMillis` | ||
|  |         # @return [Fixnum] | ||
|  |         attr_accessor :render_millis | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @frame_count = args[:frame_count] if args.key?(:frame_count) | ||
|  |           @render_millis = args[:render_millis] if args.key?(:render_millis) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # A History represents a sorted list of Executions ordered by the | ||
|  |       # start_timestamp_millis field (descending). It can be used to group all the | ||
|  |       # Executions of a continuous build. Note that the ordering only operates on one- | ||
|  |       # dimension. If a repository has multiple branches, it means that multiple | ||
|  |       # histories will need to be used in order to order Executions per branch. | ||
|  |       class History | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # A short human-readable (plain text) name to display in the UI. Maximum of 100 | ||
|  |         # characters. - In response: present if set during create. - In create request: | ||
|  |         # optional | ||
|  |         # Corresponds to the JSON property `displayName` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :display_name | ||
|  |        | ||
|  |         # A unique identifier within a project for this History. Returns | ||
|  |         # INVALID_ARGUMENT if this field is set or overwritten by the caller. - In | ||
|  |         # response always set - In create request: never set | ||
|  |         # Corresponds to the JSON property `historyId` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :history_id | ||
|  |        | ||
|  |         # A name to uniquely identify a history within a project. Maximum of 200 | ||
|  |         # characters. - In response always set - In create request: always set | ||
|  |         # Corresponds to the JSON property `name` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :name | ||
|  |        | ||
|  |         # The platform of the test history. - In response: always set. Returns the | ||
|  |         # platform of the last execution if unknown. | ||
|  |         # Corresponds to the JSON property `testPlatform` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :test_platform | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @display_name = args[:display_name] if args.key?(:display_name) | ||
|  |           @history_id = args[:history_id] if args.key?(:history_id) | ||
|  |           @name = args[:name] if args.key?(:name) | ||
|  |           @test_platform = args[:test_platform] if args.key?(:test_platform) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # An image, with a link to the main image and a thumbnail. | ||
|  |       class Image | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # The `Status` type defines a logical error model that is suitable for different | ||
|  |         # programming environments, including REST APIs and RPC APIs. It is used by [ | ||
|  |         # gRPC](https://github.com/grpc). Each `Status` message contains three pieces of | ||
|  |         # data: error code, error message, and error details. You can find out more | ||
|  |         # about this error model and how to work with it in the [API Design Guide](https: | ||
|  |         # //cloud.google.com/apis/design/errors). | ||
|  |         # Corresponds to the JSON property `error` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::Status] | ||
|  |         attr_accessor :error | ||
|  |        | ||
|  |         # A reference to a ToolExecution output file. | ||
|  |         # Corresponds to the JSON property `sourceImage` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::ToolOutputReference] | ||
|  |         attr_accessor :source_image | ||
|  |        | ||
|  |         # The step to which the image is attached. Always set. | ||
|  |         # Corresponds to the JSON property `stepId` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :step_id | ||
|  |        | ||
|  |         # A single thumbnail, with its size and format. | ||
|  |         # Corresponds to the JSON property `thumbnail` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::Thumbnail] | ||
|  |         attr_accessor :thumbnail | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @error = args[:error] if args.key?(:error) | ||
|  |           @source_image = args[:source_image] if args.key?(:source_image) | ||
|  |           @step_id = args[:step_id] if args.key?(:step_id) | ||
|  |           @thumbnail = args[:thumbnail] if args.key?(:thumbnail) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # Additional details of in-app purchases encountered during the crawl. | ||
|  |       class InAppPurchasesFound | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # The total number of in-app purchases flows explored: how many times the robo | ||
|  |         # tries to buy a SKU. | ||
|  |         # Corresponds to the JSON property `inAppPurchasesFlowsExplored` | ||
|  |         # @return [Fixnum] | ||
|  |         attr_accessor :in_app_purchases_flows_explored | ||
|  |        | ||
|  |         # The total number of in-app purchases flows started. | ||
|  |         # Corresponds to the JSON property `inAppPurchasesFlowsStarted` | ||
|  |         # @return [Fixnum] | ||
|  |         attr_accessor :in_app_purchases_flows_started | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @in_app_purchases_flows_explored = args[:in_app_purchases_flows_explored] if args.key?(:in_app_purchases_flows_explored) | ||
|  |           @in_app_purchases_flows_started = args[:in_app_purchases_flows_started] if args.key?(:in_app_purchases_flows_started) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # Details for an outcome with an INCONCLUSIVE outcome summary. | ||
|  |       class InconclusiveDetail | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # If the end user aborted the test execution before a pass or fail could be | ||
|  |         # determined. For example, the user pressed ctrl-c which sent a kill signal to | ||
|  |         # the test runner while the test was running. | ||
|  |         # Corresponds to the JSON property `abortedByUser` | ||
|  |         # @return [Boolean] | ||
|  |         attr_accessor :aborted_by_user | ||
|  |         alias_method :aborted_by_user?, :aborted_by_user | ||
|  |        | ||
|  |         # If results are being provided to the user in certain cases of infrastructure | ||
|  |         # failures | ||
|  |         # Corresponds to the JSON property `hasErrorLogs` | ||
|  |         # @return [Boolean] | ||
|  |         attr_accessor :has_error_logs | ||
|  |         alias_method :has_error_logs?, :has_error_logs | ||
|  |        | ||
|  |         # If the test runner could not determine success or failure because the test | ||
|  |         # depends on a component other than the system under test which failed. For | ||
|  |         # example, a mobile test requires provisioning a device where the test executes, | ||
|  |         # and that provisioning can fail. | ||
|  |         # Corresponds to the JSON property `infrastructureFailure` | ||
|  |         # @return [Boolean] | ||
|  |         attr_accessor :infrastructure_failure | ||
|  |         alias_method :infrastructure_failure?, :infrastructure_failure | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @aborted_by_user = args[:aborted_by_user] if args.key?(:aborted_by_user) | ||
|  |           @has_error_logs = args[:has_error_logs] if args.key?(:has_error_logs) | ||
|  |           @infrastructure_failure = args[:infrastructure_failure] if args.key?(:infrastructure_failure) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # Step Id and outcome of each individual step that was run as a group with other | ||
|  |       # steps with the same configuration. | ||
|  |       class IndividualOutcome | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # Unique int given to each step. Ranges from 0(inclusive) to total number of | ||
|  |         # steps(exclusive). The primary step is 0. | ||
|  |         # Corresponds to the JSON property `multistepNumber` | ||
|  |         # @return [Fixnum] | ||
|  |         attr_accessor :multistep_number | ||
|  |        | ||
|  |         #  | ||
|  |         # Corresponds to the JSON property `outcomeSummary` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :outcome_summary | ||
|  |        | ||
|  |         # A Duration represents a signed, fixed-length span of time represented as a | ||
|  |         # count of seconds and fractions of seconds at nanosecond resolution. It is | ||
|  |         # independent of any calendar and concepts like "day" or "month". It is related | ||
|  |         # to Timestamp in that the difference between two Timestamp values is a Duration | ||
|  |         # and it can be added or subtracted from a Timestamp. Range is approximately +- | ||
|  |         # 10,000 years. | ||
|  |         # Corresponds to the JSON property `runDuration` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::Duration] | ||
|  |         attr_accessor :run_duration | ||
|  |        | ||
|  |         #  | ||
|  |         # Corresponds to the JSON property `stepId` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :step_id | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @multistep_number = args[:multistep_number] if args.key?(:multistep_number) | ||
|  |           @outcome_summary = args[:outcome_summary] if args.key?(:outcome_summary) | ||
|  |           @run_duration = args[:run_duration] if args.key?(:run_duration) | ||
|  |           @step_id = args[:step_id] if args.key?(:step_id) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # A warning that Robo did not crawl potentially important parts of the app. | ||
|  |       class InsufficientCoverage | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # Additional details for an iOS app crash. | ||
|  |       class IosAppCrashed | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # A stacktrace. | ||
|  |         # Corresponds to the JSON property `stackTrace` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::StackTrace] | ||
|  |         attr_accessor :stack_trace | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @stack_trace = args[:stack_trace] if args.key?(:stack_trace) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # iOS app information | ||
|  |       class IosAppInfo | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # The name of the app. Required | ||
|  |         # Corresponds to the JSON property `name` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :name | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @name = args[:name] if args.key?(:name) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # A Robo test for an iOS application. | ||
|  |       class IosRoboTest | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # A iOS mobile test specification | ||
|  |       class IosTest | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # iOS app information | ||
|  |         # Corresponds to the JSON property `iosAppInfo` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::IosAppInfo] | ||
|  |         attr_accessor :ios_app_info | ||
|  |        | ||
|  |         # A Robo test for an iOS application. | ||
|  |         # Corresponds to the JSON property `iosRoboTest` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::IosRoboTest] | ||
|  |         attr_accessor :ios_robo_test | ||
|  |        | ||
|  |         # A game loop test of an iOS application. | ||
|  |         # Corresponds to the JSON property `iosTestLoop` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::IosTestLoop] | ||
|  |         attr_accessor :ios_test_loop | ||
|  |        | ||
|  |         # A test of an iOS application that uses the XCTest framework. | ||
|  |         # Corresponds to the JSON property `iosXcTest` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::IosXcTest] | ||
|  |         attr_accessor :ios_xc_test | ||
|  |        | ||
|  |         # A Duration represents a signed, fixed-length span of time represented as a | ||
|  |         # count of seconds and fractions of seconds at nanosecond resolution. It is | ||
|  |         # independent of any calendar and concepts like "day" or "month". It is related | ||
|  |         # to Timestamp in that the difference between two Timestamp values is a Duration | ||
|  |         # and it can be added or subtracted from a Timestamp. Range is approximately +- | ||
|  |         # 10,000 years. | ||
|  |         # Corresponds to the JSON property `testTimeout` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::Duration] | ||
|  |         attr_accessor :test_timeout | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @ios_app_info = args[:ios_app_info] if args.key?(:ios_app_info) | ||
|  |           @ios_robo_test = args[:ios_robo_test] if args.key?(:ios_robo_test) | ||
|  |           @ios_test_loop = args[:ios_test_loop] if args.key?(:ios_test_loop) | ||
|  |           @ios_xc_test = args[:ios_xc_test] if args.key?(:ios_xc_test) | ||
|  |           @test_timeout = args[:test_timeout] if args.key?(:test_timeout) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # A game loop test of an iOS application. | ||
|  |       class IosTestLoop | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # Bundle ID of the app. | ||
|  |         # Corresponds to the JSON property `bundleId` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :bundle_id | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @bundle_id = args[:bundle_id] if args.key?(:bundle_id) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # A test of an iOS application that uses the XCTest framework. | ||
|  |       class IosXcTest | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # Bundle ID of the app. | ||
|  |         # Corresponds to the JSON property `bundleId` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :bundle_id | ||
|  |        | ||
|  |         # Xcode version that the test was run with. | ||
|  |         # Corresponds to the JSON property `xcodeVersion` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :xcode_version | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @bundle_id = args[:bundle_id] if args.key?(:bundle_id) | ||
|  |           @xcode_version = args[:xcode_version] if args.key?(:xcode_version) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # Failed to find the launcher activity of an app. | ||
|  |       class LauncherActivityNotFound | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # Response message for EnvironmentService.ListEnvironments. | ||
|  |       class ListEnvironmentsResponse | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # Environments. Always set. | ||
|  |         # Corresponds to the JSON property `environments` | ||
|  |         # @return [Array<Google::Apis::ToolresultsV1beta3::Environment>] | ||
|  |         attr_accessor :environments | ||
|  |        | ||
|  |         # A Execution id Always set. | ||
|  |         # Corresponds to the JSON property `executionId` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :execution_id | ||
|  |        | ||
|  |         # A History id. Always set. | ||
|  |         # Corresponds to the JSON property `historyId` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :history_id | ||
|  |        | ||
|  |         # A continuation token to resume the query at the next item. Will only be set if | ||
|  |         # there are more Environments to fetch. | ||
|  |         # Corresponds to the JSON property `nextPageToken` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :next_page_token | ||
|  |        | ||
|  |         # A Project id. Always set. | ||
|  |         # Corresponds to the JSON property `projectId` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :project_id | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @environments = args[:environments] if args.key?(:environments) | ||
|  |           @execution_id = args[:execution_id] if args.key?(:execution_id) | ||
|  |           @history_id = args[:history_id] if args.key?(:history_id) | ||
|  |           @next_page_token = args[:next_page_token] if args.key?(:next_page_token) | ||
|  |           @project_id = args[:project_id] if args.key?(:project_id) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       #  | ||
|  |       class ListExecutionsResponse | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # Executions. Always set. | ||
|  |         # Corresponds to the JSON property `executions` | ||
|  |         # @return [Array<Google::Apis::ToolresultsV1beta3::Execution>] | ||
|  |         attr_accessor :executions | ||
|  |        | ||
|  |         # A continuation token to resume the query at the next item. Will only be set if | ||
|  |         # there are more Executions to fetch. | ||
|  |         # Corresponds to the JSON property `nextPageToken` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :next_page_token | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @executions = args[:executions] if args.key?(:executions) | ||
|  |           @next_page_token = args[:next_page_token] if args.key?(:next_page_token) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # Response message for HistoryService.List | ||
|  |       class ListHistoriesResponse | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # Histories. | ||
|  |         # Corresponds to the JSON property `histories` | ||
|  |         # @return [Array<Google::Apis::ToolresultsV1beta3::History>] | ||
|  |         attr_accessor :histories | ||
|  |        | ||
|  |         # A continuation token to resume the query at the next item. Will only be set if | ||
|  |         # there are more histories to fetch. Tokens are valid for up to one hour from | ||
|  |         # the time of the first list request. For instance, if you make a list request | ||
|  |         # at 1PM and use the token from this first request 10 minutes later, the token | ||
|  |         # from this second response will only be valid for 50 minutes. | ||
|  |         # Corresponds to the JSON property `nextPageToken` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :next_page_token | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @histories = args[:histories] if args.key?(:histories) | ||
|  |           @next_page_token = args[:next_page_token] if args.key?(:next_page_token) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       #  | ||
|  |       class ListPerfSampleSeriesResponse | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # The resulting PerfSampleSeries sorted by id | ||
|  |         # Corresponds to the JSON property `perfSampleSeries` | ||
|  |         # @return [Array<Google::Apis::ToolresultsV1beta3::PerfSampleSeries>] | ||
|  |         attr_accessor :perf_sample_series | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @perf_sample_series = args[:perf_sample_series] if args.key?(:perf_sample_series) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       #  | ||
|  |       class ListPerfSamplesResponse | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # Optional, returned if result size exceeds the page size specified in the | ||
|  |         # request (or the default page size, 500, if unspecified). It indicates the last | ||
|  |         # sample timestamp to be used as page_token in subsequent request | ||
|  |         # Corresponds to the JSON property `nextPageToken` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :next_page_token | ||
|  |        | ||
|  |         #  | ||
|  |         # Corresponds to the JSON property `perfSamples` | ||
|  |         # @return [Array<Google::Apis::ToolresultsV1beta3::PerfSample>] | ||
|  |         attr_accessor :perf_samples | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @next_page_token = args[:next_page_token] if args.key?(:next_page_token) | ||
|  |           @perf_samples = args[:perf_samples] if args.key?(:perf_samples) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       #  | ||
|  |       class ListScreenshotClustersResponse | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # The set of clusters associated with an execution Always set | ||
|  |         # Corresponds to the JSON property `clusters` | ||
|  |         # @return [Array<Google::Apis::ToolresultsV1beta3::ScreenshotCluster>] | ||
|  |         attr_accessor :clusters | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @clusters = args[:clusters] if args.key?(:clusters) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # Response message for AccessibilityService.ListStepAccessibilityClusters. | ||
|  |       class ListStepAccessibilityClustersResponse | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # A sequence of accessibility suggestions, grouped into clusters. Within the | ||
|  |         # sequence, clusters that belong to the same SuggestionCategory should be | ||
|  |         # adjacent. Within each category, clusters should be ordered by their | ||
|  |         # SuggestionPriority (ERRORs first). The categories should be ordered by their | ||
|  |         # highest priority cluster. | ||
|  |         # Corresponds to the JSON property `clusters` | ||
|  |         # @return [Array<Google::Apis::ToolresultsV1beta3::SuggestionClusterProto>] | ||
|  |         attr_accessor :clusters | ||
|  |        | ||
|  |         # A full resource name of the step. For example, projects/my-project/histories/ | ||
|  |         # bh.1234567890abcdef/executions/ 1234567890123456789/steps/bs.1234567890abcdef | ||
|  |         # Always presents. | ||
|  |         # Corresponds to the JSON property `name` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :name | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @clusters = args[:clusters] if args.key?(:clusters) | ||
|  |           @name = args[:name] if args.key?(:name) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # A response containing the thumbnails in a step. | ||
|  |       class ListStepThumbnailsResponse | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # A continuation token to resume the query at the next item. If set, indicates | ||
|  |         # that there are more thumbnails to read, by calling list again with this value | ||
|  |         # in the page_token field. | ||
|  |         # Corresponds to the JSON property `nextPageToken` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :next_page_token | ||
|  |        | ||
|  |         # A list of image data. Images are returned in a deterministic order; they are | ||
|  |         # ordered by these factors, in order of importance: * First, by their associated | ||
|  |         # test case. Images without a test case are considered greater than images with | ||
|  |         # one. * Second, by their creation time. Images without a creation time are | ||
|  |         # greater than images with one. * Third, by the order in which they were added | ||
|  |         # to the step (by calls to CreateStep or UpdateStep). | ||
|  |         # Corresponds to the JSON property `thumbnails` | ||
|  |         # @return [Array<Google::Apis::ToolresultsV1beta3::Image>] | ||
|  |         attr_accessor :thumbnails | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @next_page_token = args[:next_page_token] if args.key?(:next_page_token) | ||
|  |           @thumbnails = args[:thumbnails] if args.key?(:thumbnails) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # Response message for StepService.List. | ||
|  |       class ListStepsResponse | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # A continuation token to resume the query at the next item. If set, indicates | ||
|  |         # that there are more steps to read, by calling list again with this value in | ||
|  |         # the page_token field. | ||
|  |         # Corresponds to the JSON property `nextPageToken` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :next_page_token | ||
|  |        | ||
|  |         # Steps. | ||
|  |         # Corresponds to the JSON property `steps` | ||
|  |         # @return [Array<Google::Apis::ToolresultsV1beta3::Step>] | ||
|  |         attr_accessor :steps | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @next_page_token = args[:next_page_token] if args.key?(:next_page_token) | ||
|  |           @steps = args[:steps] if args.key?(:steps) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # Response message for StepService.ListTestCases. | ||
|  |       class ListTestCasesResponse | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         #  | ||
|  |         # Corresponds to the JSON property `nextPageToken` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :next_page_token | ||
|  |        | ||
|  |         # List of test cases. | ||
|  |         # Corresponds to the JSON property `testCases` | ||
|  |         # @return [Array<Google::Apis::ToolresultsV1beta3::TestCase>] | ||
|  |         attr_accessor :test_cases | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @next_page_token = args[:next_page_token] if args.key?(:next_page_token) | ||
|  |           @test_cases = args[:test_cases] if args.key?(:test_cases) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # One dimension of the matrix of different runs of a step. | ||
|  |       class MatrixDimensionDefinition | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       #  | ||
|  |       class MemoryInfo | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # Maximum memory that can be allocated to the process in KiB | ||
|  |         # Corresponds to the JSON property `memoryCapInKibibyte` | ||
|  |         # @return [Fixnum] | ||
|  |         attr_accessor :memory_cap_in_kibibyte | ||
|  |        | ||
|  |         # Total memory available on the device in KiB | ||
|  |         # Corresponds to the JSON property `memoryTotalInKibibyte` | ||
|  |         # @return [Fixnum] | ||
|  |         attr_accessor :memory_total_in_kibibyte | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @memory_cap_in_kibibyte = args[:memory_cap_in_kibibyte] if args.key?(:memory_cap_in_kibibyte) | ||
|  |           @memory_total_in_kibibyte = args[:memory_total_in_kibibyte] if args.key?(:memory_total_in_kibibyte) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # Merged test result for environment. If the environment has only one step (no | ||
|  |       # reruns or shards), then the merged result is the same as the step result. If | ||
|  |       # the environment has multiple shards and/or reruns, then the results of shards | ||
|  |       # and reruns that belong to the same environment are merged into one environment | ||
|  |       # result. | ||
|  |       class MergedResult | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # Interprets a result so that humans and machines can act on it. | ||
|  |         # Corresponds to the JSON property `outcome` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::Outcome] | ||
|  |         attr_accessor :outcome | ||
|  |        | ||
|  |         # State of the resource | ||
|  |         # Corresponds to the JSON property `state` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :state | ||
|  |        | ||
|  |         # The combined and rolled-up result of each test suite that was run as part of | ||
|  |         # this environment. Combining: When the test cases from a suite are run in | ||
|  |         # different steps (sharding), the results are added back together in one | ||
|  |         # overview. (e.g., if shard1 has 2 failures and shard2 has 1 failure than the | ||
|  |         # overview failure_count = 3). Rollup: When test cases from the same suite are | ||
|  |         # run multiple times (flaky), the results are combined (e.g., if testcase1.run1 | ||
|  |         # fails, testcase1.run2 passes, and both testcase2.run1 and testcase2.run2 fail | ||
|  |         # then the overview flaky_count = 1 and failure_count = 1). | ||
|  |         # Corresponds to the JSON property `testSuiteOverviews` | ||
|  |         # @return [Array<Google::Apis::ToolresultsV1beta3::TestSuiteOverview>] | ||
|  |         attr_accessor :test_suite_overviews | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @outcome = args[:outcome] if args.key?(:outcome) | ||
|  |           @state = args[:state] if args.key?(:state) | ||
|  |           @test_suite_overviews = args[:test_suite_overviews] if args.key?(:test_suite_overviews) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # Details when multiple steps are run with the same configuration as a group. | ||
|  |       class MultiStep | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # Unique int given to each step. Ranges from 0(inclusive) to total number of | ||
|  |         # steps(exclusive). The primary step is 0. | ||
|  |         # Corresponds to the JSON property `multistepNumber` | ||
|  |         # @return [Fixnum] | ||
|  |         attr_accessor :multistep_number | ||
|  |        | ||
|  |         # Stores rollup test status of multiple steps that were run as a group and | ||
|  |         # outcome of each individual step. | ||
|  |         # Corresponds to the JSON property `primaryStep` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::PrimaryStep] | ||
|  |         attr_accessor :primary_step | ||
|  |        | ||
|  |         # Step Id of the primary (original) step, which might be this step. | ||
|  |         # Corresponds to the JSON property `primaryStepId` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :primary_step_id | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @multistep_number = args[:multistep_number] if args.key?(:multistep_number) | ||
|  |           @primary_step = args[:primary_step] if args.key?(:primary_step) | ||
|  |           @primary_step_id = args[:primary_step_id] if args.key?(:primary_step_id) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # Additional details for a native crash. | ||
|  |       class NativeCrash | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # A stacktrace. | ||
|  |         # Corresponds to the JSON property `stackTrace` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::StackTrace] | ||
|  |         attr_accessor :stack_trace | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @stack_trace = args[:stack_trace] if args.key?(:stack_trace) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # A non-sdk API and examples of it being called along with other metadata See | ||
|  |       # https://developer.android.com/distribute/best-practices/develop/restrictions- | ||
|  |       # non-sdk-interfaces | ||
|  |       class NonSdkApi | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # The signature of the Non-SDK API | ||
|  |         # Corresponds to the JSON property `apiSignature` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :api_signature | ||
|  |        | ||
|  |         # Example stack traces of this API being called. | ||
|  |         # Corresponds to the JSON property `exampleStackTraces` | ||
|  |         # @return [Array<String>] | ||
|  |         attr_accessor :example_stack_traces | ||
|  |        | ||
|  |         # Optional debugging insights for non-SDK API violations. | ||
|  |         # Corresponds to the JSON property `insights` | ||
|  |         # @return [Array<Google::Apis::ToolresultsV1beta3::NonSdkApiInsight>] | ||
|  |         attr_accessor :insights | ||
|  |        | ||
|  |         # The total number of times this API was observed to have been called. | ||
|  |         # Corresponds to the JSON property `invocationCount` | ||
|  |         # @return [Fixnum] | ||
|  |         attr_accessor :invocation_count | ||
|  |        | ||
|  |         # Which list this API appears on | ||
|  |         # Corresponds to the JSON property `list` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :list | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @api_signature = args[:api_signature] if args.key?(:api_signature) | ||
|  |           @example_stack_traces = args[:example_stack_traces] if args.key?(:example_stack_traces) | ||
|  |           @insights = args[:insights] if args.key?(:insights) | ||
|  |           @invocation_count = args[:invocation_count] if args.key?(:invocation_count) | ||
|  |           @list = args[:list] if args.key?(:list) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # Non-SDK API insights (to address debugging solutions). | ||
|  |       class NonSdkApiInsight | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # Optional sample stack traces, for which this insight applies (there should be | ||
|  |         # at least one). | ||
|  |         # Corresponds to the JSON property `exampleTraceMessages` | ||
|  |         # @return [Array<String>] | ||
|  |         attr_accessor :example_trace_messages | ||
|  |        | ||
|  |         # A unique ID, to be used for determining the effectiveness of this particular | ||
|  |         # insight in the context of a matcher. (required) | ||
|  |         # Corresponds to the JSON property `matcherId` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :matcher_id | ||
|  |        | ||
|  |         # This insight indicates that the hidden API usage originates from a Google- | ||
|  |         # provided library. Users need not take any action. | ||
|  |         # Corresponds to the JSON property `pendingGoogleUpdateInsight` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::PendingGoogleUpdateInsight] | ||
|  |         attr_accessor :pending_google_update_insight | ||
|  |        | ||
|  |         # This insight is a recommendation to upgrade a given library to the specified | ||
|  |         # version, in order to avoid dependencies on non-SDK APIs. | ||
|  |         # Corresponds to the JSON property `upgradeInsight` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::UpgradeInsight] | ||
|  |         attr_accessor :upgrade_insight | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @example_trace_messages = args[:example_trace_messages] if args.key?(:example_trace_messages) | ||
|  |           @matcher_id = args[:matcher_id] if args.key?(:matcher_id) | ||
|  |           @pending_google_update_insight = args[:pending_google_update_insight] if args.key?(:pending_google_update_insight) | ||
|  |           @upgrade_insight = args[:upgrade_insight] if args.key?(:upgrade_insight) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # Additional details for a non-sdk API usage violation. | ||
|  |       class NonSdkApiUsageViolation | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # Signatures of a subset of those hidden API's. | ||
|  |         # Corresponds to the JSON property `apiSignatures` | ||
|  |         # @return [Array<String>] | ||
|  |         attr_accessor :api_signatures | ||
|  |        | ||
|  |         # Total number of unique hidden API's accessed. | ||
|  |         # Corresponds to the JSON property `uniqueApis` | ||
|  |         # @return [Fixnum] | ||
|  |         attr_accessor :unique_apis | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @api_signatures = args[:api_signatures] if args.key?(:api_signatures) | ||
|  |           @unique_apis = args[:unique_apis] if args.key?(:unique_apis) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # Contains a summary and examples of non-sdk API usage violations. | ||
|  |       class NonSdkApiUsageViolationReport | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # Examples of the detected API usages. | ||
|  |         # Corresponds to the JSON property `exampleApis` | ||
|  |         # @return [Array<Google::Apis::ToolresultsV1beta3::NonSdkApi>] | ||
|  |         attr_accessor :example_apis | ||
|  |        | ||
|  |         # Minimum API level required for the application to run. | ||
|  |         # Corresponds to the JSON property `minSdkVersion` | ||
|  |         # @return [Fixnum] | ||
|  |         attr_accessor :min_sdk_version | ||
|  |        | ||
|  |         # Specifies the API Level on which the application is designed to run. | ||
|  |         # Corresponds to the JSON property `targetSdkVersion` | ||
|  |         # @return [Fixnum] | ||
|  |         attr_accessor :target_sdk_version | ||
|  |        | ||
|  |         # Total number of unique Non-SDK API's accessed. | ||
|  |         # Corresponds to the JSON property `uniqueApis` | ||
|  |         # @return [Fixnum] | ||
|  |         attr_accessor :unique_apis | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @example_apis = args[:example_apis] if args.key?(:example_apis) | ||
|  |           @min_sdk_version = args[:min_sdk_version] if args.key?(:min_sdk_version) | ||
|  |           @target_sdk_version = args[:target_sdk_version] if args.key?(:target_sdk_version) | ||
|  |           @unique_apis = args[:unique_apis] if args.key?(:unique_apis) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # Interprets a result so that humans and machines can act on it. | ||
|  |       class Outcome | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # Details for an outcome with a FAILURE outcome summary. | ||
|  |         # Corresponds to the JSON property `failureDetail` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::FailureDetail] | ||
|  |         attr_accessor :failure_detail | ||
|  |        | ||
|  |         # Details for an outcome with an INCONCLUSIVE outcome summary. | ||
|  |         # Corresponds to the JSON property `inconclusiveDetail` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::InconclusiveDetail] | ||
|  |         attr_accessor :inconclusive_detail | ||
|  |        | ||
|  |         # Details for an outcome with a SKIPPED outcome summary. | ||
|  |         # Corresponds to the JSON property `skippedDetail` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::SkippedDetail] | ||
|  |         attr_accessor :skipped_detail | ||
|  |        | ||
|  |         # Details for an outcome with a SUCCESS outcome summary. LINT.IfChange | ||
|  |         # Corresponds to the JSON property `successDetail` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::SuccessDetail] | ||
|  |         attr_accessor :success_detail | ||
|  |        | ||
|  |         # The simplest way to interpret a result. Required | ||
|  |         # Corresponds to the JSON property `summary` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :summary | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @failure_detail = args[:failure_detail] if args.key?(:failure_detail) | ||
|  |           @inconclusive_detail = args[:inconclusive_detail] if args.key?(:inconclusive_detail) | ||
|  |           @skipped_detail = args[:skipped_detail] if args.key?(:skipped_detail) | ||
|  |           @success_detail = args[:success_detail] if args.key?(:success_detail) | ||
|  |           @summary = args[:summary] if args.key?(:summary) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # A warning that Robo encountered a screen that has overlapping clickable | ||
|  |       # elements; this may indicate a potential UI issue. | ||
|  |       class OverlappingUiElements | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # Resource names of the overlapping screen elements | ||
|  |         # Corresponds to the JSON property `resourceName` | ||
|  |         # @return [Array<String>] | ||
|  |         attr_accessor :resource_name | ||
|  |        | ||
|  |         # The screen id of the elements | ||
|  |         # Corresponds to the JSON property `screenId` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :screen_id | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @resource_name = args[:resource_name] if args.key?(:resource_name) | ||
|  |           @screen_id = args[:screen_id] if args.key?(:screen_id) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # This insight indicates that the hidden API usage originates from a Google- | ||
|  |       # provided library. Users need not take any action. | ||
|  |       class PendingGoogleUpdateInsight | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # The name of the Google-provided library with the non-SDK API dependency. | ||
|  |         # Corresponds to the JSON property `nameOfGoogleLibrary` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :name_of_google_library | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @name_of_google_library = args[:name_of_google_library] if args.key?(:name_of_google_library) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # Encapsulates performance environment info | ||
|  |       class PerfEnvironment | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # CPU related environment info | ||
|  |         # Corresponds to the JSON property `cpuInfo` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::CpuInfo] | ||
|  |         attr_accessor :cpu_info | ||
|  |        | ||
|  |         # Memory related environment info | ||
|  |         # Corresponds to the JSON property `memoryInfo` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::MemoryInfo] | ||
|  |         attr_accessor :memory_info | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @cpu_info = args[:cpu_info] if args.key?(:cpu_info) | ||
|  |           @memory_info = args[:memory_info] if args.key?(:memory_info) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # A summary of perf metrics collected and performance environment info | ||
|  |       class PerfMetricsSummary | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         #  | ||
|  |         # Corresponds to the JSON property `appStartTime` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::AppStartTime] | ||
|  |         attr_accessor :app_start_time | ||
|  |        | ||
|  |         # A tool results execution ID. @OutputOnly | ||
|  |         # Corresponds to the JSON property `executionId` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :execution_id | ||
|  |        | ||
|  |         # Graphics statistics for the App. The information is collected from 'adb shell | ||
|  |         # dumpsys graphicsstats'. For more info see: https://developer.android.com/ | ||
|  |         # training/testing/performance.html Statistics will only be present for API 23+. | ||
|  |         # Corresponds to the JSON property `graphicsStats` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::GraphicsStats] | ||
|  |         attr_accessor :graphics_stats | ||
|  |        | ||
|  |         # A tool results history ID. @OutputOnly | ||
|  |         # Corresponds to the JSON property `historyId` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :history_id | ||
|  |        | ||
|  |         # Encapsulates performance environment info | ||
|  |         # Corresponds to the JSON property `perfEnvironment` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::PerfEnvironment] | ||
|  |         attr_accessor :perf_environment | ||
|  |        | ||
|  |         # Set of resource collected | ||
|  |         # Corresponds to the JSON property `perfMetrics` | ||
|  |         # @return [Array<String>] | ||
|  |         attr_accessor :perf_metrics | ||
|  |        | ||
|  |         # The cloud project @OutputOnly | ||
|  |         # Corresponds to the JSON property `projectId` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :project_id | ||
|  |        | ||
|  |         # A tool results step ID. @OutputOnly | ||
|  |         # Corresponds to the JSON property `stepId` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :step_id | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @app_start_time = args[:app_start_time] if args.key?(:app_start_time) | ||
|  |           @execution_id = args[:execution_id] if args.key?(:execution_id) | ||
|  |           @graphics_stats = args[:graphics_stats] if args.key?(:graphics_stats) | ||
|  |           @history_id = args[:history_id] if args.key?(:history_id) | ||
|  |           @perf_environment = args[:perf_environment] if args.key?(:perf_environment) | ||
|  |           @perf_metrics = args[:perf_metrics] if args.key?(:perf_metrics) | ||
|  |           @project_id = args[:project_id] if args.key?(:project_id) | ||
|  |           @step_id = args[:step_id] if args.key?(:step_id) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # Resource representing a single performance measure or data point | ||
|  |       class PerfSample | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # A Timestamp represents a point in time independent of any time zone or local | ||
|  |         # calendar, encoded as a count of seconds and fractions of seconds at nanosecond | ||
|  |         # resolution. The count is relative to an epoch at UTC midnight on January 1, | ||
|  |         # 1970, in the proleptic Gregorian calendar which extends the Gregorian calendar | ||
|  |         # backwards to year one. All minutes are 60 seconds long. Leap seconds are " | ||
|  |         # smeared" so that no leap second table is needed for interpretation, using a [ | ||
|  |         # 24-hour linear smear](https://developers.google.com/time/smear). The range is | ||
|  |         # from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By restricting to | ||
|  |         # that range, we ensure that we can convert to and from [RFC 3339](https://www. | ||
|  |         # ietf.org/rfc/rfc3339.txt) date strings. | ||
|  |         # Corresponds to the JSON property `sampleTime` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::Timestamp] | ||
|  |         attr_accessor :sample_time | ||
|  |        | ||
|  |         # Value observed | ||
|  |         # Corresponds to the JSON property `value` | ||
|  |         # @return [Float] | ||
|  |         attr_accessor :value | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @sample_time = args[:sample_time] if args.key?(:sample_time) | ||
|  |           @value = args[:value] if args.key?(:value) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # Resource representing a collection of performance samples (or data points) | ||
|  |       class PerfSampleSeries | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # Encapsulates the metadata for basic sample series represented by a line chart | ||
|  |         # Corresponds to the JSON property `basicPerfSampleSeries` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::BasicPerfSampleSeries] | ||
|  |         attr_accessor :basic_perf_sample_series | ||
|  |        | ||
|  |         # A tool results execution ID. @OutputOnly | ||
|  |         # Corresponds to the JSON property `executionId` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :execution_id | ||
|  |        | ||
|  |         # A tool results history ID. @OutputOnly | ||
|  |         # Corresponds to the JSON property `historyId` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :history_id | ||
|  |        | ||
|  |         # The cloud project @OutputOnly | ||
|  |         # Corresponds to the JSON property `projectId` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :project_id | ||
|  |        | ||
|  |         # A sample series id @OutputOnly | ||
|  |         # Corresponds to the JSON property `sampleSeriesId` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :sample_series_id | ||
|  |        | ||
|  |         # A tool results step ID. @OutputOnly | ||
|  |         # Corresponds to the JSON property `stepId` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :step_id | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @basic_perf_sample_series = args[:basic_perf_sample_series] if args.key?(:basic_perf_sample_series) | ||
|  |           @execution_id = args[:execution_id] if args.key?(:execution_id) | ||
|  |           @history_id = args[:history_id] if args.key?(:history_id) | ||
|  |           @project_id = args[:project_id] if args.key?(:project_id) | ||
|  |           @sample_series_id = args[:sample_series_id] if args.key?(:sample_series_id) | ||
|  |           @step_id = args[:step_id] if args.key?(:step_id) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # A notification that Robo signed in with Google. | ||
|  |       class PerformedGoogleLogin | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # A notification that Robo performed some monkey actions. | ||
|  |       class PerformedMonkeyActions | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # The total number of monkey actions performed during the crawl. | ||
|  |         # Corresponds to the JSON property `totalActions` | ||
|  |         # @return [Fixnum] | ||
|  |         attr_accessor :total_actions | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @total_actions = args[:total_actions] if args.key?(:total_actions) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # Stores rollup test status of multiple steps that were run as a group and | ||
|  |       # outcome of each individual step. | ||
|  |       class PrimaryStep | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # Step Id and outcome of each individual step. | ||
|  |         # Corresponds to the JSON property `individualOutcome` | ||
|  |         # @return [Array<Google::Apis::ToolresultsV1beta3::IndividualOutcome>] | ||
|  |         attr_accessor :individual_outcome | ||
|  |        | ||
|  |         # Rollup test status of multiple steps that were run with the same configuration | ||
|  |         # as a group. | ||
|  |         # Corresponds to the JSON property `rollUp` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :roll_up | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @individual_outcome = args[:individual_outcome] if args.key?(:individual_outcome) | ||
|  |           @roll_up = args[:roll_up] if args.key?(:roll_up) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # Per-project settings for the Tool Results service. | ||
|  |       class ProjectSettings | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # The name of the Google Cloud Storage bucket to which results are written. By | ||
|  |         # default, this is unset. In update request: optional In response: optional | ||
|  |         # Corresponds to the JSON property `defaultBucket` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :default_bucket | ||
|  |        | ||
|  |         # The name of the project's settings. Always of the form: projects/`project-id`/ | ||
|  |         # settings In update request: never set In response: always set | ||
|  |         # Corresponds to the JSON property `name` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :name | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @default_bucket = args[:default_bucket] if args.key?(:default_bucket) | ||
|  |           @name = args[:name] if args.key?(:name) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # Request message for StepService.PublishXunitXmlFiles. | ||
|  |       class PublishXunitXmlFilesRequest | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # URI of the Xunit XML files to publish. The maximum size of the file this | ||
|  |         # reference is pointing to is 50MB. Required. | ||
|  |         # Corresponds to the JSON property `xunitXmlFiles` | ||
|  |         # @return [Array<Google::Apis::ToolresultsV1beta3::FileReference>] | ||
|  |         attr_accessor :xunit_xml_files | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @xunit_xml_files = args[:xunit_xml_files] if args.key?(:xunit_xml_files) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # A rectangular region. | ||
|  |       class RegionProto | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # The height, in pixels. Always set. | ||
|  |         # Corresponds to the JSON property `heightPx` | ||
|  |         # @return [Fixnum] | ||
|  |         attr_accessor :height_px | ||
|  |        | ||
|  |         # The left side of the rectangle, in pixels. Always set. | ||
|  |         # Corresponds to the JSON property `leftPx` | ||
|  |         # @return [Fixnum] | ||
|  |         attr_accessor :left_px | ||
|  |        | ||
|  |         # The top of the rectangle, in pixels. Always set. | ||
|  |         # Corresponds to the JSON property `topPx` | ||
|  |         # @return [Fixnum] | ||
|  |         attr_accessor :top_px | ||
|  |        | ||
|  |         # The width, in pixels. Always set. | ||
|  |         # Corresponds to the JSON property `widthPx` | ||
|  |         # @return [Fixnum] | ||
|  |         attr_accessor :width_px | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @height_px = args[:height_px] if args.key?(:height_px) | ||
|  |           @left_px = args[:left_px] if args.key?(:left_px) | ||
|  |           @top_px = args[:top_px] if args.key?(:top_px) | ||
|  |           @width_px = args[:width_px] if args.key?(:width_px) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # The storage for test results. | ||
|  |       class ResultsStorage | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # A reference to a file. | ||
|  |         # Corresponds to the JSON property `resultsStoragePath` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::FileReference] | ||
|  |         attr_accessor :results_storage_path | ||
|  |        | ||
|  |         # A reference to a file. | ||
|  |         # Corresponds to the JSON property `xunitXmlFile` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::FileReference] | ||
|  |         attr_accessor :xunit_xml_file | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @results_storage_path = args[:results_storage_path] if args.key?(:results_storage_path) | ||
|  |           @xunit_xml_file = args[:xunit_xml_file] if args.key?(:xunit_xml_file) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # Execution stats for a user-provided Robo script. | ||
|  |       class RoboScriptExecution | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # The number of Robo script actions executed successfully. | ||
|  |         # Corresponds to the JSON property `successfulActions` | ||
|  |         # @return [Fixnum] | ||
|  |         attr_accessor :successful_actions | ||
|  |        | ||
|  |         # The total number of actions in the Robo script. | ||
|  |         # Corresponds to the JSON property `totalActions` | ||
|  |         # @return [Fixnum] | ||
|  |         attr_accessor :total_actions | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @successful_actions = args[:successful_actions] if args.key?(:successful_actions) | ||
|  |           @total_actions = args[:total_actions] if args.key?(:total_actions) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # IMPORTANT: It is unsafe to accept this message from an untrusted source, since | ||
|  |       # it's trivial for an attacker to forge serialized messages that don't fulfill | ||
|  |       # the type's safety contract -- for example, it could contain attacker | ||
|  |       # controlled script. A system which receives a SafeHtmlProto implicitly trusts | ||
|  |       # the producer of the SafeHtmlProto. So, it's generally safe to return this | ||
|  |       # message in RPC responses, but generally unsafe to accept it in RPC requests. | ||
|  |       class SafeHtmlProto | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # IMPORTANT: Never set or read this field, even from tests, it is private. See | ||
|  |         # documentation at the top of .proto file for programming language packages with | ||
|  |         # which to create or read this message. | ||
|  |         # Corresponds to the JSON property `privateDoNotAccessOrElseSafeHtmlWrappedValue` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :private_do_not_access_or_else_safe_html_wrapped_value | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @private_do_not_access_or_else_safe_html_wrapped_value = args[:private_do_not_access_or_else_safe_html_wrapped_value] if args.key?(:private_do_not_access_or_else_safe_html_wrapped_value) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       #  | ||
|  |       class Screen | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # File reference of the png file. Required. | ||
|  |         # Corresponds to the JSON property `fileReference` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :file_reference | ||
|  |        | ||
|  |         # Locale of the device that the screenshot was taken on. Required. | ||
|  |         # Corresponds to the JSON property `locale` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :locale | ||
|  |        | ||
|  |         # Model of the device that the screenshot was taken on. Required. | ||
|  |         # Corresponds to the JSON property `model` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :model | ||
|  |        | ||
|  |         # OS version of the device that the screenshot was taken on. Required. | ||
|  |         # Corresponds to the JSON property `version` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :version | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @file_reference = args[:file_reference] if args.key?(:file_reference) | ||
|  |           @locale = args[:locale] if args.key?(:locale) | ||
|  |           @model = args[:model] if args.key?(:model) | ||
|  |           @version = args[:version] if args.key?(:version) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       #  | ||
|  |       class ScreenshotCluster | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # A string that describes the activity of every screen in the cluster. | ||
|  |         # Corresponds to the JSON property `activity` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :activity | ||
|  |        | ||
|  |         # A unique identifier for the cluster. @OutputOnly | ||
|  |         # Corresponds to the JSON property `clusterId` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :cluster_id | ||
|  |        | ||
|  |         # A singular screen that represents the cluster as a whole. This screen will act | ||
|  |         # as the "cover" of the entire cluster. When users look at the clusters, only | ||
|  |         # the key screen from each cluster will be shown. Which screen is the key screen | ||
|  |         # is determined by the ClusteringAlgorithm | ||
|  |         # Corresponds to the JSON property `keyScreen` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::Screen] | ||
|  |         attr_accessor :key_screen | ||
|  |        | ||
|  |         # Full list of screens. | ||
|  |         # Corresponds to the JSON property `screens` | ||
|  |         # @return [Array<Google::Apis::ToolresultsV1beta3::Screen>] | ||
|  |         attr_accessor :screens | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @activity = args[:activity] if args.key?(:activity) | ||
|  |           @cluster_id = args[:cluster_id] if args.key?(:cluster_id) | ||
|  |           @key_screen = args[:key_screen] if args.key?(:key_screen) | ||
|  |           @screens = args[:screens] if args.key?(:screens) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # Result summary for a shard in an environment. | ||
|  |       class ShardSummary | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # Summaries of the steps belonging to the shard. With flaky_test_attempts | ||
|  |         # enabled from TestExecutionService, more than one run (Step) can present. And | ||
|  |         # the runs will be sorted by multistep_number. | ||
|  |         # Corresponds to the JSON property `runs` | ||
|  |         # @return [Array<Google::Apis::ToolresultsV1beta3::StepSummary>] | ||
|  |         attr_accessor :runs | ||
|  |        | ||
|  |         # Merged test result for environment. If the environment has only one step (no | ||
|  |         # reruns or shards), then the merged result is the same as the step result. If | ||
|  |         # the environment has multiple shards and/or reruns, then the results of shards | ||
|  |         # and reruns that belong to the same environment are merged into one environment | ||
|  |         # result. | ||
|  |         # Corresponds to the JSON property `shardResult` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::MergedResult] | ||
|  |         attr_accessor :shard_result | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @runs = args[:runs] if args.key?(:runs) | ||
|  |           @shard_result = args[:shard_result] if args.key?(:shard_result) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # Details for an outcome with a SKIPPED outcome summary. | ||
|  |       class SkippedDetail | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # If the App doesn't support the specific API level. | ||
|  |         # Corresponds to the JSON property `incompatibleAppVersion` | ||
|  |         # @return [Boolean] | ||
|  |         attr_accessor :incompatible_app_version | ||
|  |         alias_method :incompatible_app_version?, :incompatible_app_version | ||
|  |        | ||
|  |         # If the App doesn't run on the specific architecture, for example, x86. | ||
|  |         # Corresponds to the JSON property `incompatibleArchitecture` | ||
|  |         # @return [Boolean] | ||
|  |         attr_accessor :incompatible_architecture | ||
|  |         alias_method :incompatible_architecture?, :incompatible_architecture | ||
|  |        | ||
|  |         # If the requested OS version doesn't run on the specific device model. | ||
|  |         # Corresponds to the JSON property `incompatibleDevice` | ||
|  |         # @return [Boolean] | ||
|  |         attr_accessor :incompatible_device | ||
|  |         alias_method :incompatible_device?, :incompatible_device | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @incompatible_app_version = args[:incompatible_app_version] if args.key?(:incompatible_app_version) | ||
|  |           @incompatible_architecture = args[:incompatible_architecture] if args.key?(:incompatible_architecture) | ||
|  |           @incompatible_device = args[:incompatible_device] if args.key?(:incompatible_device) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # The details about how to run the execution. | ||
|  |       class Specification | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # An Android mobile test specification. | ||
|  |         # Corresponds to the JSON property `androidTest` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::AndroidTest] | ||
|  |         attr_accessor :android_test | ||
|  |        | ||
|  |         # A iOS mobile test specification | ||
|  |         # Corresponds to the JSON property `iosTest` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::IosTest] | ||
|  |         attr_accessor :ios_test | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @android_test = args[:android_test] if args.key?(:android_test) | ||
|  |           @ios_test = args[:ios_test] if args.key?(:ios_test) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # A stacktrace. | ||
|  |       class StackTrace | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # The stack trace message. Required | ||
|  |         # Corresponds to the JSON property `exception` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :exception | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @exception = args[:exception] if args.key?(:exception) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # User provided intent failed to resolve to an activity. | ||
|  |       class StartActivityNotFound | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         #  | ||
|  |         # Corresponds to the JSON property `action` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :action | ||
|  |        | ||
|  |         #  | ||
|  |         # Corresponds to the JSON property `uri` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :uri | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @action = args[:action] if args.key?(:action) | ||
|  |           @uri = args[:uri] if args.key?(:uri) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # The `Status` type defines a logical error model that is suitable for different | ||
|  |       # programming environments, including REST APIs and RPC APIs. It is used by [ | ||
|  |       # gRPC](https://github.com/grpc). Each `Status` message contains three pieces of | ||
|  |       # data: error code, error message, and error details. You can find out more | ||
|  |       # about this error model and how to work with it in the [API Design Guide](https: | ||
|  |       # //cloud.google.com/apis/design/errors). | ||
|  |       class Status | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # The status code, which should be an enum value of google.rpc.Code. | ||
|  |         # Corresponds to the JSON property `code` | ||
|  |         # @return [Fixnum] | ||
|  |         attr_accessor :code | ||
|  |        | ||
|  |         # A list of messages that carry the error details. There is a common set of | ||
|  |         # message types for APIs to use. | ||
|  |         # Corresponds to the JSON property `details` | ||
|  |         # @return [Array<Hash<String,Object>>] | ||
|  |         attr_accessor :details | ||
|  |        | ||
|  |         # A developer-facing error message, which should be in English. Any user-facing | ||
|  |         # error message should be localized and sent in the google.rpc.Status.details | ||
|  |         # field, or localized by the client. | ||
|  |         # Corresponds to the JSON property `message` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :message | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @code = args[:code] if args.key?(:code) | ||
|  |           @details = args[:details] if args.key?(:details) | ||
|  |           @message = args[:message] if args.key?(:message) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # A Step represents a single operation performed as part of Execution. A step | ||
|  |       # can be used to represent the execution of a tool ( for example a test runner | ||
|  |       # execution or an execution of a compiler). Steps can overlap (for instance two | ||
|  |       # steps might have the same start time if some operations are done in parallel). | ||
|  |       # Here is an example, let's consider that we have a continuous build is | ||
|  |       # executing a test runner for each iteration. The workflow would look like: - | ||
|  |       # user creates a Execution with id 1 - user creates an TestExecutionStep with id | ||
|  |       # 100 for Execution 1 - user update TestExecutionStep with id 100 to add a raw | ||
|  |       # xml log + the service parses the xml logs and returns a TestExecutionStep with | ||
|  |       # updated TestResult(s). - user update the status of TestExecutionStep with id | ||
|  |       # 100 to COMPLETE A Step can be updated until its state is set to COMPLETE at | ||
|  |       # which points it becomes immutable. Next tag: 27 | ||
|  |       class Step | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # A Timestamp represents a point in time independent of any time zone or local | ||
|  |         # calendar, encoded as a count of seconds and fractions of seconds at nanosecond | ||
|  |         # resolution. The count is relative to an epoch at UTC midnight on January 1, | ||
|  |         # 1970, in the proleptic Gregorian calendar which extends the Gregorian calendar | ||
|  |         # backwards to year one. All minutes are 60 seconds long. Leap seconds are " | ||
|  |         # smeared" so that no leap second table is needed for interpretation, using a [ | ||
|  |         # 24-hour linear smear](https://developers.google.com/time/smear). The range is | ||
|  |         # from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By restricting to | ||
|  |         # that range, we ensure that we can convert to and from [RFC 3339](https://www. | ||
|  |         # ietf.org/rfc/rfc3339.txt) date strings. | ||
|  |         # Corresponds to the JSON property `completionTime` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::Timestamp] | ||
|  |         attr_accessor :completion_time | ||
|  |        | ||
|  |         # A Timestamp represents a point in time independent of any time zone or local | ||
|  |         # calendar, encoded as a count of seconds and fractions of seconds at nanosecond | ||
|  |         # resolution. The count is relative to an epoch at UTC midnight on January 1, | ||
|  |         # 1970, in the proleptic Gregorian calendar which extends the Gregorian calendar | ||
|  |         # backwards to year one. All minutes are 60 seconds long. Leap seconds are " | ||
|  |         # smeared" so that no leap second table is needed for interpretation, using a [ | ||
|  |         # 24-hour linear smear](https://developers.google.com/time/smear). The range is | ||
|  |         # from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By restricting to | ||
|  |         # that range, we ensure that we can convert to and from [RFC 3339](https://www. | ||
|  |         # ietf.org/rfc/rfc3339.txt) date strings. | ||
|  |         # Corresponds to the JSON property `creationTime` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::Timestamp] | ||
|  |         attr_accessor :creation_time | ||
|  |        | ||
|  |         # A description of this tool For example: mvn clean package -D skipTests=true - | ||
|  |         # In response: present if set by create/update request - In create/update | ||
|  |         # request: optional | ||
|  |         # Corresponds to the JSON property `description` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :description | ||
|  |        | ||
|  |         # A Duration represents a signed, fixed-length span of time represented as a | ||
|  |         # count of seconds and fractions of seconds at nanosecond resolution. It is | ||
|  |         # independent of any calendar and concepts like "day" or "month". It is related | ||
|  |         # to Timestamp in that the difference between two Timestamp values is a Duration | ||
|  |         # and it can be added or subtracted from a Timestamp. Range is approximately +- | ||
|  |         # 10,000 years. | ||
|  |         # Corresponds to the JSON property `deviceUsageDuration` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::Duration] | ||
|  |         attr_accessor :device_usage_duration | ||
|  |        | ||
|  |         # If the execution containing this step has any dimension_definition set, then | ||
|  |         # this field allows the child to specify the values of the dimensions. The keys | ||
|  |         # must exactly match the dimension_definition of the execution. For example, if | ||
|  |         # the execution has `dimension_definition = ['attempt', 'device']` then a step | ||
|  |         # must define values for those dimensions, eg. `dimension_value = ['attempt': '1' | ||
|  |         # , 'device': 'Nexus 6']` If a step does not participate in one dimension of the | ||
|  |         # matrix, the value for that dimension should be empty string. For example, if | ||
|  |         # one of the tests is executed by a runner which does not support retries, the | ||
|  |         # step could have `dimension_value = ['attempt': '', 'device': 'Nexus 6']` If | ||
|  |         # the step does not participate in any dimensions of the matrix, it may leave | ||
|  |         # dimension_value unset. A PRECONDITION_FAILED will be returned if any of the | ||
|  |         # keys do not exist in the dimension_definition of the execution. A | ||
|  |         # PRECONDITION_FAILED will be returned if another step in this execution already | ||
|  |         # has the same name and dimension_value, but differs on other data fields, for | ||
|  |         # example, step field is different. A PRECONDITION_FAILED will be returned if | ||
|  |         # dimension_value is set, and there is a dimension_definition in the execution | ||
|  |         # which is not specified as one of the keys. - In response: present if set by | ||
|  |         # create - In create request: optional - In update request: never set | ||
|  |         # Corresponds to the JSON property `dimensionValue` | ||
|  |         # @return [Array<Google::Apis::ToolresultsV1beta3::StepDimensionValueEntry>] | ||
|  |         attr_accessor :dimension_value | ||
|  |        | ||
|  |         # Whether any of the outputs of this step are images whose thumbnails can be | ||
|  |         # fetched with ListThumbnails. - In response: always set - In create/update | ||
|  |         # request: never set | ||
|  |         # Corresponds to the JSON property `hasImages` | ||
|  |         # @return [Boolean] | ||
|  |         attr_accessor :has_images | ||
|  |         alias_method :has_images?, :has_images | ||
|  |        | ||
|  |         # Arbitrary user-supplied key/value pairs that are associated with the step. | ||
|  |         # Users are responsible for managing the key namespace such that keys don't | ||
|  |         # accidentally collide. An INVALID_ARGUMENT will be returned if the number of | ||
|  |         # labels exceeds 100 or if the length of any of the keys or values exceeds 100 | ||
|  |         # characters. - In response: always set - In create request: optional - In | ||
|  |         # update request: optional; any new key/value pair will be added to the map, and | ||
|  |         # any new value for an existing key will update that key's value | ||
|  |         # Corresponds to the JSON property `labels` | ||
|  |         # @return [Array<Google::Apis::ToolresultsV1beta3::StepLabelsEntry>] | ||
|  |         attr_accessor :labels | ||
|  |        | ||
|  |         # Details when multiple steps are run with the same configuration as a group. | ||
|  |         # Corresponds to the JSON property `multiStep` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::MultiStep] | ||
|  |         attr_accessor :multi_step | ||
|  |        | ||
|  |         # A short human-readable name to display in the UI. Maximum of 100 characters. | ||
|  |         # For example: Clean build A PRECONDITION_FAILED will be returned upon creating | ||
|  |         # a new step if it shares its name and dimension_value with an existing step. If | ||
|  |         # two steps represent a similar action, but have different dimension values, | ||
|  |         # they should share the same name. For instance, if the same set of tests is run | ||
|  |         # on two different platforms, the two steps should have the same name. - In | ||
|  |         # response: always set - In create request: always set - In update request: | ||
|  |         # never set | ||
|  |         # Corresponds to the JSON property `name` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :name | ||
|  |        | ||
|  |         # Interprets a result so that humans and machines can act on it. | ||
|  |         # Corresponds to the JSON property `outcome` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::Outcome] | ||
|  |         attr_accessor :outcome | ||
|  |        | ||
|  |         # A Duration represents a signed, fixed-length span of time represented as a | ||
|  |         # count of seconds and fractions of seconds at nanosecond resolution. It is | ||
|  |         # independent of any calendar and concepts like "day" or "month". It is related | ||
|  |         # to Timestamp in that the difference between two Timestamp values is a Duration | ||
|  |         # and it can be added or subtracted from a Timestamp. Range is approximately +- | ||
|  |         # 10,000 years. | ||
|  |         # Corresponds to the JSON property `runDuration` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::Duration] | ||
|  |         attr_accessor :run_duration | ||
|  |        | ||
|  |         # The initial state is IN_PROGRESS. The only legal state transitions are * | ||
|  |         # IN_PROGRESS -> COMPLETE A PRECONDITION_FAILED will be returned if an invalid | ||
|  |         # transition is requested. It is valid to create Step with a state set to | ||
|  |         # COMPLETE. The state can only be set to COMPLETE once. A PRECONDITION_FAILED | ||
|  |         # will be returned if the state is set to COMPLETE multiple times. - In response: | ||
|  |         # always set - In create/update request: optional | ||
|  |         # Corresponds to the JSON property `state` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :state | ||
|  |        | ||
|  |         # A unique identifier within a Execution for this Step. Returns INVALID_ARGUMENT | ||
|  |         # if this field is set or overwritten by the caller. - In response: always set - | ||
|  |         # In create/update request: never set | ||
|  |         # Corresponds to the JSON property `stepId` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :step_id | ||
|  |        | ||
|  |         # A step that represents running tests. It accepts ant-junit xml files which | ||
|  |         # will be parsed into structured test results by the service. Xml file paths are | ||
|  |         # updated in order to append more files, however they can't be deleted. Users | ||
|  |         # can also add test results manually by using the test_result field. | ||
|  |         # Corresponds to the JSON property `testExecutionStep` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::TestExecutionStep] | ||
|  |         attr_accessor :test_execution_step | ||
|  |        | ||
|  |         # Generic tool step to be used for binaries we do not explicitly support. For | ||
|  |         # example: running cp to copy artifacts from one location to another. | ||
|  |         # Corresponds to the JSON property `toolExecutionStep` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::ToolExecutionStep] | ||
|  |         attr_accessor :tool_execution_step | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @completion_time = args[:completion_time] if args.key?(:completion_time) | ||
|  |           @creation_time = args[:creation_time] if args.key?(:creation_time) | ||
|  |           @description = args[:description] if args.key?(:description) | ||
|  |           @device_usage_duration = args[:device_usage_duration] if args.key?(:device_usage_duration) | ||
|  |           @dimension_value = args[:dimension_value] if args.key?(:dimension_value) | ||
|  |           @has_images = args[:has_images] if args.key?(:has_images) | ||
|  |           @labels = args[:labels] if args.key?(:labels) | ||
|  |           @multi_step = args[:multi_step] if args.key?(:multi_step) | ||
|  |           @name = args[:name] if args.key?(:name) | ||
|  |           @outcome = args[:outcome] if args.key?(:outcome) | ||
|  |           @run_duration = args[:run_duration] if args.key?(:run_duration) | ||
|  |           @state = args[:state] if args.key?(:state) | ||
|  |           @step_id = args[:step_id] if args.key?(:step_id) | ||
|  |           @test_execution_step = args[:test_execution_step] if args.key?(:test_execution_step) | ||
|  |           @tool_execution_step = args[:tool_execution_step] if args.key?(:tool_execution_step) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       #  | ||
|  |       class StepDimensionValueEntry | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         #  | ||
|  |         # Corresponds to the JSON property `key` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :key | ||
|  |        | ||
|  |         #  | ||
|  |         # Corresponds to the JSON property `value` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :value | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @key = args[:key] if args.key?(:key) | ||
|  |           @value = args[:value] if args.key?(:value) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       #  | ||
|  |       class StepLabelsEntry | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         #  | ||
|  |         # Corresponds to the JSON property `key` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :key | ||
|  |        | ||
|  |         #  | ||
|  |         # Corresponds to the JSON property `value` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :value | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @key = args[:key] if args.key?(:key) | ||
|  |           @value = args[:value] if args.key?(:value) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # Lightweight summary of a step within this execution. | ||
|  |       class StepSummary | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # Details for an outcome with a SUCCESS outcome summary. LINT.IfChange | ||
|  |       class SuccessDetail | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # If a native process other than the app crashed. | ||
|  |         # Corresponds to the JSON property `otherNativeCrash` | ||
|  |         # @return [Boolean] | ||
|  |         attr_accessor :other_native_crash | ||
|  |         alias_method :other_native_crash?, :other_native_crash | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @other_native_crash = args[:other_native_crash] if args.key?(:other_native_crash) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # A set of similar suggestions that we suspect are closely related. This proto | ||
|  |       # and most of the nested protos are branched from foxandcrown.prelaunchreport. | ||
|  |       # service.SuggestionClusterProto, replacing PLR's dependencies with FTL's. | ||
|  |       class SuggestionClusterProto | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # Category in which these types of suggestions should appear. Always set. | ||
|  |         # Corresponds to the JSON property `category` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :category | ||
|  |        | ||
|  |         # A sequence of suggestions. All of the suggestions within a cluster must have | ||
|  |         # the same SuggestionPriority and belong to the same SuggestionCategory. | ||
|  |         # Suggestions with the same screenshot URL should be adjacent. | ||
|  |         # Corresponds to the JSON property `suggestions` | ||
|  |         # @return [Array<Google::Apis::ToolresultsV1beta3::SuggestionProto>] | ||
|  |         attr_accessor :suggestions | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @category = args[:category] if args.key?(:category) | ||
|  |           @suggestions = args[:suggestions] if args.key?(:suggestions) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       #  | ||
|  |       class SuggestionProto | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # Reference to a help center article concerning this type of suggestion. Always | ||
|  |         # set. | ||
|  |         # Corresponds to the JSON property `helpUrl` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :help_url | ||
|  |        | ||
|  |         # IMPORTANT: It is unsafe to accept this message from an untrusted source, since | ||
|  |         # it's trivial for an attacker to forge serialized messages that don't fulfill | ||
|  |         # the type's safety contract -- for example, it could contain attacker | ||
|  |         # controlled script. A system which receives a SafeHtmlProto implicitly trusts | ||
|  |         # the producer of the SafeHtmlProto. So, it's generally safe to return this | ||
|  |         # message in RPC responses, but generally unsafe to accept it in RPC requests. | ||
|  |         # Corresponds to the JSON property `longMessage` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::SafeHtmlProto] | ||
|  |         attr_accessor :long_message | ||
|  |        | ||
|  |         # Relative importance of a suggestion. Always set. | ||
|  |         # Corresponds to the JSON property `priority` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :priority | ||
|  |        | ||
|  |         # A somewhat human readable identifier of the source view, if it does not have a | ||
|  |         # resource_name. This is a path within the accessibility hierarchy, an element | ||
|  |         # with resource name; similar to an XPath. | ||
|  |         # Corresponds to the JSON property `pseudoResourceId` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :pseudo_resource_id | ||
|  |        | ||
|  |         # A rectangular region. | ||
|  |         # Corresponds to the JSON property `region` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::RegionProto] | ||
|  |         attr_accessor :region | ||
|  |        | ||
|  |         # Reference to a view element, identified by its resource name, if it has one. | ||
|  |         # Corresponds to the JSON property `resourceName` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :resource_name | ||
|  |        | ||
|  |         # ID of the screen for the suggestion. It is used for getting the corresponding | ||
|  |         # screenshot path. For example, screen_id "1" corresponds to "1.png" file in GCS. | ||
|  |         # Always set. | ||
|  |         # Corresponds to the JSON property `screenId` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :screen_id | ||
|  |        | ||
|  |         # Relative importance of a suggestion as compared with other suggestions that | ||
|  |         # have the same priority and category. This is a meaningless value that can be | ||
|  |         # used to order suggestions that are in the same category and have the same | ||
|  |         # priority. The larger values have higher priority (i.e., are more important). | ||
|  |         # Optional. | ||
|  |         # Corresponds to the JSON property `secondaryPriority` | ||
|  |         # @return [Float] | ||
|  |         attr_accessor :secondary_priority | ||
|  |        | ||
|  |         # IMPORTANT: It is unsafe to accept this message from an untrusted source, since | ||
|  |         # it's trivial for an attacker to forge serialized messages that don't fulfill | ||
|  |         # the type's safety contract -- for example, it could contain attacker | ||
|  |         # controlled script. A system which receives a SafeHtmlProto implicitly trusts | ||
|  |         # the producer of the SafeHtmlProto. So, it's generally safe to return this | ||
|  |         # message in RPC responses, but generally unsafe to accept it in RPC requests. | ||
|  |         # Corresponds to the JSON property `shortMessage` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::SafeHtmlProto] | ||
|  |         attr_accessor :short_message | ||
|  |        | ||
|  |         # General title for the suggestion, in the user's language, without markup. | ||
|  |         # Always set. | ||
|  |         # Corresponds to the JSON property `title` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :title | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @help_url = args[:help_url] if args.key?(:help_url) | ||
|  |           @long_message = args[:long_message] if args.key?(:long_message) | ||
|  |           @priority = args[:priority] if args.key?(:priority) | ||
|  |           @pseudo_resource_id = args[:pseudo_resource_id] if args.key?(:pseudo_resource_id) | ||
|  |           @region = args[:region] if args.key?(:region) | ||
|  |           @resource_name = args[:resource_name] if args.key?(:resource_name) | ||
|  |           @screen_id = args[:screen_id] if args.key?(:screen_id) | ||
|  |           @secondary_priority = args[:secondary_priority] if args.key?(:secondary_priority) | ||
|  |           @short_message = args[:short_message] if args.key?(:short_message) | ||
|  |           @title = args[:title] if args.key?(:title) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       #  | ||
|  |       class TestCase | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # A Duration represents a signed, fixed-length span of time represented as a | ||
|  |         # count of seconds and fractions of seconds at nanosecond resolution. It is | ||
|  |         # independent of any calendar and concepts like "day" or "month". It is related | ||
|  |         # to Timestamp in that the difference between two Timestamp values is a Duration | ||
|  |         # and it can be added or subtracted from a Timestamp. Range is approximately +- | ||
|  |         # 10,000 years. | ||
|  |         # Corresponds to the JSON property `elapsedTime` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::Duration] | ||
|  |         attr_accessor :elapsed_time | ||
|  |        | ||
|  |         # A Timestamp represents a point in time independent of any time zone or local | ||
|  |         # calendar, encoded as a count of seconds and fractions of seconds at nanosecond | ||
|  |         # resolution. The count is relative to an epoch at UTC midnight on January 1, | ||
|  |         # 1970, in the proleptic Gregorian calendar which extends the Gregorian calendar | ||
|  |         # backwards to year one. All minutes are 60 seconds long. Leap seconds are " | ||
|  |         # smeared" so that no leap second table is needed for interpretation, using a [ | ||
|  |         # 24-hour linear smear](https://developers.google.com/time/smear). The range is | ||
|  |         # from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By restricting to | ||
|  |         # that range, we ensure that we can convert to and from [RFC 3339](https://www. | ||
|  |         # ietf.org/rfc/rfc3339.txt) date strings. | ||
|  |         # Corresponds to the JSON property `endTime` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::Timestamp] | ||
|  |         attr_accessor :end_time | ||
|  |        | ||
|  |         # Why the test case was skipped. Present only for skipped test case | ||
|  |         # Corresponds to the JSON property `skippedMessage` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :skipped_message | ||
|  |        | ||
|  |         # The stack trace details if the test case failed or encountered an error. The | ||
|  |         # maximum size of the stack traces is 100KiB, beyond which the stack track will | ||
|  |         # be truncated. Zero if the test case passed. | ||
|  |         # Corresponds to the JSON property `stackTraces` | ||
|  |         # @return [Array<Google::Apis::ToolresultsV1beta3::StackTrace>] | ||
|  |         attr_accessor :stack_traces | ||
|  |        | ||
|  |         # A Timestamp represents a point in time independent of any time zone or local | ||
|  |         # calendar, encoded as a count of seconds and fractions of seconds at nanosecond | ||
|  |         # resolution. The count is relative to an epoch at UTC midnight on January 1, | ||
|  |         # 1970, in the proleptic Gregorian calendar which extends the Gregorian calendar | ||
|  |         # backwards to year one. All minutes are 60 seconds long. Leap seconds are " | ||
|  |         # smeared" so that no leap second table is needed for interpretation, using a [ | ||
|  |         # 24-hour linear smear](https://developers.google.com/time/smear). The range is | ||
|  |         # from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By restricting to | ||
|  |         # that range, we ensure that we can convert to and from [RFC 3339](https://www. | ||
|  |         # ietf.org/rfc/rfc3339.txt) date strings. | ||
|  |         # Corresponds to the JSON property `startTime` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::Timestamp] | ||
|  |         attr_accessor :start_time | ||
|  |        | ||
|  |         # The status of the test case. Required. | ||
|  |         # Corresponds to the JSON property `status` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :status | ||
|  |        | ||
|  |         # A unique identifier within a Step for this Test Case. | ||
|  |         # Corresponds to the JSON property `testCaseId` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :test_case_id | ||
|  |        | ||
|  |         # A reference to a test case. Test case references are canonically ordered | ||
|  |         # lexicographically by these three factors: * First, by test_suite_name. * | ||
|  |         # Second, by class_name. * Third, by name. | ||
|  |         # Corresponds to the JSON property `testCaseReference` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::TestCaseReference] | ||
|  |         attr_accessor :test_case_reference | ||
|  |        | ||
|  |         # References to opaque files of any format output by the tool execution. @ | ||
|  |         # OutputOnly | ||
|  |         # Corresponds to the JSON property `toolOutputs` | ||
|  |         # @return [Array<Google::Apis::ToolresultsV1beta3::ToolOutputReference>] | ||
|  |         attr_accessor :tool_outputs | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @elapsed_time = args[:elapsed_time] if args.key?(:elapsed_time) | ||
|  |           @end_time = args[:end_time] if args.key?(:end_time) | ||
|  |           @skipped_message = args[:skipped_message] if args.key?(:skipped_message) | ||
|  |           @stack_traces = args[:stack_traces] if args.key?(:stack_traces) | ||
|  |           @start_time = args[:start_time] if args.key?(:start_time) | ||
|  |           @status = args[:status] if args.key?(:status) | ||
|  |           @test_case_id = args[:test_case_id] if args.key?(:test_case_id) | ||
|  |           @test_case_reference = args[:test_case_reference] if args.key?(:test_case_reference) | ||
|  |           @tool_outputs = args[:tool_outputs] if args.key?(:tool_outputs) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # A reference to a test case. Test case references are canonically ordered | ||
|  |       # lexicographically by these three factors: * First, by test_suite_name. * | ||
|  |       # Second, by class_name. * Third, by name. | ||
|  |       class TestCaseReference | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # The name of the class. | ||
|  |         # Corresponds to the JSON property `className` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :class_name | ||
|  |        | ||
|  |         # The name of the test case. Required. | ||
|  |         # Corresponds to the JSON property `name` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :name | ||
|  |        | ||
|  |         # The name of the test suite to which this test case belongs. | ||
|  |         # Corresponds to the JSON property `testSuiteName` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :test_suite_name | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @class_name = args[:class_name] if args.key?(:class_name) | ||
|  |           @name = args[:name] if args.key?(:name) | ||
|  |           @test_suite_name = args[:test_suite_name] if args.key?(:test_suite_name) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # A step that represents running tests. It accepts ant-junit xml files which | ||
|  |       # will be parsed into structured test results by the service. Xml file paths are | ||
|  |       # updated in order to append more files, however they can't be deleted. Users | ||
|  |       # can also add test results manually by using the test_result field. | ||
|  |       class TestExecutionStep | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # Issues observed during the test execution. For example, if the mobile app | ||
|  |         # under test crashed during the test, the error message and the stack trace | ||
|  |         # content can be recorded here to assist debugging. - In response: present if | ||
|  |         # set by create or update - In create/update request: optional | ||
|  |         # Corresponds to the JSON property `testIssues` | ||
|  |         # @return [Array<Google::Apis::ToolresultsV1beta3::TestIssue>] | ||
|  |         attr_accessor :test_issues | ||
|  |        | ||
|  |         # List of test suite overview contents. This could be parsed from xUnit XML log | ||
|  |         # by server, or uploaded directly by user. This references should only be called | ||
|  |         # when test suites are fully parsed or uploaded. The maximum allowed number of | ||
|  |         # test suite overviews per step is 1000. - In response: always set - In create | ||
|  |         # request: optional - In update request: never (use publishXunitXmlFiles custom | ||
|  |         # method instead) | ||
|  |         # Corresponds to the JSON property `testSuiteOverviews` | ||
|  |         # @return [Array<Google::Apis::ToolresultsV1beta3::TestSuiteOverview>] | ||
|  |         attr_accessor :test_suite_overviews | ||
|  |        | ||
|  |         # Testing timing break down to know phases. | ||
|  |         # Corresponds to the JSON property `testTiming` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::TestTiming] | ||
|  |         attr_accessor :test_timing | ||
|  |        | ||
|  |         # An execution of an arbitrary tool. It could be a test runner or a tool copying | ||
|  |         # artifacts or deploying code. | ||
|  |         # Corresponds to the JSON property `toolExecution` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::ToolExecution] | ||
|  |         attr_accessor :tool_execution | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @test_issues = args[:test_issues] if args.key?(:test_issues) | ||
|  |           @test_suite_overviews = args[:test_suite_overviews] if args.key?(:test_suite_overviews) | ||
|  |           @test_timing = args[:test_timing] if args.key?(:test_timing) | ||
|  |           @tool_execution = args[:tool_execution] if args.key?(:tool_execution) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # An issue detected occurring during a test execution. | ||
|  |       class TestIssue | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # Category of issue. Required. | ||
|  |         # Corresponds to the JSON property `category` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :category | ||
|  |        | ||
|  |         # A brief human-readable message describing the issue. Required. | ||
|  |         # Corresponds to the JSON property `errorMessage` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :error_message | ||
|  |        | ||
|  |         # Severity of issue. Required. | ||
|  |         # Corresponds to the JSON property `severity` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :severity | ||
|  |        | ||
|  |         # A stacktrace. | ||
|  |         # Corresponds to the JSON property `stackTrace` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::StackTrace] | ||
|  |         attr_accessor :stack_trace | ||
|  |        | ||
|  |         # Type of issue. Required. | ||
|  |         # Corresponds to the JSON property `type` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :type | ||
|  |        | ||
|  |         # `Any` contains an arbitrary serialized protocol buffer message along with a | ||
|  |         # URL that describes the type of the serialized message. Protobuf library | ||
|  |         # provides support to pack/unpack Any values in the form of utility functions or | ||
|  |         # additional generated methods of the Any type. Example 1: Pack and unpack a | ||
|  |         # message in C++. Foo foo = ...; Any any; any.PackFrom(foo); ... if (any. | ||
|  |         # UnpackTo(&foo)) ` ... ` Example 2: Pack and unpack a message in Java. Foo foo = | ||
|  |         # ...; Any any = Any.pack(foo); ... if (any.is(Foo.class)) ` foo = any.unpack( | ||
|  |         # Foo.class); ` Example 3: Pack and unpack a message in Python. foo = Foo(...) | ||
|  |         # any = Any() any.Pack(foo) ... if any.Is(Foo.DESCRIPTOR): any.Unpack(foo) ... | ||
|  |         # Example 4: Pack and unpack a message in Go foo := &pb.Foo`...` any, err := | ||
|  |         # ptypes.MarshalAny(foo) ... foo := &pb.Foo`` if err := ptypes.UnmarshalAny(any, | ||
|  |         # foo); err != nil ` ... ` The pack methods provided by protobuf library will by | ||
|  |         # default use 'type.googleapis.com/full.type.name' as the type URL and the | ||
|  |         # unpack methods only use the fully qualified type name after the last '/' in | ||
|  |         # the type URL, for example "foo.bar.com/x/y.z" will yield type name "y.z". # | ||
|  |         # JSON The JSON representation of an `Any` value uses the regular representation | ||
|  |         # of the deserialized, embedded message, with an additional field `@type` which | ||
|  |         # contains the type URL. Example: package google.profile; message Person ` | ||
|  |         # string first_name = 1; string last_name = 2; ` ` "@type": "type.googleapis.com/ | ||
|  |         # google.profile.Person", "firstName": , "lastName": ` If the embedded message | ||
|  |         # type is well-known and has a custom JSON representation, that representation | ||
|  |         # will be embedded adding a field `value` which holds the custom JSON in | ||
|  |         # addition to the `@type` field. Example (for message google.protobuf.Duration): | ||
|  |         # ` "@type": "type.googleapis.com/google.protobuf.Duration", "value": "1.212s" ` | ||
|  |         # Corresponds to the JSON property `warning` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::Any] | ||
|  |         attr_accessor :warning | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @category = args[:category] if args.key?(:category) | ||
|  |           @error_message = args[:error_message] if args.key?(:error_message) | ||
|  |           @severity = args[:severity] if args.key?(:severity) | ||
|  |           @stack_trace = args[:stack_trace] if args.key?(:stack_trace) | ||
|  |           @type = args[:type] if args.key?(:type) | ||
|  |           @warning = args[:warning] if args.key?(:warning) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # A summary of a test suite result either parsed from XML or uploaded directly | ||
|  |       # by a user. Note: the API related comments are for StepService only. This | ||
|  |       # message is also being used in ExecutionService in a read only mode for the | ||
|  |       # corresponding step. | ||
|  |       class TestSuiteOverview | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # A Duration represents a signed, fixed-length span of time represented as a | ||
|  |         # count of seconds and fractions of seconds at nanosecond resolution. It is | ||
|  |         # independent of any calendar and concepts like "day" or "month". It is related | ||
|  |         # to Timestamp in that the difference between two Timestamp values is a Duration | ||
|  |         # and it can be added or subtracted from a Timestamp. Range is approximately +- | ||
|  |         # 10,000 years. | ||
|  |         # Corresponds to the JSON property `elapsedTime` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::Duration] | ||
|  |         attr_accessor :elapsed_time | ||
|  |        | ||
|  |         # Number of test cases in error, typically set by the service by parsing the | ||
|  |         # xml_source. - In create/response: always set - In update request: never | ||
|  |         # Corresponds to the JSON property `errorCount` | ||
|  |         # @return [Fixnum] | ||
|  |         attr_accessor :error_count | ||
|  |        | ||
|  |         # Number of failed test cases, typically set by the service by parsing the | ||
|  |         # xml_source. May also be set by the user. - In create/response: always set - In | ||
|  |         # update request: never | ||
|  |         # Corresponds to the JSON property `failureCount` | ||
|  |         # @return [Fixnum] | ||
|  |         attr_accessor :failure_count | ||
|  |        | ||
|  |         # Number of flaky test cases, set by the service by rolling up flaky test | ||
|  |         # attempts. Present only for rollup test suite overview at environment level. A | ||
|  |         # step cannot have flaky test cases. | ||
|  |         # Corresponds to the JSON property `flakyCount` | ||
|  |         # @return [Fixnum] | ||
|  |         attr_accessor :flaky_count | ||
|  |        | ||
|  |         # The name of the test suite. - In create/response: always set - In update | ||
|  |         # request: never | ||
|  |         # Corresponds to the JSON property `name` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :name | ||
|  |        | ||
|  |         # Number of test cases not run, typically set by the service by parsing the | ||
|  |         # xml_source. - In create/response: always set - In update request: never | ||
|  |         # Corresponds to the JSON property `skippedCount` | ||
|  |         # @return [Fixnum] | ||
|  |         attr_accessor :skipped_count | ||
|  |        | ||
|  |         # Number of test cases, typically set by the service by parsing the xml_source. - | ||
|  |         # In create/response: always set - In update request: never | ||
|  |         # Corresponds to the JSON property `totalCount` | ||
|  |         # @return [Fixnum] | ||
|  |         attr_accessor :total_count | ||
|  |        | ||
|  |         # A reference to a file. | ||
|  |         # Corresponds to the JSON property `xmlSource` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::FileReference] | ||
|  |         attr_accessor :xml_source | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @elapsed_time = args[:elapsed_time] if args.key?(:elapsed_time) | ||
|  |           @error_count = args[:error_count] if args.key?(:error_count) | ||
|  |           @failure_count = args[:failure_count] if args.key?(:failure_count) | ||
|  |           @flaky_count = args[:flaky_count] if args.key?(:flaky_count) | ||
|  |           @name = args[:name] if args.key?(:name) | ||
|  |           @skipped_count = args[:skipped_count] if args.key?(:skipped_count) | ||
|  |           @total_count = args[:total_count] if args.key?(:total_count) | ||
|  |           @xml_source = args[:xml_source] if args.key?(:xml_source) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # Testing timing break down to know phases. | ||
|  |       class TestTiming | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # A Duration represents a signed, fixed-length span of time represented as a | ||
|  |         # count of seconds and fractions of seconds at nanosecond resolution. It is | ||
|  |         # independent of any calendar and concepts like "day" or "month". It is related | ||
|  |         # to Timestamp in that the difference between two Timestamp values is a Duration | ||
|  |         # and it can be added or subtracted from a Timestamp. Range is approximately +- | ||
|  |         # 10,000 years. | ||
|  |         # Corresponds to the JSON property `testProcessDuration` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::Duration] | ||
|  |         attr_accessor :test_process_duration | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @test_process_duration = args[:test_process_duration] if args.key?(:test_process_duration) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # A single thumbnail, with its size and format. | ||
|  |       class Thumbnail | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # The thumbnail's content type, i.e. "image/png". Always set. | ||
|  |         # Corresponds to the JSON property `contentType` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :content_type | ||
|  |        | ||
|  |         # The thumbnail file itself. That is, the bytes here are precisely the bytes | ||
|  |         # that make up the thumbnail file; they can be served as an image as-is (with | ||
|  |         # the appropriate content type.) Always set. | ||
|  |         # Corresponds to the JSON property `data` | ||
|  |         # NOTE: Values are automatically base64 encoded/decoded in the client library. | ||
|  |         # @return [String] | ||
|  |         attr_accessor :data | ||
|  |        | ||
|  |         # The height of the thumbnail, in pixels. Always set. | ||
|  |         # Corresponds to the JSON property `heightPx` | ||
|  |         # @return [Fixnum] | ||
|  |         attr_accessor :height_px | ||
|  |        | ||
|  |         # The width of the thumbnail, in pixels. Always set. | ||
|  |         # Corresponds to the JSON property `widthPx` | ||
|  |         # @return [Fixnum] | ||
|  |         attr_accessor :width_px | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @content_type = args[:content_type] if args.key?(:content_type) | ||
|  |           @data = args[:data] if args.key?(:data) | ||
|  |           @height_px = args[:height_px] if args.key?(:height_px) | ||
|  |           @width_px = args[:width_px] if args.key?(:width_px) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # A Timestamp represents a point in time independent of any time zone or local | ||
|  |       # calendar, encoded as a count of seconds and fractions of seconds at nanosecond | ||
|  |       # resolution. The count is relative to an epoch at UTC midnight on January 1, | ||
|  |       # 1970, in the proleptic Gregorian calendar which extends the Gregorian calendar | ||
|  |       # backwards to year one. All minutes are 60 seconds long. Leap seconds are " | ||
|  |       # smeared" so that no leap second table is needed for interpretation, using a [ | ||
|  |       # 24-hour linear smear](https://developers.google.com/time/smear). The range is | ||
|  |       # from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By restricting to | ||
|  |       # that range, we ensure that we can convert to and from [RFC 3339](https://www. | ||
|  |       # ietf.org/rfc/rfc3339.txt) date strings. | ||
|  |       class Timestamp | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # Non-negative fractions of a second at nanosecond resolution. Negative second | ||
|  |         # values with fractions must still have non-negative nanos values that count | ||
|  |         # forward in time. Must be from 0 to 999,999,999 inclusive. | ||
|  |         # Corresponds to the JSON property `nanos` | ||
|  |         # @return [Fixnum] | ||
|  |         attr_accessor :nanos | ||
|  |        | ||
|  |         # Represents seconds of UTC time since Unix epoch 1970-01-01T00:00:00Z. Must be | ||
|  |         # from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive. | ||
|  |         # Corresponds to the JSON property `seconds` | ||
|  |         # @return [Fixnum] | ||
|  |         attr_accessor :seconds | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @nanos = args[:nanos] if args.key?(:nanos) | ||
|  |           @seconds = args[:seconds] if args.key?(:seconds) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # An execution of an arbitrary tool. It could be a test runner or a tool copying | ||
|  |       # artifacts or deploying code. | ||
|  |       class ToolExecution | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # The full tokenized command line including the program name (equivalent to argv | ||
|  |         # in a C program). - In response: present if set by create request - In create | ||
|  |         # request: optional - In update request: never set | ||
|  |         # Corresponds to the JSON property `commandLineArguments` | ||
|  |         # @return [Array<String>] | ||
|  |         attr_accessor :command_line_arguments | ||
|  |        | ||
|  |         # Exit code from a tool execution. | ||
|  |         # Corresponds to the JSON property `exitCode` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::ToolExitCode] | ||
|  |         attr_accessor :exit_code | ||
|  |        | ||
|  |         # References to any plain text logs output the tool execution. This field can be | ||
|  |         # set before the tool has exited in order to be able to have access to a live | ||
|  |         # view of the logs while the tool is running. The maximum allowed number of tool | ||
|  |         # logs per step is 1000. - In response: present if set by create/update request - | ||
|  |         # In create request: optional - In update request: optional, any value provided | ||
|  |         # will be appended to the existing list | ||
|  |         # Corresponds to the JSON property `toolLogs` | ||
|  |         # @return [Array<Google::Apis::ToolresultsV1beta3::FileReference>] | ||
|  |         attr_accessor :tool_logs | ||
|  |        | ||
|  |         # References to opaque files of any format output by the tool execution. The | ||
|  |         # maximum allowed number of tool outputs per step is 1000. - In response: | ||
|  |         # present if set by create/update request - In create request: optional - In | ||
|  |         # update request: optional, any value provided will be appended to the existing | ||
|  |         # list | ||
|  |         # Corresponds to the JSON property `toolOutputs` | ||
|  |         # @return [Array<Google::Apis::ToolresultsV1beta3::ToolOutputReference>] | ||
|  |         attr_accessor :tool_outputs | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @command_line_arguments = args[:command_line_arguments] if args.key?(:command_line_arguments) | ||
|  |           @exit_code = args[:exit_code] if args.key?(:exit_code) | ||
|  |           @tool_logs = args[:tool_logs] if args.key?(:tool_logs) | ||
|  |           @tool_outputs = args[:tool_outputs] if args.key?(:tool_outputs) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # Generic tool step to be used for binaries we do not explicitly support. For | ||
|  |       # example: running cp to copy artifacts from one location to another. | ||
|  |       class ToolExecutionStep | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # An execution of an arbitrary tool. It could be a test runner or a tool copying | ||
|  |         # artifacts or deploying code. | ||
|  |         # Corresponds to the JSON property `toolExecution` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::ToolExecution] | ||
|  |         attr_accessor :tool_execution | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @tool_execution = args[:tool_execution] if args.key?(:tool_execution) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # Exit code from a tool execution. | ||
|  |       class ToolExitCode | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # Tool execution exit code. A value of 0 means that the execution was successful. | ||
|  |         # - In response: always set - In create/update request: always set | ||
|  |         # Corresponds to the JSON property `number` | ||
|  |         # @return [Fixnum] | ||
|  |         attr_accessor :number | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @number = args[:number] if args.key?(:number) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # A reference to a ToolExecution output file. | ||
|  |       class ToolOutputReference | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # A Timestamp represents a point in time independent of any time zone or local | ||
|  |         # calendar, encoded as a count of seconds and fractions of seconds at nanosecond | ||
|  |         # resolution. The count is relative to an epoch at UTC midnight on January 1, | ||
|  |         # 1970, in the proleptic Gregorian calendar which extends the Gregorian calendar | ||
|  |         # backwards to year one. All minutes are 60 seconds long. Leap seconds are " | ||
|  |         # smeared" so that no leap second table is needed for interpretation, using a [ | ||
|  |         # 24-hour linear smear](https://developers.google.com/time/smear). The range is | ||
|  |         # from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By restricting to | ||
|  |         # that range, we ensure that we can convert to and from [RFC 3339](https://www. | ||
|  |         # ietf.org/rfc/rfc3339.txt) date strings. | ||
|  |         # Corresponds to the JSON property `creationTime` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::Timestamp] | ||
|  |         attr_accessor :creation_time | ||
|  |        | ||
|  |         # A reference to a file. | ||
|  |         # Corresponds to the JSON property `output` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::FileReference] | ||
|  |         attr_accessor :output | ||
|  |        | ||
|  |         # A reference to a test case. Test case references are canonically ordered | ||
|  |         # lexicographically by these three factors: * First, by test_suite_name. * | ||
|  |         # Second, by class_name. * Third, by name. | ||
|  |         # Corresponds to the JSON property `testCase` | ||
|  |         # @return [Google::Apis::ToolresultsV1beta3::TestCaseReference] | ||
|  |         attr_accessor :test_case | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @creation_time = args[:creation_time] if args.key?(:creation_time) | ||
|  |           @output = args[:output] if args.key?(:output) | ||
|  |           @test_case = args[:test_case] if args.key?(:test_case) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # A warning that the screen hierarchy is deeper than the recommended threshold. | ||
|  |       class UiElementTooDeep | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # The depth of the screen element | ||
|  |         # Corresponds to the JSON property `depth` | ||
|  |         # @return [Fixnum] | ||
|  |         attr_accessor :depth | ||
|  |        | ||
|  |         # The screen id of the element | ||
|  |         # Corresponds to the JSON property `screenId` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :screen_id | ||
|  |        | ||
|  |         # The screen state id of the element | ||
|  |         # Corresponds to the JSON property `screenStateId` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :screen_state_id | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @depth = args[:depth] if args.key?(:depth) | ||
|  |           @screen_id = args[:screen_id] if args.key?(:screen_id) | ||
|  |           @screen_state_id = args[:screen_state_id] if args.key?(:screen_state_id) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # Default unspecified warning. | ||
|  |       class UnspecifiedWarning | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # Additional details of an unused robodirective. | ||
|  |       class UnusedRoboDirective | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # The name of the resource that was unused. | ||
|  |         # Corresponds to the JSON property `resourceName` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :resource_name | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @resource_name = args[:resource_name] if args.key?(:resource_name) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # This insight is a recommendation to upgrade a given library to the specified | ||
|  |       # version, in order to avoid dependencies on non-SDK APIs. | ||
|  |       class UpgradeInsight | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # The name of the package to be upgraded. | ||
|  |         # Corresponds to the JSON property `packageName` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :package_name | ||
|  |        | ||
|  |         # The suggested version to upgrade to. Optional: In case we are not sure which | ||
|  |         # version solves this problem | ||
|  |         # Corresponds to the JSON property `upgradeToVersion` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :upgrade_to_version | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @package_name = args[:package_name] if args.key?(:package_name) | ||
|  |           @upgrade_to_version = args[:upgrade_to_version] if args.key?(:upgrade_to_version) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # Additional details of a used Robo directive. | ||
|  |       class UsedRoboDirective | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # The name of the resource that was used. | ||
|  |         # Corresponds to the JSON property `resourceName` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :resource_name | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @resource_name = args[:resource_name] if args.key?(:resource_name) | ||
|  |         end | ||
|  |       end | ||
|  |        | ||
|  |       # Additional details of a used Robo directive with an ignore action. Note: This | ||
|  |       # is a different scenario than unused directive. | ||
|  |       class UsedRoboIgnoreDirective | ||
|  |         include Google::Apis::Core::Hashable | ||
|  |        | ||
|  |         # The name of the resource that was ignored. | ||
|  |         # Corresponds to the JSON property `resourceName` | ||
|  |         # @return [String] | ||
|  |         attr_accessor :resource_name | ||
|  |        | ||
|  |         def initialize(**args) | ||
|  |            update!(**args) | ||
|  |         end | ||
|  |        | ||
|  |         # Update properties of this object | ||
|  |         def update!(**args) | ||
|  |           @resource_name = args[:resource_name] if args.key?(:resource_name) | ||
|  |         end | ||
|  |       end | ||
|  |     end | ||
|  |   end | ||
|  | end |