Skip to content

Commit 169e4fa

Browse files
author
Miguel Perez
committed
Added tests for swift package create
1 parent ad06f60 commit 169e4fa

File tree

3 files changed

+171
-1
lines changed

3 files changed

+171
-1
lines changed

Tests/CommandsTests/PackageToolTests.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -608,7 +608,7 @@ final class PackageToolTests: XCTestCase {
608608
try XCTSkipIf(InitPackage.createPackageMode == .legacy)
609609
let result = try SwiftPMProduct.SwiftPackage.executeProcess(["create"])
610610
let stderrOutput = try result.utf8stderrOutput()
611-
XCTAssert(stderrOutput.contains("error: Missing expected argument '<package-name>'"), #"actual: "\#(stderrOutput)""#)
611+
XCTAssert(stderrOutput.contains("Error: Missing expected argument '<package-name>'"), #"actual: "\#(stderrOutput)""#)
612612
}
613613

614614
func testPackageEditAndUnedit() {
Lines changed: 167 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,167 @@
1+
/*
2+
This source file is part of the Swift.org open source project
3+
4+
Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors
5+
Licensed under Apache License v2.0 with Runtime Library Exception
6+
7+
See http://swift.org/LICENSE.txt for license information
8+
See http://swift.org/CONTRIBUTORS.txt for Swift project authors
9+
*/
10+
11+
import XCTest
12+
import SPMTestSupport
13+
import TSCBasic
14+
import PackageModel
15+
import Workspace
16+
17+
class CreateTests: XCTestCase {
18+
19+
func testCreatePackageExecutable() throws {
20+
try XCTSkipIf(InitPackage.createPackageMode == .legacy)
21+
try testWithTemporaryDirectory { tmpPath in
22+
let fs = localFileSystem
23+
let path = tmpPath.appending(component: "Foo")
24+
let configPath = path.appending(components: "templates", "new-package")
25+
26+
// Create the package
27+
let initPackage = try InitPackage(fileSystem: fs,
28+
configPath: configPath,
29+
destinationPath: path,
30+
mode: .create,
31+
packageName: path.basename,
32+
packageType: .executable,
33+
packageTemplateName: nil)
34+
35+
var progressMessages = [String]()
36+
initPackage.progressReporter = { message in
37+
progressMessages.append(message)
38+
}
39+
try initPackage.makePackage()
40+
41+
// Not picky about the specific progress messages, just checking that we got some.
42+
XCTAssert(progressMessages.count > 0)
43+
44+
// Verify basic file system content that we expect in the package
45+
let manifest = path.appending(component: "Package.swift")
46+
XCTAssertTrue(fs.exists(manifest))
47+
let manifestContents = try localFileSystem.readFileContents(manifest).description
48+
let version = "\(InitPackage.newPackageToolsVersion.major).\(InitPackage.newPackageToolsVersion.minor)"
49+
XCTAssertTrue(manifestContents.hasPrefix("// swift-tools-version:\(version)\n"))
50+
51+
let readme = path.appending(component: "README.md")
52+
XCTAssertTrue(fs.exists(readme))
53+
let readmeContents = try localFileSystem.readFileContents(readme).description
54+
XCTAssertTrue(readmeContents.hasPrefix("# Foo\n"))
55+
56+
XCTAssertEqual(try fs.getDirectoryContents(path.appending(component: "Sources")), ["main.swift"])
57+
58+
// If we have a compiler that supports `-entry-point-function-name`, we try building it (we need that flag now).
59+
if (Resources.default.swiftCompilerSupportsRenamingMainSymbol) {
60+
XCTAssertBuilds(path)
61+
let triple = Resources.default.toolchain.triple
62+
let binPath = path.appending(components: ".build", triple.tripleString, "debug")
63+
XCTAssertFileExists(binPath.appending(component: "Foo"))
64+
XCTAssertFileExists(binPath.appending(components: "Foo.swiftmodule"))
65+
}
66+
}
67+
}
68+
69+
func testCreatePackageLibrary() throws {
70+
try XCTSkipIf(InitPackage.createPackageMode == .legacy)
71+
try testWithTemporaryDirectory { tmpPath in
72+
let fs = localFileSystem
73+
let path = tmpPath.appending(component: "Foo")
74+
let configPath = path.appending(components: "templates", "new-package")
75+
let name = path.basename
76+
77+
// Create the package
78+
let initPackage = try InitPackage(fileSystem: fs,
79+
configPath: configPath,
80+
destinationPath: path,
81+
mode: .create,
82+
packageName: name,
83+
packageType: .library,
84+
packageTemplateName: nil)
85+
86+
var progressMessages = [String]()
87+
initPackage.progressReporter = { message in
88+
progressMessages.append(message)
89+
}
90+
try initPackage.makePackage()
91+
92+
// Not picky about the specific progress messages, just checking that we got some.
93+
XCTAssert(progressMessages.count > 0)
94+
95+
// Verify basic file system content that we expect in the package
96+
let manifest = path.appending(component: "Package.swift")
97+
XCTAssertTrue(fs.exists(manifest))
98+
let manifestContents = try localFileSystem.readFileContents(manifest).description
99+
let version = "\(InitPackage.newPackageToolsVersion.major).\(InitPackage.newPackageToolsVersion.minor)"
100+
XCTAssertTrue(manifestContents.hasPrefix("// swift-tools-version:\(version)\n"))
101+
102+
let readme = path.appending(component: "README.md")
103+
XCTAssertTrue(fs.exists(readme))
104+
let readmeContents = try localFileSystem.readFileContents(readme).description
105+
XCTAssertTrue(readmeContents.hasPrefix("# Foo\n"))
106+
107+
XCTAssertEqual(try fs.getDirectoryContents(path.appending(component: "Sources")), ["Foo.swift"])
108+
109+
// Try building it
110+
XCTAssertBuilds(path)
111+
let triple = Resources.default.toolchain.triple
112+
XCTAssertFileExists(path.appending(components: ".build", triple.tripleString, "debug", "Foo.swiftmodule"))
113+
}
114+
}
115+
116+
func testCreatePackageSystemModule() throws {
117+
try XCTSkipIf(InitPackage.createPackageMode == .legacy)
118+
try testWithTemporaryDirectory { tmpPath in
119+
let fs = localFileSystem
120+
let path = tmpPath.appending(component: "Foo")
121+
let configPath = path.appending(components: "templates", "new-package")
122+
let name = path.basename
123+
124+
125+
// Create the package
126+
let initPackage = try InitPackage(fileSystem: fs,
127+
configPath: configPath,
128+
destinationPath: path,
129+
mode: .create,
130+
packageName: name,
131+
packageType: .systemModule,
132+
packageTemplateName: nil)
133+
134+
var progressMessages = [String]()
135+
initPackage.progressReporter = { message in
136+
progressMessages.append(message)
137+
}
138+
try initPackage.makePackage()
139+
140+
// Not picky about the specific progress messages, just checking that we got some.
141+
XCTAssert(progressMessages.count > 0)
142+
143+
// Verify basic file system content that we expect in the package
144+
let manifest = path.appending(component: "Package.swift")
145+
XCTAssertTrue(fs.exists(manifest))
146+
let manifestContents = try localFileSystem.readFileContents(manifest).description
147+
let version = "\(InitPackage.newPackageToolsVersion.major).\(InitPackage.newPackageToolsVersion.minor)"
148+
XCTAssertTrue(manifestContents.hasPrefix("// swift-tools-version:\(version)\n"))
149+
XCTAssertTrue(manifestContents.contains(packageWithNameAndDependencies(with: name)))
150+
XCTAssert(fs.exists(path.appending(component: "README.md")))
151+
XCTAssert(fs.exists(path.appending(component: "module.modulemap")))
152+
}
153+
}
154+
155+
private func packageWithNameAndDependencies(with name: String) -> String {
156+
return """
157+
let package = Package(
158+
name: "\(name)",
159+
dependencies: [
160+
// Dependencies declare other packages that this package depends on.
161+
// .package(url: /* package url */, from: "1.0.0"),
162+
]
163+
)
164+
"""
165+
}
166+
167+
}

Tests/WorkspaceTests/InitTests.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ class InitTests: XCTestCase {
1919
// MARK: TSCBasic package creation for each package type.
2020

2121
func testInitPackageEmpty() throws {
22+
try XCTSkipIf(InitPackage.createPackageMode == .new)
2223
try testWithTemporaryDirectory { tmpPath in
2324
let fs = localFileSystem
2425
let path = tmpPath.appending(component: "Foo")
@@ -58,6 +59,7 @@ class InitTests: XCTestCase {
5859
}
5960

6061
func testInitPackageExecutable() throws {
62+
try XCTSkipIf(InitPackage.createPackageMode == .new)
6163
try testWithTemporaryDirectory { tmpPath in
6264
let fs = localFileSystem
6365
let path = tmpPath.appending(component: "Foo")
@@ -113,6 +115,7 @@ class InitTests: XCTestCase {
113115
}
114116

115117
func testInitPackageLibrary() throws {
118+
try XCTSkipIf(InitPackage.createPackageMode == .new)
116119
try testWithTemporaryDirectory { tmpPath in
117120
let fs = localFileSystem
118121
let path = tmpPath.appending(component: "Foo")

0 commit comments

Comments
 (0)