| 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`\ |
| \ |
| `, ``); |