github.com/SDLMoe/hugo@v0.47.1/parser/page_test.go (about) 1 package parser 2 3 import ( 4 "fmt" 5 "strings" 6 "testing" 7 8 "github.com/stretchr/testify/assert" 9 "github.com/stretchr/testify/require" 10 ) 11 12 func TestPage(t *testing.T) { 13 cases := []struct { 14 raw string 15 16 content string 17 frontmatter string 18 renderable bool 19 metadata map[string]interface{} 20 }{ 21 { 22 testPageLeader + jsonPageFrontMatter + "\n" + testPageTrailer + jsonPageContent, 23 jsonPageContent, 24 jsonPageFrontMatter, 25 true, 26 map[string]interface{}{ 27 "title": "JSON Test 1", 28 "social": []interface{}{ 29 []interface{}{"a", "#"}, 30 []interface{}{"b", "#"}, 31 }, 32 }, 33 }, 34 { 35 testPageLeader + tomlPageFrontMatter + testPageTrailer + tomlPageContent, 36 tomlPageContent, 37 tomlPageFrontMatter, 38 true, 39 map[string]interface{}{ 40 "title": "TOML Test 1", 41 "social": []interface{}{ 42 []interface{}{"a", "#"}, 43 []interface{}{"b", "#"}, 44 }, 45 }, 46 }, 47 { 48 testPageLeader + yamlPageFrontMatter + testPageTrailer + yamlPageContent, 49 yamlPageContent, 50 yamlPageFrontMatter, 51 true, 52 map[string]interface{}{ 53 "title": "YAML Test 1", 54 "social": []interface{}{ 55 []interface{}{"a", "#"}, 56 []interface{}{"b", "#"}, 57 }, 58 }, 59 }, 60 { 61 testPageLeader + orgPageFrontMatter + orgPageContent, 62 orgPageContent, 63 orgPageFrontMatter, 64 true, 65 map[string]interface{}{ 66 "TITLE": "Org Test 1", 67 "categories": []string{"a", "b"}, 68 }, 69 }, 70 } 71 72 for i, c := range cases { 73 p := pageMust(ReadFrom(strings.NewReader(c.raw))) 74 meta, err := p.Metadata() 75 76 mesg := fmt.Sprintf("[%d]", i) 77 78 require.Nil(t, err, mesg) 79 assert.Equal(t, c.content, string(p.Content()), mesg+" content") 80 assert.Equal(t, c.frontmatter, string(p.FrontMatter()), mesg+" frontmatter") 81 assert.Equal(t, c.renderable, p.IsRenderable(), mesg+" renderable") 82 assert.Equal(t, c.metadata, meta, mesg+" metadata") 83 } 84 } 85 86 var ( 87 testWhitespace = "\t\t\n\n" 88 testPageLeader = "\ufeff" + testWhitespace + "<!--[metadata]>\n" 89 testPageTrailer = "\n<![end-metadata]-->\n" 90 91 jsonPageContent = "# JSON Test\n" 92 jsonPageFrontMatter = `{ 93 "title": "JSON Test 1", 94 "social": [ 95 ["a", "#"], 96 ["b", "#"] 97 ] 98 }` 99 100 tomlPageContent = "# TOML Test\n" 101 tomlPageFrontMatter = `+++ 102 title = "TOML Test 1" 103 social = [ 104 ["a", "#"], 105 ["b", "#"], 106 ] 107 +++ 108 ` 109 110 yamlPageContent = "# YAML Test\n" 111 yamlPageFrontMatter = `--- 112 title: YAML Test 1 113 social: 114 - - "a" 115 - "#" 116 - - "b" 117 - "#" 118 --- 119 ` 120 121 orgPageContent = "* Org Test\n" 122 orgPageFrontMatter = `#+TITLE: Org Test 1 123 #+categories: a b 124 ` 125 126 pageHTMLComment = `<!-- 127 This is a sample comment. 128 --> 129 ` 130 )