hugo

Fork of github.com/gohugoio/hugo with reverse pagination support

git clone git://git.shimmy1996.com/hugo.git

integration_test.go (6330B)

    1 // Copyright 2021 The Hugo Authors. All rights reserved.
    2 //
    3 // Licensed under the Apache License, Version 2.0 (the "License");
    4 // you may not use this file except in compliance with the License.
    5 // You may obtain a copy of the License at
    6 // http://www.apache.org/licenses/LICENSE-2.0
    7 //
    8 // Unless required by applicable law or agreed to in writing, software
    9 // distributed under the License is distributed on an "AS IS" BASIS,
   10 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   11 // See the License for the specific language governing permissions and
   12 // limitations under the License.
   13 
   14 package dartsass_test
   15 
   16 import (
   17 	"strings"
   18 	"testing"
   19 
   20 	qt "github.com/frankban/quicktest"
   21 	"github.com/gohugoio/hugo/hugolib"
   22 	"github.com/gohugoio/hugo/resources/resource_transformers/tocss/dartsass"
   23 	jww "github.com/spf13/jwalterweatherman"
   24 )
   25 
   26 func TestTransformIncludePaths(t *testing.T) {
   27 	if !dartsass.Supports() {
   28 		t.Skip()
   29 	}
   30 
   31 	files := `
   32 -- assets/scss/main.scss --
   33 @import "moo";
   34 -- node_modules/foo/_moo.scss --
   35 $moolor: #fff;
   36 
   37 moo {
   38   color: $moolor;
   39 }
   40 -- config.toml --
   41 -- layouts/index.html --
   42 {{ $cssOpts := (dict "includePaths" (slice "node_modules/foo") "transpiler" "dartsass" ) }}
   43 {{ $r := resources.Get "scss/main.scss" |  toCSS $cssOpts  | minify  }}
   44 T1: {{ $r.Content }}
   45 	`
   46 
   47 	b := hugolib.NewIntegrationTestBuilder(
   48 		hugolib.IntegrationTestConfig{
   49 			T:           t,
   50 			TxtarString: files,
   51 			NeedsOsFS:   true,
   52 		}).Build()
   53 
   54 	b.AssertFileContent("public/index.html", `T1: moo{color:#fff}`)
   55 }
   56 
   57 func TestTransformImportRegularCSS(t *testing.T) {
   58 	if !dartsass.Supports() {
   59 		t.Skip()
   60 	}
   61 
   62 	files := `
   63 -- assets/scss/_moo.scss --
   64 $moolor: #fff;
   65 
   66 moo {
   67 	color: $moolor;
   68 }
   69 -- assets/scss/another.css --
   70 
   71 -- assets/scss/main.scss --
   72 @import "moo";
   73 @import "regular.css";
   74 @import "moo";
   75 @import "another.css";
   76 
   77 /* foo */
   78 -- assets/scss/regular.css --
   79 
   80 -- config.toml --
   81 -- layouts/index.html --
   82 {{ $r := resources.Get "scss/main.scss" |  toCSS (dict "transpiler" "dartsass")  }}
   83 T1: {{ $r.Content | safeHTML }}
   84 
   85 	`
   86 
   87 	b := hugolib.NewIntegrationTestBuilder(
   88 		hugolib.IntegrationTestConfig{
   89 			T:           t,
   90 			TxtarString: files,
   91 			NeedsOsFS:   true,
   92 		},
   93 	).Build()
   94 
   95 	// Dart Sass does not follow regular CSS import, but they
   96 	// get pulled to the top.
   97 	b.AssertFileContent("public/index.html", `T1: @import "regular.css";
   98 		@import "another.css";
   99 		moo {
  100 		  color: #fff;
  101 		}
  102 		
  103 		moo {
  104 		  color: #fff;
  105 		}
  106 		
  107 		/* foo */`)
  108 }
  109 
  110 func TestTransformThemeOverrides(t *testing.T) {
  111 	if !dartsass.Supports() {
  112 		t.Skip()
  113 	}
  114 
  115 	files := `
  116 -- assets/scss/components/_boo.scss --
  117 $boolor: green;
  118 
  119 boo {
  120 	color: $boolor;
  121 }
  122 -- assets/scss/components/_moo.scss --
  123 $moolor: #ccc;
  124 
  125 moo {
  126 	color: $moolor;
  127 }
  128 -- config.toml --
  129 theme = 'mytheme'
  130 -- layouts/index.html --
  131 {{ $cssOpts := (dict "includePaths" (slice "node_modules/foo" ) "transpiler" "dartsass" ) }}
  132 {{ $r := resources.Get "scss/main.scss" |  toCSS $cssOpts  | minify  }}
  133 T1: {{ $r.Content }}
  134 -- themes/mytheme/assets/scss/components/_boo.scss --
  135 $boolor: orange;
  136 
  137 boo {
  138 	color: $boolor;
  139 }
  140 -- themes/mytheme/assets/scss/components/_imports.scss --
  141 @import "moo";
  142 @import "_boo";
  143 @import "_zoo";
  144 -- themes/mytheme/assets/scss/components/_moo.scss --
  145 $moolor: #fff;
  146 
  147 moo {
  148 	color: $moolor;
  149 }
  150 -- themes/mytheme/assets/scss/components/_zoo.scss --
  151 $zoolor: pink;
  152 
  153 zoo {
  154 	color: $zoolor;
  155 }
  156 -- themes/mytheme/assets/scss/main.scss --
  157 @import "components/imports";
  158 	`
  159 
  160 	b := hugolib.NewIntegrationTestBuilder(
  161 		hugolib.IntegrationTestConfig{
  162 			T:           t,
  163 			TxtarString: files,
  164 			NeedsOsFS:   true,
  165 		},
  166 	).Build()
  167 
  168 	b.AssertFileContent("public/index.html", `T1: moo{color:#ccc}boo{color:green}zoo{color:pink}`)
  169 }
  170 
  171 func TestTransformLogging(t *testing.T) {
  172 	if !dartsass.Supports() {
  173 		t.Skip()
  174 	}
  175 
  176 	files := `
  177 -- assets/scss/main.scss --
  178 @warn "foo";
  179 @debug "bar";
  180 
  181 -- config.toml --
  182 disableKinds = ["term", "taxonomy", "section", "page"]
  183 -- layouts/index.html --
  184 {{ $cssOpts := (dict  "transpiler" "dartsass" ) }}
  185 {{ $r := resources.Get "scss/main.scss" |  toCSS $cssOpts   }}
  186 T1: {{ $r.Content }}
  187 	`
  188 
  189 	b := hugolib.NewIntegrationTestBuilder(
  190 		hugolib.IntegrationTestConfig{
  191 			T:           t,
  192 			TxtarString: files,
  193 			NeedsOsFS:   true,
  194 			LogLevel:    jww.LevelInfo,
  195 		}).Build()
  196 
  197 	b.AssertLogMatches(`WARN.*Dart Sass: foo`)
  198 	b.AssertLogMatches(`INFO.*Dart Sass: .*assets.*main.scss:1:0: bar`)
  199 
  200 }
  201 
  202 func TestTransformErrors(t *testing.T) {
  203 	if !dartsass.Supports() {
  204 		t.Skip()
  205 	}
  206 
  207 	c := qt.New(t)
  208 
  209 	const filesTemplate = `
  210 -- config.toml --
  211 -- assets/scss/components/_foo.scss --
  212 /* comment line 1 */
  213 $foocolor: #ccc;
  214 
  215 foo {
  216 	color: $foocolor;
  217 }
  218 -- assets/scss/main.scss --
  219 /* comment line 1 */
  220 /* comment line 2 */
  221 @import "components/foo";
  222 /* comment line 4 */
  223 
  224   $maincolor: #eee;
  225 
  226 body {
  227 	color: $maincolor;
  228 }
  229 
  230 -- layouts/index.html --
  231 {{ $cssOpts := dict "transpiler" "dartsass" }}
  232 {{ $r := resources.Get "scss/main.scss" |  toCSS $cssOpts  | minify  }}
  233 T1: {{ $r.Content }}
  234 
  235 	`
  236 
  237 	c.Run("error in main", func(c *qt.C) {
  238 		b, err := hugolib.NewIntegrationTestBuilder(
  239 			hugolib.IntegrationTestConfig{
  240 				T:           c,
  241 				TxtarString: strings.Replace(filesTemplate, "$maincolor: #eee;", "$maincolor #eee;", 1),
  242 				NeedsOsFS:   true,
  243 			}).BuildE()
  244 
  245 		b.Assert(err, qt.IsNotNil)
  246 		b.Assert(err.Error(), qt.Contains, `main.scss:8:13":`)
  247 		b.Assert(err.Error(), qt.Contains, `: expected ":".`)
  248 		fe := b.AssertIsFileError(err)
  249 		b.Assert(fe.ErrorContext(), qt.IsNotNil)
  250 		b.Assert(fe.ErrorContext().Lines, qt.DeepEquals, []string{"  $maincolor #eee;", "", "body {", "\tcolor: $maincolor;", "}"})
  251 		b.Assert(fe.ErrorContext().ChromaLexer, qt.Equals, "scss")
  252 
  253 	})
  254 
  255 	c.Run("error in import", func(c *qt.C) {
  256 		b, err := hugolib.NewIntegrationTestBuilder(
  257 			hugolib.IntegrationTestConfig{
  258 				T:           c,
  259 				TxtarString: strings.Replace(filesTemplate, "$foocolor: #ccc;", "$foocolor #ccc;", 1),
  260 				NeedsOsFS:   true,
  261 			}).BuildE()
  262 
  263 		b.Assert(err, qt.IsNotNil)
  264 		b.Assert(err.Error(), qt.Contains, `_foo.scss:2:10":`)
  265 		b.Assert(err.Error(), qt.Contains, `: expected ":".`)
  266 		fe := b.AssertIsFileError(err)
  267 		b.Assert(fe.ErrorContext(), qt.IsNotNil)
  268 		b.Assert(fe.ErrorContext().Lines, qt.DeepEquals, []string{"/* comment line 1 */", "$foocolor #ccc;", "", "foo {"})
  269 		b.Assert(fe.ErrorContext().ChromaLexer, qt.Equals, "scss")
  270 
  271 	})
  272 
  273 }