| @@ -719,39 +719,203 @@ output: [Text(text="{{foo|\nb\nar\n=ba\nz}}")] | |||||
| --- | --- | ||||
| name: incomplete_tests | |||||
| "{{\nfoo\n|\nbar\n=\nb\naz\n|\nb\nuz\n}}" | |||||
| "{{\nfoo\n|\nb\nar\n|\nbaz\n=\nb\nuz\n}}" | |||||
| "{{\nfoo\n|\n{{\nbar\n|\nbaz\n=\nb\niz\n}}\n=\nb\nuzz\n}}" | |||||
| "{{foo{bar}}" | |||||
| "{{foo}bar}}" | |||||
| "{{{foobar}}" | |||||
| "{{foo{b{ar}}" | |||||
| "{{foo[bar}}" | |||||
| "{{foo]bar}}" | |||||
| "{{[foobar}}" | |||||
| "{{foobar]}}" | |||||
| "{{foo|ba{r}}" | |||||
| "{{foo|ba{r}}}" | |||||
| "{{foo|ba{r}=baz}}" | |||||
| "{{foo|ba[r]}}" | |||||
| "{{foobar" | |||||
| "{{foobar}" | |||||
| "{{foobar|" | |||||
| "{{foo|bar" | |||||
| "{{foo|bar|" | |||||
| "{{foo|bar=" | |||||
| "{{foo|bar=|" | |||||
| "{{foo|bar=baz" | |||||
| "{{foo|bar=baz|" | |||||
| "{{foo|bar|baz" | |||||
| "{{foo|bar|baz=" | |||||
| "{{foo|bar|baz=biz" | |||||
| "{{foo|bar=baz|biz" | |||||
| "{{foo|bar=baz|biz=" | |||||
| "{{foo|bar=baz|biz=buzz" | |||||
| name: newline_wildcard | |||||
| label: a random, complex assortment of templates and newlines | |||||
| input: "{{\nfoo\n|\nbar\n=\nb\naz\n|\nb\nuz\n}}" | |||||
| output: [TemplateOpen(), Text(text="\nfoo\n"), TemplateParamSeparator(), Text(text="\nbar\n"), TemplateParamEquals(), Text(text="\nb\naz\n"), TemplateParamSeparator(), Text(text="\nb\nuz\n"), TemplateClose()] | |||||
| --- | |||||
| name: newline_wildcard_redux | |||||
| label: an even more random and complex assortment of templates and newlines | |||||
| input: "{{\nfoo\n|\n{{\nbar\n|\nbaz\n=\nb\niz\n}}\n=\nb\nuzz\n}}" | |||||
| output: [TemplateOpen(), Text(text="\nfoo\n"), TemplateParamSeparator(), Text(text="\n"), TemplateOpen(), Text(text="\nbar\n"), TemplateParamSeparator(), Text(text="\nbaz\n"), TemplateParamEquals(), Text(text="\nb\niz\n"), TemplateClose(), Text(text="\n"), TemplateParamEquals(), Text(text="\nb\nuzz\n"), TemplateClose()] | |||||
| --- | |||||
| name: invalid_name_left_brace_middle | |||||
| label: invalid characters in template name: left brace in middle | |||||
| input: "{{foo{bar}}" | |||||
| output: [Text(text="{{foo{bar}}")] | |||||
| --- | |||||
| name: invalid_name_right_brace_middle | |||||
| label: invalid characters in template name: right brace in middle | |||||
| input: "{{foo}bar}}" | |||||
| output: [Text(text="{{foo}bar}}")] | |||||
| --- | |||||
| name: invalid_name_left_braces | |||||
| label: invalid characters in template name: two left braces in middle | |||||
| input: "{{foo{b{ar}}" | |||||
| output: [Text(text="{{foo{b{ar}}")] | |||||
| --- | |||||
| name: invalid_name_left_bracket_middle | |||||
| label: invalid characters in template name: left bracket in middle | |||||
| input: "{{foo[bar}}" | |||||
| output: [Text(text="{{foo[bar}}")] | |||||
| --- | |||||
| name: invalid_name_right_bracket_middle | |||||
| label: invalid characters in template name: right bracket in middle | |||||
| input: "{{foo]bar}}" | |||||
| output: [Text(text="{{foo]bar}}")] | |||||
| --- | |||||
| name: invalid_name_left_bracket_start | |||||
| label: invalid characters in template name: left bracket at start | |||||
| input: "{{[foobar}}" | |||||
| output: [Text(text="{{[foobar}}")] | |||||
| --- | |||||
| name: invalid_name_right_bracket_start | |||||
| label: invalid characters in template name: right bracket at end | |||||
| input: "{{foobar]}}" | |||||
| output: [Text(text="{{foobar]}}")] | |||||
| --- | |||||
| name: valid_name_left_brace_start | |||||
| label: valid characters in template name: left brace at start | |||||
| input: "{{{foobar}}" | |||||
| output: [Text(text="{"), TemplateOpen(), Text(text="foobar"), TemplateClose()] | |||||
| --- | |||||
| name: valid_unnamed_param_left_brace | |||||
| label: valid characters in unnamed template parameter: left brace | |||||
| input: "{{foo|ba{r}}" | |||||
| output: [TemplateOpen(), Text(text="foo"), TemplateParamSeparator(), Text(text="ba{r"), TemplateClose()] | |||||
| --- | |||||
| name: valid_unnamed_param_braces | |||||
| label: valid characters in unnamed template parameter: left and right braces | |||||
| input: "{{foo|ba{r}}}" | |||||
| output: [TemplateOpen(), Text(text="foo"), TemplateParamSeparator(), Text(text="ba{r"), TemplateClose(), Text(text="}")] | |||||
| --- | |||||
| name: valid_param_name_braces | |||||
| label: valid characters in template parameter name: left and right braces | |||||
| input: "{{foo|ba{r}=baz}}" | |||||
| output: [TemplateOpen(), Text(text="foo"), TemplateParamSeparator(), Text(text="ba{r}"), TemplateParamEquals(), Text(text="baz"), TemplateClose()] | |||||
| --- | |||||
| name: valid_param_name_brackets | |||||
| label: valid characters in unnamed template parameter: left and right brackets | |||||
| input: "{{foo|ba[r]}}" | |||||
| output: [TemplateOpen(), Text(text="foo"), TemplateParamSeparator(), Text(text="ba[r]"), TemplateClose()] | |||||
| --- | |||||
| name: incomplete_plain | |||||
| label: incomplete templates that should fail gracefully: no close whatsoever | |||||
| input: "{{stuff}} {{foobar" | |||||
| output: [TemplateOpen(), Text(text="stuff"), TemplateClose(), Text(text=" {{foobar")] | |||||
| --- | |||||
| name: incomplete_right_brace | |||||
| label: incomplete templates that should fail gracefully: only one right brace | |||||
| input: "{{stuff}} {{foobar}" | |||||
| output: [TemplateOpen(), Text(text="stuff"), TemplateClose(), Text(text=" {{foobar}")] | |||||
| --- | |||||
| name: incomplete_pipe | |||||
| label: incomplete templates that should fail gracefully: a pipe | |||||
| input: "{{stuff}} {{foobar|" | |||||
| output: [TemplateOpen(), Text(text="stuff"), TemplateClose(), Text(text=" {{foobar|")] | |||||
| --- | |||||
| name: incomplete_unnamed_param | |||||
| label: incomplete templates that should fail gracefully: an unnamed parameter | |||||
| input: "{{stuff}} {{foo|bar" | |||||
| output: [TemplateOpen(), Text(text="stuff"), TemplateClose(), Text(text=" {{foo|bar")] | |||||
| --- | |||||
| name: incomplete_unnamed_param_pipe | |||||
| label: incomplete templates that should fail gracefully: an unnamed parameter, then a pipe | |||||
| input: "{{stuff}} {{foo|bar|" | |||||
| output: [TemplateOpen(), Text(text="stuff"), TemplateClose(), Text(text=" {{foo|bar|")] | |||||
| --- | |||||
| name: incomplete_valueless_param | |||||
| label: incomplete templates that should fail gracefully: an a named parameter with no value | |||||
| input: "{{stuff}} {{foo|bar=" | |||||
| output: [TemplateOpen(), Text(text="stuff"), TemplateClose(), Text(text=" {{foo|bar=")] | |||||
| --- | |||||
| name: incomplete_valueless_param_pipe | |||||
| label: incomplete templates that should fail gracefully: a named parameter with no value, then a pipe | |||||
| input: "{{stuff}} {{foo|bar=|" | |||||
| output: [TemplateOpen(), Text(text="stuff"), TemplateClose(), Text(text=" {{foo|bar=|")] | |||||
| --- | |||||
| name: incomplete_named_param | |||||
| label: incomplete templates that should fail gracefully: a named parameter with a value | |||||
| input: "{{stuff}} {{foo|bar=baz" | |||||
| output: [TemplateOpen(), Text(text="stuff"), TemplateClose(), Text(text=" {{foo|bar=baz")] | |||||
| --- | |||||
| name: incomplete_named_param_pipe | |||||
| label: incomplete templates that should fail gracefully: a named parameter with a value, then a paipe | |||||
| input: "{{stuff}} {{foo|bar=baz|" | |||||
| output: [TemplateOpen(), Text(text="stuff"), TemplateClose(), Text(text=" {{foo|bar=baz|")] | |||||
| --- | |||||
| name: incomplete_two_unnamed_params | |||||
| label: incomplete templates that should fail gracefully: two unnamed parameters | |||||
| input: "{{stuff}} {{foo|bar|baz" | |||||
| output: [TemplateOpen(), Text(text="stuff"), TemplateClose(), Text(text=" {{foo|bar|baz")] | |||||
| --- | |||||
| name: incomplete_unnamed_param_valueless_param | |||||
| label: incomplete templates that should fail gracefully: an unnamed parameter, then a named parameter with no value | |||||
| input: "{{stuff}} {{foo|bar|baz=" | |||||
| output: [TemplateOpen(), Text(text="stuff"), TemplateClose(), Text(text=" {{foo|bar|baz=")] | |||||
| --- | |||||
| name: incomplete_unnamed_param_named_param | |||||
| label: incomplete templates that should fail gracefully: an unnamed parameter, then a named parameter with a value | |||||
| input: "{{stuff}} {{foo|bar|baz=biz" | |||||
| output: [TemplateOpen(), Text(text="stuff"), TemplateClose(), Text(text=" {{foo|bar|baz=biz")] | |||||
| --- | |||||
| name: incomplete_named_param_unnamed_param | |||||
| label: incomplete templates that should fail gracefully: a named parameter with a value, then an unnamed parameter | |||||
| input: "{{stuff}} {{foo|bar=baz|biz" | |||||
| output: [TemplateOpen(), Text(text="stuff"), TemplateClose(), Text(text=" {{foo|bar=baz|biz")] | |||||
| --- | |||||
| name: incomplete_named_param_valueless_param | |||||
| label: incomplete templates that should fail gracefully: a named parameter with a value, then a named parameter with no value | |||||
| input: "{{stuff}} {{foo|bar=baz|biz=" | |||||
| output: [TemplateOpen(), Text(text="stuff"), TemplateClose(), Text(text=" {{foo|bar=baz|biz=")] | |||||
| --- | |||||
| name: incomplete_two_named_params | |||||
| label: incomplete templates that should fail gracefully: two named parameters with values | |||||
| input: "{{stuff}} {{foo|bar=baz|biz=buzz" | |||||
| output: [TemplateOpen(), Text(text="stuff"), TemplateClose(), Text(text=" {{foo|bar=baz|biz=buzz")] | |||||