From ba65ab5fbeb78fb2e8e7e4d34703c7f390738e8c Mon Sep 17 00:00:00 2001 From: Olivier Halligon Date: Mon, 26 Oct 2015 14:26:41 +0100 Subject: [PATCH] Fix IfNode when using Array of arbitrary types (which made the cast to [AnyObject] fail) --- Stencil/Node.swift | 2 +- StencilSpecs/Nodes/IfNodeSpec.swift | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/Stencil/Node.swift b/Stencil/Node.swift index ab3e984..f49569b 100644 --- a/Stencil/Node.swift +++ b/Stencil/Node.swift @@ -230,7 +230,7 @@ public class IfNode : NodeType { let result = try variable.resolve(context) var truthy = false - if let result = result as? [AnyObject] { + if let result = result as? NSArray { if result.count > 0 { truthy = true } diff --git a/StencilSpecs/Nodes/IfNodeSpec.swift b/StencilSpecs/Nodes/IfNodeSpec.swift index 09e49b9..7f0726b 100644 --- a/StencilSpecs/Nodes/IfNodeSpec.swift +++ b/StencilSpecs/Nodes/IfNodeSpec.swift @@ -82,5 +82,19 @@ describe("IfNode") { let node = IfNode(variable: "unknown", trueNodes: [TextNode(text: "true")], falseNodes: [TextNode(text: "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" + } } }