mirror of
https://github.com/gohugoio/hugo.git
synced 2024-05-11 05:54:58 +00:00
parser: Refactor frontmatter parser and add tests
Lots of cleanups here: - Refactor InterfaceToConfig and InterfaceToFrontMatter to use io.Writer. - Simplify InterfaceToFrontMatter by wrapping InterfaceToConfig. - Export FrontmatterType since we return it in DetectFrontMatter. - Refactor removeTOMLIdentifier to avoid blindly replacing "+++". - Update HandleJSONMetaData to return an empty map on nil input. - Updates vendored goorgeous package and test for org-mode frontmatter. - Add tests and godoc comments. Coverage for parser package increased from 45.2% to 85.2%.
This commit is contained in:
committed by
Bjørn Erik Pedersen
parent
ddc8cc0082
commit
f039e3be9e
130
parser/page_test.go
Normal file
130
parser/page_test.go
Normal file
@@ -0,0 +1,130 @@
|
||||
package parser
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestPage(t *testing.T) {
|
||||
cases := []struct {
|
||||
raw string
|
||||
|
||||
content string
|
||||
frontmatter string
|
||||
renderable bool
|
||||
metadata map[string]interface{}
|
||||
}{
|
||||
{
|
||||
testPageLeader + jsonPageFrontMatter + "\n" + testPageTrailer + jsonPageContent,
|
||||
jsonPageContent,
|
||||
jsonPageFrontMatter,
|
||||
true,
|
||||
map[string]interface{}{
|
||||
"title": "JSON Test 1",
|
||||
"social": []interface{}{
|
||||
[]interface{}{"a", "#"},
|
||||
[]interface{}{"b", "#"},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
testPageLeader + tomlPageFrontMatter + testPageTrailer + tomlPageContent,
|
||||
tomlPageContent,
|
||||
tomlPageFrontMatter,
|
||||
true,
|
||||
map[string]interface{}{
|
||||
"title": "TOML Test 1",
|
||||
"social": []interface{}{
|
||||
[]interface{}{"a", "#"},
|
||||
[]interface{}{"b", "#"},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
testPageLeader + yamlPageFrontMatter + testPageTrailer + yamlPageContent,
|
||||
yamlPageContent,
|
||||
yamlPageFrontMatter,
|
||||
true,
|
||||
map[string]interface{}{
|
||||
"title": "YAML Test 1",
|
||||
"social": []interface{}{
|
||||
[]interface{}{"a", "#"},
|
||||
[]interface{}{"b", "#"},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
testPageLeader + orgPageFrontMatter + orgPageContent,
|
||||
orgPageContent,
|
||||
orgPageFrontMatter,
|
||||
true,
|
||||
map[string]interface{}{
|
||||
"TITLE": "Org Test 1",
|
||||
"categories": []string{"a", "b"},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
for i, c := range cases {
|
||||
p := pageMust(ReadFrom(strings.NewReader(c.raw)))
|
||||
meta, err := p.Metadata()
|
||||
|
||||
mesg := fmt.Sprintf("[%d]", i)
|
||||
|
||||
require.Nil(t, err, mesg)
|
||||
assert.Equal(t, c.content, string(p.Content()), mesg+" content")
|
||||
assert.Equal(t, c.frontmatter, string(p.FrontMatter()), mesg+" frontmatter")
|
||||
assert.Equal(t, c.renderable, p.IsRenderable(), mesg+" renderable")
|
||||
assert.Equal(t, c.metadata, meta, mesg+" metadata")
|
||||
}
|
||||
}
|
||||
|
||||
var (
|
||||
testWhitespace = "\t\t\n\n"
|
||||
testPageLeader = "\ufeff" + testWhitespace + "<!--[metadata]>\n"
|
||||
testPageTrailer = "\n<![end-metadata]-->\n"
|
||||
|
||||
jsonPageContent = "# JSON Test\n"
|
||||
jsonPageFrontMatter = `{
|
||||
"title": "JSON Test 1",
|
||||
"social": [
|
||||
["a", "#"],
|
||||
["b", "#"]
|
||||
]
|
||||
}`
|
||||
|
||||
tomlPageContent = "# TOML Test\n"
|
||||
tomlPageFrontMatter = `+++
|
||||
title = "TOML Test 1"
|
||||
social = [
|
||||
["a", "#"],
|
||||
["b", "#"],
|
||||
]
|
||||
+++
|
||||
`
|
||||
|
||||
yamlPageContent = "# YAML Test\n"
|
||||
yamlPageFrontMatter = `---
|
||||
title: YAML Test 1
|
||||
social:
|
||||
- - "a"
|
||||
- "#"
|
||||
- - "b"
|
||||
- "#"
|
||||
---
|
||||
`
|
||||
|
||||
orgPageContent = "* Org Test\n"
|
||||
orgPageFrontMatter = `#+TITLE: Org Test 1
|
||||
#+categories: a b
|
||||
`
|
||||
|
||||
pageHTMLComment = `<!--
|
||||
This is a sample comment.
|
||||
-->
|
||||
`
|
||||
)
|
Reference in New Issue
Block a user