Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(401)

Side by Side Diff: tests/compiler/dart2js/serialization/library_test.dart

Issue 2004833003: Support multiple resolution inputs from command line. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Fix and check library separation Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library dart2js.serialization_library_test; 5 library dart2js.serialization_library_test;
6 6
7 import 'dart:async'; 7 import 'dart:async';
8 import 'dart:io'; 8 import 'dart:io';
9 import '../memory_compiler.dart'; 9 import '../memory_compiler.dart';
10 import 'package:async_helper/async_helper.dart'; 10 import 'package:async_helper/async_helper.dart';
11 import 'package:compiler/src/common.dart';
11 import 'package:compiler/src/commandline_options.dart'; 12 import 'package:compiler/src/commandline_options.dart';
12 import 'package:compiler/src/common/names.dart'; 13 import 'package:compiler/src/common/names.dart';
13 import 'package:compiler/src/compiler.dart'; 14 import 'package:compiler/src/compiler.dart';
14 import 'package:compiler/src/diagnostics/invariant.dart'; 15 import 'package:compiler/src/diagnostics/invariant.dart';
15 import 'package:compiler/src/elements/elements.dart'; 16 import 'package:compiler/src/elements/elements.dart';
16 import 'package:compiler/src/serialization/json_serializer.dart'; 17 import 'package:compiler/src/serialization/json_serializer.dart';
17 import 'package:compiler/src/serialization/serialization.dart'; 18 import 'package:compiler/src/serialization/serialization.dart';
19 import 'package:expect/expect.dart';
18 20
19 import 'equivalence_test.dart'; 21 import 'equivalence_test.dart';
22 import 'test_helper.dart';
23 import 'resolved_ast_test.dart';
24 import 'helper.dart';
20 25
21 main(List<String> arguments) { 26 main(List<String> arguments) {
22 // Ensure that we can print out constant expressions. 27 // Ensure that we can print out constant expressions.
23 DEBUG_MODE = true; 28 DEBUG_MODE = true;
24 29
25 Uri entryPoint; 30 Uri entryPoint;
26 String outPath; 31 String outPath;
27 int shardCount = 3; 32 int shardCount = 3;
28 bool prettyPrint = false; 33 bool prettyPrint = false;
29 for (String arg in arguments) { 34 for (String arg in arguments) {
(...skipping 15 matching lines...) Expand all
45 } 50 }
46 } 51 }
47 if (entryPoint == null) { 52 if (entryPoint == null) {
48 entryPoint = Uris.dart_core; 53 entryPoint = Uris.dart_core;
49 } 54 }
50 asyncTest(() async { 55 asyncTest(() async {
51 Compiler compiler = await compilerFor( 56 Compiler compiler = await compilerFor(
52 entryPoint: entryPoint, options: [Flags.analyzeAll]); 57 entryPoint: entryPoint, options: [Flags.analyzeAll]);
53 compiler.serialization.supportSerialization = true; 58 compiler.serialization.supportSerialization = true;
54 await compiler.run(entryPoint); 59 await compiler.run(entryPoint);
55 List<String> data = 60 List<SerializedData> data =
56 createData(compiler, 61 createData(compiler,
57 outPath: outPath, 62 outPath: outPath,
58 prettyPrint: prettyPrint, 63 prettyPrint: prettyPrint,
59 shardCount: shardCount); 64 shardCount: shardCount);
60 testEquivalence(data, compiler.libraryLoader.libraries); 65 await testAnalysis(compiler, data, entryPoint);
61 await testAnalysis(data, entryPoint);
62 }); 66 });
63 } 67 }
64 68
65 List<String> createData( 69 List<SerializedData> createData(
66 Compiler compiler, 70 Compiler compiler,
67 {String outPath, 71 {String outPath,
68 bool prettyPrint, 72 bool prettyPrint,
69 int shardCount: 3}) { 73 int shardCount: 3}) {
70 Iterable<LibraryElement> libraries1 = compiler.libraryLoader.libraries; 74 Iterable<LibraryElement> libraries1 = compiler.libraryLoader.libraries;
71 if (shardCount < 1 || shardCount > libraries1.length) { 75 if (shardCount < 1 || shardCount > libraries1.length) {
72 shardCount = libraries1.length; 76 shardCount = libraries1.length;
73 } 77 }
74 List<List<LibraryElement>> librarySplits = <List<LibraryElement>>[]; 78 List<List<LibraryElement>> librarySplits = <List<LibraryElement>>[];
75 int offset = 0; 79 int offset = 0;
76 int shardSize = (libraries1.length / shardCount).ceil(); 80 int shardSize = (libraries1.length / shardCount).ceil();
77 for (int shard = 0; shard < shardCount; shard++) { 81 for (int shard = 0; shard < shardCount; shard++) {
78 List<LibraryElement> libraries = <LibraryElement>[]; 82 List<LibraryElement> libraries = <LibraryElement>[];
79 for (int index = 0; index < shardSize; index++) { 83 for (int index = 0; index < shardSize; index++) {
80 if (offset + index < libraries1.length) { 84 if (offset + index < libraries1.length) {
81 libraries.add(libraries1.elementAt(offset + index)); 85 libraries.add(libraries1.elementAt(offset + index));
82 } 86 }
83 } 87 }
84 librarySplits.add(libraries); 88 librarySplits.add(libraries);
85 offset += shardSize; 89 offset += shardSize;
86 } 90 }
87 print(librarySplits.join('\n')); 91 print(librarySplits.join('\n'));
88 List<String> texts = <String>[]; 92 List<SerializedData> data = <SerializedData>[];
89 for (int shard = 0; shard < shardCount; shard++) { 93 for (int shard = 0; shard < shardCount; shard++) {
90 List<LibraryElement> libraries = librarySplits[shard]; 94 List<LibraryElement> libraries = librarySplits[shard];
91 Serializer serializer = 95 Serializer serializer =
92 compiler.serialization.createSerializer(libraries); 96 compiler.serialization.createSerializer(libraries);
93 String text = serializer.toText(const JsonSerializationEncoder()); 97 String text = serializer.toText(const JsonSerializationEncoder());
94 String outText = text; 98 String outText = text;
95 if (prettyPrint) { 99 if (prettyPrint) {
96 outText = serializer.prettyPrint(); 100 outText = serializer.prettyPrint();
97 } 101 }
98 if (outPath != null) { 102 if (outPath != null) {
99 String name = outPath; 103 String name = outPath;
100 String ext = ''; 104 String ext = '';
101 int dotPos = outPath.lastIndexOf('.'); 105 int dotPos = outPath.lastIndexOf('.');
102 if (dotPos != -1) { 106 if (dotPos != -1) {
103 name = outPath.substring(0, dotPos); 107 name = outPath.substring(0, dotPos);
104 ext = outPath.substring(dotPos); 108 ext = outPath.substring(dotPos);
105 } 109 }
106 new File('$name$shard$ext').writeAsStringSync(outText); 110 new File('$name$shard$ext').writeAsStringSync(outText);
107 } else if (prettyPrint) { 111 } else if (prettyPrint) {
108 print(outText); 112 print(outText);
109 } 113 }
110 texts.add(text); 114 data.add(new SerializedData(Uri.parse('memory:out$shard.data'), text));
111 } 115 }
112 return texts; 116 return data;
113 } 117 }
114 118
115 void testEquivalence(List<String> data, Iterable<LibraryElement> libraries1) { 119 Future testAnalysis(
116 DeserializationContext deserializationContext = 120 Compiler compiler1,
117 new DeserializationContext(); 121 List<SerializedData> data,
118 for (String shardData in data) { 122 Uri entryPoint) async {
119 Deserializer deserializer = new Deserializer.fromText( 123 Map<String, String> memorySourceFiles = <String, String>{};
120 deserializationContext, shardData, const JsonSerializationDecoder()); 124 List<Uri> resolutionInputs = <Uri>[];
121 deserializationContext.deserializers.add(deserializer); 125 for (int index = 0; index < data.length; index++) {
126 SerializedData serializedData = data[index];
127 serializedData.expandMemorySourceFiles(memorySourceFiles);
128 serializedData.expandUris(resolutionInputs);
122 } 129 }
123 for (LibraryElement library1 in libraries1) { 130 CompilationResult result = await runCompiler(
131 entryPoint: entryPoint,
132 memorySourceFiles: memorySourceFiles,
133 resolutionInputs: resolutionInputs,
134 options: [Flags.analyzeAll]);
135 Compiler compiler2 = result.compiler;
136 for (LibraryElement library1 in compiler1.libraryLoader.libraries) {
124 LibraryElement library2 = 137 LibraryElement library2 =
125 deserializationContext.lookupLibrary(library1.canonicalUri); 138 compiler2.libraryLoader.lookupLibrary(library1.canonicalUri);
126 if (library2 == null) { 139 if (library2 == null) {
127 throw new ArgumentError('No library ${library1.canonicalUri} found.'); 140 throw new ArgumentError('No library ${library1.canonicalUri} found.');
128 } 141 }
129 checkLibraryContent('library1', 'library2', 'library', library1, library2); 142 checkLibraryContent('library1', 'library2', 'library', library1, library2);
143 checkAllResolvedAsts(compiler1, compiler2);
144 checkAllImpacts(compiler1, compiler2);
130 } 145 }
131 } 146 Expect.isFalse(compiler2.reporter.hasReportedError, "Unexpected errors");
132
133 Future testAnalysis(List<String> data, Uri entryPoint) async {
134 Compiler compiler = compilerFor(entryPoint: entryPoint,
135 options: [Flags.analyzeAll]);
136 for (String shardData in data) {
137 compiler.serialization.deserializeFromText(shardData);
138 }
139 await compiler.run(entryPoint);
140 } 147 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698