| // Copyright (c) 2024, the Dart project authors. Please see the AUTHORS file | |
| // for details. All rights reserved. Use of this source code is governed by a | |
| // BSD-style license that can be found in the LICENSE file. | |
| /// A library used by dynamic module tests to simulate the loading process and | |
| /// provide information to the test harness. | |
| library; | |
| import 'dart:typed_data' show Uint8List; | |
| import 'package:dynamic_modules/dynamic_modules.dart'; | |
| import 'read_bytes.dart' if (dart.library.io) 'read_bytes_aot.dart'; | |
| /// Load a module and invoke it's entrypoint. | |
| /// | |
| /// The module is identified by the name of its entrypoint file within the | |
| /// `modules/` subfolder. | |
| /// | |
| /// Optional [transformBytes] callback can be used to tweak dynamic modules | |
| /// bytes if underlying implementation loads dynamic modules from bytes. | |
| Future<Object?> load( | |
| String moduleName, { | |
| Uint8List Function(Uint8List)? transformBytes, | |
| }) { | |
| if (const bool.fromEnvironment('dart.library.html')) { | |
| // DDC implementation | |
| return loadModuleFromUri(Uri(scheme: '', path: moduleName)); | |
| } | |
| if (const bool.fromEnvironment('dart.library.io')) { | |
| var bytes = readBytes('modules/$moduleName.bytecode'); | |
| if (transformBytes != null) { | |
| bytes = transformBytes(bytes); | |
| } | |
| return loadModuleFromBytes(bytes); | |
| } | |
| // Dart2wasm implementation | |
| return loadModuleFromUri(Uri(scheme: '', path: 'modules/$moduleName.wasm')); | |
| } | |
| /// Notify the test harness that the test has run to completion. | |
| void done() { | |
| print(successToken); | |
| } | |
| /// Token used by the tests to ensure they are run to completion. This mimics | |
| /// a similar 'unit-test-done` token used by the langugage test framework. | |
| /// | |
| /// Unit tests should call [done]. This constant is public only to ensure the | |
| /// token is shared with the test runner, but it is not meant to be used | |
| /// directly by tests. | |
| const successToken = 'TOKEN!**ALL TEST EXECUTED**!!'; |