From fce4e85a632389588223b599b0c7d2c2d81fd153 Mon Sep 17 00:00:00 2001 From: David Jennes Date: Thu, 20 Sep 2018 02:59:00 +0200 Subject: [PATCH] Ensure the "for" iteration over a dictionary is consistent --- Sources/ForTag.swift | 2 +- Tests/StencilTests/ForNodeSpec.swift | 16 +++++++++------- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/Sources/ForTag.swift b/Sources/ForTag.swift index e2969a7..0bc8775 100644 --- a/Sources/ForTag.swift +++ b/Sources/ForTag.swift @@ -93,7 +93,7 @@ class ForNode : NodeType { var values: [Any] if let dictionary = resolved as? [String: Any], !dictionary.isEmpty { - values = dictionary.map { ($0.key, $0.value) } + values = dictionary.sorted { $0.key < $1.key } } else if let array = resolved as? [Any] { values = array } else if let range = resolved as? CountableClosedRange { diff --git a/Tests/StencilTests/ForNodeSpec.swift b/Tests/StencilTests/ForNodeSpec.swift index f292a15..e362e91 100644 --- a/Tests/StencilTests/ForNodeSpec.swift +++ b/Tests/StencilTests/ForNodeSpec.swift @@ -209,8 +209,9 @@ func testForNode() { let template = Template(templateString: templateString) let result = try template.render(context) - let sortedResult = result.split(separator: ",").map(String.init).sorted(by: <) - try expect(sortedResult) == ["one: I", "two: II"] + try expect(result) == """ + one: I,two: II, + """ } $0.it("renders supports iterating over dictionary") { @@ -222,8 +223,9 @@ func testForNode() { let node = ForNode(resolvable: Variable("dict"), loopVariables: ["key"], nodes: nodes, emptyNodes: emptyNodes, where: nil) let result = try node.render(context) - let sortedResult = result.split(separator: ",").map(String.init).sorted(by: <) - try expect(sortedResult) == ["one", "two"] + try expect(result) == """ + one,two, + """ } $0.it("renders supports iterating over dictionary") { @@ -235,11 +237,11 @@ func testForNode() { ] let emptyNodes: [NodeType] = [TextNode(text: "empty")] let node = ForNode(resolvable: Variable("dict"), loopVariables: ["key", "value"], nodes: nodes, emptyNodes: emptyNodes, where: nil) - let result = try node.render(context) - let sortedResult = result.split(separator: ",").map(String.init).sorted(by: <) - try expect(sortedResult) == ["one=I", "two=II"] + try expect(result) == """ + one=I,two=II, + """ } $0.it("handles invalid input") {