53 lines
1.8 KiB
Swift
53 lines
1.8 KiB
Swift
import XCTest
|
|
@testable import HummingbirdMustache
|
|
|
|
final class TemplateParserTests: XCTestCase {
|
|
func testText() throws {
|
|
let template = try HBTemplate("test template")
|
|
XCTAssertEqual(template.tokens, [.text("test template")])
|
|
}
|
|
|
|
func testVariable() throws {
|
|
let template = try HBTemplate("test {{variable}}")
|
|
XCTAssertEqual(template.tokens, [.text("test "), .variable("variable")])
|
|
}
|
|
|
|
func testSection() throws {
|
|
let template = try HBTemplate("test {{#section}}text{{/section}}")
|
|
XCTAssertEqual(template.tokens, [.text("test "), .section("section", .init([.text("text")]))])
|
|
}
|
|
|
|
func testInvertedSection() throws {
|
|
let template = try HBTemplate("test {{^section}}text{{/section}}")
|
|
XCTAssertEqual(template.tokens, [.text("test "), .invertedSection("section", .init([.text("text")]))])
|
|
}
|
|
|
|
func testComment() throws {
|
|
let template = try HBTemplate("test {{!section}}")
|
|
XCTAssertEqual(template.tokens, [.text("test ")])
|
|
}
|
|
}
|
|
|
|
extension HBTemplate: Equatable {
|
|
public static func == (lhs: HBTemplate, rhs: HBTemplate) -> Bool {
|
|
lhs.tokens == rhs.tokens
|
|
}
|
|
}
|
|
|
|
extension HBTemplate.Token: Equatable {
|
|
public static func == (lhs: HBTemplate.Token, rhs: HBTemplate.Token) -> Bool {
|
|
switch (lhs, rhs) {
|
|
case (.text(let lhs), .text(let rhs)):
|
|
return lhs == rhs
|
|
case (.variable(let lhs), .variable(let rhs)):
|
|
return lhs == rhs
|
|
case (.section(let lhs1, let lhs2), .section(let rhs1, let rhs2)):
|
|
return lhs1 == rhs1 && lhs2 == rhs2
|
|
case (.invertedSection(let lhs1, let lhs2), .invertedSection(let rhs1, let rhs2)):
|
|
return lhs1 == rhs1 && lhs2 == rhs2
|
|
default:
|
|
return false
|
|
}
|
|
}
|
|
}
|