On Sunday, 28 March 2021 at 15:52:43 UTC, Zardoz wrote:
So, we get this dub.json :

{
  "name": "example",
  "configurations": [
    {
      "name": "example",
      "targetType": "library"
    },
    {
      "name": "unittest",
      "targetType": "library",
      "importPaths": ["source", "tests"],
      "sourcePaths": ["source", "tests"],
      "dependencies": {
        "silly": "~>1.0.2",
        "dshould": "~>1.4.3"
      }
    }
  ]
}

Where "dshould have a dependency to unit-threaded marked as "optional", and not have any "default" set to true. DUB documentation says that the proyect not must pick the optional dependency if I not edit manualy dub.selections.json to pick unit-threaded.

Well.. DUB ignores and picks unit-threaded as I can show here :

$ dub build
Performing "debug" build using /usr/bin/dmd for x86_64.
sybok ~master: building configuration "sybok"...
$ dub test
Generating test runner configuration 'sybok-test-unittest' for 'unittest' (library).
Performing "unittest" build using /usr/bin/dmd for x86_64.
prettyprint 1.0.7: building configuration "library"...
unit-threaded:from 1.0.14: building configuration "library"...
unit-threaded:exception 1.0.14: building configuration "library"... unit-threaded:assertions 1.0.14: building configuration "library"... unit-threaded:integration 1.0.14: building configuration "library"...
unit-threaded:mocks 1.0.14: building configuration "library"...
unit-threaded:property 1.0.14: building configuration "default"...
unit-threaded:runner 1.0.14: building configuration "library"...
unit-threaded 1.0.14: building configuration "library"...
dshould 1.4.3: building configuration "library"...
sybok ~master: building configuration "sybok-test-unittest"...
Linking...
To force a rebuild of up-to-date targets, run again with --force.
Running ./sybok-test-unittest
 ✓ sybok_spec Sybock test

Summary: 1 passed, 0 failed in 0 ms

And dub.selections.json show this :

{
        "fileVersion": 1,
        "versions": {
                "dshould": "1.4.3",
                "prettyprint": "1.0.7",
                "silly": "1.0.2",
                "unit-threaded": "1.0.14"
        }
}

Plus, If edit dub.selections.json to remove unit-threaded , every time that I launch dub test, overwrites dub.selections.json and picks again unit-threaded.

From my point of view, or documentation it's wrong, or there it's something really broken about this functionality.

I think that I can self-answer me. Looks that this related to this : https://github.com/dlang/dub/issues/1706

DUB it's downloading unit-threaded, but not linking against it or using it for run the unit tests. It's more evident if I invert the situation :

If I have this dub.json

{
  "name": "example",
  "configurations": [
    {
      "name": "example",
      "targetType": "library"
    },
    {
      "name": "unittest",
      "targetType": "executable",
- "preBuildCommands": ["$DUB run --compiler=$$DC unit-threaded -c gen_ut_main -- -f bin/ut.d -d $DUB"],
-      "mainSourceFile": "bin/ut.d",
      "importPaths": ["source", "tests"],
      "sourcePaths": ["source", "tests"],
      "dependencies": {
        "unit-threaded": "~>1.0.14",
        "pijamas": "~develop"
      }
    }
  ]
}

Uses unit-threaded runner, as is expected.

If I use this dub.json :

{
  "name": "example",
  "configurations": [
    {
      "name": "v",
      "targetType": "library"
    },
    {
      "name": "unittest",
      "importPaths": ["source", "tests"],
      "sourcePaths": ["source", "tests"],
      "dependencies": {
        "unit-threaded": "~>1.0.14",
        "pijamas": "~develop"
      }
    }
  ]
}

Uses the default unit tests runner and not Silly runner that it's leaked from pijamas (Pijamas uses Silly on a "unittest" config, but DUB downloads Silly, even when this project it's using it.

This behavior should be on DUB's documentation. It's pretty confusing seeing that DUB it's downloading libraries that would never use, and gives the false impression that it's using it.

Reply via email to