mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-21 20:46:30 -05:00
f039e3be9e
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%.
130 lines
2.5 KiB
Go
130 lines
2.5 KiB
Go
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.
|
|
-->
|
|
`
|
|
)
|