80 lines
2.5 KiB
Swift
80 lines
2.5 KiB
Swift
import Spectre
|
|
@testable import Stencil
|
|
import XCTest
|
|
|
|
final class TokenParserTests: XCTestCase {
|
|
func testTextToken() throws {
|
|
let parser = TokenParser(tokens: [
|
|
.text(value: "Hello World", at: .unknown)
|
|
], environment: Environment())
|
|
|
|
let nodes = try parser.parse()
|
|
let node = nodes.first as? TextNode
|
|
|
|
try expect(nodes.count) == 1
|
|
try expect(node?.text) == "Hello World"
|
|
}
|
|
|
|
func testVariableToken() throws {
|
|
let parser = TokenParser(tokens: [
|
|
.variable(value: "'name'", at: .unknown)
|
|
], environment: Environment())
|
|
|
|
let nodes = try parser.parse()
|
|
let node = nodes.first as? VariableNode
|
|
try expect(nodes.count) == 1
|
|
let result = try node?.render(Context())
|
|
try expect(result) == "name"
|
|
}
|
|
|
|
func testCommentToken() throws {
|
|
let parser = TokenParser(tokens: [
|
|
.comment(value: "Secret stuff!", at: .unknown)
|
|
], environment: Environment())
|
|
|
|
let nodes = try parser.parse()
|
|
try expect(nodes.count) == 0
|
|
}
|
|
|
|
func testTagToken() throws {
|
|
let simpleExtension = Extension()
|
|
simpleExtension.registerSimpleTag("known") { _ in
|
|
""
|
|
}
|
|
|
|
let parser = TokenParser(tokens: [
|
|
.block(value: "known", at: .unknown)
|
|
], environment: Environment(extensions: [simpleExtension]))
|
|
|
|
let nodes = try parser.parse()
|
|
try expect(nodes.count) == 1
|
|
}
|
|
|
|
func testErrorUnknownTag() throws {
|
|
let tokens: [Token] = [.block(value: "unknown", at: .unknown)]
|
|
let parser = TokenParser(tokens: tokens, environment: Environment())
|
|
|
|
try expect(try parser.parse()).toThrow(TemplateSyntaxError(
|
|
reason: "Unknown template tag 'unknown'",
|
|
token: tokens.first
|
|
))
|
|
}
|
|
|
|
func testTransformWhitespaceBehaviourToTrimBehaviour() throws {
|
|
let simpleExtension = Extension()
|
|
simpleExtension.registerSimpleTag("known") { _ in "" }
|
|
|
|
let parser = TokenParser(tokens: [
|
|
.block(value: "known", at: .unknown, whitespace: WhitespaceBehaviour(leading: .unspecified, trailing: .trim)),
|
|
.text(value: " \nSome text ", at: .unknown),
|
|
.block(value: "known", at: .unknown, whitespace: WhitespaceBehaviour(leading: .keep, trailing: .trim))
|
|
], environment: Environment(extensions: [simpleExtension]))
|
|
|
|
let nodes = try parser.parse()
|
|
try expect(nodes.count) == 3
|
|
let textNode = nodes[1] as? TextNode
|
|
try expect(textNode?.text) == " \nSome text "
|
|
try expect(textNode?.trimBehaviour) == TrimBehaviour(leading: .whitespaceAndNewLines, trailing: .nothing)
|
|
}
|
|
}
|