blob: 59fae6c9ce0938d4f5df01c870941c14de366701 [file] [log] [blame]
// Copyright (c) 2016, 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.
library dart2js.reserialization_test;
import 'dart:async';
import 'package:async_helper/async_helper.dart';
import 'package:compiler/src/compiler.dart';
import 'package:compiler/src/diagnostics/invariant.dart';
import 'package:compiler/src/elements/elements.dart';
import 'package:expect/expect.dart';
import 'helper.dart';
import 'test_helper.dart';
import 'equivalence_test.dart';
main(List<String> args) {
// Ensure that we can print out constant expressions.
DEBUG_MODE = true;
Arguments arguments = new Arguments.from(args);
Uri entryPoint;
if (arguments.filename != null) {
entryPoint = Uri.parse(arguments.filename);
} else {
entryPoint = Uri.parse('dart:core');
}
asyncTest(() async {
await testReserialization(entryPoint);
});
}
Future testReserialization(Uri entryPoint) async {
SerializationResult result1 = await serialize(entryPoint);
Compiler compiler1 = result1.compiler;
SerializedData serializedData1 = result1.serializedData;
Iterable<LibraryElement> libraries1 = compiler1.libraryLoader.libraries;
SerializationResult result2 = await serialize(entryPoint,
memorySourceFiles: serializedData1.toMemorySourceFiles(),
resolutionInputs: serializedData1.toUris(),
deserializeCompilationDataForTesting: true);
Compiler compiler2 = result2.compiler;
SerializedData serializedData2 = result2.serializedData;
Iterable<LibraryElement> libraries2 = compiler2.libraryLoader.libraries;
SerializationResult result3 = await serialize(entryPoint,
memorySourceFiles: serializedData2.toMemorySourceFiles(),
resolutionInputs: serializedData2.toUris(),
deserializeCompilationDataForTesting: true);
Compiler compiler3 = result3.compiler;
Iterable<LibraryElement> libraries3 = compiler3.libraryLoader.libraries;
for (LibraryElement library1 in libraries1) {
LibraryElement library2 = libraries2.firstWhere((LibraryElement library2) {
return library2.canonicalUri == library1.canonicalUri;
});
Expect.isNotNull(
library2, "No library found for ${library1.canonicalUri}.");
checkLibraryContent('library1', 'library2', 'library', library1, library2);
LibraryElement library3 = libraries3.firstWhere((LibraryElement library3) {
return library3.canonicalUri == library1.canonicalUri;
});
Expect.isNotNull(
library3, "No library found for ${library1.canonicalUri}.");
checkLibraryContent('library1', 'library3', 'library', library1, library3);
}
checkAllResolvedAsts(compiler1, compiler2);
checkAllResolvedAsts(compiler1, compiler3);
checkAllImpacts(compiler1, compiler2);
checkAllImpacts(compiler1, compiler3);
}