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

Side by Side Diff: tests/compiler/dart2js/serialization_test.dart

Issue 1811173003: Support per-library serialization. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Updated cf. comments. Created 4 years, 8 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
« no previous file with comments | « tests/compiler/dart2js/serialization_library_test.dart ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/constants/constructors.dart'; 11 import 'package:compiler/src/constants/constructors.dart';
11 import 'package:compiler/src/constants/expressions.dart'; 12 import 'package:compiler/src/constants/expressions.dart';
12 import 'package:compiler/src/dart_types.dart'; 13 import 'package:compiler/src/dart_types.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/elements/visitor.dart'; 17 import 'package:compiler/src/elements/visitor.dart';
17 import 'package:compiler/src/ordered_typeset.dart'; 18 import 'package:compiler/src/ordered_typeset.dart';
18 import 'package:compiler/src/serialization/element_serialization.dart'; 19 import 'package:compiler/src/serialization/element_serialization.dart';
19 import 'package:compiler/src/serialization/json_serializer.dart'; 20 import 'package:compiler/src/serialization/json_serializer.dart';
(...skipping 20 matching lines...) Expand all
40 print("Multiple entrypoints is not supported."); 41 print("Multiple entrypoints is not supported.");
41 } 42 }
42 entryPoint = Uri.parse(arg); 43 entryPoint = Uri.parse(arg);
43 } 44 }
44 } 45 }
45 if (entryPoint == null) { 46 if (entryPoint == null) {
46 entryPoint = Uri.parse('dart:core'); 47 entryPoint = Uri.parse('dart:core');
47 } 48 }
48 asyncTest(() async { 49 asyncTest(() async {
49 CompilationResult result = await runCompiler( 50 CompilationResult result = await runCompiler(
50 entryPoint: entryPoint, options: ['--analyze-all']); 51 entryPoint: entryPoint, options: [Flags.analyzeAll]);
51 Compiler compiler = result.compiler; 52 Compiler compiler = result.compiler;
52 testSerialization(compiler.libraryLoader.libraries, 53 testSerialization(compiler.libraryLoader.libraries,
53 outPath: outPath, 54 outPath: outPath,
54 prettyPrint: prettyPrint); 55 prettyPrint: prettyPrint);
55 }); 56 });
56 } 57 }
57 58
58 void testSerialization(Iterable<LibraryElement> libraries1, 59 void testSerialization(Iterable<LibraryElement> libraries1,
59 {String outPath, 60 {String outPath,
60 bool prettyPrint}) { 61 bool prettyPrint}) {
61 Serializer serializer = new Serializer(const JsonSerializationEncoder()); 62 Serializer serializer = new Serializer();
62 for (LibraryElement library1 in libraries1) { 63 for (LibraryElement library1 in libraries1) {
63 serializer.serialize(library1); 64 serializer.serialize(library1);
64 } 65 }
65 String text = serializer.toText(); 66 String text = serializer.toText(const JsonSerializationEncoder());
66 String outText = text; 67 String outText = text;
67 if (prettyPrint) { 68 if (prettyPrint) {
68 outText = serializer.prettyPrint(); 69 outText = serializer.prettyPrint();
69 } 70 }
70 if (outPath != null) { 71 if (outPath != null) {
71 new File(outPath).writeAsStringSync(outText); 72 new File(outPath).writeAsStringSync(outText);
72 } else if (prettyPrint) { 73 } else if (prettyPrint) {
73 print(outText); 74 print(outText);
74 } 75 }
75 76
76 Deserializer deserializer = new Deserializer.fromText( 77 Deserializer deserializer = new Deserializer.fromText(
78 new DeserializationContext(),
77 text, const JsonSerializationDecoder()); 79 text, const JsonSerializationDecoder());
78 List<LibraryElement> libraries2 = <LibraryElement>[]; 80 List<LibraryElement> libraries2 = <LibraryElement>[];
79 for (LibraryElement library1 in libraries1) { 81 for (LibraryElement library1 in libraries1) {
80 LibraryElement library2 = 82 LibraryElement library2 =
81 deserializer.lookupLibrary(library1.canonicalUri); 83 deserializer.lookupLibrary(library1.canonicalUri);
82 if (library2 == null) { 84 if (library2 == null) {
83 throw new ArgumentError('No library ${library1.canonicalUri} found.'); 85 throw new ArgumentError('No library ${library1.canonicalUri} found.');
84 } 86 }
85 checkLibraryContent('library1', 'library2', 'library', library1, library2); 87 checkLibraryContent('library1', 'library2', 'library', library1, library2);
86 libraries2.add(library2); 88 libraries2.add(library2);
87 } 89 }
88 90
89 Serializer serializer2 = new Serializer(const JsonSerializationEncoder()); 91 Serializer serializer2 = new Serializer();
90 for (LibraryElement library2 in libraries2) { 92 for (LibraryElement library2 in libraries2) {
91 serializer2.serialize(library2); 93 serializer2.serialize(library2);
92 } 94 }
93 String text2 = serializer2.toText(); 95 String text2 = serializer2.toText(const JsonSerializationEncoder());
94 96
95 Deserializer deserializer3 = new Deserializer.fromText( 97 Deserializer deserializer3 = new Deserializer.fromText(
98 new DeserializationContext(),
96 text2, const JsonSerializationDecoder()); 99 text2, const JsonSerializationDecoder());
97 for (LibraryElement library1 in libraries1) { 100 for (LibraryElement library1 in libraries1) {
98 LibraryElement library2 = 101 LibraryElement library2 =
99 deserializer.lookupLibrary(library1.canonicalUri); 102 deserializer.lookupLibrary(library1.canonicalUri);
100 if (library2 == null) { 103 if (library2 == null) {
101 throw new ArgumentError('No library ${library1.canonicalUri} found.'); 104 throw new ArgumentError('No library ${library1.canonicalUri} found.');
102 } 105 }
103 LibraryElement library3 = 106 LibraryElement library3 =
104 deserializer3.lookupLibrary(library1.canonicalUri); 107 deserializer3.lookupLibrary(library1.canonicalUri);
105 if (library3 == null) { 108 if (library3 == null) {
(...skipping 435 matching lines...) Expand 10 before | Expand all | Expand 10 after
541 } 544 }
542 for (Element member in members2) { 545 for (Element member in members2) {
543 names.add(member.name); 546 names.add(member.name);
544 } 547 }
545 element1 = element1.implementation; 548 element1 = element1.implementation;
546 element2 = element2.implementation; 549 element2 = element2.implementation;
547 for (String name in names) { 550 for (String name in names) {
548 Element member1 = element1.localLookup(name); 551 Element member1 = element1.localLookup(name);
549 Element member2 = element2.localLookup(name); 552 Element member2 = element2.localLookup(name);
550 if (member1 == null) { 553 if (member1 == null) {
551 print('Missing member for $member2 in\n ${members1.join('\n ')}'); 554 // TODO(johnniwinther): Ensure abstract fields are handled correctly.
552 continue; 555 String message =
556 'Missing member for $member2 in\n ${members1.join('\n ')}';
557 if (member2.isAbstractField) {
558 print(message);
559 continue;
560 } else {
561 throw message;
562 }
553 } 563 }
554 if (member2 == null) { 564 if (member2 == null) {
555 print('Missing member for $member1 in\n ${members2.join('\n ')}'); 565 // TODO(johnniwinther): Ensure abstract fields are handled correctly.
556 continue; 566 String message =
567 'Missing member for $member1 in\n ${members2.join('\n ')}';
568 if (member1.isAbstractField) {
569 print(message);
570 continue;
571 } else {
572 throw message;
573 }
557 } 574 }
575 //print('Checking member ${member1} against ${member2}');
558 visit(member1, member2); 576 visit(member1, member2);
559 } 577 }
560 } 578 }
561 579
562 @override 580 @override
563 void visitClassElement(ClassElement element1, ClassElement element2) { 581 void visitClassElement(ClassElement element1, ClassElement element2) {
564 checkElementIdentities(null, null, null, element1, element2); 582 checkElementIdentities(null, null, null, element1, element2);
565 check(element1, element2, 'name', 583 check(element1, element2, 'name',
566 element1.name, element2.name); 584 element1.name, element2.name);
567 check(element1, element2, 'sourcePosition', 585 check(element1, element2, 'sourcePosition',
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
614 checkTypeLists( 632 checkTypeLists(
615 element1, element2, 'types', 633 element1, element2, 'types',
616 typeSet1.types.toList(), 634 typeSet1.types.toList(),
617 typeSet2.types.toList()); 635 typeSet2.types.toList());
618 636
619 checkTypeLists( 637 checkTypeLists(
620 element1, element2, 'interfaces', 638 element1, element2, 'interfaces',
621 element1.interfaces.toList(), 639 element1.interfaces.toList(),
622 element2.interfaces.toList()); 640 element2.interfaces.toList());
623 641
642 List<ConstructorElement> getConstructors(ClassElement cls) {
643 return cls.implementation.constructors.map((c) => c.declaration).toList();
644 }
645
646 checkElementLists(
647 element1, element2, 'constructors',
648 getConstructors(element1),
649 getConstructors(element2));
650
624 visitMembers(element1, element2); 651 visitMembers(element1, element2);
625 } 652 }
626 653
627 @override 654 @override
628 void visitFieldElement(FieldElement element1, FieldElement element2) { 655 void visitFieldElement(FieldElement element1, FieldElement element2) {
629 checkElementIdentities(null, null, null, element1, element2); 656 checkElementIdentities(null, null, null, element1, element2);
630 check(element1, element2, 'name', 657 check(element1, element2, 'name',
631 element1.name, element2.name); 658 element1.name, element2.name);
632 check(element1, element2, 'sourcePosition', 659 check(element1, element2, 'sourcePosition',
633 element1.sourcePosition, element2.sourcePosition); 660 element1.sourcePosition, element2.sourcePosition);
(...skipping 466 matching lines...) Expand 10 before | Expand all | Expand 10 after
1100 exp1, exp2, 'expression', 1127 exp1, exp2, 'expression',
1101 exp1.expression, exp2.expression); 1128 exp1.expression, exp2.expression);
1102 } 1129 }
1103 1130
1104 @override 1131 @override
1105 visitDeferred(DeferredConstantExpression exp1, 1132 visitDeferred(DeferredConstantExpression exp1,
1106 DeferredConstantExpression exp2) { 1133 DeferredConstantExpression exp2) {
1107 // TODO: implement visitDeferred 1134 // TODO: implement visitDeferred
1108 } 1135 }
1109 } 1136 }
OLDNEW
« no previous file with comments | « tests/compiler/dart2js/serialization_library_test.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698