65 lines
1.6 KiB
Swift
65 lines
1.6 KiB
Swift
import Foundation
|
|
import XCTest
|
|
import Stencil
|
|
import PathKit
|
|
|
|
class IncludeTests: NodeTests {
|
|
|
|
var loader:TemplateLoader!
|
|
|
|
override func setUp() {
|
|
super.setUp()
|
|
|
|
let path = (Path(__FILE__) + Path("../..")).absolute()
|
|
loader = TemplateLoader(paths: [path])
|
|
}
|
|
|
|
// MARK: Parsing
|
|
|
|
func testParseMissingTemplate() {
|
|
let tokens = [ Token.Block(value: "include") ]
|
|
let parser = TokenParser(tokens: tokens)
|
|
|
|
assertFailure(try parser.parse(), TemplateSyntaxError("'include' tag takes one argument, the template file to be included"))
|
|
}
|
|
|
|
func testParse() {
|
|
let tokens = [ Token.Block(value: "include \"test.html\"") ]
|
|
let parser = TokenParser(tokens: tokens)
|
|
|
|
assertSuccess(try parser.parse()) { nodes in
|
|
let node = nodes.first as! IncludeNode
|
|
XCTAssertEqual(nodes.count, 1)
|
|
XCTAssertEqual(node.templateName, "test.html")
|
|
}
|
|
}
|
|
|
|
// MARK: Render
|
|
|
|
func testRenderWithoutLoader() {
|
|
let node = IncludeNode(templateName: "test.html")
|
|
|
|
do {
|
|
try node.render(Context())
|
|
} catch {
|
|
XCTAssertEqual("\(error)", "Template loader not in context")
|
|
}
|
|
}
|
|
|
|
func testRenderWithoutTemplateNamed() {
|
|
let node = IncludeNode(templateName: "unknown.html")
|
|
|
|
do {
|
|
try node.render(Context(dictionary:["loader":loader]))
|
|
} catch {
|
|
XCTAssertTrue("\(error)".hasPrefix("'unknown.html' template not found"))
|
|
}
|
|
}
|
|
|
|
func testRender() {
|
|
let node = IncludeNode(templateName: "test.html")
|
|
let value = try? node.render(Context(dictionary:["loader":loader, "target": "World"]))
|
|
XCTAssertEqual(value, "Hello World!")
|
|
}
|
|
}
|