OLD | NEW |
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, 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_test; | 5 library dart2js.serialization_test; |
6 | 6 |
7 import 'dart:io'; | 7 import 'dart:io'; |
8 import '../memory_compiler.dart'; | 8 import '../memory_compiler.dart'; |
9 import 'package:async_helper/async_helper.dart'; | 9 import 'package:async_helper/async_helper.dart'; |
10 import 'package:compiler/src/commandline_options.dart'; | 10 import 'package:compiler/src/commandline_options.dart'; |
| 11 import 'package:compiler/src/common.dart'; |
11 import 'package:compiler/src/constants/constructors.dart'; | 12 import 'package:compiler/src/constants/constructors.dart'; |
12 import 'package:compiler/src/compiler.dart'; | 13 import 'package:compiler/src/compiler.dart'; |
13 import 'package:compiler/src/diagnostics/invariant.dart'; | 14 import 'package:compiler/src/diagnostics/invariant.dart'; |
14 import 'package:compiler/src/elements/elements.dart'; | 15 import 'package:compiler/src/elements/elements.dart'; |
15 import 'package:compiler/src/elements/visitor.dart'; | 16 import 'package:compiler/src/elements/visitor.dart'; |
16 import 'package:compiler/src/ordered_typeset.dart'; | 17 import 'package:compiler/src/ordered_typeset.dart'; |
17 import 'package:compiler/src/serialization/element_serialization.dart'; | 18 import 'package:compiler/src/serialization/element_serialization.dart'; |
18 import 'package:compiler/src/serialization/equivalence.dart'; | 19 import 'package:compiler/src/serialization/equivalence.dart'; |
19 import 'package:compiler/src/serialization/json_serializer.dart'; | 20 import 'package:compiler/src/serialization/json_serializer.dart'; |
20 import 'package:compiler/src/serialization/serialization.dart'; | 21 import 'package:compiler/src/serialization/serialization.dart'; |
| 22 import 'package:expect/expect.dart'; |
21 import 'test_helper.dart'; | 23 import 'test_helper.dart'; |
22 | 24 |
23 main(List<String> arguments) { | 25 main(List<String> arguments) { |
24 // Ensure that we can print out constant expressions. | 26 // Ensure that we can print out constant expressions. |
25 DEBUG_MODE = true; | 27 DEBUG_MODE = true; |
26 | 28 |
27 Uri entryPoint; | 29 Uri entryPoint; |
28 String outPath; | 30 String outPath; |
29 bool prettyPrint = false; | 31 bool prettyPrint = false; |
30 for (String arg in arguments) { | 32 for (String arg in arguments) { |
(...skipping 13 matching lines...) Expand all Loading... |
44 } | 46 } |
45 } | 47 } |
46 if (entryPoint == null) { | 48 if (entryPoint == null) { |
47 entryPoint = Uri.parse('dart:core'); | 49 entryPoint = Uri.parse('dart:core'); |
48 } | 50 } |
49 asyncTest(() async { | 51 asyncTest(() async { |
50 CompilationResult result = await runCompiler( | 52 CompilationResult result = await runCompiler( |
51 entryPoint: entryPoint, options: [Flags.analyzeAll]); | 53 entryPoint: entryPoint, options: [Flags.analyzeAll]); |
52 Compiler compiler = result.compiler; | 54 Compiler compiler = result.compiler; |
53 testSerialization(compiler.libraryLoader.libraries, | 55 testSerialization(compiler.libraryLoader.libraries, |
| 56 compiler.reporter, |
54 outPath: outPath, | 57 outPath: outPath, |
55 prettyPrint: prettyPrint); | 58 prettyPrint: prettyPrint); |
| 59 Expect.isFalse(compiler.reporter.hasReportedError, |
| 60 "Unexpected errors occured."); |
56 }); | 61 }); |
57 } | 62 } |
58 | 63 |
59 void testSerialization(Iterable<LibraryElement> libraries1, | 64 void testSerialization( |
60 {String outPath, | 65 Iterable<LibraryElement> libraries1, |
61 bool prettyPrint}) { | 66 DiagnosticReporter reporter, |
| 67 {String outPath, |
| 68 bool prettyPrint}) { |
62 Serializer serializer = new Serializer(); | 69 Serializer serializer = new Serializer(); |
63 for (LibraryElement library1 in libraries1) { | 70 for (LibraryElement library1 in libraries1) { |
64 serializer.serialize(library1); | 71 serializer.serialize(library1); |
65 } | 72 } |
66 String text = serializer.toText(const JsonSerializationEncoder()); | 73 String text = serializer.toText(const JsonSerializationEncoder()); |
67 String outText = text; | 74 String outText = text; |
68 if (prettyPrint) { | 75 if (prettyPrint) { |
69 outText = serializer.prettyPrint(); | 76 outText = serializer.prettyPrint(); |
70 } | 77 } |
71 if (outPath != null) { | 78 if (outPath != null) { |
72 new File(outPath).writeAsStringSync(outText); | 79 new File(outPath).writeAsStringSync(outText); |
73 } else if (prettyPrint) { | 80 } else if (prettyPrint) { |
74 print(outText); | 81 print(outText); |
75 } | 82 } |
76 | 83 |
77 Deserializer deserializer = new Deserializer.fromText( | 84 Deserializer deserializer = new Deserializer.fromText( |
78 new DeserializationContext(), | 85 new DeserializationContext(reporter), Uri.parse('out1.data'), |
79 text, const JsonSerializationDecoder()); | 86 text, const JsonSerializationDecoder()); |
80 List<LibraryElement> libraries2 = <LibraryElement>[]; | 87 List<LibraryElement> libraries2 = <LibraryElement>[]; |
81 for (LibraryElement library1 in libraries1) { | 88 for (LibraryElement library1 in libraries1) { |
82 LibraryElement library2 = | 89 LibraryElement library2 = |
83 deserializer.lookupLibrary(library1.canonicalUri); | 90 deserializer.lookupLibrary(library1.canonicalUri); |
84 if (library2 == null) { | 91 if (library2 == null) { |
85 throw new ArgumentError('No library ${library1.canonicalUri} found.'); | 92 throw new ArgumentError('No library ${library1.canonicalUri} found.'); |
86 } | 93 } |
87 checkLibraryContent('library1', 'library2', 'library', library1, library2); | 94 checkLibraryContent('library1', 'library2', 'library', library1, library2); |
88 libraries2.add(library2); | 95 libraries2.add(library2); |
89 } | 96 } |
90 | 97 |
91 Serializer serializer2 = new Serializer(); | 98 Serializer serializer2 = new Serializer(); |
92 for (LibraryElement library2 in libraries2) { | 99 for (LibraryElement library2 in libraries2) { |
93 serializer2.serialize(library2); | 100 serializer2.serialize(library2); |
94 } | 101 } |
95 String text2 = serializer2.toText(const JsonSerializationEncoder()); | 102 String text2 = serializer2.toText(const JsonSerializationEncoder()); |
96 | 103 |
97 Deserializer deserializer3 = new Deserializer.fromText( | 104 Deserializer deserializer3 = new Deserializer.fromText( |
98 new DeserializationContext(), | 105 new DeserializationContext(reporter), Uri.parse('out2.data'), |
99 text2, const JsonSerializationDecoder()); | 106 text2, const JsonSerializationDecoder()); |
100 for (LibraryElement library1 in libraries1) { | 107 for (LibraryElement library1 in libraries1) { |
101 LibraryElement library2 = | 108 LibraryElement library2 = |
102 deserializer.lookupLibrary(library1.canonicalUri); | 109 deserializer.lookupLibrary(library1.canonicalUri); |
103 if (library2 == null) { | 110 if (library2 == null) { |
104 throw new ArgumentError('No library ${library1.canonicalUri} found.'); | 111 throw new ArgumentError('No library ${library1.canonicalUri} found.'); |
105 } | 112 } |
106 LibraryElement library3 = | 113 LibraryElement library3 = |
107 deserializer3.lookupLibrary(library1.canonicalUri); | 114 deserializer3.lookupLibrary(library1.canonicalUri); |
108 if (library3 == null) { | 115 if (library3 == null) { |
(...skipping 585 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
694 void visitPrefixElement(PrefixElement element1, PrefixElement element2) { | 701 void visitPrefixElement(PrefixElement element1, PrefixElement element2) { |
695 check( | 702 check( |
696 element1, element2, 'isDeferred', | 703 element1, element2, 'isDeferred', |
697 element1.isDeferred, element2.isDeferred); | 704 element1.isDeferred, element2.isDeferred); |
698 checkElementIdentities( | 705 checkElementIdentities( |
699 element1, element2, 'importedLibrary', | 706 element1, element2, 'importedLibrary', |
700 element1.deferredImport, element2.deferredImport); | 707 element1.deferredImport, element2.deferredImport); |
701 // TODO(johnniwinther): Check members. | 708 // TODO(johnniwinther): Check members. |
702 } | 709 } |
703 } | 710 } |
OLD | NEW |