| OLD | NEW |
| 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 dev_compiler.test.dependency_graph_test; | 5 library dev_compiler.test.dependency_graph_test; |
| 6 | 6 |
| 7 import 'package:unittest/compact_vm_config.dart'; | 7 import 'package:unittest/compact_vm_config.dart'; |
| 8 import 'package:unittest/unittest.dart'; | 8 import 'package:unittest/unittest.dart'; |
| 9 | 9 |
| 10 import 'package:dev_compiler/src/checker/dart_sdk.dart' | 10 import 'package:dev_compiler/src/checker/dart_sdk.dart' |
| 11 show mockSdkSources, dartSdkDirectory; | 11 show mockSdkSources, dartSdkDirectory; |
| 12 import 'package:dev_compiler/src/testing.dart'; | 12 import 'package:dev_compiler/src/testing.dart'; |
| 13 import 'package:dev_compiler/src/options.dart'; | 13 import 'package:dev_compiler/src/options.dart'; |
| 14 import 'package:dev_compiler/src/checker/resolver.dart'; | 14 import 'package:dev_compiler/src/checker/resolver.dart'; |
| 15 import 'package:dev_compiler/src/dependency_graph.dart'; | 15 import 'package:dev_compiler/src/dependency_graph.dart'; |
| 16 import 'package:dev_compiler/src/report.dart'; |
| 16 import 'package:path/path.dart' as path; | 17 import 'package:path/path.dart' as path; |
| 17 | 18 |
| 18 main() { | 19 main() { |
| 19 groupSep = " > "; | 20 groupSep = " > "; |
| 20 useCompactVMConfiguration(); | 21 useCompactVMConfiguration(); |
| 21 | 22 |
| 22 var options = new CompilerOptions(); | 23 var options = new CompilerOptions(); |
| 23 var testUriResolver; | 24 var testUriResolver; |
| 24 var context; | 25 var context; |
| 25 var graph; | 26 var graph; |
| (...skipping 30 matching lines...) Expand all Loading... |
| 56 }; | 57 }; |
| 57 | 58 |
| 58 nodeOf(String filepath) => graph.nodeFromUri(new Uri.file(filepath)); | 59 nodeOf(String filepath) => graph.nodeFromUri(new Uri.file(filepath)); |
| 59 | 60 |
| 60 setUp(() { | 61 setUp(() { |
| 61 /// We completely reset the TestUriResolver to avoid interference between | 62 /// We completely reset the TestUriResolver to avoid interference between |
| 62 /// tests (since some tests modify the state of the files). | 63 /// tests (since some tests modify the state of the files). |
| 63 testUriResolver = new TestUriResolver(testFiles); | 64 testUriResolver = new TestUriResolver(testFiles); |
| 64 context = new TypeResolver.fromMock(mockSdkSources, options, | 65 context = new TypeResolver.fromMock(mockSdkSources, options, |
| 65 otherResolvers: [testUriResolver]).context; | 66 otherResolvers: [testUriResolver]).context; |
| 66 graph = new SourceGraph(context, options); | 67 graph = new SourceGraph(context, new LogReporter()); |
| 67 }); | 68 }); |
| 68 | 69 |
| 69 group('HTML deps', () { | 70 group('HTML deps', () { |
| 70 test('initial deps', () { | 71 test('initial deps', () { |
| 71 var i1 = nodeOf('/index1.html'); | 72 var i1 = nodeOf('/index1.html'); |
| 72 var i2 = nodeOf('/index2.html'); | 73 var i2 = nodeOf('/index2.html'); |
| 73 expect(i1.scripts.length, 0); | 74 expect(i1.scripts.length, 0); |
| 74 expect(i2.scripts.length, 0); | 75 expect(i2.scripts.length, 0); |
| 75 i1.update(graph); | 76 i1.update(graph); |
| 76 i2.update(graph); | 77 i2.update(graph); |
| (...skipping 470 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 547 }); | 548 }); |
| 548 }); | 549 }); |
| 549 | 550 |
| 550 group('refresh structure and marks', () { | 551 group('refresh structure and marks', () { |
| 551 test('initial marks', () { | 552 test('initial marks', () { |
| 552 var node = nodeOf('/index3.html'); | 553 var node = nodeOf('/index3.html'); |
| 553 expectGraph(node, ''' | 554 expectGraph(node, ''' |
| 554 index3.html | 555 index3.html |
| 555 |-- dart_runtime.js | 556 |-- dart_runtime.js |
| 556 |-- harmony_feature_check.js | 557 |-- harmony_feature_check.js |
| 558 |-- messages_widget.js |
| 559 |-- messages.css |
| 557 '''); | 560 '''); |
| 558 refreshStructureAndMarks(node, graph); | 561 refreshStructureAndMarks(node, graph); |
| 559 expectGraph(node, ''' | 562 expectGraph(node, ''' |
| 560 index3.html [needs-rebuild] [structure-changed] | 563 index3.html [needs-rebuild] [structure-changed] |
| 561 |-- a2.dart [needs-rebuild] [structure-changed] | 564 |-- a2.dart [needs-rebuild] [structure-changed] |
| 562 | |-- a3.dart [needs-rebuild] | 565 | |-- a3.dart [needs-rebuild] |
| 563 | |-- a4.dart [needs-rebuild] [structure-changed] | 566 | |-- a4.dart [needs-rebuild] [structure-changed] |
| 564 | | |-- a10.dart [needs-rebuild] | 567 | | |-- a10.dart [needs-rebuild] |
| 565 | |-- a5.dart [needs-rebuild] | 568 | |-- a5.dart [needs-rebuild] |
| 566 | |-- a6.dart (part) [needs-rebuild] | 569 | |-- a6.dart (part) [needs-rebuild] |
| 567 |-- dart_runtime.js [needs-rebuild] | 570 |-- dart_runtime.js [needs-rebuild] |
| 568 |-- harmony_feature_check.js [needs-rebuild] | 571 |-- harmony_feature_check.js [needs-rebuild] |
| 572 |-- messages_widget.js [needs-rebuild] |
| 573 |-- messages.css [needs-rebuild] |
| 569 '''); | 574 '''); |
| 570 }); | 575 }); |
| 571 | 576 |
| 572 test('cleared marks stay clear', () { | 577 test('cleared marks stay clear', () { |
| 573 var node = nodeOf('/index3.html'); | 578 var node = nodeOf('/index3.html'); |
| 574 refreshStructureAndMarks(node, graph); | 579 refreshStructureAndMarks(node, graph); |
| 575 expectGraph(node, ''' | 580 expectGraph(node, ''' |
| 576 index3.html [needs-rebuild] [structure-changed] | 581 index3.html [needs-rebuild] [structure-changed] |
| 577 |-- a2.dart [needs-rebuild] [structure-changed] | 582 |-- a2.dart [needs-rebuild] [structure-changed] |
| 578 | |-- a3.dart [needs-rebuild] | 583 | |-- a3.dart [needs-rebuild] |
| 579 | |-- a4.dart [needs-rebuild] [structure-changed] | 584 | |-- a4.dart [needs-rebuild] [structure-changed] |
| 580 | | |-- a10.dart [needs-rebuild] | 585 | | |-- a10.dart [needs-rebuild] |
| 581 | |-- a5.dart [needs-rebuild] | 586 | |-- a5.dart [needs-rebuild] |
| 582 | |-- a6.dart (part) [needs-rebuild] | 587 | |-- a6.dart (part) [needs-rebuild] |
| 583 |-- dart_runtime.js [needs-rebuild] | 588 |-- dart_runtime.js [needs-rebuild] |
| 584 |-- harmony_feature_check.js [needs-rebuild] | 589 |-- harmony_feature_check.js [needs-rebuild] |
| 590 |-- messages_widget.js [needs-rebuild] |
| 591 |-- messages.css [needs-rebuild] |
| 585 '''); | 592 '''); |
| 586 clearMarks(node); | 593 clearMarks(node); |
| 587 expectGraph(node, ''' | 594 expectGraph(node, ''' |
| 588 index3.html | 595 index3.html |
| 589 |-- a2.dart | 596 |-- a2.dart |
| 590 | |-- a3.dart | 597 | |-- a3.dart |
| 591 | |-- a4.dart | 598 | |-- a4.dart |
| 592 | | |-- a10.dart | 599 | | |-- a10.dart |
| 593 | |-- a5.dart | 600 | |-- a5.dart |
| 594 | |-- a6.dart (part) | 601 | |-- a6.dart (part) |
| 595 |-- dart_runtime.js | 602 |-- dart_runtime.js |
| 596 |-- harmony_feature_check.js | 603 |-- harmony_feature_check.js |
| 604 |-- messages_widget.js |
| 605 |-- messages.css |
| 597 '''); | 606 '''); |
| 598 | 607 |
| 599 refreshStructureAndMarks(node, graph); | 608 refreshStructureAndMarks(node, graph); |
| 600 expectGraph(node, ''' | 609 expectGraph(node, ''' |
| 601 index3.html | 610 index3.html |
| 602 |-- a2.dart | 611 |-- a2.dart |
| 603 | |-- a3.dart | 612 | |-- a3.dart |
| 604 | |-- a4.dart | 613 | |-- a4.dart |
| 605 | | |-- a10.dart | 614 | | |-- a10.dart |
| 606 | |-- a5.dart | 615 | |-- a5.dart |
| 607 | |-- a6.dart (part) | 616 | |-- a6.dart (part) |
| 608 |-- dart_runtime.js | 617 |-- dart_runtime.js |
| 609 |-- harmony_feature_check.js | 618 |-- harmony_feature_check.js |
| 619 |-- messages_widget.js |
| 620 |-- messages.css |
| 610 '''); | 621 '''); |
| 611 }); | 622 }); |
| 612 | 623 |
| 613 test('needsRebuild mark updated on local modifications', () { | 624 test('needsRebuild mark updated on local modifications', () { |
| 614 var node = nodeOf('/index3.html'); | 625 var node = nodeOf('/index3.html'); |
| 615 refreshStructureAndMarks(node, graph); | 626 refreshStructureAndMarks(node, graph); |
| 616 clearMarks(node); | 627 clearMarks(node); |
| 617 var a3 = nodeOf('/a3.dart'); | 628 var a3 = nodeOf('/a3.dart'); |
| 618 a3.source.contents.modificationTime++; | 629 a3.source.contents.modificationTime++; |
| 619 | 630 |
| 620 refreshStructureAndMarks(node, graph); | 631 refreshStructureAndMarks(node, graph); |
| 621 expectGraph(node, ''' | 632 expectGraph(node, ''' |
| 622 index3.html | 633 index3.html |
| 623 |-- a2.dart | 634 |-- a2.dart |
| 624 | |-- a3.dart [needs-rebuild] | 635 | |-- a3.dart [needs-rebuild] |
| 625 | |-- a4.dart | 636 | |-- a4.dart |
| 626 | | |-- a10.dart | 637 | | |-- a10.dart |
| 627 | |-- a5.dart | 638 | |-- a5.dart |
| 628 | |-- a6.dart (part) | 639 | |-- a6.dart (part) |
| 629 |-- dart_runtime.js | 640 |-- dart_runtime.js |
| 630 |-- harmony_feature_check.js | 641 |-- harmony_feature_check.js |
| 642 |-- messages_widget.js |
| 643 |-- messages.css |
| 631 '''); | 644 '''); |
| 632 }); | 645 }); |
| 633 | 646 |
| 634 test('structuredChanged mark updated on structure modifications', () { | 647 test('structuredChanged mark updated on structure modifications', () { |
| 635 var node = nodeOf('/index3.html'); | 648 var node = nodeOf('/index3.html'); |
| 636 refreshStructureAndMarks(node, graph); | 649 refreshStructureAndMarks(node, graph); |
| 637 clearMarks(node); | 650 clearMarks(node); |
| 638 var a5 = nodeOf('/a5.dart'); | 651 var a5 = nodeOf('/a5.dart'); |
| 639 a5.source.contents.modificationTime++; | 652 a5.source.contents.modificationTime++; |
| 640 a5.source.contents.data = 'import "a8.dart";'; | 653 a5.source.contents.data = 'import "a8.dart";'; |
| 641 | 654 |
| 642 refreshStructureAndMarks(node, graph); | 655 refreshStructureAndMarks(node, graph); |
| 643 expectGraph(node, ''' | 656 expectGraph(node, ''' |
| 644 index3.html | 657 index3.html |
| 645 |-- a2.dart | 658 |-- a2.dart |
| 646 | |-- a3.dart | 659 | |-- a3.dart |
| 647 | |-- a4.dart | 660 | |-- a4.dart |
| 648 | | |-- a10.dart | 661 | | |-- a10.dart |
| 649 | |-- a5.dart [needs-rebuild] [structure-changed] | 662 | |-- a5.dart [needs-rebuild] [structure-changed] |
| 650 | | |-- a8.dart [needs-rebuild] [structure-changed] | 663 | | |-- a8.dart [needs-rebuild] [structure-changed] |
| 651 | | | |-- a8.dart... | 664 | | | |-- a8.dart... |
| 652 | |-- a6.dart (part) | 665 | |-- a6.dart (part) |
| 653 |-- dart_runtime.js | 666 |-- dart_runtime.js |
| 654 |-- harmony_feature_check.js | 667 |-- harmony_feature_check.js |
| 668 |-- messages_widget.js |
| 669 |-- messages.css |
| 655 '''); | 670 '''); |
| 656 }); | 671 }); |
| 657 }); | 672 }); |
| 658 | 673 |
| 659 group('rebuild', () { | 674 group('rebuild', () { |
| 660 var results; | 675 var results; |
| 661 void addName(SourceNode n) => results.add(nameFor(n)); | 676 void addName(SourceNode n) => results.add(nameFor(n)); |
| 662 | 677 |
| 663 bool buildNoTransitiveChange(SourceNode n) { | 678 bool buildNoTransitiveChange(SourceNode n) { |
| 664 addName(n); | 679 addName(n); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 679 rebuild(node, graph, buildNoTransitiveChange); | 694 rebuild(node, graph, buildNoTransitiveChange); |
| 680 // Note: a6.dart is not included because it built as part of a2.dart | 695 // Note: a6.dart is not included because it built as part of a2.dart |
| 681 expect(results, [ | 696 expect(results, [ |
| 682 'a3.dart', | 697 'a3.dart', |
| 683 'a10.dart', | 698 'a10.dart', |
| 684 'a4.dart', | 699 'a4.dart', |
| 685 'a5.dart', | 700 'a5.dart', |
| 686 'a2.dart', | 701 'a2.dart', |
| 687 'dart_runtime.js', | 702 'dart_runtime.js', |
| 688 'harmony_feature_check.js', | 703 'harmony_feature_check.js', |
| 704 'messages_widget.js', |
| 705 'messages.css', |
| 689 'index3.html', | 706 'index3.html', |
| 690 ]); | 707 ]); |
| 691 | 708 |
| 692 // Marks are removed automatically by rebuild | 709 // Marks are removed automatically by rebuild |
| 693 expectGraph(node, ''' | 710 expectGraph(node, ''' |
| 694 index3.html | 711 index3.html |
| 695 |-- a2.dart | 712 |-- a2.dart |
| 696 | |-- a3.dart | 713 | |-- a3.dart |
| 697 | |-- a4.dart | 714 | |-- a4.dart |
| 698 | | |-- a10.dart | 715 | | |-- a10.dart |
| 699 | |-- a5.dart | 716 | |-- a5.dart |
| 700 | |-- a6.dart (part) | 717 | |-- a6.dart (part) |
| 701 |-- dart_runtime.js | 718 |-- dart_runtime.js |
| 702 |-- harmony_feature_check.js | 719 |-- harmony_feature_check.js |
| 720 |-- messages_widget.js |
| 721 |-- messages.css |
| 703 '''); | 722 '''); |
| 704 }); | 723 }); |
| 705 | 724 |
| 706 test('nothing to do after build', () { | 725 test('nothing to do after build', () { |
| 707 var node = nodeOf('/index3.html'); | 726 var node = nodeOf('/index3.html'); |
| 708 rebuild(node, graph, buildNoTransitiveChange); | 727 rebuild(node, graph, buildNoTransitiveChange); |
| 709 | 728 |
| 710 results = []; | 729 results = []; |
| 711 rebuild(node, graph, buildNoTransitiveChange); | 730 rebuild(node, graph, buildNoTransitiveChange); |
| 712 expect(results, []); | 731 expect(results, []); |
| (...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 845 expectGraph(node, ''' | 864 expectGraph(node, ''' |
| 846 index3.html | 865 index3.html |
| 847 |-- a2.dart | 866 |-- a2.dart |
| 848 | |-- a3.dart | 867 | |-- a3.dart |
| 849 | |-- a4.dart | 868 | |-- a4.dart |
| 850 | | |-- a10.dart | 869 | | |-- a10.dart |
| 851 | |-- a5.dart | 870 | |-- a5.dart |
| 852 | |-- a6.dart (part) | 871 | |-- a6.dart (part) |
| 853 |-- dart_runtime.js | 872 |-- dart_runtime.js |
| 854 |-- harmony_feature_check.js | 873 |-- harmony_feature_check.js |
| 874 |-- messages_widget.js |
| 875 |-- messages.css |
| 855 '''); | 876 '''); |
| 856 | 877 |
| 857 // Modify the file first: | 878 // Modify the file first: |
| 858 a6.source.contents.modificationTime++; | 879 a6.source.contents.modificationTime++; |
| 859 a6.source.contents.data = 'library a6; import "a5.dart";'; | 880 a6.source.contents.data = 'library a6; import "a5.dart";'; |
| 860 results = []; | 881 results = []; |
| 861 rebuild(node, graph, buildNoTransitiveChange); | 882 rebuild(node, graph, buildNoTransitiveChange); |
| 862 | 883 |
| 863 // Looks to us like a change in a part, we'll report errors that the | 884 // Looks to us like a change in a part, we'll report errors that the |
| 864 // part is not really a part-file. Note that a6.dart is not included | 885 // part is not really a part-file. Note that a6.dart is not included |
| 865 // below, because we don't build it as a library. | 886 // below, because we don't build it as a library. |
| 866 expect(results, ['a2.dart']); | 887 expect(results, ['a2.dart']); |
| 867 expectGraph(node, ''' | 888 expectGraph(node, ''' |
| 868 index3.html | 889 index3.html |
| 869 |-- a2.dart | 890 |-- a2.dart |
| 870 | |-- a3.dart | 891 | |-- a3.dart |
| 871 | |-- a4.dart | 892 | |-- a4.dart |
| 872 | | |-- a10.dart | 893 | | |-- a10.dart |
| 873 | |-- a5.dart | 894 | |-- a5.dart |
| 874 | |-- a6.dart (part) | 895 | |-- a6.dart (part) |
| 875 |-- dart_runtime.js | 896 |-- dart_runtime.js |
| 876 |-- harmony_feature_check.js | 897 |-- harmony_feature_check.js |
| 898 |-- messages_widget.js |
| 899 |-- messages.css |
| 877 '''); | 900 '''); |
| 878 | 901 |
| 879 a2.source.contents.modificationTime++; | 902 a2.source.contents.modificationTime++; |
| 880 a2.source.contents.data = ''' | 903 a2.source.contents.data = ''' |
| 881 library a2; | 904 library a2; |
| 882 import 'a3.dart'; | 905 import 'a3.dart'; |
| 883 import 'a4.dart'; | 906 import 'a4.dart'; |
| 884 import 'a6.dart'; // properly import it | 907 import 'a6.dart'; // properly import it |
| 885 export 'a5.dart'; | 908 export 'a5.dart'; |
| 886 '''; | 909 '''; |
| (...skipping 12 matching lines...) Expand all Loading... |
| 899 index3.html | 922 index3.html |
| 900 |-- a2.dart | 923 |-- a2.dart |
| 901 | |-- a3.dart | 924 | |-- a3.dart |
| 902 | |-- a4.dart | 925 | |-- a4.dart |
| 903 | | |-- a10.dart | 926 | | |-- a10.dart |
| 904 | |-- a6.dart | 927 | |-- a6.dart |
| 905 | | |-- a5.dart | 928 | | |-- a5.dart |
| 906 | |-- a5.dart... | 929 | |-- a5.dart... |
| 907 |-- dart_runtime.js | 930 |-- dart_runtime.js |
| 908 |-- harmony_feature_check.js | 931 |-- harmony_feature_check.js |
| 932 |-- messages_widget.js |
| 933 |-- messages.css |
| 909 '''); | 934 '''); |
| 910 }); | 935 }); |
| 911 | 936 |
| 912 test('convert part to a library after updating the import', () { | 937 test('convert part to a library after updating the import', () { |
| 913 var node = nodeOf('/index3.html'); | 938 var node = nodeOf('/index3.html'); |
| 914 var a2 = nodeOf('/a2.dart'); | 939 var a2 = nodeOf('/a2.dart'); |
| 915 var a6 = nodeOf('/a6.dart'); | 940 var a6 = nodeOf('/a6.dart'); |
| 916 rebuild(node, graph, buildNoTransitiveChange); | 941 rebuild(node, graph, buildNoTransitiveChange); |
| 917 | 942 |
| 918 expectGraph(node, ''' | 943 expectGraph(node, ''' |
| 919 index3.html | 944 index3.html |
| 920 |-- a2.dart | 945 |-- a2.dart |
| 921 | |-- a3.dart | 946 | |-- a3.dart |
| 922 | |-- a4.dart | 947 | |-- a4.dart |
| 923 | | |-- a10.dart | 948 | | |-- a10.dart |
| 924 | |-- a5.dart | 949 | |-- a5.dart |
| 925 | |-- a6.dart (part) | 950 | |-- a6.dart (part) |
| 926 |-- dart_runtime.js | 951 |-- dart_runtime.js |
| 927 |-- harmony_feature_check.js | 952 |-- harmony_feature_check.js |
| 953 |-- messages_widget.js |
| 954 |-- messages.css |
| 928 '''); | 955 '''); |
| 929 | 956 |
| 930 a2.source.contents.modificationTime++; | 957 a2.source.contents.modificationTime++; |
| 931 a2.source.contents.data = ''' | 958 a2.source.contents.data = ''' |
| 932 library a2; | 959 library a2; |
| 933 import 'a3.dart'; | 960 import 'a3.dart'; |
| 934 import 'a4.dart'; | 961 import 'a4.dart'; |
| 935 import 'a6.dart'; // properly import it | 962 import 'a6.dart'; // properly import it |
| 936 export 'a5.dart'; | 963 export 'a5.dart'; |
| 937 '''; | 964 '''; |
| 938 results = []; | 965 results = []; |
| 939 rebuild(node, graph, buildNoTransitiveChange); | 966 rebuild(node, graph, buildNoTransitiveChange); |
| 940 expect(results, ['a6.dart', 'a2.dart', 'index3.html']); | 967 expect(results, ['a6.dart', 'a2.dart', 'index3.html']); |
| 941 expectGraph(node, ''' | 968 expectGraph(node, ''' |
| 942 index3.html | 969 index3.html |
| 943 |-- a2.dart | 970 |-- a2.dart |
| 944 | |-- a3.dart | 971 | |-- a3.dart |
| 945 | |-- a4.dart | 972 | |-- a4.dart |
| 946 | | |-- a10.dart | 973 | | |-- a10.dart |
| 947 | |-- a6.dart | 974 | |-- a6.dart |
| 948 | |-- a5.dart | 975 | |-- a5.dart |
| 949 |-- dart_runtime.js | 976 |-- dart_runtime.js |
| 950 |-- harmony_feature_check.js | 977 |-- harmony_feature_check.js |
| 978 |-- messages_widget.js |
| 979 |-- messages.css |
| 951 '''); | 980 '''); |
| 952 | 981 |
| 953 a6.source.contents.modificationTime++; | 982 a6.source.contents.modificationTime++; |
| 954 a6.source.contents.data = 'library a6; import "a5.dart";'; | 983 a6.source.contents.data = 'library a6; import "a5.dart";'; |
| 955 results = []; | 984 results = []; |
| 956 rebuild(node, graph, buildNoTransitiveChange); | 985 rebuild(node, graph, buildNoTransitiveChange); |
| 957 expect(results, ['a6.dart', 'index3.html']); | 986 expect(results, ['a6.dart', 'index3.html']); |
| 958 expectGraph(node, ''' | 987 expectGraph(node, ''' |
| 959 index3.html | 988 index3.html |
| 960 |-- a2.dart | 989 |-- a2.dart |
| 961 | |-- a3.dart | 990 | |-- a3.dart |
| 962 | |-- a4.dart | 991 | |-- a4.dart |
| 963 | | |-- a10.dart | 992 | | |-- a10.dart |
| 964 | |-- a6.dart | 993 | |-- a6.dart |
| 965 | | |-- a5.dart | 994 | | |-- a5.dart |
| 966 | |-- a5.dart... | 995 | |-- a5.dart... |
| 967 |-- dart_runtime.js | 996 |-- dart_runtime.js |
| 968 |-- harmony_feature_check.js | 997 |-- harmony_feature_check.js |
| 998 |-- messages_widget.js |
| 999 |-- messages.css |
| 969 '''); | 1000 '''); |
| 970 }); | 1001 }); |
| 971 | 1002 |
| 972 test('disconnect part making it a library', () { | 1003 test('disconnect part making it a library', () { |
| 973 var node = nodeOf('/index3.html'); | 1004 var node = nodeOf('/index3.html'); |
| 974 var a2 = nodeOf('/a2.dart'); | 1005 var a2 = nodeOf('/a2.dart'); |
| 975 var a6 = nodeOf('/a6.dart'); | 1006 var a6 = nodeOf('/a6.dart'); |
| 976 rebuild(node, graph, buildNoTransitiveChange); | 1007 rebuild(node, graph, buildNoTransitiveChange); |
| 977 | 1008 |
| 978 expectGraph(node, ''' | 1009 expectGraph(node, ''' |
| 979 index3.html | 1010 index3.html |
| 980 |-- a2.dart | 1011 |-- a2.dart |
| 981 | |-- a3.dart | 1012 | |-- a3.dart |
| 982 | |-- a4.dart | 1013 | |-- a4.dart |
| 983 | | |-- a10.dart | 1014 | | |-- a10.dart |
| 984 | |-- a5.dart | 1015 | |-- a5.dart |
| 985 | |-- a6.dart (part) | 1016 | |-- a6.dart (part) |
| 986 |-- dart_runtime.js | 1017 |-- dart_runtime.js |
| 987 |-- harmony_feature_check.js | 1018 |-- harmony_feature_check.js |
| 1019 |-- messages_widget.js |
| 1020 |-- messages.css |
| 988 '''); | 1021 '''); |
| 989 | 1022 |
| 990 a2.source.contents.modificationTime++; | 1023 a2.source.contents.modificationTime++; |
| 991 a2.source.contents.data = ''' | 1024 a2.source.contents.data = ''' |
| 992 library a2; | 1025 library a2; |
| 993 import 'a3.dart'; | 1026 import 'a3.dart'; |
| 994 import 'a4.dart'; | 1027 import 'a4.dart'; |
| 995 export 'a5.dart'; | 1028 export 'a5.dart'; |
| 996 '''; | 1029 '''; |
| 997 a6.source.contents.modificationTime++; | 1030 a6.source.contents.modificationTime++; |
| 998 a6.source.contents.data = 'library a6; import "a5.dart";'; | 1031 a6.source.contents.data = 'library a6; import "a5.dart";'; |
| 999 results = []; | 1032 results = []; |
| 1000 rebuild(node, graph, buildNoTransitiveChange); | 1033 rebuild(node, graph, buildNoTransitiveChange); |
| 1001 // a6 is not here, it's not reachable so we don't build it. | 1034 // a6 is not here, it's not reachable so we don't build it. |
| 1002 expect(results, ['a2.dart', 'index3.html']); | 1035 expect(results, ['a2.dart', 'index3.html']); |
| 1003 expectGraph(node, ''' | 1036 expectGraph(node, ''' |
| 1004 index3.html | 1037 index3.html |
| 1005 |-- a2.dart | 1038 |-- a2.dart |
| 1006 | |-- a3.dart | 1039 | |-- a3.dart |
| 1007 | |-- a4.dart | 1040 | |-- a4.dart |
| 1008 | | |-- a10.dart | 1041 | | |-- a10.dart |
| 1009 | |-- a5.dart | 1042 | |-- a5.dart |
| 1010 |-- dart_runtime.js | 1043 |-- dart_runtime.js |
| 1011 |-- harmony_feature_check.js | 1044 |-- harmony_feature_check.js |
| 1045 |-- messages_widget.js |
| 1046 |-- messages.css |
| 1012 '''); | 1047 '''); |
| 1013 }); | 1048 }); |
| 1014 | 1049 |
| 1015 test('convert a library to a part', () { | 1050 test('convert a library to a part', () { |
| 1016 var node = nodeOf('/index3.html'); | 1051 var node = nodeOf('/index3.html'); |
| 1017 var a2 = nodeOf('/a2.dart'); | 1052 var a2 = nodeOf('/a2.dart'); |
| 1018 var a5 = nodeOf('/a5.dart'); | 1053 var a5 = nodeOf('/a5.dart'); |
| 1019 rebuild(node, graph, buildNoTransitiveChange); | 1054 rebuild(node, graph, buildNoTransitiveChange); |
| 1020 | 1055 |
| 1021 expectGraph(node, ''' | 1056 expectGraph(node, ''' |
| 1022 index3.html | 1057 index3.html |
| 1023 |-- a2.dart | 1058 |-- a2.dart |
| 1024 | |-- a3.dart | 1059 | |-- a3.dart |
| 1025 | |-- a4.dart | 1060 | |-- a4.dart |
| 1026 | | |-- a10.dart | 1061 | | |-- a10.dart |
| 1027 | |-- a5.dart | 1062 | |-- a5.dart |
| 1028 | |-- a6.dart (part) | 1063 | |-- a6.dart (part) |
| 1029 |-- dart_runtime.js | 1064 |-- dart_runtime.js |
| 1030 |-- harmony_feature_check.js | 1065 |-- harmony_feature_check.js |
| 1066 |-- messages_widget.js |
| 1067 |-- messages.css |
| 1031 '''); | 1068 '''); |
| 1032 | 1069 |
| 1033 a2.source.contents.modificationTime++; | 1070 a2.source.contents.modificationTime++; |
| 1034 a2.source.contents.data = ''' | 1071 a2.source.contents.data = ''' |
| 1035 library a2; | 1072 library a2; |
| 1036 import 'a3.dart'; | 1073 import 'a3.dart'; |
| 1037 import 'a4.dart'; | 1074 import 'a4.dart'; |
| 1038 part 'a5.dart'; // make it a part | 1075 part 'a5.dart'; // make it a part |
| 1039 part 'a6.dart'; | 1076 part 'a6.dart'; |
| 1040 '''; | 1077 '''; |
| 1041 results = []; | 1078 results = []; |
| 1042 rebuild(node, graph, buildNoTransitiveChange); | 1079 rebuild(node, graph, buildNoTransitiveChange); |
| 1043 expect(results, ['a2.dart', 'index3.html']); | 1080 expect(results, ['a2.dart', 'index3.html']); |
| 1044 expectGraph(node, ''' | 1081 expectGraph(node, ''' |
| 1045 index3.html | 1082 index3.html |
| 1046 |-- a2.dart | 1083 |-- a2.dart |
| 1047 | |-- a3.dart | 1084 | |-- a3.dart |
| 1048 | |-- a4.dart | 1085 | |-- a4.dart |
| 1049 | | |-- a10.dart | 1086 | | |-- a10.dart |
| 1050 | |-- a5.dart (part) | 1087 | |-- a5.dart (part) |
| 1051 | |-- a6.dart (part) | 1088 | |-- a6.dart (part) |
| 1052 |-- dart_runtime.js | 1089 |-- dart_runtime.js |
| 1053 |-- harmony_feature_check.js | 1090 |-- harmony_feature_check.js |
| 1091 |-- messages_widget.js |
| 1092 |-- messages.css |
| 1054 '''); | 1093 '''); |
| 1055 | 1094 |
| 1056 a5.source.contents.modificationTime++; | 1095 a5.source.contents.modificationTime++; |
| 1057 a5.source.contents.data = 'part of a2;'; | 1096 a5.source.contents.data = 'part of a2;'; |
| 1058 results = []; | 1097 results = []; |
| 1059 rebuild(node, graph, buildNoTransitiveChange); | 1098 rebuild(node, graph, buildNoTransitiveChange); |
| 1060 expect(results, ['a2.dart']); | 1099 expect(results, ['a2.dart']); |
| 1061 expectGraph(node, ''' | 1100 expectGraph(node, ''' |
| 1062 index3.html | 1101 index3.html |
| 1063 |-- a2.dart | 1102 |-- a2.dart |
| 1064 | |-- a3.dart | 1103 | |-- a3.dart |
| 1065 | |-- a4.dart | 1104 | |-- a4.dart |
| 1066 | | |-- a10.dart | 1105 | | |-- a10.dart |
| 1067 | |-- a5.dart (part) | 1106 | |-- a5.dart (part) |
| 1068 | |-- a6.dart (part) | 1107 | |-- a6.dart (part) |
| 1069 |-- dart_runtime.js | 1108 |-- dart_runtime.js |
| 1070 |-- harmony_feature_check.js | 1109 |-- harmony_feature_check.js |
| 1110 |-- messages_widget.js |
| 1111 |-- messages.css |
| 1071 '''); | 1112 '''); |
| 1072 }); | 1113 }); |
| 1073 }); | 1114 }); |
| 1074 }); | 1115 }); |
| 1075 } | 1116 } |
| 1076 | 1117 |
| 1077 expectGraph(SourceNode node, String expectation) { | 1118 expectGraph(SourceNode node, String expectation) { |
| 1078 expect(printReachable(node), equalsIgnoringWhitespace(expectation)); | 1119 expect(printReachable(node), equalsIgnoringWhitespace(expectation)); |
| 1079 } | 1120 } |
| 1080 | 1121 |
| (...skipping 30 matching lines...) Expand all Loading... |
| 1111 ..write(e.structureChanged ? '[structure-changed] ' : ' ') | 1152 ..write(e.structureChanged ? '[structure-changed] ' : ' ') |
| 1112 ..write('\n'); | 1153 ..write('\n'); |
| 1113 }); | 1154 }); |
| 1114 } | 1155 } |
| 1115 } | 1156 } |
| 1116 helper(node); | 1157 helper(node); |
| 1117 return sb.toString(); | 1158 return sb.toString(); |
| 1118 } | 1159 } |
| 1119 | 1160 |
| 1120 bool _same(Set a, Set b) => a.length == b.length && a.containsAll(b); | 1161 bool _same(Set a, Set b) => a.length == b.length && a.containsAll(b); |
| OLD | NEW |