Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
File size: 3,273 Bytes
43f8c77 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 |
import { describe, it, expect } from "vitest";
import { Environment, Interpreter } from "../src/runtime";
import { tokenize } from "../src/lexer";
import { parse } from "../src/parser";
describe("Test interpreter options", () => {
// https://jinja.palletsprojects.com/en/3.0.x/templates/#whitespace-control
it("should handle whitespace control", () => {
const EXAMPLE_IF_TEMPLATE = `<div>\n {% if True %}\n yay\n {% endif %}\n</div>`;
const EXAMPLE_FOR_TEMPLATE = `{% for item in seq %}\n {{ item }}\n{% endfor %}`;
const EXAMPLE_FOR_TEMPLATE_2 = `{% for item in seq -%}\n {{ item }}\n{% endfor %}`;
const EXAMPLE_FOR_TEMPLATE_3 = `{% for item in seq %}\n {{ item }}\n{%- endfor %}`;
const EXAMPLE_FOR_TEMPLATE_4 = `{% for item in seq -%}\n {{ item }}\n{%- endfor %}`;
const seq = [1, 2, 3, 4, 5, 6, 7, 8, 9];
const TESTS = [
// If tests
{
template: EXAMPLE_IF_TEMPLATE,
data: {},
options: {},
target: `<div>\n \n yay\n \n</div>`,
},
{
template: EXAMPLE_IF_TEMPLATE,
data: {},
options: {
lstrip_blocks: true,
},
target: `<div>\n\n yay\n\n</div>`,
},
{
template: EXAMPLE_IF_TEMPLATE,
data: {},
options: {
trim_blocks: true,
},
target: `<div>\n yay\n </div>`,
},
{
template: EXAMPLE_IF_TEMPLATE,
data: {},
options: {
lstrip_blocks: true,
trim_blocks: true,
},
target: `<div>\n yay\n</div>`,
},
// For tests
{
template: EXAMPLE_FOR_TEMPLATE,
data: { seq },
options: {},
target: `\n 1\n\n 2\n\n 3\n\n 4\n\n 5\n\n 6\n\n 7\n\n 8\n\n 9\n`,
},
{
template: EXAMPLE_FOR_TEMPLATE,
data: { seq },
options: { lstrip_blocks: true },
target: `\n 1\n\n 2\n\n 3\n\n 4\n\n 5\n\n 6\n\n 7\n\n 8\n\n 9\n`,
},
{
template: EXAMPLE_FOR_TEMPLATE,
data: { seq },
options: { trim_blocks: true },
target: ` 1\n 2\n 3\n 4\n 5\n 6\n 7\n 8\n 9\n`,
},
{
template: EXAMPLE_FOR_TEMPLATE,
data: { seq },
options: { lstrip_blocks: true, trim_blocks: true },
target: ` 1\n 2\n 3\n 4\n 5\n 6\n 7\n 8\n 9\n`,
},
{
template: EXAMPLE_FOR_TEMPLATE_2,
data: { seq },
options: {},
target: `1\n2\n3\n4\n5\n6\n7\n8\n9\n`,
},
{
template: EXAMPLE_FOR_TEMPLATE_3,
data: { seq },
options: {},
target: `\n 1\n 2\n 3\n 4\n 5\n 6\n 7\n 8\n 9`,
},
{
template: EXAMPLE_FOR_TEMPLATE_3,
data: { seq },
options: { trim_blocks: true },
target: ` 1 2 3 4 5 6 7 8 9`,
},
{
template: EXAMPLE_FOR_TEMPLATE_4,
data: { seq },
options: {},
target: `123456789`,
},
];
for (const test of TESTS) {
const env = new Environment();
env.set("True", true);
for (const [key, value] of Object.entries(test.data)) {
env.set(key, value);
}
const tokens = tokenize(test.template, test.options);
const parsed = parse(tokens);
const interpreter = new Interpreter(env);
const result = interpreter.run(parsed);
expect(result.value).toEqual(test.target);
}
});
});
|