import HummingbirdMustache
import XCTest
final class MethodTests: XCTestCase {
func testLowercased() throws {
let template = try HBMustacheTemplate(string: """
{{ lowercased(name) }}
""")
let object: [String: Any] = ["name": "Test"]
XCTAssertEqual(template.render(object), "test")
}
func testUppercased() throws {
let template = try HBMustacheTemplate(string: """
{{ uppercased(name) }}
""")
let object: [String: Any] = ["name": "Test"]
XCTAssertEqual(template.render(object), "TEST")
}
func testNewline() throws {
let template = try HBMustacheTemplate(string: """
{{#repo}}
{{name}}
{{/repo}}
""")
let object: [String: Any] = ["repo": [["name": "resque"], ["name": "hub"], ["name": "rip"]]]
XCTAssertEqual(template.render(object), """
resque
hub
rip
""")
}
func testFirstLast() throws {
let template = try HBMustacheTemplate(string: """
{{#repo}}
{{#first()}}first: {{/first()}}{{#last()}}last: {{/last()}}{{ name }}
{{/repo}}
""")
let object: [String: Any] = ["repo": [["name": "resque"], ["name": "hub"], ["name": "rip"]]]
XCTAssertEqual(template.render(object), """
first: resque
hub
last: rip
""")
}
func testIndex() throws {
let template = try HBMustacheTemplate(string: """
{{#repo}}
{{#index()}}{{plusone(.)}}{{/index()}}) {{ name }}
{{/repo}}
""")
let object: [String: Any] = ["repo": [["name": "resque"], ["name": "hub"], ["name": "rip"]]]
XCTAssertEqual(template.render(object), """
1) resque
2) hub
3) rip
""")
}
func testEvenOdd() throws {
let template = try HBMustacheTemplate(string: """
{{#repo}}
{{index()}}) {{#even()}}even {{/even()}}{{#odd()}}odd {{/odd()}}{{ name }}
{{/repo}}
""")
let object: [String: Any] = ["repo": [["name": "resque"], ["name": "hub"], ["name": "rip"]]]
XCTAssertEqual(template.render(object), """
0) even resque
1) odd hub
2) even rip
""")
}
func testReversed() throws {
let template = try HBMustacheTemplate(string: """
{{#reversed(repo)}}
{{ name }}
{{/reversed(repo)}}
""")
let object: [String: Any] = ["repo": [["name": "resque"], ["name": "hub"], ["name": "rip"]]]
XCTAssertEqual(template.render(object), """
rip
hub
resque
""")
}
func testArrayIndex() throws {
let template = try HBMustacheTemplate(string: """
{{#repo}}
{{ index() }}) {{ name }}
{{/repo}}
""")
let object: [String: Any] = ["repo": [["name": "resque"], ["name": "hub"], ["name": "rip"]]]
XCTAssertEqual(template.render(object), """
0) resque
1) hub
2) rip
""")
}
func testArraySorted() throws {
let template = try HBMustacheTemplate(string: """
{{#sorted(repo)}}
{{ index() }}) {{ . }}
{{/sorted(repo)}}
""")
let object: [String: Any] = ["repo": ["resque", "hub", "rip"]]
XCTAssertEqual(template.render(object), """
0) hub
1) resque
2) rip
""")
}
func testListOutput() throws {
let object = [1, 2, 3, 4]
let template = try HBMustacheTemplate(string: "{{#.}}{{.}}{{^last()}}, {{/last()}}{{/.}}")
XCTAssertEqual(template.render(object), "1, 2, 3, 4")
}
func testDictionaryEnumerated() throws {
let template = try HBMustacheTemplate(string: """
{{#enumerated(.)}}{{ key }} = {{ value }}{{/enumerated(.)}}
""")
let object: [String: Any] = ["one": 1, "two": 2]
let result = template.render(object)
XCTAssertTrue(result == "one = 1two = 2" || result == "two = 2one = 1")
}
func testDictionarySortedByKey() throws {
let template = try HBMustacheTemplate(string: """
{{#sorted(.)}}{{ key }} = {{ value }}{{/sorted(.)}}
""")
let object: [String: Any] = ["one": 1, "two": 2, "three": 3]
let result = template.render(object)
XCTAssertEqual(result, "one = 1three = 3two = 2")
}
}