diff --git a/Sources/ForTag.swift b/Sources/ForTag.swift index 8fbd221..c0c3919 100644 --- a/Sources/ForTag.swift +++ b/Sources/ForTag.swift @@ -90,6 +90,10 @@ class ForNode : NodeType { values = dictionary.map { ($0.key, $0.value) } } else if let array = resolved as? [Any] { values = array + } else if let range = resolved as? CountableClosedRange { + values = Array(range) + } else if let range = resolved as? CountableRange { + values = Array(range) } else { values = [] } diff --git a/Tests/StencilTests/ForNodeSpec.swift b/Tests/StencilTests/ForNodeSpec.swift index 4c98232..91ae53d 100644 --- a/Tests/StencilTests/ForNodeSpec.swift +++ b/Tests/StencilTests/ForNodeSpec.swift @@ -37,6 +37,22 @@ func testForNode() { try expect(try node.render(any_context)) == "123" } + $0.it("renders a context variable of type CountableClosedRange") { + let context = Context(dictionary: ["range": 1...3]) + let nodes: [NodeType] = [VariableNode(variable: "item")] + let node = ForNode(resolvable: Variable("range"), loopVariables: ["item"], nodes: nodes, emptyNodes: []) + + try expect(try node.render(context)) == "123" + } + + $0.it("renders a context variable of type CountableRange") { + let context = Context(dictionary: ["range": 1..<4]) + let nodes: [NodeType] = [VariableNode(variable: "item")] + let node = ForNode(resolvable: Variable("range"), loopVariables: ["item"], nodes: nodes, emptyNodes: []) + + try expect(try node.render(context)) == "123" + } + #if os(OSX) $0.it("renders a context variable of type NSArray") { let nsarray_context = Context(dictionary: [