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  )