From 79a16854e71bd81c46b41f3d8d22cdab97ec3e67 Mon Sep 17 00:00:00 2001 From: Ilya Puchka Date: Fri, 29 Dec 2017 17:26:38 +0100 Subject: [PATCH 1/2] fixed implicit conversion of integer literals to float --- CHANGELOG.md | 1 + Sources/Variable.swift | 5 ++++- Tests/StencilTests/FilterSpec.swift | 14 +++++++++++++- Tests/StencilTests/VariableSpec.swift | 2 +- 4 files changed, 19 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 865bc3f..2e5a0e0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ - Fixed rendering `{{ block.super }}` with several levels of inheritance - Fixed checking dictionary values for nil in `default` filter - Fixed comparing string variables with string literals, in Swift 4 string literals became `Substring` and thus couldn't be directly compared to strings. +- Integer literals now resolve into Int values, not Float ## 0.10.1 diff --git a/Sources/Variable.swift b/Sources/Variable.swift index 659cf51..c17b966 100644 --- a/Sources/Variable.swift +++ b/Sources/Variable.swift @@ -63,8 +63,11 @@ public struct Variable : Equatable, Resolvable { return String(variable[variable.characters.index(after: variable.startIndex) ..< variable.characters.index(before: variable.endIndex)]) } + // Number literal + if let int = Int(variable) { + return int + } if let number = Number(variable) { - // Number literal return number } diff --git a/Tests/StencilTests/FilterSpec.swift b/Tests/StencilTests/FilterSpec.swift index ded572c..2501610 100644 --- a/Tests/StencilTests/FilterSpec.swift +++ b/Tests/StencilTests/FilterSpec.swift @@ -136,7 +136,19 @@ func testFilter() { let result = try template.render(Context(dictionary: [:])) try expect(result) == "Hello World" } - + + $0.it("can use int as default") { + let template = Template(templateString: "{{ value|default:1 }}") + let result = try template.render(Context(dictionary: [:])) + try expect(result) == "1" + } + + $0.it("can use float as default") { + let template = Template(templateString: "{{ value|default:1.5 }}") + let result = try template.render(Context(dictionary: [:])) + try expect(result) == "1.5" + } + $0.it("checks for underlying nil value correctly") { let template = Template(templateString: "Hello {{ user.name|default:\"anonymous\" }}") let nilName: String? = nil diff --git a/Tests/StencilTests/VariableSpec.swift b/Tests/StencilTests/VariableSpec.swift index 44af2cc..1a567d8 100644 --- a/Tests/StencilTests/VariableSpec.swift +++ b/Tests/StencilTests/VariableSpec.swift @@ -61,7 +61,7 @@ func testVariable() { $0.it("can resolve an integer literal") { let variable = Variable("5") - let result = try variable.resolve(context) as? Number + let result = try variable.resolve(context) as? Int try expect(result) == 5 } From a6dba678284f0e4889a7ed9975069987da3b5c79 Mon Sep 17 00:00:00 2001 From: Ilya Puchka Date: Mon, 1 Jan 2018 14:57:23 +0100 Subject: [PATCH 2/2] fixed tests on swift 3.1 --- Tests/StencilTests/ForNodeSpec.swift | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Tests/StencilTests/ForNodeSpec.swift b/Tests/StencilTests/ForNodeSpec.swift index 4c4877f..9cc98cb 100644 --- a/Tests/StencilTests/ForNodeSpec.swift +++ b/Tests/StencilTests/ForNodeSpec.swift @@ -129,13 +129,13 @@ func testForNode() { $0.it("can iterate over dictionary") { let templateString = "{% for key,value in dict %}" + - "{{ key }}: {{ value }}\n" + - "{% endfor %}\n" + "{{ key }}: {{ value }}," + + "{% endfor %}" let template = Template(templateString: templateString) let result = try template.render(context) - let sortedResult = result.split(separator: "\n").sorted(by: <) + let sortedResult = result.characters.split(separator: ",").map(String.init).sorted(by: <) try expect(sortedResult) == ["one: I", "two: II"] } @@ -148,7 +148,7 @@ 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: ",").sorted(by: <) + let sortedResult = result.characters.split(separator: ",").map(String.init).sorted(by: <) try expect(sortedResult) == ["one", "two"] } @@ -164,7 +164,7 @@ func testForNode() { let result = try node.render(context) - let sortedResult = result.split(separator: ",").sorted(by: <) + let sortedResult = result.characters.split(separator: ",").map(String.init).sorted(by: <) try expect(sortedResult) == ["one=I", "two=II"] }