Add methods for Array and Dictionary
This commit is contained in:
60
Tests/HummingbirdMustacheTests/MethodTests.swift
Normal file
60
Tests/HummingbirdMustacheTests/MethodTests.swift
Normal file
@@ -0,0 +1,60 @@
|
||||
import XCTest
|
||||
@testable import HummingbirdMustache
|
||||
|
||||
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 testReversed() throws {
|
||||
let template = try HBMustacheTemplate(string: """
|
||||
{{#reversed(repo)}}
|
||||
<b>{{ name }}</b>
|
||||
{{/repo}}
|
||||
""")
|
||||
let object: [String: Any] = ["repo": [["name": "resque"], ["name": "hub"], ["name": "rip"]]]
|
||||
XCTAssertEqual(template.render(object), """
|
||||
<b>rip</b>
|
||||
<b>hub</b>
|
||||
<b>resque</b>
|
||||
|
||||
""")
|
||||
}
|
||||
|
||||
func testArrayEnumerated() throws {
|
||||
let template = try HBMustacheTemplate(string: """
|
||||
{{#enumerated(repo)}}
|
||||
<b>{{ offset }}) {{ element.name }}</b>
|
||||
{{/repo}}
|
||||
""")
|
||||
let object: [String: Any] = ["repo": [["name": "resque"], ["name": "hub"], ["name": "rip"]]]
|
||||
XCTAssertEqual(template.render(object), """
|
||||
<b>0) resque</b>
|
||||
<b>1) hub</b>
|
||||
<b>2) rip</b>
|
||||
|
||||
""")
|
||||
}
|
||||
|
||||
func testDictionaryEnumerated() throws {
|
||||
let template = try HBMustacheTemplate(string: """
|
||||
{{#enumerated(.)}}<b>{{ element.key }} = {{ element.value }}</b>{{/.}}
|
||||
""")
|
||||
let object: [String: Any] = ["one": 1, "two": 2]
|
||||
let result = template.render(object)
|
||||
XCTAssertTrue(result == "<b>one = 1</b><b>two = 2</b>" || result == "<b>two = 2</b><b>one = 1</b>")
|
||||
}
|
||||
|
||||
}
|
||||
@@ -9,17 +9,17 @@ final class TemplateParserTests: XCTestCase {
|
||||
|
||||
func testVariable() throws {
|
||||
let template = try HBMustacheTemplate(string: "test {{variable}}")
|
||||
XCTAssertEqual(template.tokens, [.text("test "), .variable("variable")])
|
||||
XCTAssertEqual(template.tokens, [.text("test "), .variable(name: "variable")])
|
||||
}
|
||||
|
||||
func testSection() throws {
|
||||
let template = try HBMustacheTemplate(string: "test {{#section}}text{{/section}}")
|
||||
XCTAssertEqual(template.tokens, [.text("test "), .section("section", .init([.text("text")]))])
|
||||
XCTAssertEqual(template.tokens, [.text("test "), .section(name: "section", template: .init([.text("text")]))])
|
||||
}
|
||||
|
||||
func testInvertedSection() throws {
|
||||
let template = try HBMustacheTemplate(string: "test {{^section}}text{{/section}}")
|
||||
XCTAssertEqual(template.tokens, [.text("test "), .invertedSection("section", .init([.text("text")]))])
|
||||
XCTAssertEqual(template.tokens, [.text("test "), .invertedSection(name: "section", template: .init([.text("text")]))])
|
||||
}
|
||||
|
||||
func testComment() throws {
|
||||
@@ -29,7 +29,7 @@ final class TemplateParserTests: XCTestCase {
|
||||
|
||||
func testWhitespace() throws {
|
||||
let template = try HBMustacheTemplate(string: "{{ section }}")
|
||||
XCTAssertEqual(template.tokens, [.variable("section")])
|
||||
XCTAssertEqual(template.tokens, [.variable(name: "section")])
|
||||
}
|
||||
|
||||
func testSectionEndError() throws {
|
||||
@@ -79,10 +79,12 @@ extension HBMustacheTemplate.Token: Equatable {
|
||||
return lhs == rhs
|
||||
case (.variable(let lhs, let lhs2), .variable(let rhs, let rhs2)):
|
||||
return lhs == rhs && lhs2 == rhs2
|
||||
case (.section(let lhs1, let lhs2), .section(let rhs1, let rhs2)):
|
||||
return lhs1 == rhs1 && lhs2 == rhs2
|
||||
case (.invertedSection(let lhs1, let lhs2), .invertedSection(let rhs1, let rhs2)):
|
||||
return lhs1 == rhs1 && lhs2 == rhs2
|
||||
case (.section(let lhs1, let lhs2, let lhs3), .section(let rhs1, let rhs2, let rhs3)):
|
||||
return lhs1 == rhs1 && lhs2 == rhs2 && lhs3 == rhs3
|
||||
case (.invertedSection(let lhs1, let lhs2, let lhs3), .invertedSection(let rhs1, let rhs2, let rhs3)):
|
||||
return lhs1 == rhs1 && lhs2 == rhs2 && lhs3 == rhs3
|
||||
case (.partial(let name1), .partial(let name2)):
|
||||
return name1 == name2
|
||||
default:
|
||||
return false
|
||||
}
|
||||
|
||||
@@ -192,20 +192,6 @@ final class TemplateRendererTests: XCTestCase {
|
||||
""")
|
||||
}
|
||||
|
||||
func testLowercased() throws {
|
||||
let template = try HBMustacheTemplate(string: """
|
||||
{{#repo}}
|
||||
<b>{{ lowercased(name) }}</b>
|
||||
{{/repo}}
|
||||
""")
|
||||
let object: [String: Any] = ["repo": [["name": "Resque"], ["name": "Hub"], ["name": "RIP"]]]
|
||||
XCTAssertEqual(template.render(object), """
|
||||
<b>resque</b>
|
||||
<b>hub</b>
|
||||
<b>rip</b>
|
||||
|
||||
""")
|
||||
}
|
||||
func testPerformance() throws {
|
||||
let template = try HBMustacheTemplate(string: """
|
||||
{{#repo}}
|
||||
|
||||
Reference in New Issue
Block a user