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

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

Issue 2931183003: Implement promised watch behaviour for used == true. (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
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 12 matching lines...) Expand all
23 defineReflectiveSuite(() { 23 defineReflectiveSuite(() {
24 defineReflectiveTests(IncrementalKernelGeneratorTest); 24 defineReflectiveTests(IncrementalKernelGeneratorTest);
25 }); 25 });
26 } 26 }
27 27
28 @reflectiveTest 28 @reflectiveTest
29 class IncrementalKernelGeneratorTest { 29 class IncrementalKernelGeneratorTest {
30 /// Virtual filesystem for testing. 30 /// Virtual filesystem for testing.
31 final fileSystem = new MemoryFileSystem(Uri.parse('file:///')); 31 final fileSystem = new MemoryFileSystem(Uri.parse('file:///'));
32 32
33 /// The used file watcher.
34 WatchUsedFilesFn watchFn = (uri, used) {};
35
33 /// The object under test. 36 /// The object under test.
34 IncrementalKernelGenerator incrementalKernelGenerator; 37 IncrementalKernelGenerator incrementalKernelGenerator;
35 38
36 /// Compute the initial [Program] for the given [entryPoint]. 39 /// Compute the initial [Program] for the given [entryPoint].
37 Future<Program> getInitialState(Uri entryPoint) async { 40 Future<Program> getInitialState(Uri entryPoint) async {
38 Map<String, Uri> dartLibraries = createSdkFiles(fileSystem); 41 Map<String, Uri> dartLibraries = createSdkFiles(fileSystem);
39 // TODO(scheglov) Builder the SDK kernel and set it into the options. 42 // TODO(scheglov) Builder the SDK kernel and set it into the options.
40 43
41 // TODO(scheglov) Make `.packages` file optional. 44 // TODO(scheglov) Make `.packages` file optional.
42 45
43 var compilerOptions = new CompilerOptions() 46 var compilerOptions = new CompilerOptions()
44 ..fileSystem = fileSystem 47 ..fileSystem = fileSystem
45 ..byteStore = new MemoryByteStore() 48 ..byteStore = new MemoryByteStore()
46 // ..logger = new PerformanceLog(stdout) 49 // ..logger = new PerformanceLog(stdout)
47 ..strongMode = true 50 ..strongMode = true
48 ..chaseDependencies = true 51 ..chaseDependencies = true
49 ..dartLibraries = dartLibraries 52 ..dartLibraries = dartLibraries
50 ..packagesFileUri = Uri.parse('file:///test/.packages'); 53 ..packagesFileUri = Uri.parse('file:///test/.packages');
51 incrementalKernelGenerator = await IncrementalKernelGenerator.newInstance( 54 incrementalKernelGenerator = await IncrementalKernelGenerator
52 compilerOptions, entryPoint); 55 .newInstance(compilerOptions, entryPoint, watch: watchFn);
53 return (await incrementalKernelGenerator.computeDelta()).newProgram; 56 return (await incrementalKernelGenerator.computeDelta()).newProgram;
54 } 57 }
55 58
56 test_compile_chain() async { 59 test_compile_chain() async {
57 writeFile('/test/.packages', 'test:lib/'); 60 writeFile('/test/.packages', 'test:lib/');
58 String aPath = '/test/lib/a.dart'; 61 String aPath = '/test/lib/a.dart';
59 String bPath = '/test/lib/b.dart'; 62 String bPath = '/test/lib/b.dart';
60 String cPath = '/test/lib/c.dart'; 63 String cPath = '/test/lib/c.dart';
61 Uri aUri = writeFile(aPath, 'var a = 1;'); 64 Uri aUri = writeFile(aPath, 'var a = 1;');
62 Uri bUri = writeFile( 65 Uri bUri = writeFile(
(...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after
322 _getLibraryText(library), 325 _getLibraryText(library),
323 r''' 326 r'''
324 library; 327 library;
325 import self as self; 328 import self as self;
326 import "dart:core" as core; 329 import "dart:core" as core;
327 330
328 static field (core::String) → core::int f; 331 static field (core::String) → core::int f;
329 '''); 332 ''');
330 } 333 }
331 334
335 test_invalidateAll() async {
336 writeFile('/test/.packages', '');
337 Uri aUri = writeFile('/test/a.dart', "import 'b.dart';\nint a = b;");
338 Uri bUri = writeFile('/test/b.dart', 'var b = 1;');
339
340 Program program = await getInitialState(aUri);
341 expect(_getLibraryText(_getLibrary(program, aUri)), contains("int a ="));
342 expect(_getLibraryText(_getLibrary(program, bUri)), contains("b = 1"));
343
344 writeFile('/test/a.dart', "import 'b.dart';\ndouble a = b;");
345 writeFile('/test/b.dart', 'var b = 2;');
346 incrementalKernelGenerator.invalidateAll();
347
348 DeltaProgram delta = await incrementalKernelGenerator.computeDelta();
349 program = delta.newProgram;
350 _assertLibraryUris(program, includes: [aUri, bUri]);
351 expect(_getLibraryText(_getLibrary(program, aUri)), contains("double a ="));
352 expect(_getLibraryText(_getLibrary(program, bUri)), contains("b = 2"));
353 }
354
332 test_limited_ast_to_binary() async { 355 test_limited_ast_to_binary() async {
333 writeFile('/test/.packages', 'test:lib/'); 356 writeFile('/test/.packages', 'test:lib/');
334 String aPath = '/test/lib/a.dart'; 357 String aPath = '/test/lib/a.dart';
335 String bPath = '/test/lib/b.dart'; 358 String bPath = '/test/lib/b.dart';
336 writeFile( 359 writeFile(
337 aPath, 360 aPath,
338 r''' 361 r'''
339 int topField = 0; 362 int topField = 0;
340 int get topGetter => 0; 363 int get topGetter => 0;
341 int topFunction({p}) => 0; 364 int topFunction({p}) => 0;
(...skipping 314 matching lines...) Expand 10 before | Expand all | Expand 10 after
656 679
657 static field core::String a = "aaa"; 680 static field core::String a = "aaa";
658 static field core::double c = self::b; 681 static field core::double c = self::b;
659 static field core::double b = 2.3 /* from file:///test/lib/bar.dart */; 682 static field core::double b = 2.3 /* from file:///test/lib/bar.dart */;
660 static field core::String d = self::a /* from file:///test/lib/bar.dart */; 683 static field core::String d = self::a /* from file:///test/lib/bar.dart */;
661 static method main() → void {} 684 static method main() → void {}
662 '''); 685 ''');
663 } 686 }
664 } 687 }
665 688
666 test_invalidateAll() async { 689 test_watch() async {
667 writeFile('/test/.packages', ''); 690 writeFile('/test/.packages', 'test:lib/');
668 Uri aUri = writeFile('/test/a.dart', "import 'b.dart';\nint a = b;"); 691 String aPath = '/test/lib/a.dart';
669 Uri bUri = writeFile('/test/b.dart', 'var b = 1;'); 692 String bPath = '/test/lib/b.dart';
693 String cPath = '/test/lib/c.dart';
694 Uri aUri = writeFile(aPath, '');
695 Uri bUri = writeFile(bPath, '');
696 Uri cUri = writeFile(
697 cPath,
698 r'''
699 import 'a.dart';
700 ''');
670 701
671 Program program = await getInitialState(aUri); 702 var usedFiles = <Uri>[];
672 expect(_getLibraryText(_getLibrary(program, aUri)), contains("int a =")); 703 watchFn = (Uri uri, bool used) {
673 expect(_getLibraryText(_getLibrary(program, bUri)), contains("b = 1")); 704 expect(used, isTrue);
705 usedFiles.add(uri);
706 return new Future.value();
707 };
674 708
675 writeFile('/test/a.dart', "import 'b.dart';\ndouble a = b;"); 709 {
676 writeFile('/test/b.dart', 'var b = 2;'); 710 await getInitialState(cUri);
677 incrementalKernelGenerator.invalidateAll(); 711 // We use at least c.dart and a.dart now.
712 expect(usedFiles, contains(cUri));
713 expect(usedFiles, contains(aUri));
714 usedFiles.clear();
715 }
678 716
679 DeltaProgram delta = await incrementalKernelGenerator.computeDelta(); 717 // Update c.dart to reference also b.dart file.
680 program = delta.newProgram; 718 writeFile(
681 _assertLibraryUris(program, includes: [aUri, bUri]); 719 cPath,
682 expect(_getLibraryText(_getLibrary(program, aUri)), contains("double a =")); 720 r'''
683 expect(_getLibraryText(_getLibrary(program, bUri)), contains("b = 2")); 721 import 'a.dart';
722 import 'b.dart';
723 ''');
724 incrementalKernelGenerator.invalidate(cUri);
725 {
726 await incrementalKernelGenerator.computeDelta();
727 // The only new file is b.dart now.
728 expect(usedFiles, [bUri]);
729 usedFiles.clear();
730 }
684 } 731 }
685 732
686 /// Write the given [text] of the file with the given [path] into the 733 /// Write the given [text] of the file with the given [path] into the
687 /// virtual filesystem. Return the URI of the file. 734 /// virtual filesystem. Return the URI of the file.
688 Uri writeFile(String path, String text) { 735 Uri writeFile(String path, String text) {
689 Uri uri = Uri.parse('file://$path'); 736 Uri uri = Uri.parse('file://$path');
690 fileSystem.entityForUri(uri).writeAsStringSync(text); 737 fileSystem.entityForUri(uri).writeAsStringSync(text);
691 return uri; 738 return uri;
692 } 739 }
693 740
(...skipping 21 matching lines...) Expand all
715 throw fail('No library found with URI "$uri"'); 762 throw fail('No library found with URI "$uri"');
716 } 763 }
717 764
718 String _getLibraryText(Library library) { 765 String _getLibraryText(Library library) {
719 StringBuffer buffer = new StringBuffer(); 766 StringBuffer buffer = new StringBuffer();
720 new Printer(buffer, syntheticNames: new NameSystem()) 767 new Printer(buffer, syntheticNames: new NameSystem())
721 .writeLibraryFile(library); 768 .writeLibraryFile(library);
722 return buffer.toString(); 769 return buffer.toString();
723 } 770 }
724 } 771 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698