| // 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. | |
| import 'dart:convert'; | |
| /// Data needed to build and run a single dynamic module test. | |
| class DynamicModuleTest { | |
| /// Name of the test. Matches the folder containing the test. | |
| final String name; | |
| /// Absolute path to the test folder. | |
| final Uri folder; | |
| /// Entrypoint of the original application, relative to the test folder. | |
| /// All shared code | |
| /// must be reachable from it. | |
| final String main; | |
| /// Location of the dynamic_interface.yaml declaration. | |
| final String interface; | |
| /// Entrypoint for each dynamic module, keyed by name. | |
| final Map<String, String> dynamicModules; | |
| DynamicModuleTest( | |
| this.name, | |
| this.folder, | |
| this.main, | |
| this.interface, | |
| this.dynamicModules, | |
| ); | |
| } | |
| /// Result of an individual module test. | |
| class DynamicModuleTestResult { | |
| final String name; | |
| final Status status; | |
| final String details; | |
| final Duration time; | |
| DynamicModuleTestResult._(this.name, this.status, this.details, this.time); | |
| factory DynamicModuleTestResult.pass(DynamicModuleTest test, Duration time) => | |
| DynamicModuleTestResult._(test.name, Status.pass, '', time); | |
| factory DynamicModuleTestResult.compileError( | |
| DynamicModuleTest test, | |
| String details, | |
| Duration time, | |
| ) => DynamicModuleTestResult._( | |
| test.name, | |
| Status.compileTimeError, | |
| details, | |
| time, | |
| ); | |
| factory DynamicModuleTestResult.runtimeError( | |
| DynamicModuleTest test, | |
| String details, | |
| Duration time, | |
| ) => DynamicModuleTestResult._(test.name, Status.runtimeError, details, time); | |
| /// Emit the result in the JSON format expected by the test infrastructure. | |
| String toRecordJson(String configuration) { | |
| final outcome = switch (status) { | |
| Status.pass => 'Pass', | |
| Status.compileTimeError => 'CompileTimeError', | |
| Status.runtimeError => 'RuntimeError', | |
| }; | |
| return jsonEncode({ | |
| 'name': 'dynamic_modules_suite/$name', | |
| 'configuration': configuration, | |
| 'suite': 'dynamic_modules_suite', | |
| 'test_name': name, | |
| 'time_ms': time.inMilliseconds, | |
| 'expected': 'Pass', | |
| 'result': outcome, | |
| 'matches': status == Status.pass, | |
| }); | |
| } | |
| /// Emit the log entry with details of a failure in the JSON format expected | |
| /// by the test infrastructure. | |
| String toLogJson(String configuration) { | |
| final outcome = switch (status) { | |
| Status.pass => 'Pass', | |
| Status.compileTimeError => 'CompileTimeError', | |
| Status.runtimeError => 'RuntimeError', | |
| }; | |
| return jsonEncode({ | |
| 'name': 'dynamic_modules_suite/$name', | |
| 'configuration': configuration, | |
| 'result': outcome, | |
| 'log': details, | |
| }); | |
| } | |
| } | |
| enum Status { pass, compileTimeError, runtimeError } |