overview: | Partial tags are used to expand an external template into the current template. The tag's content MUST be a non-whitespace character sequence NOT containing the current closing delimiter. This tag's content names the partial to inject. Set Delimiter tags MUST NOT affect the parsing of a partial. The partial MUST be rendered against the context stack local to the tag. If the named partial cannot be found, the empty string SHOULD be used instead, as in interpolations. Partial tags SHOULD be treated as standalone when appropriate. If this tag is used standalone, any whitespace preceding the tag should treated as indentation, and prepended to each line of the partial before rendering. tests: - name: Basic Behavior desc: The greater-than operator should expand to the named partial. data: { } template: '"{{>text}}"' partials: { text: 'from partial' } expected: '"from partial"' - name: Failed Lookup desc: The empty string should be used when the named partial is not found. data: { } template: '"{{>text}}"' partials: { } expected: '""' - name: Context desc: The greater-than operator should operate within the current context. data: { text: 'content' } template: '"{{>partial}}"' partials: { partial: '*{{text}}*' } expected: '"*content*"' - name: Recursion desc: The greater-than operator should properly recurse. data: { content: "X", nodes: [ { content: "Y", nodes: [] } ] } template: '{{>node}}' partials: { node: '{{content}}<{{#nodes}}{{>node}}{{/nodes}}>' } expected: 'X>' - name: Nested desc: The greater-than operator should work from within partials. data: { a: "hello", b: "world" } template: '{{>outer}}' partials: { outer: '*{{a}} {{>inner}}*', inner: '{{b}}!' } expected: '*hello world!*' # Whitespace Sensitivity - name: Surrounding Whitespace desc: The greater-than operator should not alter surrounding whitespace. data: { } template: '| {{>partial}} |' partials: { partial: "\t|\t" } expected: "| \t|\t |" - name: Inline Indentation desc: Whitespace should be left untouched. data: { data: '|' } template: " {{data}} {{> partial}}\n" partials: { partial: ">\n>" } expected: " | >\n>\n" - name: Standalone Line Endings desc: '"\r\n" should be considered a newline for standalone tags.' data: { } template: "|\r\n{{>partial}}\r\n|" partials: { partial: ">" } expected: "|\r\n>|" - name: Standalone Without Previous Line desc: Standalone tags should not require a newline to precede them. data: { } template: " {{>partial}}\n>" partials: { partial: ">\n>"} expected: " >\n >>" - name: Standalone Without Newline desc: Standalone tags should not require a newline to follow them. data: { } template: ">\n {{>partial}}" partials: { partial: ">\n>" } expected: ">\n >\n >" - name: Standalone Indentation desc: Each line of the partial should be indented before rendering. data: { content: "<\n->" } template: | \ {{>partial}} / partials: partial: | | {{{content}}} | expected: | \ | < -> | / # Whitespace Insensitivity - name: Padding Whitespace desc: Superfluous in-tag whitespace should be ignored. data: { boolean: true } template: "|{{> partial }}|" partials: { partial: "[]" } expected: '|[]|'