Fix IfNode when using Array of arbitrary types (which made the cast to [AnyObject] fail)

This commit is contained in:
Olivier Halligon
2015-10-26 14:26:41 +01:00
parent 8ac6e26876
commit ba65ab5fbe
2 changed files with 15 additions and 1 deletions

View File

@@ -230,7 +230,7 @@ public class IfNode : NodeType {
let result = try variable.resolve(context) let result = try variable.resolve(context)
var truthy = false var truthy = false
if let result = result as? [AnyObject] { if let result = result as? NSArray {
if result.count > 0 { if result.count > 0 {
truthy = true truthy = true
} }

View File

@@ -82,5 +82,19 @@ describe("IfNode") {
let node = IfNode(variable: "unknown", trueNodes: [TextNode(text: "true")], falseNodes: [TextNode(text: "false")]) let node = IfNode(variable: "unknown", trueNodes: [TextNode(text: "true")], falseNodes: [TextNode(text: "false")])
try expect(try node.render(context)) == "false" try expect(try node.render(context)) == "false"
} }
$0.it("renders the truth when array expression is not empty") {
let items: Array<[String:AnyObject]> = [["key":"key1","value":42],["key":"key2","value":1337]]
let arrayContext = Context(dictionary: ["items": [items]])
let node = IfNode(variable: "items", trueNodes: [TextNode(text: "true")], falseNodes: [TextNode(text: "false")])
try expect(try node.render(arrayContext)) == "true"
}
$0.it("renders the false when array expression is empty") {
let emptyItems = Array<[String:AnyObject]>()
let arrayContext = Context(dictionary: ["items": emptyItems])
let node = IfNode(variable: "items", trueNodes: [TextNode(text: "true")], falseNodes: [TextNode(text: "false")])
try expect(try node.render(arrayContext)) == "false"
}
} }
} }