// 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 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**!!';