Skip to content

Commit e725aee

Browse files
committed
refactor: allow testing via Xcode
1 parent dc97e80 commit e725aee

File tree

7 files changed

+392
-385
lines changed

7 files changed

+392
-385
lines changed

Tests/CommanderTests/ArgumentConvertibleSpec.swift

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
import Spectre
22
import Commander
33

4-
5-
public func testArgumentConvertible() {
6-
describe("ArgumentError") {
4+
let testArgumentConvertible: ((ContextType) -> Void) = {
5+
$0.describe("ArgumentError") {
76
$0.it("has a human readable description for missing value") {
87
let error = ArgumentError.missingValue(argument: nil)
98
try expect(error.description) == "Missing argument"
@@ -15,7 +14,7 @@ public func testArgumentConvertible() {
1514
}
1615
}
1716

18-
describe("String ArgumentConvertible") {
17+
$0.describe("String ArgumentConvertible") {
1918
$0.it("converts an argument to a string value") {
2019
let parser = ArgumentParser(arguments: ["argument"])
2120
let value = try String(parser: parser)
@@ -29,7 +28,7 @@ public func testArgumentConvertible() {
2928
}
3029
}
3130

32-
describe("Int ArgumentConvertible") {
31+
$0.describe("Int ArgumentConvertible") {
3332
$0.it("converts a valid number as an integer") {
3433
let parser = ArgumentParser(arguments: ["5"])
3534
let value = try Int(parser: parser)
@@ -51,7 +50,7 @@ public func testArgumentConvertible() {
5150
}
5251
}
5352

54-
describe("Float ArgumentConvertible") {
53+
$0.describe("Float ArgumentConvertible") {
5554
$0.it("converts a valid number as an float") {
5655
let parser = ArgumentParser(arguments: ["5"])
5756
let value = try Float(parser: parser)
@@ -73,7 +72,7 @@ public func testArgumentConvertible() {
7372
}
7473
}
7574

76-
describe("Double ArgumentConvertible") {
75+
$0.describe("Double ArgumentConvertible") {
7776
$0.it("converts a valid number as an double") {
7877
let parser = ArgumentParser(arguments: ["5"])
7978
let value = try Double(parser: parser)
@@ -95,7 +94,7 @@ public func testArgumentConvertible() {
9594
}
9695
}
9796

98-
describe("Optional ArgumentConvertible") {
97+
$0.describe("Optional ArgumentConvertible") {
9998
$0.it("converts a valid value as some") {
10099
let parser = ArgumentParser(arguments: ["5"])
101100
let value = try Optional<Double>(parser: parser)

Tests/CommanderTests/ArgumentDescriptionSpec.swift

Lines changed: 82 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -2,111 +2,109 @@ import Spectre
22
@testable import Commander
33

44

5-
public func testArgumentDescription() {
6-
describe("ArgumentDescription") {
7-
$0.describe("Argument") {
8-
$0.describe("parsing") {
9-
$0.it("can parse basic argument") {
10-
let parser = try ArgumentParser(string: "Kyle")
11-
let value = try Argument<String>("name").parse(parser)
12-
try expect(value) == "Kyle"
13-
}
5+
let testArgumentDescription: ((ContextType) -> Void) = {
6+
$0.describe("Argument") {
7+
$0.describe("parsing") {
8+
$0.it("can parse basic argument") {
9+
let parser = try ArgumentParser(string: "Kyle")
10+
let value = try Argument<String>("name").parse(parser)
11+
try expect(value) == "Kyle"
12+
}
1413

15-
$0.it("can parse varadic argument") {
16-
let parser = ArgumentParser(arguments: ["Kyle", "K2"])
17-
let value = try Argument<[String]>("name").parse(parser)
18-
try expect(value) == ["Kyle", "K2"]
19-
}
14+
$0.it("can parse varadic argument") {
15+
let parser = ArgumentParser(arguments: ["Kyle", "K2"])
16+
let value = try Argument<[String]>("name").parse(parser)
17+
try expect(value) == ["Kyle", "K2"]
18+
}
2019

21-
$0.it("can parse optional argument") {
22-
let parser = ArgumentParser(arguments: ["Kyle"])
23-
let value = try Argument<String?>("name").parse(parser)
24-
try expect(value) == "Kyle"
25-
}
20+
$0.it("can parse optional argument") {
21+
let parser = ArgumentParser(arguments: ["Kyle"])
22+
let value = try Argument<String?>("name").parse(parser)
23+
try expect(value) == "Kyle"
24+
}
2625

27-
$0.it("can parse missing optional argument") {
28-
let parser = ArgumentParser(arguments: [])
29-
let value = try Argument<String?>("name").parse(parser)
30-
try expect(value).to.beNil()
31-
}
26+
$0.it("can parse missing optional argument") {
27+
let parser = ArgumentParser(arguments: [])
28+
let value = try Argument<String?>("name").parse(parser)
29+
try expect(value).to.beNil()
3230
}
3331
}
32+
}
3433

35-
$0.describe("Option") {
36-
$0.describe("parsing") {
37-
$0.it("can parse option") {
38-
let parser = ArgumentParser(arguments: ["--port", "6697"])
39-
let value = try Option("port", default: 6667).parse(parser)
40-
try expect(value) == 6697
41-
}
34+
$0.describe("Option") {
35+
$0.describe("parsing") {
36+
$0.it("can parse option") {
37+
let parser = ArgumentParser(arguments: ["--port", "6697"])
38+
let value = try Option("port", default: 6667).parse(parser)
39+
try expect(value) == 6697
40+
}
4241

43-
$0.it("can parse missing option as default") {
44-
let parser = ArgumentParser(arguments: [])
45-
let value = try Option("port", default: 6667).parse(parser)
46-
try expect(value) == 6667
47-
}
42+
$0.it("can parse missing option as default") {
43+
let parser = ArgumentParser(arguments: [])
44+
let value = try Option("port", default: 6667).parse(parser)
45+
try expect(value) == 6667
46+
}
4847

49-
$0.it("can parse optional option") {
50-
let parser = ArgumentParser(arguments: [])
51-
let value = try Option<Int?>("port", default: nil).parse(parser)
52-
try expect(value).to.beNil()
53-
}
48+
$0.it("can parse optional option") {
49+
let parser = ArgumentParser(arguments: [])
50+
let value = try Option<Int?>("port", default: nil).parse(parser)
51+
try expect(value).to.beNil()
5452
}
5553
}
54+
}
5655

57-
$0.describe("help") {
58-
$0.it("shows arguments") {
59-
let help = Help([
60-
BoxedArgumentDescriptor(value: Argument<String>("arg1")),
61-
BoxedArgumentDescriptor(value: Argument<String>("arg2", description: "an example")),
62-
])
56+
$0.describe("help") {
57+
$0.it("shows arguments") {
58+
let help = Help([
59+
BoxedArgumentDescriptor(value: Argument<String>("arg1")),
60+
BoxedArgumentDescriptor(value: Argument<String>("arg2", description: "an example")),
61+
])
6362

64-
try expect(help.description) == "Arguments:\n\n arg1\n arg2 - an example\n"
65-
try expect(help.ansiDescription) == "Arguments:\n\n \(ANSI.blue)arg1\(ANSI.reset)\n \(ANSI.blue)arg2\(ANSI.reset) - an example\n"
66-
}
63+
try expect(help.description) == "Arguments:\n\n arg1\n arg2 - an example\n"
64+
try expect(help.ansiDescription) == "Arguments:\n\n \(ANSI.blue)arg1\(ANSI.reset)\n \(ANSI.blue)arg2\(ANSI.reset) - an example\n"
65+
}
6766

68-
$0.it("shows options") {
69-
let help = Help([
70-
BoxedArgumentDescriptor(value: Option("opt1", default: "example")),
71-
BoxedArgumentDescriptor(value: Flag("flag1", description: "an example")),
72-
BoxedArgumentDescriptor(value: Flag("flag2", default: true)),
73-
])
67+
$0.it("shows options") {
68+
let help = Help([
69+
BoxedArgumentDescriptor(value: Option("opt1", default: "example")),
70+
BoxedArgumentDescriptor(value: Flag("flag1", description: "an example")),
71+
BoxedArgumentDescriptor(value: Flag("flag2", default: true)),
72+
])
7473

75-
try expect(help.description) == "Options:\n --opt1 [default: example]\n --flag1 [default: false] - an example\n --flag2 [default: true]"
76-
try expect(help.ansiDescription) == "Options:\n \(ANSI.blue)--opt1\(ANSI.reset) [default: example]\n \(ANSI.blue)--flag1\(ANSI.reset) [default: false] - an example\n \(ANSI.blue)--flag2\(ANSI.reset) [default: true]"
77-
}
74+
try expect(help.description) == "Options:\n --opt1 [default: example]\n --flag1 [default: false] - an example\n --flag2 [default: true]"
75+
try expect(help.ansiDescription) == "Options:\n \(ANSI.blue)--opt1\(ANSI.reset) [default: example]\n \(ANSI.blue)--flag1\(ANSI.reset) [default: false] - an example\n \(ANSI.blue)--flag2\(ANSI.reset) [default: true]"
76+
}
7877

79-
$0.it("shows default for custom types conforming to CustomStringConvertible") {
80-
enum Direction: String, CustomStringConvertible, ArgumentConvertible {
81-
case north
82-
case south
83-
84-
public init(parser: ArgumentParser) throws {
85-
if let value = parser.shift() {
86-
switch value {
87-
case "north":
88-
self = .north
89-
case "south":
90-
self = .south
91-
default:
92-
throw ArgumentError.invalidType(value: value, type: "direction", argument: nil)
93-
}
94-
} else {
95-
throw ArgumentError.missingValue(argument: nil)
78+
$0.it("shows default for custom types conforming to CustomStringConvertible") {
79+
enum Direction: String, CustomStringConvertible, ArgumentConvertible {
80+
case north
81+
case south
82+
83+
public init(parser: ArgumentParser) throws {
84+
if let value = parser.shift() {
85+
switch value {
86+
case "north":
87+
self = .north
88+
case "south":
89+
self = .south
90+
default:
91+
throw ArgumentError.invalidType(value: value, type: "direction", argument: nil)
9692
}
93+
} else {
94+
throw ArgumentError.missingValue(argument: nil)
9795
}
96+
}
9897

99-
var description: String {
100-
return rawValue
101-
}
98+
var description: String {
99+
return rawValue
102100
}
101+
}
103102

104-
let help = Help([
105-
BoxedArgumentDescriptor(value: Option("direction", default: Direction.south)),
106-
])
103+
let help = Help([
104+
BoxedArgumentDescriptor(value: Option("direction", default: Direction.south)),
105+
])
107106

108-
try expect(help.description) == "Options:\n --direction [default: south]"
109-
}
107+
try expect(help.description) == "Options:\n --direction [default: south]"
110108
}
111109
}
112110
}

0 commit comments

Comments
 (0)