| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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 pub_upgrade_test; | 5 library pub_upgrade_test; |
| 6 | 6 |
| 7 import 'dart:async'; | 7 import 'dart:async'; |
| 8 | 8 |
| 9 import 'package:unittest/unittest.dart'; | 9 import 'package:unittest/unittest.dart'; |
| 10 | 10 |
| (...skipping 23 matching lines...) Expand all Loading... |
| 34 | 34 |
| 35 group('basic graph', basicGraph); | 35 group('basic graph', basicGraph); |
| 36 group('with lockfile', withLockFile); | 36 group('with lockfile', withLockFile); |
| 37 group('root dependency', rootDependency); | 37 group('root dependency', rootDependency); |
| 38 group('dev dependency', devDependency); | 38 group('dev dependency', devDependency); |
| 39 group('unsolvable', unsolvable); | 39 group('unsolvable', unsolvable); |
| 40 group('bad source', badSource); | 40 group('bad source', badSource); |
| 41 group('backtracking', backtracking); | 41 group('backtracking', backtracking); |
| 42 group('SDK constraint', sdkConstraint); | 42 group('SDK constraint', sdkConstraint); |
| 43 group('pre-release', prerelease); | 43 group('pre-release', prerelease); |
| 44 group('override', override); |
| 44 } | 45 } |
| 45 | 46 |
| 46 void basicGraph() { | 47 void basicGraph() { |
| 47 testResolve('no dependencies', { | 48 testResolve('no dependencies', { |
| 48 'myapp 0.0.0': {} | 49 'myapp 0.0.0': {} |
| 49 }, result: { | 50 }, result: { |
| 50 'myapp from root': '0.0.0' | 51 'myapp from root': '0.0.0' |
| 51 }); | 52 }); |
| 52 | 53 |
| 53 testResolve('simple dependency tree', { | 54 testResolve('simple dependency tree', { |
| (...skipping 794 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 848 'a 1.0.0': {}, | 849 'a 1.0.0': {}, |
| 849 'a 1.1.0': {}, | 850 'a 1.1.0': {}, |
| 850 'a 2.0.0-dev': {}, | 851 'a 2.0.0-dev': {}, |
| 851 'a 2.0.0': {} | 852 'a 2.0.0': {} |
| 852 }, result: { | 853 }, result: { |
| 853 'myapp from root': '0.0.0', | 854 'myapp from root': '0.0.0', |
| 854 'a': '1.1.0' | 855 'a': '1.1.0' |
| 855 }); | 856 }); |
| 856 } | 857 } |
| 857 | 858 |
| 858 testResolve(description, packages, { | 859 void override() { |
| 859 lockfile, result, FailMatcherBuilder error, int maxTries, | 860 testResolve('chooses best version matching override constraint', { |
| 860 bool useBleedingEdgeSdkVersion}) { | 861 'myapp 0.0.0': { |
| 861 _testResolve(test, description, packages, lockfile: lockfile, result: result, | 862 'a': 'any' |
| 862 error: error, maxTries: maxTries, | 863 }, |
| 864 'a 1.0.0': {}, |
| 865 'a 2.0.0': {}, |
| 866 'a 3.0.0': {} |
| 867 }, overrides: { |
| 868 'a': '<3.0.0' |
| 869 }, result: { |
| 870 'myapp from root': '0.0.0', |
| 871 'a': '2.0.0' |
| 872 }); |
| 873 |
| 874 testResolve('uses override as dependency', { |
| 875 'myapp 0.0.0': {}, |
| 876 'a 1.0.0': {}, |
| 877 'a 2.0.0': {}, |
| 878 'a 3.0.0': {} |
| 879 }, overrides: { |
| 880 'a': '<3.0.0' |
| 881 }, result: { |
| 882 'myapp from root': '0.0.0', |
| 883 'a': '2.0.0' |
| 884 }); |
| 885 |
| 886 testResolve('ignores other constraints on overridden package', { |
| 887 'myapp 0.0.0': { |
| 888 'b': 'any', |
| 889 'c': 'any' |
| 890 }, |
| 891 'a 1.0.0': {}, |
| 892 'a 2.0.0': {}, |
| 893 'a 3.0.0': {}, |
| 894 'b 1.0.0': { |
| 895 'a': '1.0.0' |
| 896 }, |
| 897 'c 1.0.0': { |
| 898 'a': '3.0.0' |
| 899 } |
| 900 }, overrides: { |
| 901 'a': '2.0.0' |
| 902 }, result: { |
| 903 'myapp from root': '0.0.0', |
| 904 'a': '2.0.0', |
| 905 'b': '1.0.0', |
| 906 'c': '1.0.0' |
| 907 }); |
| 908 |
| 909 testResolve('backtracks on overidden package for its constraints', { |
| 910 'myapp 0.0.0': { |
| 911 'shared': '2.0.0' |
| 912 }, |
| 913 'a 1.0.0': { |
| 914 'shared': 'any' |
| 915 }, |
| 916 'a 2.0.0': { |
| 917 'shared': '1.0.0' |
| 918 }, |
| 919 'shared 1.0.0': {}, |
| 920 'shared 2.0.0': {} |
| 921 }, overrides: { |
| 922 'a': '<3.0.0' |
| 923 }, result: { |
| 924 'myapp from root': '0.0.0', |
| 925 'a': '1.0.0', |
| 926 'shared': '2.0.0' |
| 927 }, maxTries: 2); |
| 928 |
| 929 testResolve('override compatible with locked dependency', { |
| 930 'myapp 0.0.0': { |
| 931 'foo': 'any' |
| 932 }, |
| 933 'foo 1.0.0': { 'bar': '1.0.0' }, |
| 934 'foo 1.0.1': { 'bar': '1.0.1' }, |
| 935 'foo 1.0.2': { 'bar': '1.0.2' }, |
| 936 'bar 1.0.0': {}, |
| 937 'bar 1.0.1': {}, |
| 938 'bar 1.0.2': {} |
| 939 }, lockfile: { |
| 940 'foo': '1.0.1' |
| 941 }, overrides: { |
| 942 'foo': '<1.0.2' |
| 943 }, result: { |
| 944 'myapp from root': '0.0.0', |
| 945 'foo': '1.0.1', |
| 946 'bar': '1.0.1' |
| 947 }); |
| 948 |
| 949 testResolve('override incompatible with locked dependency', { |
| 950 'myapp 0.0.0': { |
| 951 'foo': 'any' |
| 952 }, |
| 953 'foo 1.0.0': { 'bar': '1.0.0' }, |
| 954 'foo 1.0.1': { 'bar': '1.0.1' }, |
| 955 'foo 1.0.2': { 'bar': '1.0.2' }, |
| 956 'bar 1.0.0': {}, |
| 957 'bar 1.0.1': {}, |
| 958 'bar 1.0.2': {} |
| 959 }, lockfile: { |
| 960 'foo': '1.0.1' |
| 961 }, overrides: { |
| 962 'foo': '>1.0.1' |
| 963 }, result: { |
| 964 'myapp from root': '0.0.0', |
| 965 'foo': '1.0.2', |
| 966 'bar': '1.0.2' |
| 967 }); |
| 968 |
| 969 testResolve('no version that matches override', { |
| 970 'myapp 0.0.0': {}, |
| 971 'foo 2.0.0': {}, |
| 972 'foo 2.1.3': {} |
| 973 }, overrides: { |
| 974 'foo': '>=1.0.0 <2.0.0' |
| 975 }, error: noVersion(['myapp'])); |
| 976 |
| 977 testResolve('override a bad source without error', { |
| 978 'myapp 0.0.0': { |
| 979 'foo from bad': 'any' |
| 980 }, |
| 981 'foo 0.0.0': {} |
| 982 }, overrides: { |
| 983 'foo': 'any' |
| 984 }, result: { |
| 985 'myapp from root': '0.0.0', |
| 986 'foo': '0.0.0' |
| 987 }); |
| 988 } |
| 989 |
| 990 testResolve(String description, Map packages, { |
| 991 Map lockfile, Map overrides, Map result, FailMatcherBuilder error, |
| 992 int maxTries, bool useBleedingEdgeSdkVersion}) { |
| 993 _testResolve(test, description, packages, lockfile: lockfile, |
| 994 overrides: overrides, result: result, error: error, maxTries: maxTries, |
| 863 useBleedingEdgeSdkVersion: useBleedingEdgeSdkVersion); | 995 useBleedingEdgeSdkVersion: useBleedingEdgeSdkVersion); |
| 864 } | 996 } |
| 865 | 997 |
| 866 solo_testResolve(description, packages, { | 998 solo_testResolve(String description, Map packages, { |
| 867 lockfile, result, FailMatcherBuilder error, int maxTries, | 999 Map lockfile, Map overrides, Map result, FailMatcherBuilder error, |
| 868 bool useBleedingEdgeSdkVersion}) { | 1000 int maxTries, bool useBleedingEdgeSdkVersion}) { |
| 869 log.showSolver(); | 1001 log.showSolver(); |
| 870 _testResolve(solo_test, description, packages, lockfile: lockfile, | 1002 _testResolve(solo_test, description, packages, lockfile: lockfile, |
| 871 result: result, error: error, maxTries: maxTries, | 1003 overrides: overrides, result: result, error: error, maxTries: maxTries, |
| 872 useBleedingEdgeSdkVersion: useBleedingEdgeSdkVersion); | 1004 useBleedingEdgeSdkVersion: useBleedingEdgeSdkVersion); |
| 873 } | 1005 } |
| 874 | 1006 |
| 875 _testResolve(void testFn(String description, Function body), | 1007 _testResolve(void testFn(String description, Function body), |
| 876 description, packages, { | 1008 String description, Map packages, { |
| 877 lockfile, result, FailMatcherBuilder error, int maxTries, | 1009 Map lockfile, Map overrides, Map result, FailMatcherBuilder error, |
| 878 bool useBleedingEdgeSdkVersion}) { | 1010 int maxTries, bool useBleedingEdgeSdkVersion}) { |
| 879 if (maxTries == null) maxTries = 1; | 1011 if (maxTries == null) maxTries = 1; |
| 880 if (useBleedingEdgeSdkVersion == null) useBleedingEdgeSdkVersion = false; | 1012 if (useBleedingEdgeSdkVersion == null) useBleedingEdgeSdkVersion = false; |
| 881 | 1013 |
| 882 testFn(description, () { | 1014 testFn(description, () { |
| 883 var cache = new SystemCache('.'); | 1015 var cache = new SystemCache('.'); |
| 884 source1 = new MockSource('mock1'); | 1016 source1 = new MockSource('mock1'); |
| 885 source2 = new MockSource('mock2'); | 1017 source2 = new MockSource('mock2'); |
| 886 cache.register(source1); | 1018 cache.register(source1); |
| 887 cache.register(source2); | 1019 cache.register(source2); |
| 888 cache.sources.setDefault(source1.name); | 1020 cache.sources.setDefault(source1.name); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 916 // Parse the lockfile. | 1048 // Parse the lockfile. |
| 917 var realLockFile = new LockFile.empty(); | 1049 var realLockFile = new LockFile.empty(); |
| 918 if (lockfile != null) { | 1050 if (lockfile != null) { |
| 919 lockfile.forEach((name, version) { | 1051 lockfile.forEach((name, version) { |
| 920 version = new Version.parse(version); | 1052 version = new Version.parse(version); |
| 921 realLockFile.packages[name] = | 1053 realLockFile.packages[name] = |
| 922 new PackageId(name, source1.name, version, name); | 1054 new PackageId(name, source1.name, version, name); |
| 923 }); | 1055 }); |
| 924 } | 1056 } |
| 925 | 1057 |
| 1058 // Parse the overrides. |
| 1059 var realOverrides = []; |
| 1060 if (overrides != null) { |
| 1061 overrides.forEach((spec, constraint) { |
| 1062 realOverrides.add(parseSpec(spec).withConstraint( |
| 1063 new VersionConstraint.parse(constraint))); |
| 1064 }); |
| 1065 } |
| 1066 |
| 926 // Make a version number like the continuous build's version. | 1067 // Make a version number like the continuous build's version. |
| 927 var previousVersion = sdk.version; | 1068 var previousVersion = sdk.version; |
| 928 if (useBleedingEdgeSdkVersion) { | 1069 if (useBleedingEdgeSdkVersion) { |
| 929 sdk.version = new Version(0, 1, 2, build: '0_r12345_juser'); | 1070 sdk.version = new Version(0, 1, 2, build: '0_r12345_juser'); |
| 930 } | 1071 } |
| 931 | 1072 |
| 932 // Resolve the versions. | 1073 // Resolve the versions. |
| 933 var future = resolveVersions(cache.sources, root, | 1074 var future = resolveVersions(cache.sources, root, |
| 934 lockFile: realLockFile); | 1075 lockFile: realLockFile, overrides: realOverrides); |
| 935 | 1076 |
| 936 var matcher; | 1077 var matcher; |
| 937 if (result != null) { | 1078 if (result != null) { |
| 938 matcher = new SolveSuccessMatcher(result, maxTries); | 1079 matcher = new SolveSuccessMatcher(result, maxTries); |
| 939 } else if (error != null) { | 1080 } else if (error != null) { |
| 940 matcher = error(maxTries); | 1081 matcher = error(maxTries); |
| 941 } | 1082 } |
| 942 | 1083 |
| 943 future = future.whenComplete(() { | 1084 future = future.whenComplete(() { |
| 944 if (useBleedingEdgeSdkVersion) { | 1085 if (useBleedingEdgeSdkVersion) { |
| (...skipping 320 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1265 } | 1406 } |
| 1266 | 1407 |
| 1267 var source = "mock1"; | 1408 var source = "mock1"; |
| 1268 if (match[7] != null) { | 1409 if (match[7] != null) { |
| 1269 source = match[7]; | 1410 source = match[7]; |
| 1270 if (source == "root") source = null; | 1411 if (source == "root") source = null; |
| 1271 } | 1412 } |
| 1272 | 1413 |
| 1273 return new PackageId(name, source, parsedVersion, description); | 1414 return new PackageId(name, source, parsedVersion, description); |
| 1274 } | 1415 } |
| OLD | NEW |