tagged-templates.js   [plain text]


function shouldBe(actual, expected) {
    if (actual !== expected)
        throw new Error('bad value: ' + JSON.stringify(actual));
}

function raw(siteObject) {
    var result = '';
    for (var i = 0; i < siteObject.raw.length; ++i) {
        result += siteObject.raw[i];
        if ((i + 1) < arguments.length) {
            result += arguments[i + 1];
        }
    }
    return result;
}

function cooked(siteObject) {
    var result = '';
    for (var i = 0; i < siteObject.raw.length; ++i) {
        result += siteObject[i];
        if ((i + 1) < arguments.length) {
            result += arguments[i + 1];
        }
    }
    return result;
}

function Counter() {
    var count = 0;
    return {
        toString() {
            return count++;
        }
    };
}

var c = Counter();
shouldBe(raw`Hello ${c} World ${c}`, `Hello 0 World 1`);
var c = Counter();
shouldBe(raw`${c}${c}${c}`, `012`);
var c = Counter();
shouldBe(raw`${c}${ `  ${c}  ` }${c}`, `1  0  2`);
var c = Counter();
shouldBe(raw`${c}${ raw`  ${c}  ` }${c}`, `1  0  2`);
var c = Counter();
shouldBe(raw`${c}${ `  ${c}${c}  ` }${c}`, `2  01  3`);
var c = Counter();
shouldBe(raw`${c}${ raw`  ${c}${c}  ` }${c}`, `2  01  3`);

shouldBe(raw``, ``);
shouldBe(cooked``, ``);
shouldBe(raw`\n`, `\\n`);
shouldBe(cooked`\n`, `\n`);
shouldBe(raw`\v`, `\\v`);
shouldBe(cooked`\v`, `\v`);
shouldBe(raw`

`, `\n\n`);
shouldBe(cooked`

`, `\n\n`);
shouldBe(raw`\
\
`, `\\\n\\\n`);
shouldBe(cooked`\
\
`, ``);