mirror of
https://github.com/gohugoio/hugo.git
synced 2025-08-20 21:31:32 +02:00
Create a struct with all of Hugo's config options
Primary motivation is documentation, but it will also hopefully simplify the code. Also, * Lower case the default output format names; this is in line with the custom ones (map keys) and how it's treated all the places. This avoids doing `stringds.EqualFold` everywhere. Closes #10896 Closes #10620
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
// Copyright 2020 The Hugo Authors. All rights reserved.
|
||||
// Copyright 2023 The Hugo Authors. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
@@ -15,7 +15,7 @@
|
||||
// external binary. The `asciidoc` module is reserved for a future golang
|
||||
// implementation.
|
||||
|
||||
package asciidocext
|
||||
package asciidocext_test
|
||||
|
||||
import (
|
||||
"path/filepath"
|
||||
@@ -26,8 +26,12 @@ import (
|
||||
"github.com/gohugoio/hugo/common/loggers"
|
||||
"github.com/gohugoio/hugo/config"
|
||||
"github.com/gohugoio/hugo/config/security"
|
||||
"github.com/gohugoio/hugo/config/testconfig"
|
||||
"github.com/gohugoio/hugo/markup/asciidocext"
|
||||
"github.com/gohugoio/hugo/markup/asciidocext/internal"
|
||||
"github.com/gohugoio/hugo/markup/converter"
|
||||
"github.com/gohugoio/hugo/markup/markup_config"
|
||||
"github.com/spf13/afero"
|
||||
|
||||
qt "github.com/frankban/quicktest"
|
||||
)
|
||||
@@ -35,13 +39,12 @@ import (
|
||||
func TestAsciidoctorDefaultArgs(t *testing.T) {
|
||||
c := qt.New(t)
|
||||
cfg := config.New()
|
||||
mconf := markup_config.Default
|
||||
conf := testconfig.GetTestConfig(afero.NewMemMapFs(), cfg)
|
||||
|
||||
p, err := Provider.New(
|
||||
p, err := asciidocext.Provider.New(
|
||||
converter.ProviderConfig{
|
||||
Cfg: cfg,
|
||||
MarkupConfig: mconf,
|
||||
Logger: loggers.NewErrorLogger(),
|
||||
Conf: conf,
|
||||
Logger: loggers.NewErrorLogger(),
|
||||
},
|
||||
)
|
||||
c.Assert(err, qt.IsNil)
|
||||
@@ -49,17 +52,16 @@ func TestAsciidoctorDefaultArgs(t *testing.T) {
|
||||
conv, err := p.New(converter.DocumentContext{})
|
||||
c.Assert(err, qt.IsNil)
|
||||
|
||||
ac := conv.(*asciidocConverter)
|
||||
ac := conv.(*internal.AsciidocConverter)
|
||||
c.Assert(ac, qt.Not(qt.IsNil))
|
||||
|
||||
args := ac.parseArgs(converter.DocumentContext{})
|
||||
args := ac.ParseArgs(converter.DocumentContext{})
|
||||
expected := []string{"--no-header-footer"}
|
||||
c.Assert(args, qt.DeepEquals, expected)
|
||||
}
|
||||
|
||||
func TestAsciidoctorNonDefaultArgs(t *testing.T) {
|
||||
c := qt.New(t)
|
||||
cfg := config.New()
|
||||
mconf := markup_config.Default
|
||||
mconf.AsciidocExt.Backend = "manpage"
|
||||
mconf.AsciidocExt.NoHeaderOrFooter = false
|
||||
@@ -68,11 +70,13 @@ func TestAsciidoctorNonDefaultArgs(t *testing.T) {
|
||||
mconf.AsciidocExt.Verbose = true
|
||||
mconf.AsciidocExt.Trace = false
|
||||
mconf.AsciidocExt.FailureLevel = "warn"
|
||||
p, err := Provider.New(
|
||||
|
||||
conf := testconfig.GetTestConfigSectionFromStruct("markup", mconf)
|
||||
|
||||
p, err := asciidocext.Provider.New(
|
||||
converter.ProviderConfig{
|
||||
Cfg: cfg,
|
||||
MarkupConfig: mconf,
|
||||
Logger: loggers.NewErrorLogger(),
|
||||
Conf: conf,
|
||||
Logger: loggers.NewErrorLogger(),
|
||||
},
|
||||
)
|
||||
c.Assert(err, qt.IsNil)
|
||||
@@ -80,28 +84,29 @@ func TestAsciidoctorNonDefaultArgs(t *testing.T) {
|
||||
conv, err := p.New(converter.DocumentContext{})
|
||||
c.Assert(err, qt.IsNil)
|
||||
|
||||
ac := conv.(*asciidocConverter)
|
||||
ac := conv.(*internal.AsciidocConverter)
|
||||
c.Assert(ac, qt.Not(qt.IsNil))
|
||||
|
||||
args := ac.parseArgs(converter.DocumentContext{})
|
||||
args := ac.ParseArgs(converter.DocumentContext{})
|
||||
expected := []string{"-b", "manpage", "--section-numbers", "--verbose", "--failure-level", "warn", "--safe-mode", "safe"}
|
||||
c.Assert(args, qt.DeepEquals, expected)
|
||||
}
|
||||
|
||||
func TestAsciidoctorDisallowedArgs(t *testing.T) {
|
||||
c := qt.New(t)
|
||||
cfg := config.New()
|
||||
mconf := markup_config.Default
|
||||
mconf.AsciidocExt.Backend = "disallowed-backend"
|
||||
mconf.AsciidocExt.Extensions = []string{"./disallowed-extension"}
|
||||
mconf.AsciidocExt.Attributes = map[string]string{"outdir": "disallowed-attribute"}
|
||||
mconf.AsciidocExt.SafeMode = "disallowed-safemode"
|
||||
mconf.AsciidocExt.FailureLevel = "disallowed-failurelevel"
|
||||
p, err := Provider.New(
|
||||
|
||||
conf := testconfig.GetTestConfigSectionFromStruct("markup", mconf)
|
||||
|
||||
p, err := asciidocext.Provider.New(
|
||||
converter.ProviderConfig{
|
||||
Cfg: cfg,
|
||||
MarkupConfig: mconf,
|
||||
Logger: loggers.NewErrorLogger(),
|
||||
Conf: conf,
|
||||
Logger: loggers.NewErrorLogger(),
|
||||
},
|
||||
)
|
||||
c.Assert(err, qt.IsNil)
|
||||
@@ -109,24 +114,23 @@ func TestAsciidoctorDisallowedArgs(t *testing.T) {
|
||||
conv, err := p.New(converter.DocumentContext{})
|
||||
c.Assert(err, qt.IsNil)
|
||||
|
||||
ac := conv.(*asciidocConverter)
|
||||
ac := conv.(*internal.AsciidocConverter)
|
||||
c.Assert(ac, qt.Not(qt.IsNil))
|
||||
|
||||
args := ac.parseArgs(converter.DocumentContext{})
|
||||
args := ac.ParseArgs(converter.DocumentContext{})
|
||||
expected := []string{"--no-header-footer"}
|
||||
c.Assert(args, qt.DeepEquals, expected)
|
||||
}
|
||||
|
||||
func TestAsciidoctorArbitraryExtension(t *testing.T) {
|
||||
c := qt.New(t)
|
||||
cfg := config.New()
|
||||
mconf := markup_config.Default
|
||||
mconf.AsciidocExt.Extensions = []string{"arbitrary-extension"}
|
||||
p, err := Provider.New(
|
||||
conf := testconfig.GetTestConfigSectionFromStruct("markup", mconf)
|
||||
p, err := asciidocext.Provider.New(
|
||||
converter.ProviderConfig{
|
||||
Cfg: cfg,
|
||||
MarkupConfig: mconf,
|
||||
Logger: loggers.NewErrorLogger(),
|
||||
Conf: conf,
|
||||
Logger: loggers.NewErrorLogger(),
|
||||
},
|
||||
)
|
||||
c.Assert(err, qt.IsNil)
|
||||
@@ -134,17 +138,17 @@ func TestAsciidoctorArbitraryExtension(t *testing.T) {
|
||||
conv, err := p.New(converter.DocumentContext{})
|
||||
c.Assert(err, qt.IsNil)
|
||||
|
||||
ac := conv.(*asciidocConverter)
|
||||
ac := conv.(*internal.AsciidocConverter)
|
||||
c.Assert(ac, qt.Not(qt.IsNil))
|
||||
|
||||
args := ac.parseArgs(converter.DocumentContext{})
|
||||
args := ac.ParseArgs(converter.DocumentContext{})
|
||||
expected := []string{"-r", "arbitrary-extension", "--no-header-footer"}
|
||||
c.Assert(args, qt.DeepEquals, expected)
|
||||
}
|
||||
|
||||
func TestAsciidoctorDisallowedExtension(t *testing.T) {
|
||||
c := qt.New(t)
|
||||
cfg := config.New()
|
||||
|
||||
for _, disallowedExtension := range []string{
|
||||
`foo-bar//`,
|
||||
`foo-bar\\ `,
|
||||
@@ -156,11 +160,11 @@ func TestAsciidoctorDisallowedExtension(t *testing.T) {
|
||||
} {
|
||||
mconf := markup_config.Default
|
||||
mconf.AsciidocExt.Extensions = []string{disallowedExtension}
|
||||
p, err := Provider.New(
|
||||
conf := testconfig.GetTestConfigSectionFromStruct("markup", mconf)
|
||||
p, err := asciidocext.Provider.New(
|
||||
converter.ProviderConfig{
|
||||
Cfg: cfg,
|
||||
MarkupConfig: mconf,
|
||||
Logger: loggers.NewErrorLogger(),
|
||||
Conf: conf,
|
||||
Logger: loggers.NewErrorLogger(),
|
||||
},
|
||||
)
|
||||
c.Assert(err, qt.IsNil)
|
||||
@@ -168,10 +172,10 @@ func TestAsciidoctorDisallowedExtension(t *testing.T) {
|
||||
conv, err := p.New(converter.DocumentContext{})
|
||||
c.Assert(err, qt.IsNil)
|
||||
|
||||
ac := conv.(*asciidocConverter)
|
||||
ac := conv.(*internal.AsciidocConverter)
|
||||
c.Assert(ac, qt.Not(qt.IsNil))
|
||||
|
||||
args := ac.parseArgs(converter.DocumentContext{})
|
||||
args := ac.ParseArgs(converter.DocumentContext{})
|
||||
expected := []string{"--no-header-footer"}
|
||||
c.Assert(args, qt.DeepEquals, expected)
|
||||
}
|
||||
@@ -179,15 +183,19 @@ func TestAsciidoctorDisallowedExtension(t *testing.T) {
|
||||
|
||||
func TestAsciidoctorWorkingFolderCurrent(t *testing.T) {
|
||||
c := qt.New(t)
|
||||
cfg := config.New()
|
||||
mconf := markup_config.Default
|
||||
mconf.AsciidocExt.WorkingFolderCurrent = true
|
||||
mconf.AsciidocExt.Trace = false
|
||||
p, err := Provider.New(
|
||||
cfg := config.FromTOMLConfigString(`
|
||||
[markup]
|
||||
[markup.asciidocext]
|
||||
workingFolderCurrent = true
|
||||
trace = false
|
||||
`)
|
||||
|
||||
conf := testconfig.GetTestConfig(afero.NewMemMapFs(), cfg)
|
||||
|
||||
p, err := asciidocext.Provider.New(
|
||||
converter.ProviderConfig{
|
||||
Cfg: cfg,
|
||||
MarkupConfig: mconf,
|
||||
Logger: loggers.NewErrorLogger(),
|
||||
Conf: conf,
|
||||
Logger: loggers.NewErrorLogger(),
|
||||
},
|
||||
)
|
||||
c.Assert(err, qt.IsNil)
|
||||
@@ -196,32 +204,35 @@ func TestAsciidoctorWorkingFolderCurrent(t *testing.T) {
|
||||
conv, err := p.New(ctx)
|
||||
c.Assert(err, qt.IsNil)
|
||||
|
||||
ac := conv.(*asciidocConverter)
|
||||
ac := conv.(*internal.AsciidocConverter)
|
||||
c.Assert(ac, qt.Not(qt.IsNil))
|
||||
|
||||
args := ac.parseArgs(ctx)
|
||||
args := ac.ParseArgs(ctx)
|
||||
c.Assert(len(args), qt.Equals, 5)
|
||||
c.Assert(args[0], qt.Equals, "--base-dir")
|
||||
c.Assert(filepath.ToSlash(args[1]), qt.Matches, "/tmp/hugo_asciidoc_ddd/docs/chapter2")
|
||||
c.Assert(args[2], qt.Equals, "-a")
|
||||
c.Assert(args[3], qt.Matches, `outdir=.*[/\\]{1,2}asciidocext[/\\]{1,2}chapter2`)
|
||||
c.Assert(args[3], qt.Matches, `outdir=.*chapter2`)
|
||||
c.Assert(args[4], qt.Equals, "--no-header-footer")
|
||||
}
|
||||
|
||||
func TestAsciidoctorWorkingFolderCurrentAndExtensions(t *testing.T) {
|
||||
c := qt.New(t)
|
||||
cfg := config.New()
|
||||
mconf := markup_config.Default
|
||||
mconf.AsciidocExt.NoHeaderOrFooter = true
|
||||
mconf.AsciidocExt.Extensions = []string{"asciidoctor-html5s", "asciidoctor-diagram"}
|
||||
mconf.AsciidocExt.Backend = "html5s"
|
||||
mconf.AsciidocExt.WorkingFolderCurrent = true
|
||||
mconf.AsciidocExt.Trace = false
|
||||
p, err := Provider.New(
|
||||
cfg := config.FromTOMLConfigString(`
|
||||
[markup]
|
||||
[markup.asciidocext]
|
||||
backend = "html5s"
|
||||
workingFolderCurrent = true
|
||||
trace = false
|
||||
noHeaderOrFooter = true
|
||||
extensions = ["asciidoctor-html5s", "asciidoctor-diagram"]
|
||||
`)
|
||||
conf := testconfig.GetTestConfig(afero.NewMemMapFs(), cfg)
|
||||
|
||||
p, err := asciidocext.Provider.New(
|
||||
converter.ProviderConfig{
|
||||
Cfg: cfg,
|
||||
MarkupConfig: mconf,
|
||||
Logger: loggers.NewErrorLogger(),
|
||||
Conf: conf,
|
||||
Logger: loggers.NewErrorLogger(),
|
||||
},
|
||||
)
|
||||
c.Assert(err, qt.IsNil)
|
||||
@@ -229,10 +240,10 @@ func TestAsciidoctorWorkingFolderCurrentAndExtensions(t *testing.T) {
|
||||
conv, err := p.New(converter.DocumentContext{})
|
||||
c.Assert(err, qt.IsNil)
|
||||
|
||||
ac := conv.(*asciidocConverter)
|
||||
ac := conv.(*internal.AsciidocConverter)
|
||||
c.Assert(ac, qt.Not(qt.IsNil))
|
||||
|
||||
args := ac.parseArgs(converter.DocumentContext{})
|
||||
args := ac.ParseArgs(converter.DocumentContext{})
|
||||
c.Assert(len(args), qt.Equals, 11)
|
||||
c.Assert(args[0], qt.Equals, "-b")
|
||||
c.Assert(args[1], qt.Equals, "html5s")
|
||||
@@ -249,15 +260,19 @@ func TestAsciidoctorWorkingFolderCurrentAndExtensions(t *testing.T) {
|
||||
|
||||
func TestAsciidoctorAttributes(t *testing.T) {
|
||||
c := qt.New(t)
|
||||
cfg := config.New()
|
||||
mconf := markup_config.Default
|
||||
mconf.AsciidocExt.Attributes = map[string]string{"my-base-url": "https://gohugo.io/", "my-attribute-name": "my value"}
|
||||
mconf.AsciidocExt.Trace = false
|
||||
p, err := Provider.New(
|
||||
cfg := config.FromTOMLConfigString(`
|
||||
[markup]
|
||||
[markup.asciidocext]
|
||||
trace = false
|
||||
[markup.asciidocext.attributes]
|
||||
my-base-url = "https://gohugo.io/"
|
||||
my-attribute-name = "my value"
|
||||
`)
|
||||
conf := testconfig.GetTestConfig(nil, cfg)
|
||||
p, err := asciidocext.Provider.New(
|
||||
converter.ProviderConfig{
|
||||
Cfg: cfg,
|
||||
MarkupConfig: mconf,
|
||||
Logger: loggers.NewErrorLogger(),
|
||||
Conf: conf,
|
||||
Logger: loggers.NewErrorLogger(),
|
||||
},
|
||||
)
|
||||
c.Assert(err, qt.IsNil)
|
||||
@@ -265,7 +280,7 @@ func TestAsciidoctorAttributes(t *testing.T) {
|
||||
conv, err := p.New(converter.DocumentContext{})
|
||||
c.Assert(err, qt.IsNil)
|
||||
|
||||
ac := conv.(*asciidocConverter)
|
||||
ac := conv.(*internal.AsciidocConverter)
|
||||
c.Assert(ac, qt.Not(qt.IsNil))
|
||||
|
||||
expectedValues := map[string]bool{
|
||||
@@ -273,7 +288,7 @@ func TestAsciidoctorAttributes(t *testing.T) {
|
||||
"my-attribute-name=my value": true,
|
||||
}
|
||||
|
||||
args := ac.parseArgs(converter.DocumentContext{})
|
||||
args := ac.ParseArgs(converter.DocumentContext{})
|
||||
c.Assert(len(args), qt.Equals, 5)
|
||||
c.Assert(args[0], qt.Equals, "-a")
|
||||
c.Assert(expectedValues[args[1]], qt.Equals, true)
|
||||
@@ -282,15 +297,23 @@ func TestAsciidoctorAttributes(t *testing.T) {
|
||||
c.Assert(args[4], qt.Equals, "--no-header-footer")
|
||||
}
|
||||
|
||||
func getProvider(c *qt.C, mconf markup_config.Config) converter.Provider {
|
||||
sc := security.DefaultConfig
|
||||
sc.Exec.Allow = security.NewWhitelist("asciidoctor")
|
||||
func getProvider(c *qt.C, mConfStr string) converter.Provider {
|
||||
confStr := `
|
||||
[security]
|
||||
[security.exec]
|
||||
allow = ['asciidoctor']
|
||||
`
|
||||
confStr += mConfStr
|
||||
|
||||
p, err := Provider.New(
|
||||
cfg := config.FromTOMLConfigString(confStr)
|
||||
conf := testconfig.GetTestConfig(nil, cfg)
|
||||
securityConfig := conf.GetConfigSection("security").(security.Config)
|
||||
|
||||
p, err := asciidocext.Provider.New(
|
||||
converter.ProviderConfig{
|
||||
MarkupConfig: mconf,
|
||||
Logger: loggers.NewErrorLogger(),
|
||||
Exec: hexec.New(sc),
|
||||
Logger: loggers.NewErrorLogger(),
|
||||
Conf: conf,
|
||||
Exec: hexec.New(securityConfig),
|
||||
},
|
||||
)
|
||||
c.Assert(err, qt.IsNil)
|
||||
@@ -298,12 +321,12 @@ func getProvider(c *qt.C, mconf markup_config.Config) converter.Provider {
|
||||
}
|
||||
|
||||
func TestConvert(t *testing.T) {
|
||||
if !Supports() {
|
||||
if !asciidocext.Supports() {
|
||||
t.Skip("asciidoctor not installed")
|
||||
}
|
||||
c := qt.New(t)
|
||||
|
||||
p := getProvider(c, markup_config.Default)
|
||||
p := getProvider(c, "")
|
||||
|
||||
conv, err := p.New(converter.DocumentContext{})
|
||||
c.Assert(err, qt.IsNil)
|
||||
@@ -314,11 +337,11 @@ func TestConvert(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestTableOfContents(t *testing.T) {
|
||||
if !Supports() {
|
||||
if !asciidocext.Supports() {
|
||||
t.Skip("asciidoctor not installed")
|
||||
}
|
||||
c := qt.New(t)
|
||||
p := getProvider(c, markup_config.Default)
|
||||
p := getProvider(c, "")
|
||||
|
||||
conv, err := p.New(converter.DocumentContext{})
|
||||
c.Assert(err, qt.IsNil)
|
||||
@@ -349,11 +372,11 @@ testContent
|
||||
}
|
||||
|
||||
func TestTableOfContentsWithCode(t *testing.T) {
|
||||
if !Supports() {
|
||||
if !asciidocext.Supports() {
|
||||
t.Skip("asciidoctor not installed")
|
||||
}
|
||||
c := qt.New(t)
|
||||
p := getProvider(c, markup_config.Default)
|
||||
p := getProvider(c, "")
|
||||
conv, err := p.New(converter.DocumentContext{})
|
||||
c.Assert(err, qt.IsNil)
|
||||
r, err := conv.Convert(converter.RenderContext{Src: []byte(`:toc: auto
|
||||
@@ -368,13 +391,16 @@ func TestTableOfContentsWithCode(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestTableOfContentsPreserveTOC(t *testing.T) {
|
||||
if !Supports() {
|
||||
if !asciidocext.Supports() {
|
||||
t.Skip("asciidoctor not installed")
|
||||
}
|
||||
c := qt.New(t)
|
||||
mconf := markup_config.Default
|
||||
mconf.AsciidocExt.PreserveTOC = true
|
||||
p := getProvider(c, mconf)
|
||||
confStr := `
|
||||
[markup]
|
||||
[markup.asciidocExt]
|
||||
preserveTOC = true
|
||||
`
|
||||
p := getProvider(c, confStr)
|
||||
|
||||
conv, err := p.New(converter.DocumentContext{})
|
||||
c.Assert(err, qt.IsNil)
|
||||
|
Reference in New Issue
Block a user