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

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

Issue 2931603003: Set main procedure for Program. (Closed)
Patch Set: Created 3 years, 6 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_kernel_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
1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file 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 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 import 'dart:async'; 5 import 'dart:async';
6 6
7 import 'package:front_end/compiler_options.dart'; 7 import 'package:front_end/compiler_options.dart';
8 import 'package:front_end/incremental_kernel_generator.dart'; 8 import 'package:front_end/incremental_kernel_generator.dart';
9 import 'package:front_end/memory_file_system.dart'; 9 import 'package:front_end/memory_file_system.dart';
10 import 'package:front_end/src/incremental/byte_store.dart'; 10 import 'package:front_end/src/incremental/byte_store.dart';
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
65 import 'a.dart'; 65 import 'a.dart';
66 var b = a; 66 var b = a;
67 '''); 67 ''');
68 Uri cUri = writeFile( 68 Uri cUri = writeFile(
69 cPath, 69 cPath,
70 r''' 70 r'''
71 import 'a.dart'; 71 import 'a.dart';
72 import 'b.dart'; 72 import 'b.dart';
73 var c1 = a; 73 var c1 = a;
74 var c2 = b; 74 var c2 = b;
75 void main() {}
75 '''); 76 ''');
76 77
77 { 78 {
78 Program program = await getInitialState(cUri); 79 Program program = await getInitialState(cUri);
79 _assertLibraryUris(program, 80 _assertLibraryUris(program,
80 includes: [aUri, bUri, cUri, Uri.parse('dart:core')]); 81 includes: [aUri, bUri, cUri, Uri.parse('dart:core')]);
81 Library library = _getLibrary(program, cUri); 82 Library library = _getLibrary(program, cUri);
82 expect( 83 expect(
83 _getLibraryText(library), 84 _getLibraryText(library),
84 r''' 85 r'''
85 library; 86 library;
86 import self as self; 87 import self as self;
87 import "dart:core" as core; 88 import "dart:core" as core;
88 import "./a.dart" as a; 89 import "./a.dart" as a;
89 import "./b.dart" as b; 90 import "./b.dart" as b;
90 91
91 static field core::int c1 = a::a; 92 static field core::int c1 = a::a;
92 static field core::int c2 = b::b; 93 static field core::int c2 = b::b;
94 static method main() → void {}
93 '''); 95 ''');
96 // The main method is set.
97 expect(program.mainMethod, isNotNull);
98 expect(program.mainMethod.enclosingLibrary.fileUri, cUri.toString());
94 } 99 }
95 100
96 // Update b.dart and recompile c.dart 101 // Update b.dart and recompile c.dart
97 writeFile( 102 writeFile(
98 bPath, 103 bPath,
99 r''' 104 r'''
100 import 'a.dart'; 105 import 'a.dart';
101 var b = 1.2; 106 var b = 1.2;
102 '''); 107 ''');
103 incrementalKernelGenerator.invalidate(bUri); 108 incrementalKernelGenerator.invalidate(bUri);
104 { 109 {
105 DeltaProgram delta = await incrementalKernelGenerator.computeDelta(); 110 DeltaProgram delta = await incrementalKernelGenerator.computeDelta();
106 Program program = delta.newProgram; 111 Program program = delta.newProgram;
107 _assertLibraryUris(program, 112 _assertLibraryUris(program,
108 includes: [bUri, cUri], excludes: [aUri, Uri.parse('dart:core')]); 113 includes: [bUri, cUri], excludes: [aUri, Uri.parse('dart:core')]);
109 Library library = _getLibrary(program, cUri); 114 Library library = _getLibrary(program, cUri);
110 expect( 115 expect(
111 _getLibraryText(library), 116 _getLibraryText(library),
112 r''' 117 r'''
113 library; 118 library;
114 import self as self; 119 import self as self;
115 import "dart:core" as core; 120 import "dart:core" as core;
116 import "./a.dart" as a; 121 import "./a.dart" as a;
117 import "./b.dart" as b; 122 import "./b.dart" as b;
118 123
119 static field core::int c1 = a::a; 124 static field core::int c1 = a::a;
120 static field core::double c2 = b::b; 125 static field core::double c2 = b::b;
126 static method main() → void {}
121 '''); 127 ''');
128 // The main method is set even though not the entry point is updated.
129 expect(program.mainMethod, isNotNull);
130 expect(program.mainMethod.enclosingLibrary.fileUri, cUri.toString());
122 } 131 }
123 } 132 }
124 133
125 test_compile_export() async { 134 test_compile_export() async {
126 writeFile('/test/.packages', 'test:lib/'); 135 writeFile('/test/.packages', 'test:lib/');
127 String aPath = '/test/lib/a.dart'; 136 String aPath = '/test/lib/a.dart';
128 String bPath = '/test/lib/b.dart'; 137 String bPath = '/test/lib/b.dart';
129 String cPath = '/test/lib/c.dart'; 138 String cPath = '/test/lib/c.dart';
130 writeFile(aPath, 'class A {}'); 139 writeFile(aPath, 'class A {}');
131 writeFile(bPath, 'export "a.dart";'); 140 writeFile(bPath, 'export "a.dart";');
(...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after
414 initialKernelText = _getLibraryText(initialLibrary); 423 initialKernelText = _getLibraryText(initialLibrary);
415 424
416 var byteSink = new ByteSink(); 425 var byteSink = new ByteSink();
417 var printer = new LimitedBinaryPrinter( 426 var printer = new LimitedBinaryPrinter(
418 byteSink, (library) => library.importUri == bUri); 427 byteSink, (library) => library.importUri == bUri);
419 printer.writeProgramFile(program); 428 printer.writeProgramFile(program);
420 bytes = byteSink.builder.takeBytes(); 429 bytes = byteSink.builder.takeBytes();
421 430
422 // Remove b.dart from the program. 431 // Remove b.dart from the program.
423 // So, the program is now ready for re-adding the library. 432 // So, the program is now ready for re-adding the library.
433 program.mainMethod = null;
424 program.libraries.remove(initialLibrary); 434 program.libraries.remove(initialLibrary);
425 program.root.removeChild(initialLibrary.importUri.toString()); 435 program.root.removeChild(initialLibrary.importUri.toString());
426 } 436 }
427 437
428 // Load b.dart from bytes using the initial name root, so that 438 // Load b.dart from bytes using the initial name root, so that
429 // serialized canonical names can be linked to corresponding nodes. 439 // serialized canonical names can be linked to corresponding nodes.
430 Library loadedLibrary; 440 Library loadedLibrary;
431 { 441 {
432 var programForLoading = new Program(nameRoot: program.root); 442 var programForLoading = new Program(nameRoot: program.root);
433 var reader = new BinaryBuilder(bytes); 443 var reader = new BinaryBuilder(bytes);
434 reader.readProgram(programForLoading); 444 reader.readProgram(programForLoading);
435 loadedLibrary = _getLibrary(programForLoading, bUri); 445 loadedLibrary = _getLibrary(programForLoading, bUri);
436 } 446 }
437 447
438 // Add the library into the program. 448 // Add the library into the program.
439 program.libraries.add(loadedLibrary); 449 program.libraries.add(loadedLibrary);
440 loadedLibrary.parent = program; 450 loadedLibrary.parent = program;
451 program.mainMethod = loadedLibrary.procedures
452 .firstWhere((procedure) => procedure.name.name == 'main');
441 453
442 expect(_getLibraryText(loadedLibrary), initialKernelText); 454 expect(_getLibraryText(loadedLibrary), initialKernelText);
443 verifyProgram(program); 455 verifyProgram(program);
444 } 456 }
445 457
446 test_updateEntryPoint() async { 458 test_updateEntryPoint() async {
447 writeFile('/test/.packages', 'test:lib/'); 459 writeFile('/test/.packages', 'test:lib/');
448 String path = '/test/lib/test.dart'; 460 String path = '/test/lib/test.dart';
449 Uri uri = writeFile( 461 Uri uri = writeFile(
450 path, 462 path,
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after
683 throw fail('No library found with URI "$uri"'); 695 throw fail('No library found with URI "$uri"');
684 } 696 }
685 697
686 String _getLibraryText(Library library) { 698 String _getLibraryText(Library library) {
687 StringBuffer buffer = new StringBuffer(); 699 StringBuffer buffer = new StringBuffer();
688 new Printer(buffer, syntheticNames: new NameSystem()) 700 new Printer(buffer, syntheticNames: new NameSystem())
689 .writeLibraryFile(library); 701 .writeLibraryFile(library);
690 return buffer.toString(); 702 return buffer.toString();
691 } 703 }
692 } 704 }
OLDNEW
« no previous file with comments | « pkg/front_end/lib/src/incremental_kernel_generator_impl.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698