addSkyEngine method
Adds a mock sky_engine package with an _embedder.yaml file, and returns
the Folder of the sky_engine package's 'lib' directory.
Implementation
Folder addSkyEngine({required String sdkPath}) {
// Emulate sky engine by writing to disk:
// * a `sky_engine/lib` directory,
// * a `sky_engine/lib/_embedder.yaml` file which points to the Dart SDK
// sources, and
// * the `dart:ui` sources into `sky_engine/lib/ui`.
var packageFolder = _addFiles('ui', mock_ui.units);
var skyEngineFolder = resourceProvider.getFolder(
resourceProvider.convertPath('$packagesRootPath/sky_engine'),
)..create();
var skyEngineLibFolder = skyEngineFolder.getChildAssumingFolder('lib')
..create();
var embedderFile = skyEngineLibFolder.getChildAssumingFile(
'_embedder.yaml',
);
// SDK-relative paths.
var embeddedSdkLibRelativePaths = {
'dart:async': 'lib/async/async.dart',
'dart:collection': 'lib/collection/collection.dart',
'dart:convert': 'lib/convert/convert.dart',
'dart:core': 'lib/core/core.dart',
'dart:developer': 'lib/developer/developer.dart',
'dart:ffi': 'lib/ffi/ffi.dart',
'dart:html': 'lib/html/dart2js/html_dart2js.dart',
'dart:io': 'lib/io/io.dart',
'dart:isolate': 'lib/isolate/isolate.dart',
'dart:js': 'lib/js/js.dart',
'dart:js_interop': 'lib/js/js_interop.dart',
'dart:math': 'lib/math/math.dart',
'dart:typed_data': 'lib/typed_data/typed_data.dart',
'dart:_interceptors': 'lib/_interceptors/interceptors.dart',
'dart:_internal': 'lib/internal/internal.dart',
};
// Build map of all absolute paths, including the project-specific dart:ui.
var embeddedLibAbsolutePaths = {
'dart:ui': path.join(packageFolder.path, 'lib', 'ui.dart'),
for (var MapEntry(key: name, value: relativePath)
in embeddedSdkLibRelativePaths.entries)
// The paths above all use forward slashes, but we must use the correct
// slashes for the platform here.
name: path.join(
sdkPath,
relativePath.replaceAll(path.posix.separator, path.separator),
),
};
// Build the YAML file contents.
var embeddedFileContents = StringBuffer();
embeddedFileContents.writeln('embedded_libs:');
for (var MapEntry(key: name, value: path)
in embeddedLibAbsolutePaths.entries) {
// Use jsonEncode to ensure escape is correct when the path contains
// backslashes (Windows).
embeddedFileContents.writeln(
' ${jsonEncode(name)}: ${jsonEncode(path)}',
);
}
embedderFile.writeAsStringSync(embeddedFileContents.toString());
return skyEngineLibFolder;
}