mirror of
https://github.com/sbrow/thor.git
synced 2026-10-25 10:11:55 -04:00
380 lines
12 KiB
YAML
380 lines
12 KiB
YAML
# This file contains tests for all known mustache syntax errors and their
|
|
# desired error messages. Each one is converted into an Odin test.
|
|
name: Missing 2nd closing brace
|
|
enable: false # TODO: Re-enable when passing
|
|
should: error
|
|
input: |
|
|
<menu>
|
|
<a class="goto-top opacity-0" href="#">{{> icons/chevron_up}</a>
|
|
{{#params.social}}
|
|
<a href="{{url}}" target="_blank" rel="noopener noreferrer me" title="{{name}}">{{>* icon}}</a>
|
|
{{/params.social}}
|
|
</menu>
|
|
<p>Proudly built with <a href="https://github.com/sbrow/thor/">Thor</a> and <a
|
|
expected: |
|
|
Missing closing brace
|
|
--> <test>:1:1
|
|
1 | <menu>
|
|
2 | <a class="goto-top opacity-0" href="#">{{> icons/chevron_up}</a>
|
|
| ^^ opened ^ never closed
|
|
3 | {{#params.social}}
|
|
4 | <a href="{{url}}" target="_blank" rel="noopener noreferrer me" title="{{name}}">{{>* icon}}</a>
|
|
5 | {{/params.social}}
|
|
|
|
|
---
|
|
name: Missing 2nd opening brace
|
|
enable: false # TODO: Re-enable when passing
|
|
should: error
|
|
input: |
|
|
<menu>
|
|
<a class="goto-top opacity-0" href="#">{> icons/chevron_up}}</a>
|
|
{{#params.social}}
|
|
<a href="{{url}}" target="_blank" rel="noopener noreferrer me" title="{{name}}">{{>* icon}}</a>
|
|
{{/params.social}}
|
|
</menu>
|
|
<p>Proudly built with <a href="https://github.com/sbrow/thor/">Thor</a> and <a
|
|
expected: |
|
|
Missing opening brace
|
|
--> <test>:1:1
|
|
1 | <menu>
|
|
2 | <a class="goto-top opacity-0" href="#">{> icons/chevron_up}}</a>
|
|
| ^ opened ^^ closed
|
|
3 | {{#params.social}}
|
|
4 | <a href="{{url}}" target="_blank" rel="noopener noreferrer me" title="{{name}}">{{>* icon}}</a>
|
|
5 | {{/params.social}}
|
|
|
|
|
---
|
|
# TODO: make it work
|
|
name: Invalid timezone
|
|
enable: false
|
|
should: warn
|
|
input: |
|
|
{
|
|
"date": {
|
|
"timezone": "America/New_Yorkside"
|
|
}
|
|
}
|
|
expected: "Did you mean 'America/New_York'? pointing to line+col no in the config"
|
|
actual: |
|
|
[WARN ] --- [148:init_site()] unable to load timezone 'America/New_Yorkside'
|
|
---
|
|
name: Mismatched section tags
|
|
enable: false # TODO: Re-enable when passing
|
|
should: error
|
|
input: |
|
|
<footer>
|
|
<menu>
|
|
<a class="goto-top opacity-0" href="#">{{> icons/chevron_up}}</a>
|
|
{{#params.ocial}}
|
|
<a href="{{url}}" target="_blank" rel="noopener noreferrer me" title="{{name}}">{{>* icon}}</a>
|
|
{{/params.social}}
|
|
</menu>
|
|
<p>Proudly built with <a href="https://github.com/sbrow/thor/">Thor</a> and <a
|
|
href="https://edwardtufte.github.io/tufte-css/">Tufte CSS</a>
|
|
</p>
|
|
<p><small>©</small> {{now | format "2006" }} {{params.author.name}}</p>
|
|
</footer>
|
|
expected: |
|
|
Mismatched section: 'ocial' opened, 'social' closed
|
|
--> <test>:4:5
|
|
|
|
|
4 | {{#params.ocial}}
|
|
| ^^^^^ opened — did you mean 'social'?
|
|
5 | <a href="{{url}}" target="_blank" rel="noopener noreferrer me" title="{{name}}">{{>* icon}}</a>
|
|
6 | {{/params.social}}
|
|
| ^^^^^^ expected {{/params.ocial}}, got {{/params.social}}
|
|
|
|
|
---
|
|
name: Missing closing section
|
|
enable: false # TODO: Re-enable when passing
|
|
should: error
|
|
input: |
|
|
<footer>
|
|
<menu>
|
|
<a class="goto-top opacity-0" href="#">{{> icons/chevron_up}}</a>
|
|
{{#params.social}}
|
|
<a href="{{url}}" target="_blank" rel="noopener noreferrer me" title="{{name}}">{{>* icon}}</a>
|
|
<!-- {{/params.social}} -->
|
|
</menu>
|
|
<p>Proudly built with <a href="https://github.com/sbrow/thor/">Thor</a> and <a
|
|
href="https://edwardtufte.github.io/tufte-css/">Tufte CSS</a>
|
|
</p>
|
|
<p><small>©</small> {{now | format "2006" }} {{params.author.name}}</p>
|
|
</footer>
|
|
expected: |
|
|
Missing closing tag '{{/params.social}}'
|
|
--> <test>:4:5
|
|
|
|
|
4 | {{#params.social}}
|
|
| ^^^^^^^^^^^^^^^^^ opened
|
|
5 | <a href="{{url}}" target="_blank" rel="noopener noreferrer me" title="{{name}}">{{>* icon}}</a>
|
|
6 | <!-- {{/params.social}} -->
|
|
| ^^^^^^^^^^^^^^^^^^ closing tag is commented out
|
|
|
|
|
---
|
|
name: empty tag
|
|
enable: true
|
|
should: error
|
|
input: |
|
|
<footer>
|
|
<menu>
|
|
<a class="goto-top opacity-0" href="#">{{> icons/chevron_up}}</a>
|
|
{{#params.social}}
|
|
<a href="{{url}}" target="_blank" rel="noopener noreferrer me" title="{{name}}">{{>* icon}}</a>
|
|
{{/params.social}}
|
|
</menu>
|
|
<p>Proudly built with <a href="https://github.com/sbrow/thor/">Thor</a> and <a
|
|
href="https://edwardtufte.github.io/tufte-css/">Tufte CSS</a>
|
|
</p>
|
|
<p><small>©</small> {{}} {{params.author.name}}</p>
|
|
</footer>
|
|
expected: |
|
|
Empty tag
|
|
--> <test>:11:28
|
|
|
|
|
9 | href="https://edwardtufte.github.io/tufte-css/">Tufte CSS</a>
|
|
10 | </p>
|
|
11 | <p><small>©</small> {{}} {{params.author.name}}</p>
|
|
| ^^^^ tag must contain a key
|
|
12 | </footer>
|
|
|
|
|
---
|
|
name: empty raw tag
|
|
enable: true
|
|
should: error
|
|
input: |
|
|
Hello, {{&}}
|
|
expected: |
|
|
Empty tag
|
|
--> <test>:1:8
|
|
|
|
|
1 | Hello, {{&}}
|
|
| ^^^^^ tag must contain a key
|
|
|
|
|
---
|
|
name: Missing pipe arguement
|
|
enable: true
|
|
should: error
|
|
input: |
|
|
<footer>
|
|
<menu>
|
|
<a class="goto-top opacity-0" href="#">{{> icons/chevron_up}}</a>
|
|
{{#params.social}}
|
|
<a href="{{url}}" target="_blank" rel="noopener noreferrer me" title="{{name}}">{{>* icon}}</a>
|
|
{{/params.social}}
|
|
</menu>
|
|
<p>Proudly built with <a href="https://github.com/sbrow/thor/">Thor</a> and <a
|
|
href="https://edwardtufte.github.io/tufte-css/">Tufte CSS</a>
|
|
</p>
|
|
<p><small>©</small> {{now | group_by }} {{params.author.name}}</p>
|
|
</footer>
|
|
expected: |
|
|
group_by expects 1 argument, got 0
|
|
--> <test>:11:36
|
|
|
|
|
9 | href="https://edwardtufte.github.io/tufte-css/">Tufte CSS</a>
|
|
10 | </p>
|
|
11 | <p><small>©</small> {{now | group_by }} {{params.author.name}}</p>
|
|
| ^^^^^^^^ missing argument
|
|
12 | </footer>
|
|
|
|
|
---
|
|
name: Double dot access
|
|
enable: false # TODO: Re-enable when passing
|
|
should: error
|
|
input: |
|
|
<footer>
|
|
<menu>
|
|
<a class="goto-top opacity-0" href="#">{{> icons/chevron_up}}</a>
|
|
{{#params.social}}
|
|
<a href="{{url}}" target="_blank" rel="noopener noreferrer me" title="{{name}}">{{>* icon}}</a>
|
|
{{/params.social}}
|
|
</menu>
|
|
<p>Proudly built with <a href="https://github.com/sbrow/thor/">Thor</a> and <a
|
|
href="https://edwardtufte.github.io/tufte-css/">Tufte CSS</a>
|
|
</p>
|
|
<p><small>©</small> {{now | format "2006" }} {{params..name}}</p>
|
|
</footer>
|
|
expected: |
|
|
Invalid key path: consecutive dots
|
|
--> <test>:11:60
|
|
|
|
|
9 | href="https://edwardtufte.github.io/tufte-css/">Tufte CSS</a>
|
|
10 | </p>
|
|
11 | <p><small>©</small> {{now | format "2006" }} {{params..name}}</p>
|
|
| ^^ missing path name
|
|
12 | </footer>
|
|
|
|
|
---
|
|
name: Too many opening braces
|
|
enable: false # TODO: Re-enable when passing
|
|
should: error
|
|
input: |
|
|
<footer>
|
|
<menu>
|
|
<a class="goto-top opacity-0" href="#">{{> icons/chevron_up}}</a>
|
|
{{#params.social}}
|
|
<a href="{{url}}" target="_blank" rel="noopener noreferrer me" title="{{name}}">{{>* icon}}</a>
|
|
{{/params.social}}
|
|
</menu>
|
|
<p>Proudly built with <a href="https://github.com/sbrow/thor/">Thor</a> and <a
|
|
href="https://edwardtufte.github.io/tufte-css/">Tufte CSS</a>
|
|
</p>
|
|
<p><small>©</small> {{{{now | format "2006" }}} {{params.author.name}}</p>
|
|
</footer>
|
|
expected: |
|
|
Too many opening braces
|
|
--> <test>:11:28
|
|
|
|
|
9 | href="https://edwardtufte.github.io/tufte-css/">Tufte CSS</a>
|
|
10 | </p>
|
|
11 | <p><small>©</small> {{{{now | format "2006" }}} {{params.author.name}}</p>
|
|
| ^^^^ expected {{{, got {{{{
|
|
12 | </footer>
|
|
|
|
|
---
|
|
name: Too many closing braces
|
|
enable: false # TODO: Re-enable when passing
|
|
should: error
|
|
input: |
|
|
<footer>
|
|
<menu>
|
|
<a class="goto-top opacity-0" href="#">{{> icons/chevron_up}}</a>
|
|
{{#params.social}}
|
|
<a href="{{url}}" target="_blank" rel="noopener noreferrer me" title="{{name}}">{{>* icon}}</a>
|
|
{{/params.social}}
|
|
</menu>
|
|
<p>Proudly built with <a href="https://github.com/sbrow/thor/">Thor</a> and <a
|
|
href="https://edwardtufte.github.io/tufte-css/">Tufte CSS</a>
|
|
</p>
|
|
<p><small>©</small> {{now | format "2006" }}}} {{params.author.name}}</p>
|
|
</footer>
|
|
expected: |
|
|
Too many closing braces
|
|
--> <test>:11:50
|
|
|
|
|
9 | href="https://edwardtufte.github.io/tufte-css/">Tufte CSS</a>
|
|
10 | </p>
|
|
11 | <p><small>©</small> {{now | format "2006" }}}} {{params.author.name}}</p>
|
|
| ^^^^ expected }}, got }}}
|
|
12 | </footer>
|
|
|
|
|
---
|
|
# TODO: Implement
|
|
name: Frontmatter missing closing quote on key
|
|
enable: false
|
|
should: warn
|
|
input: |
|
|
{
|
|
"title: Docs"
|
|
}
|
|
|
|
[TOC]
|
|
|
|
## Introduction
|
|
expected: 'TODO:'
|
|
actual: |
|
|
[ERROR] --- [42:parse_frontmatter()] failed to parse frontmatter JSON: Expected_Colon_After_Key
|
|
---
|
|
# TODO: Implement
|
|
name: Fronmatter missing opening quote on value
|
|
should: warn
|
|
enable: false
|
|
input: |
|
|
{
|
|
"title": Docs"
|
|
}
|
|
|
|
[TOC]
|
|
|
|
## Introduction
|
|
expected: 'detailed diagnostic pointing to the point of failure and suggesting the addition of a quote'
|
|
actual: Nothing. The page compiles with no warnings or errors
|
|
---
|
|
name: No error when missing index page
|
|
enable: false # TODO: Re-enable when passing
|
|
should: error
|
|
expected: 'Your site has no index page! Please create an index.md or index.html file in ./content/'
|
|
---
|
|
# FIXME: Doesn't work properly
|
|
name: format pipe with no date format set
|
|
enable: false # TODO: Re-enable when passing
|
|
should: warn
|
|
input: '{{ now | format }}'
|
|
expected: |
|
|
no date format configured — set date.format in thor.json or specify a format, e.g. {{key | format "2 Jan 2006"}}
|
|
--> <test>:1:10
|
|
|
|
|
1 | {{now | format}}
|
|
| ^^^^^^ defaulting to "2 Jan 2006"
|
|
---
|
|
# TODO: called First/last, but only tests first
|
|
name: first/last with zero argument
|
|
enable: true
|
|
should: error
|
|
input: |
|
|
<ul>{{#items | first 0}}<li>{{.}}</li>{{/items}}</ul>
|
|
expected: |
|
|
argument must not be zero
|
|
--> <test>:1:16
|
|
|
|
|
1 | <ul>{{#items | first 0}}<li>{{.}}</li>{{/items}}</ul>
|
|
| ^^^^^^^
|
|
|
|
|
---
|
|
# TODO: called First/last, but only tests first
|
|
name: first/last with negative argument
|
|
enable: true
|
|
should: warn
|
|
input: |
|
|
<ul>{{#items | first -3}}<li>{{.}}</li>{{/items}}</ul>
|
|
expected: |
|
|
first -3 is equivalent to last 3
|
|
--> <test>:1:16
|
|
|
|
|
1 | <ul>{{#items | first -3}}<li>{{.}}</li>{{/items}}</ul>
|
|
| ^^^^^^^^ consider using the clearer form
|
|
|
|
|
---
|
|
# TODO: called First/last, but only tests first
|
|
name: first/last on string with no argument
|
|
# enable: true
|
|
input: '{{word | first}}'
|
|
should: warn
|
|
expected: |
|
|
defaulting to n=1 for string
|
|
--> <test>:1:1
|
|
|
|
|
1 | {{word | first}}
|
|
| ^^^^^ consider specifying n explicitly
|
|
|
|
|
---
|
|
name: "first succeeds on params.author.name"
|
|
enable: true
|
|
input: '{{ params.author.name | first 3 }}'
|
|
should: ok
|
|
expected: "foo"
|
|
---
|
|
# TODO: called First/last, but only tests first
|
|
# TODO: Include | last 3 }} in the suggestion.
|
|
name: "first/last in partial"
|
|
enable: true
|
|
input: "{{> footer }}"
|
|
should: warn
|
|
expected: |
|
|
first -3 is equivalent to last 3
|
|
--> fixtures/layouts/partials/footer.html:11:78
|
|
|
|
|
9 | href="https://edwardtufte.github.io/tufte-css/">Tufte CSS</a>
|
|
10 | </p>
|
|
11 | <p><small>©</small> {{! now | format "2006" }} {{params.author.name | first -3 }}</p>
|
|
| ^^^^^^^^ consider using the clearer form
|
|
12 | </footer>
|
|
|
|
|
---
|
|
name: "Pipes are ignored in comments"
|
|
enable: true
|
|
should: ok
|
|
input: 'Hello, {{! now | format "2006" }}'
|
|
expected: 'Hello, '
|