No problem, it's been inactive for a couple weeks since I've been really busy. 
And yeah, yours is more thorough. I didn't even consider adding a `testTargets` 
section. That alone is worth merging.

-thislooksfun (tlf)

> On Jan 24, 2017, at 11:55 PM, Robert Widmann <devteam.cod...@gmail.com> wrote:
> 
> Oh, I'm sorry.  I didn't know there was existing work in this space.  
> Considering this proposal looks like it expands on your earlier work, would 
> you like to sign on to this and merge the two efforts?
> 
> ~Robert Widmann
> 
> 2017/01/25 0:47、thislooksfun <thislooks...@repbot.org 
> <mailto:thislooks...@repbot.org>> のメッセージ:
> 
>> As the author of the Add support for test-only dependencies 
>> <https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20161226/029720.html>
>>  thread, and the accompanying draft 
>> <https://lists.swift.org/pipermail/swift-build-dev/Week-of-Mon-20170102/000811.html>,
>>  this gets a big +1 from me.
>> 
>> -thislooksfun (tlf)
>> 
>>> On Jan 24, 2017, at 4:32 PM, Robert Widmann via swift-evolution 
>>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>>> 
>>> Hello Swift Community,
>>> 
>>> Harlan Haskins and I have been working on libraries 
>>> <https://github.com/trill-lang> to make interacting with LLVM and Clang’s 
>>> APIs more elegant with native Swift interfaces.  While writing up the 
>>> packages we realized the package manager wouldn’t allow us to specify 
>>> testing targets and test-only dependencies.  To rectify that, I have 
>>> attached a draft proposal for adding test-only targets and dependency 
>>> fields to the Swift Package manager.  This proposal can also be read in 
>>> gist form <https://gist.github.com/CodaFi/6bd83e5315c7d30aeaf4154ed3b03a38>.
>>> 
>>> Cheers,
>>> 
>>> ~Robert Widmann
>>> 
>>> Test-Only Package Dependencies and Targets
>>> 
>>> Proposal: SE-NNNN <https://gist.github.com/CodaFi/NNNN-filename.md>
>>> Authors: Harlan Haskins <https://github.com/harlanhaskins>, Robert Widmann 
>>> <https://github.com/codafi>
>>> Review Manager: TBD
>>> Status: Awaiting review
>>>  
>>> <https://gist.github.com/CodaFi/6bd83e5315c7d30aeaf4154ed3b03a38#introduction>Introduction
>>> 
>>> This proposal reinstates Swift package manager’s ability to fetch 
>>> dependencies and build targets scoped exclusively to the testing module(s) 
>>> of a given package.
>>> 
>>> Swift-evolution thread: Discussion thread topic for that proposal 
>>> <https://lists.swift.org/pipermail/swift-evolution/>
>>>  
>>> <https://gist.github.com/CodaFi/6bd83e5315c7d30aeaf4154ed3b03a38#motivation>Motivation
>>> 
>>> Soon after SE-0019 
>>> <https://github.com/apple/swift-evolution/blob/master/proposals/0019-package-manager-testing.md#test-only-dependencies>
>>>  identified the need for richer test-only dependencies and targets, a 
>>> decision was made to remove the package manager’s fledgling ability to 
>>> treat certain dependencies as test-only. This has led to a myriad of 
>>> clever-but-needlessly-complex workarounds ([1] 
>>> <https://github.com/ReactiveCocoa/ReactiveSwift/blob/master/.travis.yml#L85>,
>>>  [2] <https://github.com/ReactiveX/RxSwift/blob/master/Package.swift#L3>, 
>>> [3] <https://github.com/Quick/Quick/blob/master/.Package.test.swift>) on 
>>> the part of 3rd parties to recover the feature themselves. In addition, the 
>>> Swift community has come up with a number of their own frameworks to 
>>> augment functionality in XCTest but depending on these external testing 
>>> frameworks is brittle and difficult to get right.
>>> 
>>>  
>>> <https://gist.github.com/CodaFi/6bd83e5315c7d30aeaf4154ed3b03a38#proposed-solution>Proposed
>>>  solution
>>> 
>>> We propose the re-introduction of the testDependencies parameter in Package 
>>> Manifests to support external test-only dependencies. To support local 
>>> test-only targets we also propose the introduction of the testTargets 
>>> parameter and an extension of the existing swift test command to support 
>>> individual invocation of these targets.
>>> 
>>>  
>>> <https://gist.github.com/CodaFi/6bd83e5315c7d30aeaf4154ed3b03a38#detailed-design>Detailed
>>>  design
>>> 
>>> The behavior of the new testDependencies parameter mirrors that of the 
>>> existing dependencies parameter with one important difference: fetched 
>>> dependencies are only built to support package-defined test targets as part 
>>> of an invocation of swift test.
>>> 
>>> import PackageDescription
>>> 
>>> let package = Package(
>>>     name: "Foo",
>>>     targets: [
>>>         Target(name: "Foo")
>>>     ],
>>>     dependencies: [
>>>         .Package(url: "https://github.com/org/ana.git 
>>> <https://github.com/org/ana.git>", versions: 
>>> Version(1,0,0)...Version(1,9,9)),
>>>     ],
>>>     testDependencies: [
>>>         .Package(url: "https://github.com/org/anism.git 
>>> <https://github.com/org/anism.git>", versions: 
>>> Version(1,0,0)...Version(1,9,9)),
>>>     ]
>>> )
>>> Similarly, the behavior of the testTargets field mirrors that of the 
>>> existing targets field but defines a set of targets that are only built 
>>> during an invocation of swift test. Importantly, a target defined in 
>>> testTargets may reference a target defined in targets but not vice-versa. 
>>> Should that behavior be needed, the test target should be promoted to a 
>>> “full” target.
>>> 
>>> import PackageDescription
>>> 
>>> let package = Package(
>>>     name: "SwiftPM",
>>>     targets: [
>>>         Target(
>>>             name: "PackageDescription",
>>>             dependencies: []),
>>> 
>>>         // MARK: Support libraries
>>> 
>>>         Target(
>>>             /** Cross-platform access to bare `libc` functionality. */
>>>             name: "libc",
>>>             dependencies: []),
>>>         Target(
>>>             /** “Swifty” POSIX functions from libc */
>>>             name: "POSIX",
>>>             dependencies: ["libc"]),
>>>         Target(
>>>             /** Basic support library */
>>>             name: "Basic",
>>>             dependencies: ["libc", "POSIX"]),
>>> 
>>>         /* Omitted for Brevity */
>>>      ],
>>>      testTargets: [
>>>         Target(
>>>             name: "BasicPerformanceTests",
>>>             dependencies: ["Basic"]),
>>>        /* Omitted for Brevity */
>>>      ]
>>>  )
>>> Finally, with well-defined test targets in hand, we propose swift test be 
>>> amended to support individual test execution.
>>> 
>>> We propose the following syntax to execute all tests of all known test 
>>> targets.
>>> 
>>> $ swift test
>>> To run a set of specific test cases, reference the module-defining test 
>>> target and the specific name of a subclass of XCTestCase:
>>> 
>>> $ swift test TestModule.TestCase
>>> To run an individual test case, reference the module-defining test target, 
>>> the name of the test case subclass, and the name of the test:
>>> 
>>> $ swift test TestModule.TestCase.exampleTest
>>>  
>>> <https://gist.github.com/CodaFi/6bd83e5315c7d30aeaf4154ed3b03a38#impact-on-existing-code>Impact
>>>  on Existing Code
>>> 
>>> As this change is purely additive there will be no impact on existing code 
>>> and no impact on existing packages.
>>> 
>>>  
>>> <https://gist.github.com/CodaFi/6bd83e5315c7d30aeaf4154ed3b03a38#alternatives-considered>Alternatives
>>>  considered
>>> 
>>> Other names for the parameters to be added to the package manifest are 
>>> possible.
>>> 
>>> The new support for executing specific tests could be exposed behind a flag.
>>> _______________________________________________
>>> swift-evolution mailing list
>>> swift-evolution@swift.org <mailto:swift-evolution@swift.org>
>>> https://lists.swift.org/mailman/listinfo/swift-evolution 
>>> <https://lists.swift.org/mailman/listinfo/swift-evolution>
>> 

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to