We need this.<br><div class="gmail_quote"><div dir="ltr">On Mon, Dec 26, 2016 at 11:57 AM thislooksfun via swift-evolution <<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word" class="gmail_msg"><div class="gmail_msg">(I think this is the right place for this suggestion, but please let me know if I'm mistaken)</div><div class="gmail_msg"><br class="gmail_msg"></div>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.<div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">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.</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">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`</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg"><pre style="color:inherit;margin-top:15px;margin-bottom:15px;font-family:Menlo,Consolas,'Liberation Mono',Courier,monospace;font-size:10pt;border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px;background-color:rgb(248,248,248);border:1px solid rgb(204,204,204);overflow:auto;padding:4px 8px;word-break:normal;word-wrap:normal" class="gmail_msg">// Package.swift
import PackageDescription
let package = Package(
name: "Project",
targets: [
Target(name: "BoxioDebug", dependencies: ["Core"]),
],
dependencies: [
<span class="m_-1314391250065092555Apple-tab-span gmail_msg" style="white-space:pre-wrap">        </span>//Same as before
],
testDependencies: [
.Package(url: "<a href="https://github.com/FooBar/PackageOnlyNeededForTesting.git" class="gmail_msg" target="_blank">https://github.com/FooBar/PackageOnlyNeededForTesting.git</a>", majorVersion: 1),
]
)
</pre><div class="gmail_msg"><br class="m_-1314391250065092555webkit-block-placeholder gmail_msg"></div><div class="gmail_msg">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.</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">This change is purely additive and optional, no existing code needs to change for this to be added.</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">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.</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg"><b class="gmail_msg">Other solutions considered:</b></div><div class="gmail_msg">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.</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">
<div style="color:rgb(0,0,0);letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;word-wrap:break-word" class="gmail_msg"><br class="gmail_msg">-thislooksfun (tlf)</div>
</div>
<br class="gmail_msg"></div></div>_______________________________________________<br class="gmail_msg">
swift-evolution mailing list<br class="gmail_msg">
<a href="mailto:swift-evolution@swift.org" class="gmail_msg" target="_blank">swift-evolution@swift.org</a><br class="gmail_msg">
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" class="gmail_msg" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br class="gmail_msg">
</blockquote></div>