android-env 1.2.2__py3-none-any.whl → 1.2.3__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- android_env/__init__.py +1 -1
- android_env/components/__init__.py +1 -1
- android_env/components/a11y/__init__.py +15 -0
- android_env/components/a11y/a11y_events.py +118 -0
- android_env/components/a11y/a11y_events_test.py +173 -0
- android_env/components/a11y/a11y_forests.py +128 -0
- android_env/components/a11y/a11y_forests_test.py +237 -0
- android_env/components/a11y/a11y_servicer.py +199 -0
- android_env/components/a11y/a11y_servicer_test.py +224 -0
- android_env/components/action_fns.py +132 -0
- android_env/components/action_fns_test.py +227 -0
- android_env/components/action_type.py +26 -3
- android_env/components/adb_call_parser.py +233 -185
- android_env/components/adb_call_parser_test.py +165 -163
- android_env/components/adb_controller.py +19 -28
- android_env/components/adb_controller_test.py +100 -9
- android_env/components/adb_log_stream.py +3 -3
- android_env/components/adb_log_stream_test.py +1 -1
- android_env/components/app_screen_checker.py +15 -13
- android_env/components/app_screen_checker_test.py +1 -1
- android_env/components/config_classes.py +203 -0
- android_env/components/coordinator.py +53 -338
- android_env/components/coordinator_test.py +26 -283
- android_env/components/device_settings.py +174 -0
- android_env/components/device_settings_test.py +228 -0
- android_env/components/dumpsys_thread.py +3 -4
- android_env/components/dumpsys_thread_test.py +1 -1
- android_env/components/errors.py +2 -5
- android_env/components/errors_test.py +1 -1
- android_env/components/log_stream.py +2 -2
- android_env/components/log_stream_test.py +1 -1
- android_env/components/logcat_thread.py +9 -8
- android_env/components/logcat_thread_test.py +2 -3
- android_env/components/{utils.py → pixel_fns.py} +19 -20
- android_env/components/{utils_test.py → pixel_fns_test.py} +20 -15
- android_env/components/setup_step_interpreter.py +45 -37
- android_env/components/setup_step_interpreter_test.py +1 -1
- android_env/components/simulators/__init__.py +1 -1
- android_env/components/simulators/base_simulator.py +79 -23
- android_env/components/simulators/base_simulator_test.py +131 -9
- android_env/components/simulators/emulator/__init__.py +1 -1
- android_env/components/simulators/emulator/emulator_launcher.py +62 -81
- android_env/components/simulators/emulator/emulator_launcher_test.py +120 -43
- android_env/components/simulators/emulator/emulator_simulator.py +111 -98
- android_env/components/simulators/emulator/emulator_simulator_test.py +174 -138
- android_env/components/simulators/fake/__init__.py +1 -1
- android_env/components/simulators/fake/fake_simulator.py +9 -17
- android_env/components/simulators/fake/fake_simulator_test.py +23 -8
- android_env/components/specs.py +1 -1
- android_env/components/specs_test.py +1 -1
- android_env/components/task_manager.py +26 -31
- android_env/components/task_manager_test.py +1 -18
- android_env/env_interface.py +1 -17
- android_env/environment.py +27 -17
- android_env/environment_test.py +51 -25
- android_env/loader.py +57 -43
- android_env/loader_test.py +115 -35
- android_env/proto/__init__.py +1 -1
- android_env/proto/a11y/__init__.py +15 -0
- android_env/proto/a11y/a11y.proto +75 -0
- android_env/proto/a11y/a11y_pb2.py +54 -0
- android_env/proto/a11y/a11y_pb2.pyi +49 -0
- android_env/proto/a11y/a11y_pb2_grpc.py +202 -0
- android_env/proto/a11y/android_accessibility_action.proto +32 -0
- android_env/proto/a11y/android_accessibility_action_pb2.py +37 -0
- android_env/proto/a11y/android_accessibility_action_pb2.pyi +13 -0
- android_env/proto/a11y/android_accessibility_action_pb2_grpc.py +24 -0
- android_env/proto/a11y/android_accessibility_forest.proto +29 -0
- android_env/proto/a11y/android_accessibility_forest_pb2.py +38 -0
- android_env/proto/a11y/android_accessibility_forest_pb2.pyi +13 -0
- android_env/proto/a11y/android_accessibility_forest_pb2_grpc.py +24 -0
- android_env/proto/a11y/android_accessibility_node_info.proto +122 -0
- android_env/proto/a11y/android_accessibility_node_info_clickable_span.proto +49 -0
- android_env/proto/a11y/android_accessibility_node_info_clickable_span_pb2.py +39 -0
- android_env/proto/a11y/android_accessibility_node_info_clickable_span_pb2.pyi +28 -0
- android_env/proto/a11y/android_accessibility_node_info_clickable_span_pb2_grpc.py +24 -0
- android_env/proto/a11y/android_accessibility_node_info_pb2.py +42 -0
- android_env/proto/a11y/android_accessibility_node_info_pb2.pyi +75 -0
- android_env/proto/a11y/android_accessibility_node_info_pb2_grpc.py +24 -0
- android_env/proto/a11y/android_accessibility_tree.proto +29 -0
- android_env/proto/a11y/android_accessibility_tree_pb2.py +38 -0
- android_env/proto/a11y/android_accessibility_tree_pb2.pyi +13 -0
- android_env/proto/a11y/android_accessibility_tree_pb2_grpc.py +24 -0
- android_env/proto/a11y/android_accessibility_window_info.proto +84 -0
- android_env/proto/a11y/android_accessibility_window_info_pb2.py +41 -0
- android_env/proto/a11y/android_accessibility_window_info_pb2.pyi +48 -0
- android_env/proto/a11y/android_accessibility_window_info_pb2_grpc.py +24 -0
- android_env/proto/a11y/rect.proto +30 -0
- android_env/proto/a11y/rect_pb2.py +37 -0
- android_env/proto/a11y/rect_pb2.pyi +17 -0
- android_env/proto/a11y/rect_pb2_grpc.py +24 -0
- android_env/proto/adb.proto +13 -1
- android_env/proto/adb_pb2.py +120 -107
- android_env/proto/adb_pb2.pyi +396 -0
- android_env/proto/adb_pb2_grpc.py +20 -0
- android_env/proto/emulator_controller.proto +1 -1
- android_env/proto/emulator_controller_pb2.py +142 -131
- android_env/proto/emulator_controller_pb2.pyi +672 -0
- android_env/proto/emulator_controller_pb2_grpc.py +497 -136
- android_env/proto/snapshot.proto +1 -1
- android_env/proto/snapshot_pb2.py +30 -19
- android_env/proto/snapshot_pb2.pyi +117 -0
- android_env/proto/snapshot_pb2_grpc.py +20 -0
- android_env/proto/snapshot_service.proto +1 -1
- android_env/proto/snapshot_service_pb2.py +36 -25
- android_env/proto/snapshot_service_pb2.pyi +86 -0
- android_env/proto/snapshot_service_pb2_grpc.py +119 -28
- android_env/proto/state.proto +1 -1
- android_env/proto/state_pb2.py +46 -35
- android_env/proto/state_pb2.pyi +85 -0
- android_env/proto/state_pb2_grpc.py +20 -0
- android_env/proto/task.proto +4 -1
- android_env/proto/task_pb2.py +41 -30
- android_env/proto/task_pb2.pyi +160 -0
- android_env/proto/task_pb2_grpc.py +20 -0
- android_env/wrappers/__init__.py +1 -1
- android_env/wrappers/a11y_grpc_wrapper.py +500 -0
- android_env/wrappers/a11y_grpc_wrapper_test.py +849 -0
- android_env/wrappers/base_wrapper.py +1 -5
- android_env/wrappers/base_wrapper_test.py +1 -7
- android_env/wrappers/discrete_action_wrapper.py +15 -14
- android_env/wrappers/discrete_action_wrapper_test.py +1 -1
- android_env/wrappers/flat_interface_wrapper.py +5 -5
- android_env/wrappers/flat_interface_wrapper_test.py +1 -1
- android_env/wrappers/float_pixels_wrapper.py +5 -4
- android_env/wrappers/float_pixels_wrapper_test.py +1 -1
- android_env/wrappers/gym_wrapper.py +1 -1
- android_env/wrappers/gym_wrapper_test.py +1 -1
- android_env/wrappers/image_rescale_wrapper.py +13 -10
- android_env/wrappers/image_rescale_wrapper_test.py +1 -1
- android_env/wrappers/last_action_wrapper.py +5 -4
- android_env/wrappers/last_action_wrapper_test.py +1 -1
- android_env/wrappers/rate_limit_wrapper.py +1 -1
- android_env/wrappers/rate_limit_wrapper_test.py +1 -1
- android_env/wrappers/tap_action_wrapper.py +12 -12
- android_env/wrappers/tap_action_wrapper_test.py +49 -14
- {android_env-1.2.2.dist-info → android_env-1.2.3.dist-info}/METADATA +14 -16
- android_env-1.2.3.dist-info/RECORD +141 -0
- {android_env-1.2.2.dist-info → android_env-1.2.3.dist-info}/WHEEL +1 -1
- android_env-1.2.2.dist-info/RECORD +0 -88
- {android_env-1.2.2.dist-info → android_env-1.2.3.dist-info/licenses}/LICENSE +0 -0
- {android_env-1.2.2.dist-info → android_env-1.2.3.dist-info}/top_level.txt +0 -0
@@ -1,5 +1,5 @@
|
|
1
1
|
# coding=utf-8
|
2
|
-
# Copyright
|
2
|
+
# Copyright 2024 DeepMind Technologies Limited.
|
3
3
|
#
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
5
|
# you may not use this file except in compliance with the License.
|
@@ -22,10 +22,12 @@ import tempfile
|
|
22
22
|
from unittest import mock
|
23
23
|
|
24
24
|
from absl.testing import absltest
|
25
|
+
from absl.testing import parameterized
|
26
|
+
from android_env.components import config_classes
|
25
27
|
from android_env.components.simulators.emulator import emulator_launcher
|
26
28
|
|
27
29
|
|
28
|
-
class EmulatorLauncherTest(
|
30
|
+
class EmulatorLauncherTest(parameterized.TestCase):
|
29
31
|
|
30
32
|
def setUp(self):
|
31
33
|
super().setUp()
|
@@ -42,13 +44,14 @@ class EmulatorLauncherTest(absltest.TestCase):
|
|
42
44
|
'-adb-path',
|
43
45
|
'fake/path/adb',
|
44
46
|
'-gpu',
|
45
|
-
'
|
47
|
+
'swangle_indirect',
|
46
48
|
'-no-audio',
|
47
49
|
'-show-kernel',
|
48
50
|
'-verbose',
|
49
51
|
'-avd',
|
50
52
|
self._avd_name,
|
51
53
|
]
|
54
|
+
self._headless = ['-no-skin', '-no-window']
|
52
55
|
self._ports = ['-ports', f'{self._emulator_console_port},{self._adb_port}']
|
53
56
|
self._snapshot = ['-no-snapshot']
|
54
57
|
|
@@ -58,10 +61,12 @@ class EmulatorLauncherTest(absltest.TestCase):
|
|
58
61
|
base_lib_dir + 'gles_swiftshader/', base_lib_dir
|
59
62
|
])
|
60
63
|
|
64
|
+
# Instantiate the config to extract default values.
|
65
|
+
config = config_classes.EmulatorLauncherConfig()
|
61
66
|
self._expected_env_vars = {
|
62
67
|
'ANDROID_HOME': '',
|
63
|
-
'ANDROID_SDK_ROOT':
|
64
|
-
'ANDROID_AVD_HOME':
|
68
|
+
'ANDROID_SDK_ROOT': config.android_sdk_root,
|
69
|
+
'ANDROID_AVD_HOME': config.android_avd_home,
|
65
70
|
'ANDROID_EMULATOR_KVM_DEVICE': '/dev/kvm',
|
66
71
|
'ANDROID_ADB_SERVER_PORT': '1234',
|
67
72
|
'LD_LIBRARY_PATH': ld_library_path,
|
@@ -69,130 +74,195 @@ class EmulatorLauncherTest(absltest.TestCase):
|
|
69
74
|
'ANDROID_EMU_ENABLE_CRASH_REPORTING': '1',
|
70
75
|
}
|
71
76
|
|
77
|
+
@parameterized.named_parameters([
|
78
|
+
('hide_perf_stats', False),
|
79
|
+
('show_perf_stats', True),
|
80
|
+
])
|
72
81
|
@mock.patch.object(os, 'makedirs')
|
73
82
|
@mock.patch.object(os, 'environ', autospec=True, return_value=dict())
|
74
83
|
@mock.patch.object(tempfile, 'TemporaryDirectory', instance=True)
|
75
84
|
def test_launch(
|
76
85
|
self,
|
86
|
+
show_perf_stats: bool,
|
77
87
|
mock_tmp_dir,
|
78
88
|
unused_os_environ,
|
79
89
|
unused_os_makedirs,
|
80
90
|
):
|
81
|
-
|
82
91
|
mock_tmp_dir.return_value.name.return_value = 'local_tmp_dir'
|
83
92
|
|
84
|
-
|
85
|
-
adb_path=self._adb_path,
|
93
|
+
config = config_classes.EmulatorLauncherConfig(
|
86
94
|
adb_port=self._adb_port,
|
87
|
-
adb_server_port=self._adb_server_port,
|
88
95
|
emulator_console_port=self._emulator_console_port,
|
89
96
|
emulator_path=self._emulator_path,
|
90
97
|
avd_name=self._avd_name,
|
91
|
-
grpc_port=-1
|
98
|
+
grpc_port=-1,
|
99
|
+
show_perf_stats=show_perf_stats,
|
100
|
+
)
|
101
|
+
adb_controller_config = config_classes.AdbControllerConfig(
|
102
|
+
adb_path=self._adb_path,
|
103
|
+
adb_server_port=self._adb_server_port,
|
104
|
+
)
|
105
|
+
launcher = emulator_launcher.EmulatorLauncher(
|
106
|
+
config=config, adb_controller_config=adb_controller_config
|
107
|
+
)
|
108
|
+
|
109
|
+
expected_env_vars = self._expected_env_vars
|
110
|
+
expected_env_vars['SHOW_PERF_STATS'] = '1' if show_perf_stats else '0'
|
92
111
|
|
93
112
|
with mock.patch.object(
|
94
|
-
subprocess, 'Popen', autospec=True
|
95
|
-
|
113
|
+
subprocess, 'Popen', autospec=True
|
114
|
+
) as emulator_init, mock.patch.object(builtins, 'open', autospec=True) as f:
|
96
115
|
f.return_value.__enter__ = f()
|
97
116
|
launcher.launch_emulator_process()
|
98
117
|
emulator_init.assert_called_once_with(
|
99
|
-
args=self._expected_command
|
100
|
-
|
118
|
+
args=self._expected_command
|
119
|
+
+ self._headless
|
120
|
+
+ self._ports
|
121
|
+
+ self._snapshot,
|
122
|
+
env=expected_env_vars,
|
101
123
|
stdout=f(),
|
102
|
-
stderr=f()
|
124
|
+
stderr=f(),
|
125
|
+
)
|
103
126
|
|
127
|
+
@parameterized.named_parameters([
|
128
|
+
('hide_perf_stats', False),
|
129
|
+
('show_perf_stats', True),
|
130
|
+
])
|
104
131
|
@mock.patch.object(os, 'makedirs')
|
105
132
|
@mock.patch.object(os, 'environ', autospec=True, return_value=dict())
|
106
133
|
@mock.patch.object(tempfile, 'TemporaryDirectory', instance=True)
|
107
134
|
def test_grpc_port(
|
108
135
|
self,
|
136
|
+
show_perf_stats: bool,
|
109
137
|
mock_tmp_dir,
|
110
138
|
unused_os_environ,
|
111
139
|
unused_os_makedirs,
|
112
140
|
):
|
113
|
-
|
114
141
|
mock_tmp_dir.return_value.name.return_value = 'local_tmp_dir'
|
115
142
|
|
116
|
-
|
117
|
-
adb_path=self._adb_path,
|
143
|
+
config = config_classes.EmulatorLauncherConfig(
|
118
144
|
adb_port=self._adb_port,
|
119
|
-
adb_server_port=self._adb_server_port,
|
120
145
|
emulator_console_port=self._emulator_console_port,
|
121
146
|
emulator_path=self._emulator_path,
|
122
147
|
avd_name=self._avd_name,
|
123
|
-
grpc_port=8554
|
148
|
+
grpc_port=8554,
|
149
|
+
show_perf_stats=show_perf_stats,
|
150
|
+
)
|
151
|
+
adb_controller_config = config_classes.AdbControllerConfig(
|
152
|
+
adb_path=self._adb_path,
|
153
|
+
adb_server_port=self._adb_server_port,
|
154
|
+
)
|
155
|
+
launcher = emulator_launcher.EmulatorLauncher(
|
156
|
+
config=config, adb_controller_config=adb_controller_config
|
157
|
+
)
|
158
|
+
|
159
|
+
expected_env_vars = self._expected_env_vars
|
160
|
+
expected_env_vars['SHOW_PERF_STATS'] = '1' if show_perf_stats else '0'
|
124
161
|
|
125
162
|
with mock.patch.object(
|
126
|
-
subprocess, 'Popen', autospec=True
|
127
|
-
|
163
|
+
subprocess, 'Popen', autospec=True
|
164
|
+
) as emulator_init, mock.patch.object(builtins, 'open', autospec=True) as f:
|
128
165
|
f.return_value.__enter__ = f()
|
129
166
|
launcher.launch_emulator_process()
|
130
167
|
emulator_init.assert_called_once_with(
|
131
|
-
args=self._expected_command
|
132
|
-
|
133
|
-
|
168
|
+
args=self._expected_command
|
169
|
+
+ ['-grpc', '8554']
|
170
|
+
+ self._headless
|
171
|
+
+ self._ports
|
172
|
+
+ self._snapshot,
|
173
|
+
env=expected_env_vars,
|
134
174
|
stdout=f(),
|
135
|
-
stderr=f()
|
175
|
+
stderr=f(),
|
176
|
+
)
|
136
177
|
|
178
|
+
@parameterized.named_parameters([
|
179
|
+
('hide_perf_stats', False),
|
180
|
+
('show_perf_stats', True),
|
181
|
+
])
|
137
182
|
@mock.patch.object(os, 'makedirs')
|
138
183
|
@mock.patch.object(os, 'environ', autospec=True, return_value=dict())
|
139
184
|
@mock.patch.object(tempfile, 'TemporaryDirectory', instance=True)
|
140
185
|
def test_snapshot(
|
141
186
|
self,
|
187
|
+
show_perf_stats: bool,
|
142
188
|
mock_tmp_dir,
|
143
189
|
unused_os_environ,
|
144
190
|
unused_os_makedirs,
|
145
191
|
):
|
146
|
-
|
147
192
|
mock_tmp_dir.return_value.name.return_value = 'local_tmp_dir'
|
148
193
|
|
149
|
-
|
150
|
-
adb_path=self._adb_path,
|
194
|
+
config = config_classes.EmulatorLauncherConfig(
|
151
195
|
adb_port=self._adb_port,
|
152
|
-
adb_server_port=self._adb_server_port,
|
153
196
|
emulator_console_port=self._emulator_console_port,
|
154
197
|
emulator_path=self._emulator_path,
|
155
198
|
avd_name=self._avd_name,
|
156
199
|
grpc_port=-1,
|
157
|
-
snapshot_name='my_snapshot'
|
200
|
+
snapshot_name='my_snapshot',
|
201
|
+
show_perf_stats=show_perf_stats,
|
202
|
+
)
|
203
|
+
adb_controller_config = config_classes.AdbControllerConfig(
|
204
|
+
adb_path=self._adb_path,
|
205
|
+
adb_server_port=self._adb_server_port,
|
206
|
+
)
|
207
|
+
launcher = emulator_launcher.EmulatorLauncher(
|
208
|
+
config=config, adb_controller_config=adb_controller_config
|
209
|
+
)
|
158
210
|
|
159
211
|
expected_snapshot = [
|
160
212
|
'-snapshot', 'my_snapshot', '-feature',
|
161
213
|
'AllowSnapshotMigration,MigratableSnapshotSave'
|
162
214
|
]
|
163
215
|
|
216
|
+
expected_env_vars = self._expected_env_vars
|
217
|
+
expected_env_vars['SHOW_PERF_STATS'] = '1' if show_perf_stats else '0'
|
218
|
+
|
164
219
|
with mock.patch.object(
|
165
220
|
subprocess, 'Popen', autospec=True) as emulator_init, \
|
166
221
|
mock.patch.object(builtins, 'open', autospec=True) as f:
|
167
222
|
f.return_value.__enter__ = f()
|
168
223
|
launcher.launch_emulator_process()
|
169
224
|
emulator_init.assert_called_once_with(
|
170
|
-
args=self._expected_command
|
171
|
-
|
225
|
+
args=self._expected_command
|
226
|
+
+ self._headless
|
227
|
+
+ self._ports
|
228
|
+
+ expected_snapshot,
|
229
|
+
env=expected_env_vars,
|
172
230
|
stdout=f(),
|
173
|
-
stderr=f()
|
231
|
+
stderr=f(),
|
232
|
+
)
|
174
233
|
|
234
|
+
@parameterized.named_parameters([
|
235
|
+
('hide_perf_stats', False),
|
236
|
+
('show_perf_stats', True),
|
237
|
+
])
|
175
238
|
@mock.patch.object(os, 'makedirs')
|
176
239
|
@mock.patch.object(os, 'environ', autospec=True, return_value=dict())
|
177
240
|
@mock.patch.object(tempfile, 'TemporaryDirectory', instance=True)
|
178
241
|
def test_network_restrict(
|
179
242
|
self,
|
243
|
+
show_perf_stats: bool,
|
180
244
|
mock_tmp_dir,
|
181
245
|
unused_os_environ,
|
182
246
|
unused_os_makedirs,
|
183
247
|
):
|
184
|
-
|
185
248
|
mock_tmp_dir.return_value.name.return_value = 'local_tmp_dir'
|
186
249
|
|
187
|
-
|
188
|
-
adb_path=self._adb_path,
|
250
|
+
config = config_classes.EmulatorLauncherConfig(
|
189
251
|
adb_port=self._adb_port,
|
190
|
-
adb_server_port=self._adb_server_port,
|
191
252
|
emulator_console_port=self._emulator_console_port,
|
192
253
|
emulator_path=self._emulator_path,
|
193
254
|
avd_name=self._avd_name,
|
194
255
|
grpc_port=-1,
|
195
|
-
restrict_network=True
|
256
|
+
restrict_network=True,
|
257
|
+
show_perf_stats=show_perf_stats,
|
258
|
+
)
|
259
|
+
adb_controller_config = config_classes.AdbControllerConfig(
|
260
|
+
adb_path=self._adb_path,
|
261
|
+
adb_server_port=self._adb_server_port,
|
262
|
+
)
|
263
|
+
launcher = emulator_launcher.EmulatorLauncher(
|
264
|
+
config=config, adb_controller_config=adb_controller_config
|
265
|
+
)
|
196
266
|
|
197
267
|
expected_snapshot = ['-no-snapshot']
|
198
268
|
expected_network_restrict = [
|
@@ -200,17 +270,24 @@ class EmulatorLauncherTest(absltest.TestCase):
|
|
200
270
|
'restrict=y'
|
201
271
|
]
|
202
272
|
|
273
|
+
expected_env_vars = self._expected_env_vars
|
274
|
+
expected_env_vars['SHOW_PERF_STATS'] = '1' if show_perf_stats else '0'
|
275
|
+
|
203
276
|
with mock.patch.object(
|
204
277
|
subprocess, 'Popen', autospec=True) as emulator_init, \
|
205
278
|
mock.patch.object(builtins, 'open', autospec=True) as f:
|
206
279
|
f.return_value.__enter__ = f()
|
207
280
|
launcher.launch_emulator_process()
|
208
281
|
emulator_init.assert_called_once_with(
|
209
|
-
self._expected_command
|
210
|
-
|
211
|
-
|
282
|
+
self._expected_command
|
283
|
+
+ self._headless
|
284
|
+
+ self._ports
|
285
|
+
+ expected_snapshot
|
286
|
+
+ expected_network_restrict,
|
287
|
+
env=expected_env_vars,
|
212
288
|
stdout=f(),
|
213
|
-
stderr=f()
|
289
|
+
stderr=f(),
|
290
|
+
)
|
214
291
|
|
215
292
|
|
216
293
|
if __name__ == '__main__':
|