tagged-templates-identity.js   [plain text]


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

var templates = [];
function tag(siteObject) {
    templates.push(siteObject);
}

tag`Hello`;
tag`World`;
tag`Hello`;
shouldBe(templates.length, 3);
shouldBe(templates[0] !== templates[1], true);
shouldBe(templates[0] === templates[2], true);

templates = [];
tag`Hello\n`;
tag`Hello\r`;
tag`Hello\u2028`;
shouldBe(templates.length, 3);
shouldBe(templates[0] !== templates[1], true);
shouldBe(templates[0] !== templates[2], true);

templates = [];
eval("tag`Hello\n`");
eval("tag`Hello\r`");
eval("tag`Hello\u2028`");
shouldBe(templates.length, 3);
shouldBe(templates[0] === templates[1], true);
shouldBe(templates[0] !== templates[2], true);

templates = [];
eval("tag`Hello\n`");
eval("tag`Hello\\n`");
eval("tag`Hello\r`");
eval("tag`Hello\\r`");
shouldBe(templates.length, 4);
shouldBe(templates[0] !== templates[1], true);
shouldBe(templates[0] === templates[2], true);
shouldBe(templates[0] !== templates[3], true);
shouldBe(templates[1] !== templates[2], true);
shouldBe(templates[1] !== templates[3], true);
shouldBe(templates[2] !== templates[3], true);

var v = 0;
templates = [];
eval("tag`Hello\n${v}world`");
eval("tag`Hello\n${v}world`");
shouldBe(templates.length, 2);
shouldBe(templates[0] === templates[1], true);

var v = 0;
templates = [];
eval("tag`Hello${v}\nworld`");
eval("tag`Hello\n${v}world`");
shouldBe(templates.length, 2);
shouldBe(templates[0] !== templates[1], true);