mirror of
https://github.com/gohugoio/hugo.git
synced 2025-08-21 21:35:28 +02:00
@@ -14,8 +14,17 @@
|
||||
package postcss
|
||||
|
||||
import (
|
||||
"regexp"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/gohugoio/hugo/htesting/hqt"
|
||||
|
||||
"github.com/gohugoio/hugo/common/loggers"
|
||||
"github.com/gohugoio/hugo/helpers"
|
||||
|
||||
"github.com/spf13/afero"
|
||||
|
||||
qt "github.com/frankban/quicktest"
|
||||
)
|
||||
|
||||
@@ -40,6 +49,7 @@ func TestDecodeOptions(t *testing.T) {
|
||||
|
||||
func TestShouldImport(t *testing.T) {
|
||||
c := qt.New(t)
|
||||
var imp *importResolver
|
||||
|
||||
for _, test := range []struct {
|
||||
input string
|
||||
@@ -52,6 +62,106 @@ func TestShouldImport(t *testing.T) {
|
||||
{input: `@import url("navigation.css");`, expect: false},
|
||||
{input: `@import url('https://fonts.googleapis.com/css?family=Open+Sans:400,400i,800,800i&display=swap');`, expect: false},
|
||||
} {
|
||||
c.Assert(shouldImport(test.input), qt.Equals, test.expect)
|
||||
c.Assert(imp.shouldImport(test.input), qt.Equals, test.expect)
|
||||
}
|
||||
}
|
||||
|
||||
func TestImportResolver(t *testing.T) {
|
||||
c := qt.New(t)
|
||||
fs := afero.NewMemMapFs()
|
||||
|
||||
writeFile := func(name, content string) {
|
||||
c.Assert(afero.WriteFile(fs, name, []byte(content), 0777), qt.IsNil)
|
||||
}
|
||||
|
||||
writeFile("a.css", `@import "b.css";
|
||||
@import "c.css";
|
||||
A_STYLE1
|
||||
A_STYLE2
|
||||
`)
|
||||
|
||||
writeFile("b.css", `B_STYLE`)
|
||||
writeFile("c.css", "@import \"d.css\"\nC_STYLE")
|
||||
writeFile("d.css", "@import \"a.css\"\n\nD_STYLE")
|
||||
writeFile("e.css", "E_STYLE")
|
||||
|
||||
mainStyles := strings.NewReader(`@import "a.css";
|
||||
@import "b.css";
|
||||
LOCAL_STYLE
|
||||
@import "c.css";
|
||||
@import "e.css";
|
||||
@import "missing.css";`)
|
||||
|
||||
imp := newImportResolver(
|
||||
mainStyles,
|
||||
"styles.css",
|
||||
fs, loggers.NewErrorLogger(),
|
||||
)
|
||||
|
||||
r, err := imp.resolve()
|
||||
c.Assert(err, qt.IsNil)
|
||||
rs := helpers.ReaderToString(r)
|
||||
result := regexp.MustCompile(`\n+`).ReplaceAllString(rs, "\n")
|
||||
|
||||
c.Assert(result, hqt.IsSameString, `B_STYLE
|
||||
D_STYLE
|
||||
C_STYLE
|
||||
A_STYLE1
|
||||
A_STYLE2
|
||||
LOCAL_STYLE
|
||||
E_STYLE
|
||||
@import "missing.css";`)
|
||||
|
||||
dline := imp.linemap[3]
|
||||
c.Assert(dline, qt.DeepEquals, fileOffset{
|
||||
Offset: 1,
|
||||
Filename: "d.css",
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
func BenchmarkImportResolver(b *testing.B) {
|
||||
c := qt.New(b)
|
||||
fs := afero.NewMemMapFs()
|
||||
|
||||
writeFile := func(name, content string) {
|
||||
c.Assert(afero.WriteFile(fs, name, []byte(content), 0777), qt.IsNil)
|
||||
}
|
||||
|
||||
writeFile("a.css", `@import "b.css";
|
||||
@import "c.css";
|
||||
A_STYLE1
|
||||
A_STYLE2
|
||||
`)
|
||||
|
||||
writeFile("b.css", `B_STYLE`)
|
||||
writeFile("c.css", "@import \"d.css\"\nC_STYLE"+strings.Repeat("\nSTYLE", 12))
|
||||
writeFile("d.css", "@import \"a.css\"\n\nD_STYLE"+strings.Repeat("\nSTYLE", 55))
|
||||
writeFile("e.css", "E_STYLE")
|
||||
|
||||
mainStyles := `@import "a.css";
|
||||
@import "b.css";
|
||||
LOCAL_STYLE
|
||||
@import "c.css";
|
||||
@import "e.css";
|
||||
@import "missing.css";`
|
||||
|
||||
logger := loggers.NewErrorLogger()
|
||||
|
||||
for i := 0; i < b.N; i++ {
|
||||
b.StopTimer()
|
||||
imp := newImportResolver(
|
||||
strings.NewReader(mainStyles),
|
||||
"styles.css",
|
||||
fs, logger,
|
||||
)
|
||||
|
||||
b.StartTimer()
|
||||
|
||||
_, err := imp.resolve()
|
||||
if err != nil {
|
||||
b.Fatal(err)
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user