60d418034a
* Reformat pkg/dev_compiler. * Re-flow some comments to keep them within 80 characters. Change-Id: I0849ce113ecf3dce4a2b4405c2b09a17dee4df76 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/433081 Reviewed-by: Mark Zhou <markzipan@google.com> Commit-Queue: Nicholas Shahan <nshahan@google.com>
153 lines
4.9 KiB
Dart
153 lines
4.9 KiB
Dart
// Copyright (c) 2020, 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';
|
|
import 'dart:io';
|
|
|
|
import 'package:dev_compiler/src/kernel/module_metadata.dart';
|
|
import 'package:test/test.dart';
|
|
|
|
/// Test creating, reading and writing debugger metadata.
|
|
void main() {
|
|
group('Module metadata', () {
|
|
late Directory tempDir;
|
|
late File file;
|
|
|
|
setUpAll(() {
|
|
var systemTempDir = Directory.systemTemp;
|
|
tempDir = systemTempDir.createTempSync('foo bar');
|
|
var input = tempDir.uri.resolve('module.metadata');
|
|
file = File.fromUri(input)..createSync();
|
|
});
|
|
|
|
tearDownAll(() {
|
|
tempDir.delete(recursive: true);
|
|
});
|
|
|
|
test('create, write, and read', () async {
|
|
// Create metadata.
|
|
var version = ModuleMetadataVersion.current.version;
|
|
var module = createMetadata(version);
|
|
testMetadataFields(module, version);
|
|
|
|
// Write metadata.
|
|
file.writeAsBytesSync(utf8.encode(json.encode(module)));
|
|
expect(file.existsSync(), true);
|
|
|
|
// Read metadata.
|
|
var moduleJson = json.decode(utf8.decode(file.readAsBytesSync()));
|
|
var newModule = ModuleMetadata.fromJson(
|
|
moduleJson as Map<String, dynamic>,
|
|
);
|
|
testMetadataFields(newModule, version);
|
|
});
|
|
|
|
test('read later backward-compatible patch version', () async {
|
|
// Create metadata with next patch version.
|
|
var version = ModuleMetadataVersion(
|
|
ModuleMetadataVersion.current.majorVersion,
|
|
ModuleMetadataVersion.current.minorVersion,
|
|
ModuleMetadataVersion.current.patchVersion + 1,
|
|
).version;
|
|
|
|
var module = createMetadata(version);
|
|
|
|
// Write metadata.
|
|
file.writeAsBytesSync(utf8.encode(json.encode(module)));
|
|
expect(file.existsSync(), true);
|
|
|
|
// Read metadata.
|
|
var moduleJson = json.decode(utf8.decode(file.readAsBytesSync()));
|
|
var newModule = ModuleMetadata.fromJson(
|
|
moduleJson as Map<String, dynamic>,
|
|
);
|
|
testMetadataFields(newModule, version);
|
|
});
|
|
|
|
test('read later backward-compatible minor version', () async {
|
|
// Create metadata with next minor version.
|
|
var version = ModuleMetadataVersion(
|
|
ModuleMetadataVersion.current.majorVersion,
|
|
ModuleMetadataVersion.current.minorVersion + 1,
|
|
ModuleMetadataVersion.current.patchVersion + 1,
|
|
).version;
|
|
var module = createMetadata(version);
|
|
|
|
// Write metadata.
|
|
file.writeAsBytesSync(utf8.encode(json.encode(module)));
|
|
expect(file.existsSync(), true);
|
|
|
|
// Read metadata.
|
|
var moduleJson = json.decode(utf8.decode(file.readAsBytesSync()));
|
|
var newModule = ModuleMetadata.fromJson(
|
|
moduleJson as Map<String, dynamic>,
|
|
);
|
|
testMetadataFields(newModule, version);
|
|
});
|
|
|
|
test('fail to read later non-backward-compatible major version', () async {
|
|
// Create metadata with next minor version.
|
|
var version = ModuleMetadataVersion(
|
|
ModuleMetadataVersion.current.majorVersion + 1,
|
|
ModuleMetadataVersion.current.minorVersion + 1,
|
|
ModuleMetadataVersion.current.patchVersion + 1,
|
|
).version;
|
|
var module = createMetadata(version);
|
|
|
|
// Write metadata.
|
|
file.writeAsBytesSync(utf8.encode(json.encode(module)));
|
|
expect(file.existsSync(), true);
|
|
|
|
// Try read metadata, expect to fail.
|
|
var moduleJson = json.decode(utf8.decode(file.readAsBytesSync()));
|
|
ModuleMetadata? newModule;
|
|
try {
|
|
newModule = ModuleMetadata.fromJson(moduleJson as Map<String, dynamic>);
|
|
} catch (e) {
|
|
expect(
|
|
e.toString(),
|
|
'Exception: Unsupported metadata version $version',
|
|
);
|
|
}
|
|
|
|
expect(newModule, null);
|
|
});
|
|
});
|
|
}
|
|
|
|
ModuleMetadata createMetadata(String version) =>
|
|
ModuleMetadata(
|
|
'module',
|
|
'closure',
|
|
'module.map',
|
|
'module.js',
|
|
'module.full.dill',
|
|
version: version,
|
|
)..addLibrary(
|
|
LibraryMetadata(
|
|
'library',
|
|
'package:library/test.dart',
|
|
'file:///source/library/lib/test.dart',
|
|
['src/test2.dart'],
|
|
),
|
|
);
|
|
|
|
void testMetadataFields(ModuleMetadata module, String version) {
|
|
// Reader always creates current metadata version.
|
|
expect(module.version, version);
|
|
expect(module.name, 'module');
|
|
expect(module.closureName, 'closure');
|
|
expect(module.sourceMapUri, 'module.map');
|
|
expect(module.moduleUri, 'module.js');
|
|
expect(module.fullDillUri, 'module.full.dill');
|
|
|
|
var libUri = module.libraries.keys.first;
|
|
var lib = module.libraries[libUri]!;
|
|
expect(libUri, 'package:library/test.dart');
|
|
expect(lib.name, 'library');
|
|
expect(lib.importUri, 'package:library/test.dart');
|
|
expect(lib.fileUri, 'file:///source/library/lib/test.dart');
|
|
expect(lib.partUris[0], 'src/test2.dart');
|
|
}
|