Files

90 lines
2.2 KiB
JavaScript

"use strict"
const test = require("./util").test
const assert = require("assert")
describe("iteration", () => {
describe("without index", () => {
it("should repeat string N times", () => {
test(
[
"{{~it.arr:x}}*{{~}}",
"{{~ it.arr:x }}*{{~}}",
"{{~ it.arr: x }}*{{~}}",
"{{~ it.arr :x }}*{{~}}",
],
{arr: Array(3)},
"***"
)
})
it("should concatenate items", () => {
test(["{{~it.arr:x}}{{=x}}{{~}}"], {arr: [1, 2, 3]}, "123")
})
})
describe("with index", () => {
it("should repeat string N times", () => {
test(["{{~it.arr:x:i}}*{{~}}", "{{~ it.arr : x : i }}*{{~}}"], {arr: Array(3)}, "***")
})
it("should concatenate indices", () => {
test(["{{~it.arr:x:i}}{{=i}}{{~}}"], {arr: Array(3)}, "012")
})
it("should concatenate indices and items", () => {
test(
["{{~it.arr:x:i}}{{?i}}, {{?}}{{=i}}:{{=x}}{{~}}"],
{arr: [10, 20, 30]},
"0:10, 1:20, 2:30"
)
})
it("should interpolate nested array even if the same index variable is used", () => {
test(
["{{~it.arr:x:i}}{{~x:y:i}}{{=y}}{{~}}{{~}}"],
{
arr: [
[1, 2, 3],
[4, 5, 6],
],
},
"123456"
)
})
})
describe("iterables", () => {
const set = new Set([1, 2, 3])
describe("without index", () => {
it("should repeat string N times", () => {
assert.strictEqual(Array.isArray(set.values()), false)
test(["{{~it.arr:x}}*{{~}}"], {arr: set.values()}, "***")
})
it("should concatenate items", () => {
test(["{{~it.arr:x}}{{=x}}{{~}}"], {arr: set.values()}, "123")
})
})
describe("with index", () => {
it("should repeat string N times", () => {
test(["{{~it.arr:x:i}}*{{~}}"], {arr: set.values()}, "***")
})
it("should concatenate indices", () => {
test(["{{~it.arr:x:i}}{{=i}}{{~}}"], {arr: set.values()}, "012")
})
it("should concatenate indices and items", () => {
test(
["{{~it.arr:x:i}}{{?i}}, {{?}}{{=i}}:{{=x}}{{~}}"],
{arr: set.values()},
"0:1, 1:2, 2:3"
)
})
})
})
})