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

Side by Side Diff: pkg/front_end/test/incremental_resolved_ast_generator_test.dart

Issue 2892203003: Remove IncrementalResolvedAstGenerator. (Closed)
Patch Set: Created 3 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
« no previous file with comments | « pkg/front_end/lib/src/incremental_resolved_ast_generator_impl.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
(Empty)
1 // Copyright (c) 2017, 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 import 'dart:async';
6
7 import 'package:analyzer/dart/ast/ast.dart';
8 import 'package:analyzer/dart/ast/standard_resolution_map.dart';
9 import 'package:analyzer/dart/element/element.dart';
10 import 'package:analyzer/file_system/physical_file_system.dart';
11 import 'package:analyzer/src/dart/sdk/sdk.dart';
12 import 'package:front_end/compiler_options.dart';
13 import 'package:front_end/incremental_resolved_ast_generator.dart';
14 import 'package:front_end/memory_file_system.dart';
15 import 'package:test/test.dart';
16 import 'package:test_reflective_loader/test_reflective_loader.dart';
17
18 main() {
19 defineReflectiveSuite(() {
20 defineReflectiveTests(IncrementalResolvedAstGeneratorTest);
21 });
22 }
23
24 final _sdkSummary = _readSdkSummary();
25
26 List<int> _readSdkSummary() {
27 var resourceProvider = PhysicalResourceProvider.INSTANCE;
28 var sdk = new FolderBasedDartSdk(resourceProvider,
29 FolderBasedDartSdk.defaultSdkDirectory(resourceProvider))
30 ..useSummary = true;
31 var path = resourceProvider.pathContext
32 .join(sdk.directory.path, 'lib', '_internal', 'strong.sum');
33 return resourceProvider.getFile(path).readAsBytesSync();
34 }
35
36 @reflectiveTest
37 class IncrementalResolvedAstGeneratorTest {
38 static final sdkSummaryUri = Uri.parse('special:sdk_summary');
39
40 /// Virtual filesystem for testing.
41 final fileSystem = new MemoryFileSystem(Uri.parse('file:///'));
42
43 /// The object under test.
44 IncrementalResolvedAstGenerator incrementalResolvedAstGenerator;
45
46 Future<Map<Uri, Map<Uri, CompilationUnit>>> getInitialProgram(
47 Uri startingUri) async {
48 fileSystem.entityForUri(sdkSummaryUri).writeAsBytesSync(_sdkSummary);
49 incrementalResolvedAstGenerator = new IncrementalResolvedAstGenerator(
50 startingUri,
51 new CompilerOptions()
52 ..fileSystem = fileSystem
53 ..chaseDependencies = true
54 ..sdkSummary = sdkSummaryUri
55 ..packagesFileUri = new Uri());
56 return (await incrementalResolvedAstGenerator.computeDelta()).newState;
57 }
58
59 test_incrementalUpdate_referenceToCore() async {
60 writeFiles({'/foo.dart': 'main() { print(1); }'});
61 var fooUri = Uri.parse('file:///foo.dart');
62 var initialProgram = await getInitialProgram(fooUri);
63 expect(initialProgram.keys, unorderedEquals([fooUri]));
64
65 void _checkMain(CompilationUnit unit, int expectedArgument) {
66 var mainStatements = _getFunctionStatements(_getFunction(unit, 'main'));
67 expect(mainStatements, hasLength(1));
68 _checkPrintLiteralInt(mainStatements[0], expectedArgument);
69 }
70
71 _checkMain(initialProgram[fooUri][fooUri], 1);
72 writeFiles({'/foo.dart': 'main() { print(2); }'});
73 // Verify that the file isn't actually reread until invalidate is called.
74 var deltaProgram1 = await incrementalResolvedAstGenerator.computeDelta();
75 // TODO(paulberry): since there is no delta, computeDelta should return an
76 // empty map.
77 // expect(deltaProgram1.newState, isEmpty);
78 expect(deltaProgram1.newState.keys, unorderedEquals([fooUri]));
79 _checkMain(deltaProgram1.newState[fooUri][fooUri], 1);
80 incrementalResolvedAstGenerator.invalidateAll();
81 var deltaProgram2 = await incrementalResolvedAstGenerator.computeDelta();
82 expect(deltaProgram2.newState.keys, unorderedEquals([fooUri]));
83 _checkMain(deltaProgram2.newState[fooUri][fooUri], 2);
84 }
85
86 test_invalidateAllBeforeInitialProgram() async {
87 incrementalResolvedAstGenerator = new IncrementalResolvedAstGenerator(
88 Uri.parse('file:///foo.dart'),
89 new CompilerOptions()
90 ..fileSystem = fileSystem
91 ..chaseDependencies = true
92 ..packagesFileUri = new Uri());
93 incrementalResolvedAstGenerator.invalidateAll();
94 }
95
96 test_part() async {
97 writeFiles({
98 '/foo.dart': 'library foo; part "bar.dart"; main() { print(1); f(); }',
99 '/bar.dart': 'part of foo; f() { print(2); }'
100 });
101 var fooUri = Uri.parse('file:///foo.dart');
102 var barUri = Uri.parse('file:///bar.dart');
103 var initialProgram = await getInitialProgram(fooUri);
104 expect(initialProgram.keys, unorderedEquals([fooUri]));
105 expect(initialProgram[fooUri].keys, unorderedEquals([fooUri, barUri]));
106 var mainStatements = _getFunctionStatements(
107 _getFunction(initialProgram[fooUri][fooUri], 'main'));
108 var fDeclaration = _getFunction(initialProgram[fooUri][barUri], 'f');
109 var fStatements = _getFunctionStatements(fDeclaration);
110 expect(mainStatements, hasLength(2));
111 _checkPrintLiteralInt(mainStatements[0], 1);
112 _checkFunctionCall(mainStatements[1],
113 resolutionMap.elementDeclaredByFunctionDeclaration(fDeclaration));
114 expect(fStatements, hasLength(1));
115 _checkPrintLiteralInt(fStatements[0], 2);
116 // TODO(paulberry): now test incremental updates
117 }
118
119 /// Write the given file contents to the virtual filesystem.
120 void writeFiles(Map<String, String> contents) {
121 contents.forEach((path, text) {
122 fileSystem
123 .entityForUri(Uri.parse('file://$path'))
124 .writeAsStringSync(text);
125 });
126 }
127
128 void _checkFunctionCall(Statement statement, Element expectedTarget) {
129 expect(statement, new isInstanceOf<ExpressionStatement>());
130 var expressionStatement = statement as ExpressionStatement;
131 expect(
132 expressionStatement.expression, new isInstanceOf<MethodInvocation>());
133 var methodInvocation = expressionStatement.expression as MethodInvocation;
134 expect(
135 resolutionMap.staticElementForIdentifier(methodInvocation.methodName),
136 expectedTarget);
137 }
138
139 void _checkPrintLiteralInt(Statement statement, int expectedArgument) {
140 expect(statement, new isInstanceOf<ExpressionStatement>());
141 var expressionStatement = statement as ExpressionStatement;
142 expect(
143 expressionStatement.expression, new isInstanceOf<MethodInvocation>());
144 var methodInvocation = expressionStatement.expression as MethodInvocation;
145 expect(methodInvocation.methodName.name, 'print');
146 var printElement =
147 resolutionMap.staticElementForIdentifier(methodInvocation.methodName);
148 expect(printElement, isNotNull);
149 expect(printElement.library.source.uri, Uri.parse('dart:core'));
150 expect(methodInvocation.argumentList.arguments, hasLength(1));
151 expect(methodInvocation.argumentList.arguments[0],
152 new isInstanceOf<IntegerLiteral>());
153 var integerLiteral =
154 methodInvocation.argumentList.arguments[0] as IntegerLiteral;
155 expect(integerLiteral.value, expectedArgument);
156 }
157
158 FunctionDeclaration _getFunction(CompilationUnit unit, String name) {
159 for (var declaration in unit.declarations) {
160 if (declaration is FunctionDeclaration && declaration.name.name == name) {
161 return declaration;
162 }
163 }
164 throw fail('No function declaration found with name "$name"');
165 }
166
167 NodeList<Statement> _getFunctionStatements(FunctionDeclaration function) {
168 var body = function.functionExpression.body;
169 expect(body, new isInstanceOf<BlockFunctionBody>());
170 return (body as BlockFunctionBody).block.statements;
171 }
172 }
OLDNEW
« no previous file with comments | « pkg/front_end/lib/src/incremental_resolved_ast_generator_impl.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698