Skip to content

Commit 18ee714

Browse files
authored
Test on multiple device profile emulators (#238)
* Test on multiple ephemeral profile targets * Rename the option to --generate-emulators * Exclude some tests * Add issue link in recipe file
1 parent 8a1d464 commit 18ee714

File tree

3 files changed

+57
-30
lines changed

3 files changed

+57
-30
lines changed

.github/workflows/integration_test.yml

+5-5
Original file line numberDiff line numberDiff line change
@@ -23,20 +23,20 @@ jobs:
2323
run: |
2424
export PATH=`pwd`/flutter-tizen/bin:$PATH
2525
./tools/run_command.py test \
26-
--platforms wearable-5.5 \
26+
--recipe ./tools/recipe.yaml \
27+
--generate-emulators \
2728
--run-on-changed-packages \
2829
--base-sha=$(git rev-parse HEAD^) \
2930
--exclude wearable_rotary image_picker camera webview_flutter \
3031
video_player permission_handler geolocator battery connectivity \
3132
device_info package_info sensors share wifi_info_flutter \
32-
google_maps_flutter tizen_app_control
33+
google_maps_flutter tizen_app_control url_launcher network_info_plus
3334
# The following packages are excluded from tests:
3435
# wearable_rotary, image_picker: no tests.
35-
# camera: the current test target is wearable emulator 5.5, which doesn't support this package.
36-
# webview_flutter: the current test target is wearable emulator 5.5, which doesn't support this package.
36+
# camera: no supported profiles.
3737
# video_player: test frequently breaks due to memory issue(https://github.com/flutter-tizen/plugins/issues/135).
3838
# permission_handler: permission related test.
3939
# geolocator: test requires console manipulation.
4040
# battery, connectivity, device_info, package_info, sensors, share, wifi_info_flutter: deprecated.
41-
# google_maps_flutter: device limitation not yet specified.
41+
# google_maps_flutter, webview_flutter, url_launcher, network_info_plus: not supported by emulators
4242
# tizen_app_control: test available after Flutter 2.5 migration.

tools/commands/integration_test.py

+25-25
Original file line numberDiff line numberDiff line change
@@ -130,8 +130,8 @@ def run_integration_test(self, plugin_name, directory, timeout):
130130
])
131131

132132

133-
class EphemeralTarget(Target):
134-
"""A Tizen emulator that launches/poweroffs itself during test."""
133+
class TemporaryEmulator(Target):
134+
"""A Tizen emulator that is created temporary by the tool for testing purposes."""
135135

136136
def __init__(self, name, platform):
137137
super().__init__(name, platform)
@@ -289,31 +289,31 @@ def _parse_target_info(self, capability_info):
289289
return device_profile, tizen_version
290290

291291

292-
class EphemeralTargetManager(TargetManager):
293-
"""A TargetManager for EphemeralTargets."""
292+
class TemporaryEmulatorManager(TargetManager):
293+
"""A TargetManager for TemporaryEmulators."""
294294

295295
def __init__(self, platforms):
296296
super().__init__()
297297
self.platforms = platforms
298298

299299
def __enter__(self):
300300
for platform in self.platforms:
301-
self._create_ephemeral_target(platform)
301+
self._create_emulator(platform)
302302
return self
303303

304304
def __exit__(self, exc_type, exc_value, traceback):
305-
self._delete_ephemeral_targets()
305+
self._delete_emulators()
306306
super().__exit__(exc_type, exc_value, traceback)
307307

308-
def _create_ephemeral_target(self, platform):
308+
def _create_emulator(self, platform):
309309
device_profile, tizen_version = platform.split('-', 1)
310310
# Target name valid characters are [A-Za-z0-9-_].
311-
target_name = f'{device_profile}-{tizen_version.replace(".", "_")}-{os.getpid()}'
312-
target = EphemeralTarget(target_name, platform)
313-
target.create()
314-
self.targets_per_platform[platform].append(target)
311+
emulator_name = f'{device_profile}-{tizen_version.replace(".", "_")}-{os.getpid()}'
312+
emulator = TemporaryEmulator(emulator_name, platform)
313+
emulator.create()
314+
self.targets_per_platform[platform].append(emulator)
315315

