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/unittest.dart'; | 7 import 'package:unittest/unittest.dart'; |
8 | 8 |
9 import 'package:dev_compiler/src/checker/dart_sdk.dart' | 9 import 'package:dev_compiler/src/checker/dart_sdk.dart' |
10 show mockSdkSources, dartSdkDirectory; | 10 show mockSdkSources, dartSdkDirectory; |
(...skipping 535 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
546 expect(node.structureChanged, isTrue); | 546 expect(node.structureChanged, isTrue); |
547 }); | 547 }); |
548 }); | 548 }); |
549 }); | 549 }); |
550 | 550 |
551 group('refresh structure and marks', () { | 551 group('refresh structure and marks', () { |
552 test('initial marks', () { | 552 test('initial marks', () { |
553 var node = nodeOf('/index3.html'); | 553 var node = nodeOf('/index3.html'); |
554 expectGraph(node, ''' | 554 expectGraph(node, ''' |
555 index3.html | 555 index3.html |
556 |-- harmony_feature_check.js | 556 $_RUNTIME_GRAPH |
557 |-- dart_runtime.js | |
558 |-- dart_core.js | |
559 '''); | 557 '''); |
560 refreshStructureAndMarks(node, graph); | 558 refreshStructureAndMarks(node, graph); |
561 expectGraph(node, ''' | 559 expectGraph(node, ''' |
562 index3.html [needs-rebuild] [structure-changed] | 560 index3.html [needs-rebuild] [structure-changed] |
563 |-- a2.dart [needs-rebuild] [structure-changed] | 561 |-- a2.dart [needs-rebuild] [structure-changed] |
564 | |-- a3.dart [needs-rebuild] | 562 | |-- a3.dart [needs-rebuild] |
565 | |-- a4.dart [needs-rebuild] [structure-changed] | 563 | |-- a4.dart [needs-rebuild] [structure-changed] |
566 | | |-- a10.dart [needs-rebuild] | 564 | | |-- a10.dart [needs-rebuild] |
567 | |-- a5.dart [needs-rebuild] | 565 | |-- a5.dart [needs-rebuild] |
568 | |-- a6.dart (part) [needs-rebuild] | 566 | |-- a6.dart (part) [needs-rebuild] |
569 |-- harmony_feature_check.js [needs-rebuild] | 567 $_RUNTIME_GRAPH_REBUILD |
570 |-- dart_runtime.js [needs-rebuild] | |
571 |-- dart_core.js [needs-rebuild] | |
572 '''); | 568 '''); |
573 }); | 569 }); |
574 | 570 |
575 test('cleared marks stay clear', () { | 571 test('cleared marks stay clear', () { |
576 var node = nodeOf('/index3.html'); | 572 var node = nodeOf('/index3.html'); |
577 refreshStructureAndMarks(node, graph); | 573 refreshStructureAndMarks(node, graph); |
578 expectGraph(node, ''' | 574 expectGraph(node, ''' |
579 index3.html [needs-rebuild] [structure-changed] | 575 index3.html [needs-rebuild] [structure-changed] |
580 |-- a2.dart [needs-rebuild] [structure-changed] | 576 |-- a2.dart [needs-rebuild] [structure-changed] |
581 | |-- a3.dart [needs-rebuild] | 577 | |-- a3.dart [needs-rebuild] |
582 | |-- a4.dart [needs-rebuild] [structure-changed] | 578 | |-- a4.dart [needs-rebuild] [structure-changed] |
583 | | |-- a10.dart [needs-rebuild] | 579 | | |-- a10.dart [needs-rebuild] |
584 | |-- a5.dart [needs-rebuild] | 580 | |-- a5.dart [needs-rebuild] |
585 | |-- a6.dart (part) [needs-rebuild] | 581 | |-- a6.dart (part) [needs-rebuild] |
586 |-- harmony_feature_check.js [needs-rebuild] | 582 $_RUNTIME_GRAPH_REBUILD |
587 |-- dart_runtime.js [needs-rebuild] | |
588 |-- dart_core.js [needs-rebuild] | |
589 '''); | 583 '''); |
590 clearMarks(node); | 584 clearMarks(node); |
591 expectGraph(node, ''' | 585 expectGraph(node, ''' |
592 index3.html | 586 index3.html |
593 |-- a2.dart | 587 |-- a2.dart |
594 | |-- a3.dart | 588 | |-- a3.dart |
595 | |-- a4.dart | 589 | |-- a4.dart |
596 | | |-- a10.dart | 590 | | |-- a10.dart |
597 | |-- a5.dart | 591 | |-- a5.dart |
598 | |-- a6.dart (part) | 592 | |-- a6.dart (part) |
599 |-- harmony_feature_check.js | 593 $_RUNTIME_GRAPH |
600 |-- dart_runtime.js | |
601 |-- dart_core.js | |
602 '''); | 594 '''); |
603 | 595 |
604 refreshStructureAndMarks(node, graph); | 596 refreshStructureAndMarks(node, graph); |
605 expectGraph(node, ''' | 597 expectGraph(node, ''' |
606 index3.html | 598 index3.html |
607 |-- a2.dart | 599 |-- a2.dart |
608 | |-- a3.dart | 600 | |-- a3.dart |
609 | |-- a4.dart | 601 | |-- a4.dart |
610 | | |-- a10.dart | 602 | | |-- a10.dart |
611 | |-- a5.dart | 603 | |-- a5.dart |
612 | |-- a6.dart (part) | 604 | |-- a6.dart (part) |
613 |-- harmony_feature_check.js | 605 $_RUNTIME_GRAPH |
614 |-- dart_runtime.js | |
615 |-- dart_core.js | |
616 '''); | 606 '''); |
617 }); | 607 }); |
618 | 608 |
619 test('needsRebuild mark updated on local modifications', () { | 609 test('needsRebuild mark updated on local modifications', () { |
620 var node = nodeOf('/index3.html'); | 610 var node = nodeOf('/index3.html'); |
621 refreshStructureAndMarks(node, graph); | 611 refreshStructureAndMarks(node, graph); |
622 clearMarks(node); | 612 clearMarks(node); |
623 var a3 = nodeOf('/a3.dart'); | 613 var a3 = nodeOf('/a3.dart'); |
624 a3.source.contents.modificationTime++; | 614 a3.source.contents.modificationTime++; |
625 | 615 |
626 refreshStructureAndMarks(node, graph); | 616 refreshStructureAndMarks(node, graph); |
627 expectGraph(node, ''' | 617 expectGraph(node, ''' |
628 index3.html | 618 index3.html |
629 |-- a2.dart | 619 |-- a2.dart |
630 | |-- a3.dart [needs-rebuild] | 620 | |-- a3.dart [needs-rebuild] |
631 | |-- a4.dart | 621 | |-- a4.dart |
632 | | |-- a10.dart | 622 | | |-- a10.dart |
633 | |-- a5.dart | 623 | |-- a5.dart |
634 | |-- a6.dart (part) | 624 | |-- a6.dart (part) |
635 |-- harmony_feature_check.js | 625 $_RUNTIME_GRAPH |
636 |-- dart_runtime.js | |
637 |-- dart_core.js | |
638 '''); | 626 '''); |
639 }); | 627 }); |
640 | 628 |
641 test('structuredChanged mark updated on structure modifications', () { | 629 test('structuredChanged mark updated on structure modifications', () { |
642 var node = nodeOf('/index3.html'); | 630 var node = nodeOf('/index3.html'); |
643 refreshStructureAndMarks(node, graph); | 631 refreshStructureAndMarks(node, graph); |
644 clearMarks(node); | 632 clearMarks(node); |
645 var a5 = nodeOf('/a5.dart'); | 633 var a5 = nodeOf('/a5.dart'); |
646 a5.source.contents.modificationTime++; | 634 a5.source.contents.modificationTime++; |
647 a5.source.contents.data = 'import "a8.dart";'; | 635 a5.source.contents.data = 'import "a8.dart";'; |
648 | 636 |
649 refreshStructureAndMarks(node, graph); | 637 refreshStructureAndMarks(node, graph); |
650 expectGraph(node, ''' | 638 expectGraph(node, ''' |
651 index3.html | 639 index3.html |
652 |-- a2.dart | 640 |-- a2.dart |
653 | |-- a3.dart | 641 | |-- a3.dart |
654 | |-- a4.dart | 642 | |-- a4.dart |
655 | | |-- a10.dart | 643 | | |-- a10.dart |
656 | |-- a5.dart [needs-rebuild] [structure-changed] | 644 | |-- a5.dart [needs-rebuild] [structure-changed] |
657 | | |-- a8.dart [needs-rebuild] [structure-changed] | 645 | | |-- a8.dart [needs-rebuild] [structure-changed] |
658 | | | |-- a8.dart... | 646 | | | |-- a8.dart... |
659 | |-- a6.dart (part) | 647 | |-- a6.dart (part) |
660 |-- harmony_feature_check.js | 648 $_RUNTIME_GRAPH |
661 |-- dart_runtime.js | |
662 |-- dart_core.js | |
663 '''); | 649 '''); |
664 }); | 650 }); |
665 }); | 651 }); |
666 | 652 |
667 group('server-mode', () { | 653 group('server-mode', () { |
668 setUp(() { | 654 setUp(() { |
669 var options2 = new CompilerOptions( | 655 var options2 = new CompilerOptions( |
670 runtimeDir: '/dev_compiler_runtime/', serverMode: true); | 656 runtimeDir: '/dev_compiler_runtime/', serverMode: true); |
671 context = new TypeResolver.fromMock(mockSdkSources, options2, | 657 context = new TypeResolver.fromMock(mockSdkSources, options2, |
672 otherResolvers: [testUriResolver]).context; | 658 otherResolvers: [testUriResolver]).context; |
673 graph = new SourceGraph(context, new LogReporter(), options2); | 659 graph = new SourceGraph(context, new LogReporter(), options2); |
674 }); | 660 }); |
675 | 661 |
676 test('messages widget is automatically included', () { | 662 test('messages widget is automatically included', () { |
677 var node = nodeOf('/index3.html'); | 663 var node = nodeOf('/index3.html'); |
678 expectGraph(node, ''' | 664 expectGraph(node, ''' |
679 index3.html | 665 index3.html |
680 |-- harmony_feature_check.js | 666 $_RUNTIME_GRAPH |
681 |-- dart_runtime.js | |
682 |-- dart_core.js | |
683 |-- messages_widget.js | 667 |-- messages_widget.js |
684 |-- messages.css | 668 |-- messages.css |
685 '''); | 669 '''); |
686 refreshStructureAndMarks(node, graph); | 670 refreshStructureAndMarks(node, graph); |
687 expectGraph(node, ''' | 671 expectGraph(node, ''' |
688 index3.html [needs-rebuild] [structure-changed] | 672 index3.html [needs-rebuild] [structure-changed] |
689 |-- a2.dart [needs-rebuild] [structure-changed] | 673 |-- a2.dart [needs-rebuild] [structure-changed] |
690 | |-- a3.dart [needs-rebuild] | 674 | |-- a3.dart [needs-rebuild] |
691 | |-- a4.dart [needs-rebuild] [structure-changed] | 675 | |-- a4.dart [needs-rebuild] [structure-changed] |
692 | | |-- a10.dart [needs-rebuild] | 676 | | |-- a10.dart [needs-rebuild] |
693 | |-- a5.dart [needs-rebuild] | 677 | |-- a5.dart [needs-rebuild] |
694 | |-- a6.dart (part) [needs-rebuild] | 678 | |-- a6.dart (part) [needs-rebuild] |
695 |-- harmony_feature_check.js [needs-rebuild] | 679 $_RUNTIME_GRAPH_REBUILD |
696 |-- dart_runtime.js [needs-rebuild] | |
697 |-- dart_core.js [needs-rebuild] | |
698 |-- messages_widget.js [needs-rebuild] | 680 |-- messages_widget.js [needs-rebuild] |
699 |-- messages.css [needs-rebuild] | 681 |-- messages.css [needs-rebuild] |
700 '''); | 682 '''); |
701 }); | 683 }); |
702 }); | 684 }); |
703 | 685 |
704 group('rebuild', () { | 686 group('rebuild', () { |
705 var results; | 687 var results; |
706 void addName(SourceNode n) => results.add(nameFor(n)); | 688 void addName(SourceNode n) => results.add(nameFor(n)); |
707 | 689 |
708 bool buildNoTransitiveChange(SourceNode n) { | 690 bool buildNoTransitiveChange(SourceNode n) { |
709 addName(n); | 691 addName(n); |
710 return false; | 692 return false; |
711 } | 693 } |
712 | 694 |
713 bool buildWithTransitiveChange(SourceNode n) { | 695 bool buildWithTransitiveChange(SourceNode n) { |
714 addName(n); | 696 addName(n); |
715 return true; | 697 return true; |
716 } | 698 } |
717 | 699 |
718 setUp(() { | 700 setUp(() { |
719 results = []; | 701 results = []; |
720 }); | 702 }); |
721 | 703 |
722 test('everything build on first run', () { | 704 test('everything build on first run', () { |
723 var node = nodeOf('/index3.html'); | 705 var node = nodeOf('/index3.html'); |
724 rebuild(node, graph, buildNoTransitiveChange); | 706 rebuild(node, graph, buildNoTransitiveChange); |
725 // Note: a6.dart is not included because it built as part of a2.dart | 707 // Note: a6.dart is not included because it built as part of a2.dart |
726 expect(results, [ | 708 expect(results, ['a3.dart', 'a10.dart', 'a4.dart', 'a5.dart', 'a2.dart'] |
727 'a3.dart', | 709 ..addAll(runtimeFilesWithoutPath) |
728 'a10.dart', | 710 ..add('index3.html')); |
729 'a4.dart', | |
730 'a5.dart', | |
731 'a2.dart', | |
732 'harmony_feature_check.js', | |
733 'dart_runtime.js', | |
734 'dart_core.js', | |
735 'index3.html', | |
736 ]); | |
737 | 711 |
738 // Marks are removed automatically by rebuild | 712 // Marks are removed automatically by rebuild |
739 expectGraph(node, ''' | 713 expectGraph(node, ''' |
740 index3.html | 714 index3.html |
741 |-- a2.dart | 715 |-- a2.dart |
742 | |-- a3.dart | 716 | |-- a3.dart |
743 | |-- a4.dart | 717 | |-- a4.dart |
744 | | |-- a10.dart | 718 | | |-- a10.dart |
745 | |-- a5.dart | 719 | |-- a5.dart |
746 | |-- a6.dart (part) | 720 | |-- a6.dart (part) |
747 |-- harmony_feature_check.js | 721 $_RUNTIME_GRAPH |
748 |-- dart_runtime.js | |
749 |-- dart_core.js | |
750 '''); | 722 '''); |
751 }); | 723 }); |
752 | 724 |
753 test('nothing to do after build', () { | 725 test('nothing to do after build', () { |
754 var node = nodeOf('/index3.html'); | 726 var node = nodeOf('/index3.html'); |
755 rebuild(node, graph, buildNoTransitiveChange); | 727 rebuild(node, graph, buildNoTransitiveChange); |
756 | 728 |
757 results = []; | 729 results = []; |
758 rebuild(node, graph, buildNoTransitiveChange); | 730 rebuild(node, graph, buildNoTransitiveChange); |
759 expect(results, []); | 731 expect(results, []); |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
890 rebuild(node, graph, buildNoTransitiveChange); | 862 rebuild(node, graph, buildNoTransitiveChange); |
891 | 863 |
892 expectGraph(node, ''' | 864 expectGraph(node, ''' |
893 index3.html | 865 index3.html |
894 |-- a2.dart | 866 |-- a2.dart |
895 | |-- a3.dart | 867 | |-- a3.dart |
896 | |-- a4.dart | 868 | |-- a4.dart |
897 | | |-- a10.dart | 869 | | |-- a10.dart |
898 | |-- a5.dart | 870 | |-- a5.dart |
899 | |-- a6.dart (part) | 871 | |-- a6.dart (part) |
900 |-- harmony_feature_check.js | 872 $_RUNTIME_GRAPH |
901 |-- dart_runtime.js | |
902 |-- dart_core.js | |
903 '''); | 873 '''); |
904 | 874 |
905 // Modify the file first: | 875 // Modify the file first: |
906 a6.source.contents.modificationTime++; | 876 a6.source.contents.modificationTime++; |
907 a6.source.contents.data = 'library a6; import "a5.dart";'; | 877 a6.source.contents.data = 'library a6; import "a5.dart";'; |
908 results = []; | 878 results = []; |
909 rebuild(node, graph, buildNoTransitiveChange); | 879 rebuild(node, graph, buildNoTransitiveChange); |
910 | 880 |
911 // Looks to us like a change in a part, we'll report errors that the | 881 // Looks to us like a change in a part, we'll report errors that the |
912 // part is not really a part-file. Note that a6.dart is not included | 882 // part is not really a part-file. Note that a6.dart is not included |
913 // below, because we don't build it as a library. | 883 // below, because we don't build it as a library. |
914 expect(results, ['a2.dart']); | 884 expect(results, ['a2.dart']); |
915 expectGraph(node, ''' | 885 expectGraph(node, ''' |
916 index3.html | 886 index3.html |
917 |-- a2.dart | 887 |-- a2.dart |
918 | |-- a3.dart | 888 | |-- a3.dart |
919 | |-- a4.dart | 889 | |-- a4.dart |
920 | | |-- a10.dart | 890 | | |-- a10.dart |
921 | |-- a5.dart | 891 | |-- a5.dart |
922 | |-- a6.dart (part) | 892 | |-- a6.dart (part) |
923 |-- harmony_feature_check.js | 893 $_RUNTIME_GRAPH |
924 |-- dart_runtime.js | |
925 |-- dart_core.js | |
926 '''); | 894 '''); |
927 | 895 |
928 a2.source.contents.modificationTime++; | 896 a2.source.contents.modificationTime++; |
929 a2.source.contents.data = ''' | 897 a2.source.contents.data = ''' |
930 library a2; | 898 library a2; |
931 import 'a3.dart'; | 899 import 'a3.dart'; |
932 import 'a4.dart'; | 900 import 'a4.dart'; |
933 import 'a6.dart'; // properly import it | 901 import 'a6.dart'; // properly import it |
934 export 'a5.dart'; | 902 export 'a5.dart'; |
935 '''; | 903 '''; |
(...skipping 10 matching lines...) Expand all Loading... |
946 | 914 |
947 expectGraph(node, ''' | 915 expectGraph(node, ''' |
948 index3.html | 916 index3.html |
949 |-- a2.dart | 917 |-- a2.dart |
950 | |-- a3.dart | 918 | |-- a3.dart |
951 | |-- a4.dart | 919 | |-- a4.dart |
952 | | |-- a10.dart | 920 | | |-- a10.dart |
953 | |-- a6.dart | 921 | |-- a6.dart |
954 | | |-- a5.dart | 922 | | |-- a5.dart |
955 | |-- a5.dart... | 923 | |-- a5.dart... |
956 |-- harmony_feature_check.js | 924 $_RUNTIME_GRAPH |
957 |-- dart_runtime.js | |
958 |-- dart_core.js | |
959 '''); | 925 '''); |
960 }); | 926 }); |
961 | 927 |
962 test('convert part to a library after updating the import', () { | 928 test('convert part to a library after updating the import', () { |
963 var node = nodeOf('/index3.html'); | 929 var node = nodeOf('/index3.html'); |
964 var a2 = nodeOf('/a2.dart'); | 930 var a2 = nodeOf('/a2.dart'); |
965 var a6 = nodeOf('/a6.dart'); | 931 var a6 = nodeOf('/a6.dart'); |
966 rebuild(node, graph, buildNoTransitiveChange); | 932 rebuild(node, graph, buildNoTransitiveChange); |
967 | 933 |
968 expectGraph(node, ''' | 934 expectGraph(node, ''' |
969 index3.html | 935 index3.html |
970 |-- a2.dart | 936 |-- a2.dart |
971 | |-- a3.dart | 937 | |-- a3.dart |
972 | |-- a4.dart | 938 | |-- a4.dart |
973 | | |-- a10.dart | 939 | | |-- a10.dart |
974 | |-- a5.dart | 940 | |-- a5.dart |
975 | |-- a6.dart (part) | 941 | |-- a6.dart (part) |
976 |-- harmony_feature_check.js | 942 $_RUNTIME_GRAPH |
977 |-- dart_runtime.js | |
978 |-- dart_core.js | |
979 '''); | 943 '''); |
980 | 944 |
981 a2.source.contents.modificationTime++; | 945 a2.source.contents.modificationTime++; |
982 a2.source.contents.data = ''' | 946 a2.source.contents.data = ''' |
983 library a2; | 947 library a2; |
984 import 'a3.dart'; | 948 import 'a3.dart'; |
985 import 'a4.dart'; | 949 import 'a4.dart'; |
986 import 'a6.dart'; // properly import it | 950 import 'a6.dart'; // properly import it |
987 export 'a5.dart'; | 951 export 'a5.dart'; |
988 '''; | 952 '''; |
989 results = []; | 953 results = []; |
990 rebuild(node, graph, buildNoTransitiveChange); | 954 rebuild(node, graph, buildNoTransitiveChange); |
991 expect(results, ['a6.dart', 'a2.dart', 'index3.html']); | 955 expect(results, ['a6.dart', 'a2.dart', 'index3.html']); |
992 expectGraph(node, ''' | 956 expectGraph(node, ''' |
993 index3.html | 957 index3.html |
994 |-- a2.dart | 958 |-- a2.dart |
995 | |-- a3.dart | 959 | |-- a3.dart |
996 | |-- a4.dart | 960 | |-- a4.dart |
997 | | |-- a10.dart | 961 | | |-- a10.dart |
998 | |-- a6.dart | 962 | |-- a6.dart |
999 | |-- a5.dart | 963 | |-- a5.dart |
1000 |-- harmony_feature_check.js | 964 $_RUNTIME_GRAPH |
1001 |-- dart_runtime.js | |
1002 |-- dart_core.js | |
1003 '''); | 965 '''); |
1004 | 966 |
1005 a6.source.contents.modificationTime++; | 967 a6.source.contents.modificationTime++; |
1006 a6.source.contents.data = 'library a6; import "a5.dart";'; | 968 a6.source.contents.data = 'library a6; import "a5.dart";'; |
1007 results = []; | 969 results = []; |
1008 rebuild(node, graph, buildNoTransitiveChange); | 970 rebuild(node, graph, buildNoTransitiveChange); |
1009 expect(results, ['a6.dart', 'index3.html']); | 971 expect(results, ['a6.dart', 'index3.html']); |
1010 expectGraph(node, ''' | 972 expectGraph(node, ''' |
1011 index3.html | 973 index3.html |
1012 |-- a2.dart | 974 |-- a2.dart |
1013 | |-- a3.dart | 975 | |-- a3.dart |
1014 | |-- a4.dart | 976 | |-- a4.dart |
1015 | | |-- a10.dart | 977 | | |-- a10.dart |
1016 | |-- a6.dart | 978 | |-- a6.dart |
1017 | | |-- a5.dart | 979 | | |-- a5.dart |
1018 | |-- a5.dart... | 980 | |-- a5.dart... |
1019 |-- harmony_feature_check.js | 981 $_RUNTIME_GRAPH |
1020 |-- dart_runtime.js | |
1021 |-- dart_core.js | |
1022 '''); | 982 '''); |
1023 }); | 983 }); |
1024 | 984 |
1025 test('disconnect part making it a library', () { | 985 test('disconnect part making it a library', () { |
1026 var node = nodeOf('/index3.html'); | 986 var node = nodeOf('/index3.html'); |
1027 var a2 = nodeOf('/a2.dart'); | 987 var a2 = nodeOf('/a2.dart'); |
1028 var a6 = nodeOf('/a6.dart'); | 988 var a6 = nodeOf('/a6.dart'); |
1029 rebuild(node, graph, buildNoTransitiveChange); | 989 rebuild(node, graph, buildNoTransitiveChange); |
1030 | 990 |
1031 expectGraph(node, ''' | 991 expectGraph(node, ''' |
1032 index3.html | 992 index3.html |
1033 |-- a2.dart | 993 |-- a2.dart |
1034 | |-- a3.dart | 994 | |-- a3.dart |
1035 | |-- a4.dart | 995 | |-- a4.dart |
1036 | | |-- a10.dart | 996 | | |-- a10.dart |
1037 | |-- a5.dart | 997 | |-- a5.dart |
1038 | |-- a6.dart (part) | 998 | |-- a6.dart (part) |
1039 |-- harmony_feature_check.js | 999 $_RUNTIME_GRAPH |
1040 |-- dart_runtime.js | |
1041 |-- dart_core.js | |
1042 '''); | 1000 '''); |
1043 | 1001 |
1044 a2.source.contents.modificationTime++; | 1002 a2.source.contents.modificationTime++; |
1045 a2.source.contents.data = ''' | 1003 a2.source.contents.data = ''' |
1046 library a2; | 1004 library a2; |
1047 import 'a3.dart'; | 1005 import 'a3.dart'; |
1048 import 'a4.dart'; | 1006 import 'a4.dart'; |
1049 export 'a5.dart'; | 1007 export 'a5.dart'; |
1050 '''; | 1008 '''; |
1051 a6.source.contents.modificationTime++; | 1009 a6.source.contents.modificationTime++; |
1052 a6.source.contents.data = 'library a6; import "a5.dart";'; | 1010 a6.source.contents.data = 'library a6; import "a5.dart";'; |
1053 results = []; | 1011 results = []; |
1054 rebuild(node, graph, buildNoTransitiveChange); | 1012 rebuild(node, graph, buildNoTransitiveChange); |
1055 // a6 is not here, it's not reachable so we don't build it. | 1013 // a6 is not here, it's not reachable so we don't build it. |
1056 expect(results, ['a2.dart', 'index3.html']); | 1014 expect(results, ['a2.dart', 'index3.html']); |
1057 expectGraph(node, ''' | 1015 expectGraph(node, ''' |
1058 index3.html | 1016 index3.html |
1059 |-- a2.dart | 1017 |-- a2.dart |
1060 | |-- a3.dart | 1018 | |-- a3.dart |
1061 | |-- a4.dart | 1019 | |-- a4.dart |
1062 | | |-- a10.dart | 1020 | | |-- a10.dart |
1063 | |-- a5.dart | 1021 | |-- a5.dart |
1064 |-- harmony_feature_check.js | 1022 $_RUNTIME_GRAPH |
1065 |-- dart_runtime.js | |
1066 |-- dart_core.js | |
1067 '''); | 1023 '''); |
1068 }); | 1024 }); |
1069 | 1025 |
1070 test('convert a library to a part', () { | 1026 test('convert a library to a part', () { |
1071 var node = nodeOf('/index3.html'); | 1027 var node = nodeOf('/index3.html'); |
1072 var a2 = nodeOf('/a2.dart'); | 1028 var a2 = nodeOf('/a2.dart'); |
1073 var a5 = nodeOf('/a5.dart'); | 1029 var a5 = nodeOf('/a5.dart'); |
1074 rebuild(node, graph, buildNoTransitiveChange); | 1030 rebuild(node, graph, buildNoTransitiveChange); |
1075 | 1031 |
1076 expectGraph(node, ''' | 1032 expectGraph(node, ''' |
1077 index3.html | 1033 index3.html |
1078 |-- a2.dart | 1034 |-- a2.dart |
1079 | |-- a3.dart | 1035 | |-- a3.dart |
1080 | |-- a4.dart | 1036 | |-- a4.dart |
1081 | | |-- a10.dart | 1037 | | |-- a10.dart |
1082 | |-- a5.dart | 1038 | |-- a5.dart |
1083 | |-- a6.dart (part) | 1039 | |-- a6.dart (part) |
1084 |-- harmony_feature_check.js | 1040 $_RUNTIME_GRAPH |
1085 |-- dart_runtime.js | |
1086 |-- dart_core.js | |
1087 '''); | 1041 '''); |
1088 | 1042 |
1089 a2.source.contents.modificationTime++; | 1043 a2.source.contents.modificationTime++; |
1090 a2.source.contents.data = ''' | 1044 a2.source.contents.data = ''' |
1091 library a2; | 1045 library a2; |
1092 import 'a3.dart'; | 1046 import 'a3.dart'; |
1093 import 'a4.dart'; | 1047 import 'a4.dart'; |
1094 part 'a5.dart'; // make it a part | 1048 part 'a5.dart'; // make it a part |
1095 part 'a6.dart'; | 1049 part 'a6.dart'; |
1096 '''; | 1050 '''; |
1097 results = []; | 1051 results = []; |
1098 rebuild(node, graph, buildNoTransitiveChange); | 1052 rebuild(node, graph, buildNoTransitiveChange); |
1099 expect(results, ['a2.dart', 'index3.html']); | 1053 expect(results, ['a2.dart', 'index3.html']); |
1100 expectGraph(node, ''' | 1054 expectGraph(node, ''' |
1101 index3.html | 1055 index3.html |
1102 |-- a2.dart | 1056 |-- a2.dart |
1103 | |-- a3.dart | 1057 | |-- a3.dart |
1104 | |-- a4.dart | 1058 | |-- a4.dart |
1105 | | |-- a10.dart | 1059 | | |-- a10.dart |
1106 | |-- a5.dart (part) | 1060 | |-- a5.dart (part) |
1107 | |-- a6.dart (part) | 1061 | |-- a6.dart (part) |
1108 |-- harmony_feature_check.js | 1062 $_RUNTIME_GRAPH |
1109 |-- dart_runtime.js | |
1110 |-- dart_core.js | |
1111 '''); | 1063 '''); |
1112 | 1064 |
1113 a5.source.contents.modificationTime++; | 1065 a5.source.contents.modificationTime++; |
1114 a5.source.contents.data = 'part of a2;'; | 1066 a5.source.contents.data = 'part of a2;'; |
1115 results = []; | 1067 results = []; |
1116 rebuild(node, graph, buildNoTransitiveChange); | 1068 rebuild(node, graph, buildNoTransitiveChange); |
1117 expect(results, ['a2.dart']); | 1069 expect(results, ['a2.dart']); |
1118 expectGraph(node, ''' | 1070 expectGraph(node, ''' |
1119 index3.html | 1071 index3.html |
1120 |-- a2.dart | 1072 |-- a2.dart |
1121 | |-- a3.dart | 1073 | |-- a3.dart |
1122 | |-- a4.dart | 1074 | |-- a4.dart |
1123 | | |-- a10.dart | 1075 | | |-- a10.dart |
1124 | |-- a5.dart (part) | 1076 | |-- a5.dart (part) |
1125 | |-- a6.dart (part) | 1077 | |-- a6.dart (part) |
1126 |-- harmony_feature_check.js | 1078 $_RUNTIME_GRAPH |
1127 |-- dart_runtime.js | |
1128 |-- dart_core.js | |
1129 '''); | 1079 '''); |
1130 }); | 1080 }); |
1131 }); | 1081 }); |
1132 | 1082 |
1133 group('represented non-existing files', () { | 1083 group('represented non-existing files', () { |
1134 test('recognize locally change between existing and not-existing', () { | 1084 test('recognize locally change between existing and not-existing', () { |
1135 var n = nodeOf('/foo.dart'); | 1085 var n = nodeOf('/foo.dart'); |
1136 expect(n.source, isNotNull); | 1086 expect(n.source, isNotNull); |
1137 expect(n.source.exists(), isFalse); | 1087 expect(n.source.exists(), isFalse); |
1138 var source = testUriResolver.files[new Uri.file('/foo.dart')]; | 1088 var source = testUriResolver.files[new Uri.file('/foo.dart')]; |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1234 ..write(e.needsRebuild ? '[needs-rebuild] ' : '') | 1184 ..write(e.needsRebuild ? '[needs-rebuild] ' : '') |
1235 ..write(e.structureChanged ? '[structure-changed] ' : ' ') | 1185 ..write(e.structureChanged ? '[structure-changed] ' : ' ') |
1236 ..write('\n'); | 1186 ..write('\n'); |
1237 }); | 1187 }); |
1238 } | 1188 } |
1239 } | 1189 } |
1240 helper(node); | 1190 helper(node); |
1241 return sb.toString(); | 1191 return sb.toString(); |
1242 } | 1192 } |
1243 | 1193 |
| 1194 final runtimeFilesWithoutPath = defaultRuntimeFiles |
| 1195 .map((f) => f.replaceAll('dart/', '')) |
| 1196 .toList(growable: false); |
| 1197 final _RUNTIME_GRAPH = runtimeFilesWithoutPath.map((s) => '|-- $s').join('\n'); |
| 1198 final _RUNTIME_GRAPH_REBUILD = |
| 1199 runtimeFilesWithoutPath.map((s) => '|-- $s [needs-rebuild]').join('\n'); |
| 1200 |
1244 bool _same(Set a, Set b) => a.length == b.length && a.containsAll(b); | 1201 bool _same(Set a, Set b) => a.length == b.length && a.containsAll(b); |
OLD | NEW |