| overview: | |
| Set Delimiter tags are used to change the tag delimiters for all content |
| following the tag in the current compilation unit. |
| |
| The tag's content MUST be any two non-whitespace sequences (separated by |
| whitespace) EXCEPT an equals sign ('=') followed by the current closing |
| delimiter. |
| |
| Set Delimiter tags SHOULD be treated as standalone when appropriate. |
| tests: |
| - name: Pair Behavior |
| desc: The equals sign (used on both sides) should permit delimiter changes. |
| data: { text: 'Hey!' } |
| template: '{{=<% %>=}}(<%text%>)' |
| expected: '(Hey!)' |
| |
| - name: Special Characters |
| desc: Characters with special meaning regexen should be valid delimiters. |
| data: { text: 'It worked!' } |
| template: '({{=[ ]=}}[text])' |
| expected: '(It worked!)' |
| |
| - name: Sections |
| desc: Delimiters set outside sections should persist. |
| data: { section: true, data: 'I got interpolated.' } |
| template: | |
| [ |
| {{#section}} |
| {{data}} |
| |data| |
| {{/section}} |
| |
| {{= | | =}} |
| |#section| |
| {{data}} |
| |data| |
| |/section| |
| ] |
| expected: | |
| [ |
| I got interpolated. |
| |data| |
| |
| {{data}} |
| I got interpolated. |
| ] |
| |
| - name: Inverted Sections |
| desc: Delimiters set outside inverted sections should persist. |
| data: { section: false, data: 'I got interpolated.' } |
| template: | |
| [ |
| {{^section}} |
| {{data}} |
| |data| |
| {{/section}} |
| |
| {{= | | =}} |
| |^section| |
| {{data}} |
| |data| |
| |/section| |
| ] |
| expected: | |
| [ |
| I got interpolated. |
| |data| |
| |
| {{data}} |
| I got interpolated. |
| ] |
| |
| - name: Partial Inheritence |
| desc: Delimiters set in a parent template should not affect a partial. |
| data: { value: 'yes' } |
| partials: |
| include: '.{{value}}.' |
| template: | |
| [ {{>include}} ] |
| {{= | | =}} |
| [ |>include| ] |
| expected: | |
| [ .yes. ] |
| [ .yes. ] |
| |
| - name: Post-Partial Behavior |
| desc: Delimiters set in a partial should not affect the parent template. |
| data: { value: 'yes' } |
| partials: |
| include: '.{{value}}. {{= | | =}} .|value|.' |
| template: | |
| [ {{>include}} ] |
| [ .{{value}}. .|value|. ] |
| expected: | |
| [ .yes. .yes. ] |
| [ .yes. .|value|. ] |
| |
| # Whitespace Sensitivity |
| |
| - name: Surrounding Whitespace |
| desc: Surrounding whitespace should be left untouched. |
| data: { } |
| template: '| {{=@ @=}} |' |
| expected: '| |' |
| |
| - name: Outlying Whitespace (Inline) |
| desc: Whitespace should be left untouched. |
| data: { } |
| template: " | {{=@ @=}}\n" |
| expected: " | \n" |
| |
| - name: Standalone Tag |
| desc: Standalone lines should be removed from the template. |
| data: { } |
| template: | |
| Begin. |
| {{=@ @=}} |
| End. |
| expected: | |
| Begin. |
| End. |
| |
| - name: Indented Standalone Tag |
| desc: Indented standalone lines should be removed from the template. |
| data: { } |
| template: | |
| Begin. |
| {{=@ @=}} |
| End. |
| expected: | |
| Begin. |
| End. |
| |
| - name: Standalone Line Endings |
| desc: '"\r\n" should be considered a newline for standalone tags.' |
| data: { } |
| template: "|\r\n{{= @ @ =}}\r\n|" |
| expected: "|\r\n|" |
| |
| - name: Standalone Without Previous Line |
| desc: Standalone tags should not require a newline to precede them. |
| data: { } |
| template: " {{=@ @=}}\n=" |
| expected: "=" |
| |
| - name: Standalone Without Newline |
| desc: Standalone tags should not require a newline to follow them. |
| data: { } |
| template: "=\n {{=@ @=}}" |
| expected: "=\n" |
| |
| # Whitespace Insensitivity |
| |
| - name: Pair with Padding |
| desc: Superfluous in-tag whitespace should be ignored. |
| data: { } |
| template: '|{{= @ @ =}}|' |
| expected: '||' |