hugo

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

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

integration_test.go (5706B)

    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 scss_test
   15 
   16 import (
   17 	"path/filepath"
   18 	"strings"
   19 	"testing"
   20 
   21 	qt "github.com/frankban/quicktest"
   22 
   23 	"github.com/gohugoio/hugo/hugolib"
   24 	"github.com/gohugoio/hugo/resources/resource_transformers/tocss/scss"
   25 )
   26 
   27 func TestTransformIncludePaths(t *testing.T) {
   28 	if !scss.Supports() {
   29 		t.Skip()
   30 	}
   31 	c := qt.New(t)
   32 
   33 	files := `
   34 -- assets/scss/main.scss --
   35 @import "moo";
   36 -- node_modules/foo/_moo.scss --
   37 $moolor: #fff;
   38 
   39 moo {
   40   color: $moolor;
   41 }
   42 -- config.toml --
   43 -- layouts/index.html --
   44 {{ $cssOpts := (dict "includePaths" (slice "node_modules/foo") ) }}
   45 {{ $r := resources.Get "scss/main.scss" |  toCSS $cssOpts  | minify  }}
   46 T1: {{ $r.Content }}
   47 	`
   48 
   49 	b := hugolib.NewIntegrationTestBuilder(
   50 		hugolib.IntegrationTestConfig{
   51 			T:           c,
   52 			TxtarString: files,
   53 			NeedsOsFS:   true,
   54 		}).Build()
   55 
   56 	b.AssertFileContent("public/index.html", `T1: moo{color:#fff}`)
   57 }
   58 
   59 func TestTransformImportRegularCSS(t *testing.T) {
   60 	if !scss.Supports() {
   61 		t.Skip()
   62 	}
   63 
   64 	c := qt.New(t)
   65 
   66 	files := `
   67 -- assets/scss/_moo.scss --
   68 $moolor: #fff;
   69 
   70 moo {
   71 	color: $moolor;
   72 }
   73 -- assets/scss/another.css --
   74 
   75 -- assets/scss/main.scss --
   76 @import "moo";
   77 @import "regular.css";
   78 @import "moo";
   79 @import "another.css";
   80 
   81 /* foo */
   82 -- assets/scss/regular.css --
   83 
   84 -- config.toml --
   85 -- layouts/index.html --
   86 {{ $r := resources.Get "scss/main.scss" |  toCSS }}
   87 T1: {{ $r.Content | safeHTML }}
   88 
   89 	`
   90 
   91 	b := hugolib.NewIntegrationTestBuilder(
   92 		hugolib.IntegrationTestConfig{
   93 			T:           c,
   94 			TxtarString: files,
   95 			NeedsOsFS:   true,
   96 		}).Build()
   97 
   98 	// LibSass does not support regular CSS imports. There
   99 	// is an open bug about it that probably will never be resolved.
  100 	// Hugo works around this by preserving them in place:
  101 	b.AssertFileContent("public/index.html", `
  102  T1: moo {
  103  color: #fff; }
  104 
  105 @import "regular.css";
  106 moo {
  107  color: #fff; }
  108 
  109 @import "another.css";
  110 /* foo */
  111         
  112 `)
  113 }
  114 
  115 func TestTransformThemeOverrides(t *testing.T) {
  116 	if !scss.Supports() {
  117 		t.Skip()
  118 	}
  119 
  120 	c := qt.New(t)
  121 
  122 	files := `
  123 -- assets/scss/components/_boo.scss --
  124 $boolor: green;
  125 
  126 boo {
  127 	color: $boolor;
  128 }
  129 -- assets/scss/components/_moo.scss --
  130 $moolor: #ccc;
  131 
  132 moo {
  133 	color: $moolor;
  134 }
  135 -- config.toml --
  136 theme = 'mytheme'
  137 -- layouts/index.html --
  138 {{ $cssOpts := (dict "includePaths" (slice "node_modules/foo" ) ) }}
  139 {{ $r := resources.Get "scss/main.scss" |  toCSS $cssOpts  | minify  }}
  140 T1: {{ $r.Content }}
  141 -- themes/mytheme/assets/scss/components/_boo.scss --
  142 $boolor: orange;
  143 
  144 boo {
  145 	color: $boolor;
  146 }
  147 -- themes/mytheme/assets/scss/components/_imports.scss --
  148 @import "moo";
  149 @import "_boo";
  150 @import "_zoo";
  151 -- themes/mytheme/assets/scss/components/_moo.scss --
  152 $moolor: #fff;
  153 
  154 moo {
  155 	color: $moolor;
  156 }
  157 -- themes/mytheme/assets/scss/components/_zoo.scss --
  158 $zoolor: pink;
  159 
  160 zoo {
  161 	color: $zoolor;
  162 }
  163 -- themes/mytheme/assets/scss/main.scss --
  164 @import "components/imports";
  165 	`
  166 
  167 	b := hugolib.NewIntegrationTestBuilder(
  168 		hugolib.IntegrationTestConfig{
  169 			T:           c,
  170 			TxtarString: files,
  171 			NeedsOsFS:   true,
  172 		}).Build()
  173 
  174 	b.AssertFileContent("public/index.html", `T1: moo{color:#ccc}boo{color:green}zoo{color:pink}`)
  175 }
  176 
  177 func TestTransformErrors(t *testing.T) {
  178 	if !scss.Supports() {
  179 		t.Skip()
  180 	}
  181 
  182 	c := qt.New(t)
  183 
  184 	const filesTemplate = `
  185 -- config.toml --
  186 theme = 'mytheme'
  187 -- assets/scss/components/_foo.scss --
  188 /* comment line 1 */
  189 $foocolor: #ccc;
  190 
  191 foo {
  192 	color: $foocolor;
  193 }
  194 -- themes/mytheme/assets/scss/main.scss --
  195 /* comment line 1 */
  196 /* comment line 2 */
  197 @import "components/foo";
  198 /* comment line 4 */
  199 
  200 $maincolor: #eee;
  201 
  202 body {
  203 	color: $maincolor;
  204 }
  205 
  206 -- layouts/index.html --
  207 {{ $cssOpts := dict }}
  208 {{ $r := resources.Get "scss/main.scss" |  toCSS $cssOpts  | minify  }}
  209 T1: {{ $r.Content }}
  210 
  211 	`
  212 
  213 	c.Run("error in main", func(c *qt.C) {
  214 		b, err := hugolib.NewIntegrationTestBuilder(
  215 			hugolib.IntegrationTestConfig{
  216 				T:           c,
  217 				TxtarString: strings.Replace(filesTemplate, "$maincolor: #eee;", "$maincolor #eee;", 1),
  218 				NeedsOsFS:   true,
  219 			}).BuildE()
  220 
  221 		b.Assert(err, qt.IsNotNil)
  222 		b.Assert(err.Error(), qt.Contains, filepath.FromSlash(`themes/mytheme/assets/scss/main.scss:6:1": expected ':' after $maincolor in assignment statement`))
  223 		fe := b.AssertIsFileError(err)
  224 		b.Assert(fe.ErrorContext(), qt.IsNotNil)
  225 		b.Assert(fe.ErrorContext().Lines, qt.DeepEquals, []string{"/* comment line 4 */", "", "$maincolor #eee;", "", "body {"})
  226 		b.Assert(fe.ErrorContext().ChromaLexer, qt.Equals, "scss")
  227 
  228 	})
  229 
  230 	c.Run("error in import", func(c *qt.C) {
  231 		b, err := hugolib.NewIntegrationTestBuilder(
  232 			hugolib.IntegrationTestConfig{
  233 				T:           c,
  234 				TxtarString: strings.Replace(filesTemplate, "$foocolor: #ccc;", "$foocolor #ccc;", 1),
  235 				NeedsOsFS:   true,
  236 			}).BuildE()
  237 
  238 		b.Assert(err, qt.IsNotNil)
  239 		b.Assert(err.Error(), qt.Contains, `assets/scss/components/_foo.scss:2:1": expected ':' after $foocolor in assignment statement`)
  240 		fe := b.AssertIsFileError(err)
  241 		b.Assert(fe.ErrorContext(), qt.IsNotNil)
  242 		b.Assert(fe.ErrorContext().Lines, qt.DeepEquals, []string{"/* comment line 1 */", "$foocolor #ccc;", "", "foo {"})
  243 		b.Assert(fe.ErrorContext().ChromaLexer, qt.Equals, "scss")
  244 
  245 	})
  246 
  247 }