2022-02-09 08:04:57 -05:00
|
|
|
// Copyright 2021 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.
|
|
|
|
// You may obtain a copy of the License at
|
|
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
//
|
|
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
// See the License for the specific language governing permissions and
|
|
|
|
// limitations under the License.
|
|
|
|
|
|
|
|
package dartsass_test
|
|
|
|
|
|
|
|
import (
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/gohugoio/hugo/hugolib"
|
|
|
|
"github.com/gohugoio/hugo/resources/resource_transformers/tocss/dartsass"
|
2022-03-17 12:22:34 -04:00
|
|
|
jww "github.com/spf13/jwalterweatherman"
|
2022-02-09 08:04:57 -05:00
|
|
|
)
|
|
|
|
|
|
|
|
func TestTransformIncludePaths(t *testing.T) {
|
|
|
|
if !dartsass.Supports() {
|
|
|
|
t.Skip()
|
|
|
|
}
|
|
|
|
|
|
|
|
files := `
|
|
|
|
-- assets/scss/main.scss --
|
|
|
|
@import "moo";
|
|
|
|
-- node_modules/foo/_moo.scss --
|
|
|
|
$moolor: #fff;
|
|
|
|
|
|
|
|
moo {
|
|
|
|
color: $moolor;
|
|
|
|
}
|
|
|
|
-- config.toml --
|
|
|
|
-- layouts/index.html --
|
|
|
|
{{ $cssOpts := (dict "includePaths" (slice "node_modules/foo") "transpiler" "dartsass" ) }}
|
|
|
|
{{ $r := resources.Get "scss/main.scss" | toCSS $cssOpts | minify }}
|
|
|
|
T1: {{ $r.Content }}
|
|
|
|
`
|
|
|
|
|
|
|
|
b := hugolib.NewIntegrationTestBuilder(
|
|
|
|
hugolib.IntegrationTestConfig{
|
2022-02-10 13:49:20 -05:00
|
|
|
T: t,
|
2022-02-09 08:04:57 -05:00
|
|
|
TxtarString: files,
|
|
|
|
NeedsOsFS: true,
|
|
|
|
}).Build()
|
|
|
|
|
|
|
|
b.AssertFileContent("public/index.html", `T1: moo{color:#fff}`)
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestTransformImportRegularCSS(t *testing.T) {
|
|
|
|
if !dartsass.Supports() {
|
|
|
|
t.Skip()
|
|
|
|
}
|
|
|
|
|
|
|
|
files := `
|
|
|
|
-- assets/scss/_moo.scss --
|
|
|
|
$moolor: #fff;
|
|
|
|
|
|
|
|
moo {
|
|
|
|
color: $moolor;
|
|
|
|
}
|
|
|
|
-- assets/scss/another.css --
|
|
|
|
|
|
|
|
-- assets/scss/main.scss --
|
|
|
|
@import "moo";
|
|
|
|
@import "regular.css";
|
|
|
|
@import "moo";
|
|
|
|
@import "another.css";
|
|
|
|
|
|
|
|
/* foo */
|
|
|
|
-- assets/scss/regular.css --
|
|
|
|
|
|
|
|
-- config.toml --
|
|
|
|
-- layouts/index.html --
|
|
|
|
{{ $r := resources.Get "scss/main.scss" | toCSS (dict "transpiler" "dartsass") }}
|
|
|
|
T1: {{ $r.Content | safeHTML }}
|
|
|
|
|
|
|
|
`
|
|
|
|
|
|
|
|
b := hugolib.NewIntegrationTestBuilder(
|
|
|
|
hugolib.IntegrationTestConfig{
|
2022-02-10 13:49:20 -05:00
|
|
|
T: t,
|
2022-02-09 08:04:57 -05:00
|
|
|
TxtarString: files,
|
|
|
|
NeedsOsFS: true,
|
|
|
|
},
|
|
|
|
).Build()
|
|
|
|
|
|
|
|
// Dart Sass does not follow regular CSS import, but they
|
|
|
|
// get pulled to the top.
|
|
|
|
b.AssertFileContent("public/index.html", `T1: @import "regular.css";
|
|
|
|
@import "another.css";
|
|
|
|
moo {
|
|
|
|
color: #fff;
|
|
|
|
}
|
|
|
|
|
|
|
|
moo {
|
|
|
|
color: #fff;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* foo */`)
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestTransformThemeOverrides(t *testing.T) {
|
|
|
|
if !dartsass.Supports() {
|
|
|
|
t.Skip()
|
|
|
|
}
|
|
|
|
|
|
|
|
files := `
|
|
|
|
-- assets/scss/components/_boo.scss --
|
|
|
|
$boolor: green;
|
|
|
|
|
|
|
|
boo {
|
|
|
|
color: $boolor;
|
|
|
|
}
|
|
|
|
-- assets/scss/components/_moo.scss --
|
|
|
|
$moolor: #ccc;
|
|
|
|
|
|
|
|
moo {
|
|
|
|
color: $moolor;
|
|
|
|
}
|
|
|
|
-- config.toml --
|
|
|
|
theme = 'mytheme'
|
|
|
|
-- layouts/index.html --
|
|
|
|
{{ $cssOpts := (dict "includePaths" (slice "node_modules/foo" ) "transpiler" "dartsass" ) }}
|
|
|
|
{{ $r := resources.Get "scss/main.scss" | toCSS $cssOpts | minify }}
|
|
|
|
T1: {{ $r.Content }}
|
|
|
|
-- themes/mytheme/assets/scss/components/_boo.scss --
|
|
|
|
$boolor: orange;
|
|
|
|
|
|
|
|
boo {
|
|
|
|
color: $boolor;
|
|
|
|
}
|
|
|
|
-- themes/mytheme/assets/scss/components/_imports.scss --
|
|
|
|
@import "moo";
|
|
|
|
@import "_boo";
|
|
|
|
@import "_zoo";
|
|
|
|
-- themes/mytheme/assets/scss/components/_moo.scss --
|
|
|
|
$moolor: #fff;
|
|
|
|
|
|
|
|
moo {
|
|
|
|
color: $moolor;
|
|
|
|
}
|
|
|
|
-- themes/mytheme/assets/scss/components/_zoo.scss --
|
|
|
|
$zoolor: pink;
|
|
|
|
|
|
|
|
zoo {
|
|
|
|
color: $zoolor;
|
|
|
|
}
|
|
|
|
-- themes/mytheme/assets/scss/main.scss --
|
|
|
|
@import "components/imports";
|
|
|
|
`
|
|
|
|
|
|
|
|
b := hugolib.NewIntegrationTestBuilder(
|
|
|
|
hugolib.IntegrationTestConfig{
|
2022-02-10 13:49:20 -05:00
|
|
|
T: t,
|
2022-02-09 08:04:57 -05:00
|
|
|
TxtarString: files,
|
|
|
|
NeedsOsFS: true,
|
|
|
|
},
|
|
|
|
).Build()
|
|
|
|
|
|
|
|
b.AssertFileContent("public/index.html", `T1: moo{color:#ccc}boo{color:green}zoo{color:pink}`)
|
|
|
|
}
|
2022-03-17 12:22:34 -04:00
|
|
|
|
|
|
|
func TestTransformLogging(t *testing.T) {
|
|
|
|
if !dartsass.Supports() {
|
|
|
|
t.Skip()
|
|
|
|
}
|
|
|
|
|
|
|
|
files := `
|
|
|
|
-- assets/scss/main.scss --
|
|
|
|
@warn "foo";
|
|
|
|
@debug "bar";
|
|
|
|
|
|
|
|
-- config.toml --
|
|
|
|
disableKinds = ["term", "taxonomy", "section", "page"]
|
|
|
|
-- layouts/index.html --
|
|
|
|
{{ $cssOpts := (dict "transpiler" "dartsass" ) }}
|
|
|
|
{{ $r := resources.Get "scss/main.scss" | toCSS $cssOpts }}
|
|
|
|
T1: {{ $r.Content }}
|
|
|
|
`
|
|
|
|
|
|
|
|
b := hugolib.NewIntegrationTestBuilder(
|
|
|
|
hugolib.IntegrationTestConfig{
|
|
|
|
T: t,
|
|
|
|
TxtarString: files,
|
|
|
|
NeedsOsFS: true,
|
|
|
|
LogLevel: jww.LevelInfo,
|
|
|
|
}).Build()
|
|
|
|
|
|
|
|
b.AssertLogMatches(`WARN.*Dart Sass: foo`)
|
|
|
|
b.AssertLogMatches(`INFO.*Dart Sass: .*assets.*main.scss:1:0: bar`)
|
|
|
|
|
|
|
|
}
|