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") } }