mirror of
https://github.com/n8n-io/n8n.git
synced 2026-05-27 14:57:21 +02:00
97 lines
2.9 KiB
TypeScript
97 lines
2.9 KiB
TypeScript
import { joinExpression, splitExpression } from '@/ExpressionSplitter';
|
|
|
|
describe('tmpl Expression Parser', () => {
|
|
describe('Compatible splitting', () => {
|
|
test('Lone expression', () => {
|
|
expect(splitExpression('{{ "" }}')).toEqual([
|
|
{ type: 'text', text: '' },
|
|
{ type: 'code', text: ' "" ', hasClosingBrackets: true },
|
|
]);
|
|
});
|
|
|
|
test('Multiple expression', () => {
|
|
expect(splitExpression('{{ "test".toSnakeCase() }} you have ${{ (100).format() }}.')).toEqual(
|
|
[
|
|
{ type: 'text', text: '' },
|
|
{ type: 'code', text: ' "test".toSnakeCase() ', hasClosingBrackets: true },
|
|
{ type: 'text', text: ' you have $' },
|
|
{ type: 'code', text: ' (100).format() ', hasClosingBrackets: true },
|
|
{ type: 'text', text: '.' },
|
|
],
|
|
);
|
|
});
|
|
|
|
test('Unclosed expression', () => {
|
|
expect(splitExpression('{{ "test".toSnakeCase() }} you have ${{ (100).format()')).toEqual([
|
|
{ type: 'text', text: '' },
|
|
{ type: 'code', text: ' "test".toSnakeCase() ', hasClosingBrackets: true },
|
|
{ type: 'text', text: ' you have $' },
|
|
{ type: 'code', text: ' (100).format()', hasClosingBrackets: false },
|
|
]);
|
|
});
|
|
|
|
test('Escaped opening bracket', () => {
|
|
expect(splitExpression('test \\{{ no code }}')).toEqual([
|
|
{ type: 'text', text: 'test \\{{ no code }}' },
|
|
]);
|
|
});
|
|
|
|
test('Escaped closing bracket', () => {
|
|
expect(splitExpression('test {{ code.test("\\}}") }}')).toEqual([
|
|
{ type: 'text', text: 'test ' },
|
|
{ type: 'code', text: ' code.test("}}") ', hasClosingBrackets: true },
|
|
]);
|
|
});
|
|
|
|
test('Escaped backslashes before double opening curly braces', () => {
|
|
const expr =
|
|
'C:\\\\Users\\\\Administrator\\\\Desktop\\\\abc\\\\{{ $json.files[0].fileName }}';
|
|
const result = splitExpression(expr);
|
|
|
|
expect(result).toEqual([
|
|
{
|
|
type: 'text',
|
|
text: 'C:\\Users\\Administrator\\Desktop\\abc\\',
|
|
},
|
|
{
|
|
type: 'code',
|
|
text: ' $json.files[0].fileName ',
|
|
hasClosingBrackets: true,
|
|
},
|
|
]);
|
|
});
|
|
});
|
|
|
|
describe('Compatible joining', () => {
|
|
test('Lone expression', () => {
|
|
expect(joinExpression(splitExpression('{{ "" }}'))).toEqual('{{ "" }}');
|
|
});
|
|
|
|
test('Multiple expression', () => {
|
|
expect(
|
|
joinExpression(
|
|
splitExpression('{{ "test".toSnakeCase() }} you have ${{ (100).format() }}.'),
|
|
),
|
|
).toEqual('{{ "test".toSnakeCase() }} you have ${{ (100).format() }}.');
|
|
});
|
|
|
|
test('Unclosed expression', () => {
|
|
expect(
|
|
joinExpression(splitExpression('{{ "test".toSnakeCase() }} you have ${{ (100).format()')),
|
|
).toEqual('{{ "test".toSnakeCase() }} you have ${{ (100).format()');
|
|
});
|
|
|
|
test('Escaped opening bracket', () => {
|
|
expect(joinExpression(splitExpression('test \\{{ no code }}'))).toEqual(
|
|
'test \\{{ no code }}',
|
|
);
|
|
});
|
|
|
|
test('Escaped closing bracket', () => {
|
|
expect(joinExpression(splitExpression('test {{ code.test("\\}}") }}'))).toEqual(
|
|
'test {{ code.test("\\}}") }}',
|
|
);
|
|
});
|
|
});
|
|
});
|