Does anyone else have any thoughts on this, or should I go ahead an assemble a 
PR?

-thislooksfun (tlf)

> On Dec 26, 2016, at 1:56 PM, thislooksfun <[email protected]> wrote:
> 
> (I think this is the right place for this suggestion, but please let me know 
> if I'm mistaken)
> 
> There is currently no supported way to have some dependencies only used for 
> testing (`swift test`), and the workarounds for it, while workable, are 
> unnecessary crude.
> 
> Currently, what a lot of projects are doing is defining a 
> `.Package.test.swift` file that is then copied over `Package.swift` when 
> tests are to be run (on external CI, for example). While this works, it adds 
> a extra step and another point of failure (if you forget to add a new 
> dependency to both `Package` files, for example.
> 
> What I propose is a new section of `Package.swift`, labelled either 
> `testDependencies` or `devDependencies`, and the modules referenced within 
> are only loaded/compiled when running `swift test`
> 
> // Package.swift
> import PackageDescription
> let package = Package(
>     name: "Project",
>     targets: [
>       Target(name: "BoxioDebug", dependencies: ["Core"]),
>     ],
>     dependencies: [
>       //Same as before
>     ],
>     testDependencies: [
>         .Package(url: 
> "https://github.com/FooBar/PackageOnlyNeededForTesting.git 
> <https://github.com/FooBar/PackageOnlyNeededForTesting.git>", majorVersion: 
> 1),
>     ]
> )
> 
> This solves having to manually switch out Package files or `.Package` 
> statements inside one Package file when trying to run tests, and keeps all 
> dependencies neatly organized in one file.
> 
> This change is purely additive and optional, no existing code needs to change 
> for this to be added.
> 
> A real world example is a dependency on Quick (or another such testing 
> framework), that itself uses XCTest, and thus crashes when being run outside 
> of `swift test` (add Quick to Package.swift, run `swift build` and run the 
> compiled binary). With the new `test[dev]Dependencies`, running `swift build` 
> wouldn't even see Quick, and thus would compile and run correctly, but `swift 
> test` would both see and use Quick for running the test suite.
> 
> 
> Other solutions considered:
> Another potential solution is to only compile the dependencies that were 
> actually used when running `swift build`, since that seems to be the cause of 
> the above problem.
> 
> 
> -thislooksfun (tlf)
> 

_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to