mirror of
				https://github.com/gohugoio/hugo.git
				synced 2024-05-11 05:54:58 +00:00 
			
		
		
		
	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%.
		
			
				
	
	
		
			131 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			131 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.
 | 
						|
-->
 | 
						|
`
 | 
						|
)
 |