316-
def _delete_ephemeral_targets(self):
316+
def _delete_emulators(self):
317317
for targets in self.targets_per_platform.values():
318318
for target in targets:
319319
target.delete()
@@ -384,23 +384,23 @@ def set_subparser(subparsers):
384384
c: [wearable-4.0]
385385
)''')
386386
parser.add_argument(
387-
'--use-ephemeral-targets',
387+
'--generate-emulators',
388388
default=False,
389389
action='store_true',
390-
help='''Create and destroy ephemeral targets during test.
391-
Must provide --platforms or --recipe option to specify which
392-
platform targets to create.''')
390+
help='''Create and destroy emulators during test.
391+
Must provide either --platforms or --recipe option to specify which
392+
platforms to create.''')
393393
parser.set_defaults(func=run_integration_test)
394394

395395

396-
def _get_target_manager(use_ephemeral_targets, platforms):
397-
if use_ephemeral_targets:
398-
return EphemeralTargetManager(platforms)
396+
def _get_target_manager(generate_emulators, platforms):
397+
if generate_emulators:
398+
return TemporaryEmulatorManager(platforms)
399399
else:
400400
return TargetManager()
401401

402402

403-
def _integration_test(plugin_dir, platforms, timeout, use_ephemeral_targets):
403+
def _integration_test(plugin_dir, platforms, timeout, generate_emulators):
404404
"""Runs integration test in the example package for plugin_dir
405405
406406
Currently the tools assumes that there's only one example package per plugin.
@@ -409,7 +409,7 @@ def _integration_test(plugin_dir, platforms, timeout, use_ephemeral_targets):
409409
plugin_dir (str): The path to a single plugin directory.
410410
platforms (List[str]): A list of testing platforms.
411411
timeout (int): Time limit in seconds before cancelling the test.
412-
use_ephemeral_targets (bool): Whether to create and delete targets
412+
generate_emulators (bool): Whether to create and delete targets
413413
for test.
414414
415415
Returns:
@@ -450,7 +450,7 @@ def _integration_test(plugin_dir, platforms, timeout, use_ephemeral_targets):
450450

451451
try:
452452
with _get_target_manager(
453-
use_ephemeral_targets,
453+
generate_emulators,
454454
platforms,
455455
) as target_manager:
456456
if not platforms:
@@ -521,9 +521,9 @@ def run_integration_test(args):
521521
)
522522
exit(1)
523523

524-
if args.use_ephemeral_targets and not args.platforms and not args.recipe:
524+
if args.generate_emulators and not args.platforms and not args.recipe:
525525
print(
526-
'--use-ephemeral-targets option must be used with either --platforms or --recipe option.'
526+
'--generate-emulators option must be used with either --platforms or --recipe option.'
527527
)
528528
exit(1)
529529

@@ -552,7 +552,7 @@ def run_integration_test(args):
552552
os.path.join(packages_dir, testing_plugin),
553553
platforms,
554554
args.timeout,
555-
args.use_ephemeral_targets,
555+
args.generate_emulators,
556556
))
557557

558558
print(f'============= TEST RESULT =============')

tools/recipe.yaml

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
plugins:
2+
# audioplayers should also test for tv-6.0, currently the test fails on tv-6.0.
3+
# https://github.com/flutter-tizen/plugins/issues/239
4+
audioplayers: ["wearable-5.5"]
5+
battery_plus: ["wearable-5.5"]
6+
camera: []
7+
connectivity_plus: ["wearable-5.5", "tv-6.0"]
8+
device_info_plus: ["wearable-5.5", "tv-6.0"]
9+
flutter_tts: ["wearable-5.5", "tv-6.0"]
10+
geolocator: ["wearable-5.5"]
11+
google_maps_flutter: []
12+
image_picker: []
13+
integration_test: ["wearable-5.5", "tv-6.0"]
14+
messageport: ["wearable-5.5", "tv-6.0"]
15+
network_info_plus: []
16+
package_info_plus: ["wearable-5.5", "tv-6.0"]
17+
path_provider: ["wearable-5.5", "tv-6.0"]
18+
permission_handler: ["wearable-5.5"]
19+
sensors_plus: ["wearable-5.5"]
20+
share_plus: ["wearable-5.5"]
21+
shared_preferences: ["wearable-5.5", "tv-6.0"]
22+
tizen_app_control: ["wearable-5.5", "tv-6.0"]
23+
url_launcher: []
24+
video_player: ["wearable-5.5"]
25+
wakelock: ["wearable-5.5"]
26+
wearable_rotary: ["wearable-5.5"]
27+
webview_flutter: []

0 commit comments

Comments
 (0)