// 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 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 }