Excellent.  I've added your name to the authors list on the gist.  That is the 
version I'll be submitting to evolution soon. 

~Robert Widmann

2017/01/25 0:58、thislooksfun <thislooks...@repbot.org> のメッセージ:

> 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> のメッセージ:
>> 
>>> As the author of the Add support for test-only dependencies thread, and the 
>>> accompanying draft, 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> wrote:
>>>> 
>>>> Hello Swift Community,
>>>> 
>>>> Harlan Haskins and I have been working on libraries 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.
>>>> 
>>>> Cheers,
>>>> 
>>>> ~Robert Widmann
>>>> 
>>>> Test-Only Package Dependencies and Targets
>>>> Proposal: SE-NNNN
>>>> Authors: Harlan Haskins, Robert Widmann
>>>> Review Manager: TBD
>>>> Status: Awaiting review
>>>> 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
>>>> 
>>>> Motivation
>>>> 
>>>> Soon after SE-0019 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], [2], [3]) 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.
>>>> 
>>>> 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.
>>>> 
>>>> 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";, versions: 
>>>> Version(1,0,0)...Version(1,9,9)),
>>>>     ],
>>>>     testDependencies: [
>>>>         .Package(url: "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
>>>> Impact on Existing Code
>>>> 
>>>> As this change is purely additive there will be no impact on existing code 
>>>> and no impact on existing packages.
>>>> 
>>>> 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
>>>> 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