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 |