Implement trim whitespace
This commit is contained in:
137
Tests/StencilTests/TrimBehaviourSpec.swift
Normal file
137
Tests/StencilTests/TrimBehaviourSpec.swift
Normal file
@@ -0,0 +1,137 @@
|
||||
import Spectre
|
||||
import Stencil
|
||||
import XCTest
|
||||
|
||||
final class TrimBehaviourTests: XCTestCase {
|
||||
func testSmartTrimCanRemoveNewlines() throws {
|
||||
let templateString = """
|
||||
{% for item in items %}
|
||||
- {{item}}
|
||||
{% endfor %}
|
||||
text
|
||||
"""
|
||||
|
||||
let context = ["items": ["item 1", "item 2"]]
|
||||
let template = Template(templateString: templateString, environment: .init(trimBehaviour: .smart))
|
||||
let result = try template.render(context)
|
||||
|
||||
// swiftlint:disable indentation_width
|
||||
try expect(result) == """
|
||||
- item 1
|
||||
- item 2
|
||||
text
|
||||
"""
|
||||
// swiftlint:enable indentation_width
|
||||
}
|
||||
|
||||
func testSmartTrimOnlyRemoveSingleNewlines() throws {
|
||||
let templateString = """
|
||||
{% for item in items %}
|
||||
|
||||
- {{item}}
|
||||
{% endfor %}
|
||||
text
|
||||
"""
|
||||
|
||||
let context = ["items": ["item 1", "item 2"]]
|
||||
let template = Template(templateString: templateString, environment: .init(trimBehaviour: .smart))
|
||||
let result = try template.render(context)
|
||||
|
||||
// swiftlint:disable indentation_width
|
||||
try expect(result) == """
|
||||
|
||||
- item 1
|
||||
|
||||
- item 2
|
||||
text
|
||||
"""
|
||||
// swiftlint:enable indentation_width
|
||||
}
|
||||
|
||||
func testSmartTrimCanRemoveNewlinesWhileKeepingWhitespace() throws {
|
||||
// swiftlint:disable indentation_width
|
||||
let templateString = """
|
||||
Items:
|
||||
{% for item in items %}
|
||||
- {{item}}
|
||||
{% endfor %}
|
||||
"""
|
||||
// swiftlint:enable indentation_width
|
||||
|
||||
let context = ["items": ["item 1", "item 2"]]
|
||||
let template = Template(templateString: templateString, environment: .init(trimBehaviour: .smart))
|
||||
let result = try template.render(context)
|
||||
|
||||
// swiftlint:disable indentation_width
|
||||
try expect(result) == """
|
||||
Items:
|
||||
- item 1
|
||||
- item 2
|
||||
|
||||
"""
|
||||
// swiftlint:enable indentation_width
|
||||
}
|
||||
|
||||
func testTrimSymbols() {
|
||||
it("Respects whitespace control symbols in for tags") {
|
||||
// swiftlint:disable indentation_width
|
||||
let template: Template = """
|
||||
{% for num in numbers -%}
|
||||
{{num}}
|
||||
{%- endfor %}
|
||||
"""
|
||||
// swiftlint:enable indentation_width
|
||||
let result = try template.render([ "numbers": Array(1...9) ])
|
||||
try expect(result) == "123456789"
|
||||
}
|
||||
it("Respects whitespace control symbols in if tags") {
|
||||
let template: Template = """
|
||||
{% if value -%}
|
||||
{{text}}
|
||||
{%- endif %}
|
||||
"""
|
||||
let result = try template.render([ "text": "hello", "value": true ])
|
||||
try expect(result) == "hello"
|
||||
}
|
||||
}
|
||||
|
||||
func testTrimSymbolsOverridingEnvironment() {
|
||||
let environment = Environment(trimBehaviour: .all)
|
||||
|
||||
it("respects whitespace control symbols in if tags") {
|
||||
// swiftlint:disable indentation_width
|
||||
let templateString = """
|
||||
{% if value +%}
|
||||
{{text}}
|
||||
{%+ endif %}
|
||||
|
||||
"""
|
||||
// swiftlint:enable indentation_width
|
||||
let template = Template(templateString: templateString, environment: environment)
|
||||
let result = try template.render([ "text": "hello", "value": true ])
|
||||
try expect(result) == "\n hello\n"
|
||||
}
|
||||
|
||||
it("can customize blocks on same line as text") {
|
||||
// swiftlint:disable indentation_width
|
||||
let templateString = """
|
||||
Items:{% for item in items +%}
|
||||
- {{item}}
|
||||
{%- endfor %}
|
||||
"""
|
||||
// swiftlint:enable indentation_width
|
||||
|
||||
let context = ["items": ["item 1", "item 2"]]
|
||||
let template = Template(templateString: templateString, environment: environment)
|
||||
let result = try template.render(context)
|
||||
|
||||
// swiftlint:disable indentation_width
|
||||
try expect(result) == """
|
||||
Items:
|
||||
- item 1
|
||||
- item 2
|
||||
"""
|
||||
// swiftlint:enable indentation_width
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user