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

Side by Side Diff: pkg/analyzer/test/src/summary/resynthesize_ast_test.dart

Issue 1833823002: Add tests for summarizing / resynthesizing using only AST. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 9 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
(Empty)
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
3 // BSD-style license that can be found in the LICENSE file.
4
5 library analyzer.test.src.summary.resynthesize_ast_test;
6
7 import 'package:analyzer/dart/ast/ast.dart';
8 import 'package:analyzer/src/dart/element/element.dart';
9 import 'package:analyzer/src/generated/source.dart';
10 import 'package:analyzer/src/summary/format.dart';
11 import 'package:analyzer/src/summary/idl.dart';
12 import 'package:analyzer/src/summary/prelink.dart';
13 import 'package:analyzer/src/summary/resynthesize.dart';
14 import 'package:analyzer/src/summary/summarize_ast.dart';
15 import 'package:analyzer/src/summary/summarize_elements.dart'
16 show PackageBundleAssembler;
17 import 'package:analyzer/task/dart.dart' show PARSED_UNIT;
18 import 'package:unittest/unittest.dart';
19
20 import '../../reflective_tests.dart';
21 import 'resynthesize_test.dart';
22
23 main() {
24 groupSep = ' | ';
25 runReflectiveTests(ResynthesizeAstTest);
26 }
27
28 @reflectiveTest
29 class ResynthesizeAstTest extends ResynthesizeTest {
30 final Set<Source> serializedSources = new Set<Source>();
31 final PackageBundleAssembler bundleAssembler = new PackageBundleAssembler();
32 final Map<Uri, UnlinkedUnitBuilder> uriToUnit = <Uri, UnlinkedUnitBuilder>{};
33
34 @override
35 bool get checkPropagatedTypes => false;
36
37 @override
38 void checkLibrary(String text,
39 {bool allowErrors: false, bool dumpSummaries: false}) {
40 Source source = addTestSource(text);
41 SummaryResynthesizer resynthesizer = _encodeLibrary(source);
42 LibraryElementImpl resynthesized =
43 resynthesizer.getLibraryElement(source.uri.toString());
44 LibraryElementImpl original = context.computeLibraryElement(source);
45 checkLibraryElements(original, resynthesized);
46 }
47
48 @override
49 TestSummaryResynthesizer encodeDecodeLibrarySource(Source source) {
50 return _encodeLibrary(source);
51 }
52
53 @override
54 void test_const_invokeConstructor_named() {
55 // TODO(scheglov) fix me
56 }
57
58 @override
59 void test_constructor_withCycles_const() {
60 // TODO(scheglov) fix me
61 }
62
63 @override
64 void test_inferred_function_type_in_generic_class_constructor() {
65 // TODO(scheglov) fix me
66 }
67
68 @override
69 void test_metadata_constructor_call_named() {
70 // TODO(scheglov) fix me
71 }
72
73 @override
74 void test_metadata_constructor_call_named_prefixed() {
75 // TODO(scheglov) fix me
76 }
77
78 @override
79 void test_metadata_constructor_call_unnamed() {
80 // TODO(scheglov) fix me
81 }
82
83 @override
84 void test_metadata_constructor_call_with_args() {
85 // TODO(scheglov) fix me
86 }
87
88 @override
89 void test_type_reference_to_import_part_in_subdir() {
90 // TODO(scheglov) fix me
91 }
92
93 TestSummaryResynthesizer _encodeLibrary(Source source) {
94 addLibrary('dart:core');
95 _serializeLibrary(source);
96
97 PackageBundle bundle =
98 new PackageBundle.fromBuffer(bundleAssembler.assemble().toBuffer());
99
100 Map<String, UnlinkedUnit> unlinkedSummaries = <String, UnlinkedUnit>{};
101 Map<String, LinkedLibrary> linkedSummaries = <String, LinkedLibrary>{};
102 for (int i = 0; i < bundle.unlinkedUnitUris.length; i++) {
103 String uri = bundle.unlinkedUnitUris[i];
104 unlinkedSummaries[uri] = bundle.unlinkedUnits[i];
105 }
106 for (int i = 0; i < bundle.linkedLibraryUris.length; i++) {
107 String uri = bundle.linkedLibraryUris[i];
108 linkedSummaries[uri] = bundle.linkedLibraries[i];
109 }
110
111 return new TestSummaryResynthesizer(
112 null, context, unlinkedSummaries, linkedSummaries);
113 }
114
115 UnlinkedUnitBuilder _getUnlinkedUnit(Source source) {
116 return uriToUnit.putIfAbsent(source.uri, () {
117 CompilationUnit unit = context.computeResult(source, PARSED_UNIT);
118 UnlinkedUnitBuilder unlinkedUnit = serializeAstUnlinked(unit);
119 bundleAssembler.addUnlinkedUnit(source, unlinkedUnit);
120 return unlinkedUnit;
121 });
122 }
123
124 void _serializeLibrary(Source librarySource) {
125 if (!serializedSources.add(librarySource)) {
126 return;
127 }
128
129 Source resolveRelativeUri(String relativeUri) {
130 Source resolvedSource =
131 context.sourceFactory.resolveUri(librarySource, relativeUri);
132 if (resolvedSource == null) {
133 throw new StateError('Could not resolve $relativeUri in the context of '
134 '$librarySource (${librarySource.runtimeType})');
135 }
136 return resolvedSource;
137 }
138
139 UnlinkedUnitBuilder getPart(String relativeUri) {
140 return _getUnlinkedUnit(resolveRelativeUri(relativeUri));
141 }
142
143 UnlinkedPublicNamespace getImport(String relativeUri) {
144 return getPart(relativeUri).publicNamespace;
145 }
146
147 UnlinkedUnitBuilder definingUnit = _getUnlinkedUnit(librarySource);
148 LinkedLibraryBuilder linkedLibrary =
149 prelink(definingUnit, getPart, getImport);
150 bundleAssembler.addLinkedLibrary(
151 librarySource.uri.toString(), linkedLibrary);
152 linkedLibrary.dependencies.skip(1).forEach((LinkedDependency d) {
153 _serializeLibrary(resolveRelativeUri(d.uri));
154 });
155 }
156 }
OLDNEW
« no previous file with comments | « pkg/analyzer/lib/src/summary/summarize_elements.dart ('k') | pkg/analyzer/test/src/summary/resynthesize_strong_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698