137 lines
2.5 KiB
Swift
137 lines
2.5 KiB
Swift
@testable import CliDocCore
|
|
@preconcurrency import Rainbow
|
|
import Testing
|
|
|
|
@Suite("CliDocCore Tests")
|
|
struct CliDocCoreTests {
|
|
// Ensure that rainbow is setup, for test comparisons to work properly.
|
|
let setupRainbow: Bool = {
|
|
Rainbow.enabled = true
|
|
Rainbow.outputTarget = .console
|
|
return true
|
|
}()
|
|
|
|
@Test
|
|
func testGroup() {
|
|
#expect(setupRainbow)
|
|
let group = Group {
|
|
"foo"
|
|
"bar"
|
|
if setupRainbow {
|
|
"baz".color(.blue)
|
|
}
|
|
}
|
|
#expect(group.render() == "foobar\("baz".blue)")
|
|
}
|
|
|
|
@Test
|
|
func testHStack() {
|
|
#expect(setupRainbow)
|
|
let stack = HStack {
|
|
"foo"
|
|
"bar"
|
|
}
|
|
#expect(stack.render() == "foo bar")
|
|
}
|
|
|
|
@Test
|
|
func testVStack() {
|
|
#expect(setupRainbow)
|
|
let stack = VStack {
|
|
"foo"
|
|
"bar"
|
|
}
|
|
#expect(stack.render() == """
|
|
foo
|
|
bar
|
|
""")
|
|
}
|
|
|
|
@Test
|
|
func testOptionalTextNode() {
|
|
let someNode = String?.some("string")
|
|
#expect(someNode.body.render() == "string")
|
|
#expect(someNode.render() == "string")
|
|
|
|
let noneNode = String?.none
|
|
#expect(noneNode.body.render() == "")
|
|
#expect(noneNode.render() == "")
|
|
}
|
|
|
|
@Test
|
|
func testArrayTextNode() {
|
|
let array = ["foo", " ", "bar"]
|
|
#expect(array.body.render() == "foo bar")
|
|
#expect(array.render() == "foo bar")
|
|
}
|
|
|
|
@Test(
|
|
arguments: SectionArg.arguments
|
|
)
|
|
func testSection(arg: SectionArg) {
|
|
#expect(setupRainbow)
|
|
printIfNotEqual(arg.section.render(), arg.expected)
|
|
#expect(arg.section.render() == arg.expected)
|
|
}
|
|
|
|
struct SectionArg: @unchecked Sendable {
|
|
let section: any TextNode
|
|
let expected: String
|
|
|
|
static var arguments: [Self] {
|
|
[
|
|
.init(
|
|
section: Section {
|
|
"Content"
|
|
} header: {
|
|
"Header"
|
|
} footer: {
|
|
"Footer"
|
|
},
|
|
expected: """
|
|
Header
|
|
|
|
Content
|
|
|
|
Footer
|
|
"""
|
|
),
|
|
.init(
|
|
section: Section {
|
|
"Content"
|
|
} footer: {
|
|
"Footer"
|
|
},
|
|
expected: """
|
|
Content
|
|
|
|
Footer
|
|
"""
|
|
),
|
|
.init(
|
|
section: Section {
|
|
"Content"
|
|
} header: {
|
|
"Header"
|
|
},
|
|
expected: """
|
|
Header
|
|
|
|
Content
|
|
"""
|
|
)
|
|
]
|
|
}
|
|
}
|
|
}
|
|
|
|
@discardableResult
|
|
func printIfNotEqual(_ lhs: String, _ rhs: String) -> Bool {
|
|
guard lhs == rhs else {
|
|
print(lhs)
|
|
print(rhs)
|
|
return false
|
|
}
|
|
return true
|
|
}
|