Implement if and ifnot tags

Closes #3
This commit is contained in:
Kyle Fuller
2014-10-26 11:36:55 +00:00
parent 758bf352c1
commit 7b42eb6bec
3 changed files with 133 additions and 0 deletions

View File

@@ -86,3 +86,71 @@ class ForNodeTests: NodeTests {
XCTAssertEqual(result.0!, "123")
}
}
class IfNodeTests: NodeTests {
// MARK: Parsing
func testParseIf() {
let tokens = [
Token.Block(value: "if value"),
Token.Text(value: "true"),
Token.Block(value: "else"),
Token.Text(value: "false"),
Token.Block(value: "endif")
]
let parser = TokenParser(tokens: tokens)
let nodes = parser.parse()
let node = nodes.first! as IfNode
let trueNode = node.trueNodes.first! as TextNode
let falseNode = node.falseNodes.first! as TextNode
XCTAssertEqual(nodes.count, 1)
XCTAssertEqual(node.variable.variable, "value")
XCTAssertEqual(node.trueNodes.count, 1)
XCTAssertEqual(trueNode.text, "true")
XCTAssertEqual(node.falseNodes.count, 1)
XCTAssertEqual(falseNode.text, "false")
}
func testParseIfNot() {
let tokens = [
Token.Block(value: "ifnot value"),
Token.Text(value: "false"),
Token.Block(value: "else"),
Token.Text(value: "true"),
Token.Block(value: "endif")
]
let parser = TokenParser(tokens: tokens)
let nodes = parser.parse()
let node = nodes.first! as IfNode
let trueNode = node.trueNodes.first! as TextNode
let falseNode = node.falseNodes.first! as TextNode
XCTAssertEqual(nodes.count, 1)
XCTAssertEqual(node.variable.variable, "value")
XCTAssertEqual(node.trueNodes.count, 1)
XCTAssertEqual(trueNode.text, "true")
XCTAssertEqual(node.falseNodes.count, 1)
XCTAssertEqual(falseNode.text, "false")
}
// MARK: Rendering
func testIfNodeRenderTruth() {
let node = IfNode(variable: "items", trueNodes: [TextNode(text: "true")], falseNodes: [TextNode(text: "false")])
let result = node.render(context)
XCTAssertEqual(result.0!, "true")
}
func testIfNodeRenderFalse() {
let node = IfNode(variable: "unknown", trueNodes: [TextNode(text: "true")], falseNodes: [TextNode(text: "false")])
let result = node.render(context)
XCTAssertEqual(result.0!, "false")
}
}