145 lines
4.3 KiB
Swift
145 lines
4.3 KiB
Swift
/**
|
|
* Splash
|
|
* Copyright (c) John Sundell 2018
|
|
* MIT license - see LICENSE.md
|
|
*/
|
|
|
|
import Foundation
|
|
import XCTest
|
|
import Splash
|
|
|
|
final class ClosureTests: SyntaxHighlighterTestCase {
|
|
func testTrailingClosureWithArguments() {
|
|
let components = highlighter.highlight("call() { arg in }")
|
|
|
|
XCTAssertEqual(components, [
|
|
.token("call", .call),
|
|
.plainText("()"),
|
|
.whitespace(" "),
|
|
.plainText("{"),
|
|
.whitespace(" "),
|
|
.plainText("arg"),
|
|
.whitespace(" "),
|
|
.token("in", .keyword),
|
|
.whitespace(" "),
|
|
.plainText("}")
|
|
])
|
|
}
|
|
|
|
func testTrailingClosureWithoutParanthesis() {
|
|
let components = highlighter.highlight("call { $0 }")
|
|
|
|
XCTAssertEqual(components, [
|
|
.token("call", .call),
|
|
.whitespace(" "),
|
|
.plainText("{"),
|
|
.whitespace(" "),
|
|
.plainText("$0"),
|
|
.whitespace(" "),
|
|
.plainText("}")
|
|
])
|
|
}
|
|
|
|
func testEmptyTrailingClosure() {
|
|
let components = highlighter.highlight("call {}")
|
|
|
|
XCTAssertEqual(components, [
|
|
.token("call", .call),
|
|
.whitespace(" "),
|
|
.plainText("{}")
|
|
])
|
|
}
|
|
|
|
func testClosureArgumentWithSingleArgument() {
|
|
let components = highlighter.highlight("func add(closure: (String) -> Void)")
|
|
|
|
XCTAssertEqual(components, [
|
|
.token("func", .keyword),
|
|
.whitespace(" "),
|
|
.plainText("add(closure:"),
|
|
.whitespace(" "),
|
|
.plainText("("),
|
|
.token("String", .type),
|
|
.plainText(")"),
|
|
.whitespace(" "),
|
|
.plainText("->"),
|
|
.whitespace(" "),
|
|
.token("Void", .type),
|
|
.plainText(")")
|
|
])
|
|
}
|
|
|
|
func testClosureArgumentWithMultipleArguments() {
|
|
let components = highlighter.highlight("func add(closure: (String, Int) -> Void)")
|
|
|
|
XCTAssertEqual(components, [
|
|
.token("func", .keyword),
|
|
.whitespace(" "),
|
|
.plainText("add(closure:"),
|
|
.whitespace(" "),
|
|
.plainText("("),
|
|
.token("String", .type),
|
|
.plainText(","),
|
|
.whitespace(" "),
|
|
.token("Int", .type),
|
|
.plainText(")"),
|
|
.whitespace(" "),
|
|
.plainText("->"),
|
|
.whitespace(" "),
|
|
.token("Void", .type),
|
|
.plainText(")")
|
|
])
|
|
}
|
|
|
|
func testEscapingClosureArgument() {
|
|
let components = highlighter.highlight("func add(closure: @escaping () -> Void)")
|
|
|
|
XCTAssertEqual(components, [
|
|
.token("func", .keyword),
|
|
.whitespace(" "),
|
|
.plainText("add(closure:"),
|
|
.whitespace(" "),
|
|
.token("@escaping", .keyword),
|
|
.whitespace(" "),
|
|
.plainText("()"),
|
|
.whitespace(" "),
|
|
.plainText("->"),
|
|
.whitespace(" "),
|
|
.token("Void", .type),
|
|
.plainText(")")
|
|
])
|
|
}
|
|
|
|
func testPassingClosureAsArgument() {
|
|
let components = highlighter.highlight("object.call({ $0 })")
|
|
|
|
XCTAssertEqual(components, [
|
|
.plainText("object."),
|
|
.token("call", .call),
|
|
.plainText("({"),
|
|
.whitespace(" "),
|
|
.plainText("$0"),
|
|
.whitespace(" "),
|
|
.plainText("})")
|
|
])
|
|
}
|
|
|
|
func testAllTestsRunOnLinux() {
|
|
XCTAssertTrue(TestCaseVerifier.verifyLinuxTests((type(of: self)).allTests))
|
|
}
|
|
}
|
|
|
|
extension ClosureTests {
|
|
static var allTests: [(String, TestClosure<ClosureTests>)] {
|
|
return [
|
|
("testTrailingClosureWithArguments", testTrailingClosureWithArguments),
|
|
("testTrailingClosureWithoutParanthesis", testTrailingClosureWithoutParanthesis),
|
|
("testEmptyTrailingClosure", testEmptyTrailingClosure),
|
|
("testClosureArgumentWithSingleArgument", testClosureArgumentWithSingleArgument),
|
|
("testClosureArgumentWithMultipleArguments", testClosureArgumentWithMultipleArguments),
|
|
("testEscapingClosureArgument", testEscapingClosureArgument),
|
|
("testPassingClosureAsArgument", testPassingClosureAsArgument)
|
|
]
|
|
}
|
|
}
|