- /*******************************************************************************
-
- Tests that don't fit in existing categories
-
- *******************************************************************************/
-
- module dub.test.others;
-
- version (unittest):
-
- import std.algorithm;
- import std.format;
- import dub.test.base;
-
- // https://github.com/dlang/dub/issues/2696
- unittest
- {
- const ValidURL = `git+https://example.com/dlang/dub`;
- // Taken from a commit in the dub repository
- const ValidHash = "54339dff7ce9ec24eda550f8055354f712f15800";
- const Template = `{"name": "%s", "version": "1.0.0", "dependencies": {
- "dep1": { "repository": "%s", "version": "%s" }}}`;
-
- scope dub = new TestDub((scope Filesystem fs) {
- // Invalid URL, valid hash
- fs.writePackageFile("a", "1.0.0", Template.format("a", "git+https://nope.nope", ValidHash));
- // Valid URL, invalid hash
- fs.writePackageFile("b", "1.0.0", Template.format("b", ValidURL, "invalid"));
- // Valid URL, valid hash
- fs.writePackageFile("c", "1.0.0", Template.format("c", ValidURL, ValidHash));
- });
- dub.packageManager.addTestSCMPackage(
- Repository(ValidURL, ValidHash), `{ "name": "dep1" }`);
-
- try
- dub.loadPackage(dub.packageManager.getPackage(PackageName("a"), Version("1.0.0")));
- catch (Exception exc)
- assert(exc.message.canFind("Unable to fetch"));
-
- try
- dub.loadPackage(dub.packageManager.getPackage(PackageName("b"), Version("1.0.0")));
- catch (Exception exc)
- assert(exc.message.canFind("Unable to fetch"));
-
- dub.loadPackage(dub.packageManager.getPackage(PackageName("c"), Version("1.0.0")));
- assert(dub.project.hasAllDependencies());
- assert(dub.project.getDependency("dep1", true), "Missing 'dep1' dependency");
- }
-
- // Test for https://github.com/dlang/dub/pull/2481
- // Make sure packages found with `add-path` take priority.
- unittest
- {
- const AddPathDir = TestDub.Paths.temp ~ "addpath/";
- const BDir = AddPathDir ~ "b/";
- scope dub = new TestDub((scope Filesystem root) {
- root.writeFile(TestDub.ProjectPath ~ "dub.json",
- `{ "name": "a", "dependencies": { "b": "~>1.0" } }`);
-
- root.writePackageFile("b", "1.0.0", `name "b"
- version "1.0.0"`, PackageFormat.sdl);
- root.mkdir(BDir);
- root.writeFile(BDir ~ "dub.json", `{"name": "b", "version": "1.0.0" }`);
- });
-
- dub.loadPackage();
- assert(!dub.project.hasAllDependencies());
- dub.upgrade(UpgradeOptions.select);
- // Test that without add-path, we get a package in the userPackage
- const oldDir = dub.project.getDependency("b", true).path();
- assert(oldDir == TestDub.Paths.userPackages ~ "packages/b/1.0.0/b/",
- oldDir.toNativeString());
- // Now run `add-path`
- dub.addSearchPath(AddPathDir.toNativeString(), dub.defaultPlacementLocation);
- // We need a new instance to test
- scope newDub = dub.newTest();
- newDub.loadPackage();
- assert(newDub.project.hasAllDependencies());
- const actualDir = newDub.project.getDependency("b", true).path();
- assert(actualDir == BDir, actualDir.toNativeString());
- }
-
- // Check that SCM-only dependencies don't lead to a scan of the FS
- unittest
- {
- const ValidURL = `git+https://example.com/dlang/dub`;
- // Taken from a commit in the dub repository
- const ValidHash = "54339dff7ce9ec24eda550f8055354f712f15800";
- const Template = `{"name": "%s", "version": "1.0.0", "dependencies": {
- "dep1": { "repository": "%s", "version": "%s" }}}`;
-
- scope dub = new TestDub((scope Filesystem fs) {
- // This should never be read
- fs.writePackageFile("poison", "1.0.0", `poison`);
- fs.writeFile(TestDub.ProjectPath ~ "dub.json",
- `{ "name": "a", "dependencies": {"b": { "repository": "` ~
- ValidURL ~ `", "version": "` ~ ValidHash ~ `" }} }`);
- });
- dub.packageManager.addTestSCMPackage(
- Repository(ValidURL, ValidHash), `{"name":"b"}`);
-
- dub.loadPackage();
- assert(dub.project.hasAllDependencies());
- }
-
- // Check that a simple build does not lead to the cache being scanned
- unittest
- {
- scope dub = new TestDub((scope Filesystem fs) {
- // This should never be read
- fs.writePackageFile("b", "1.0.0", `poison`);
- fs.writePackageFile("b", "1.1.0", `poison`);
- // Dependency resolution may trigger scan, so we need a selections file
- fs.writeFile(TestDub.ProjectPath ~ "dub.json",
- `{ "name": "a", "dependencies": {"b":"~>1.0"}}`);
- fs.writeFile(TestDub.ProjectPath ~ "dub.selections.json",
- `{"fileVersion":1,"versions":{"b":"1.0.4"}}`);
- fs.writePackageFile("b", "1.0.4", `{"name":"b","version":"1.0.4"}`);
- });
- dub.loadPackage();
- assert(dub.project.hasAllDependencies());
- }