hugo

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

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

path_test.go (4898B)

    1 // Copyright 2018 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 path
   15 
   16 import (
   17 	"path/filepath"
   18 	"testing"
   19 
   20 	qt "github.com/frankban/quicktest"
   21 	"github.com/gohugoio/hugo/config"
   22 	"github.com/gohugoio/hugo/deps"
   23 )
   24 
   25 var ns = New(&deps.Deps{Cfg: config.New()})
   26 
   27 type tstNoStringer struct{}
   28 
   29 func TestBase(t *testing.T) {
   30 	t.Parallel()
   31 	c := qt.New(t)
   32 
   33 	for _, test := range []struct {
   34 		path   any
   35 		expect any
   36 	}{
   37 		{filepath.FromSlash(`foo/bar.txt`), `bar.txt`},
   38 		{filepath.FromSlash(`foo/bar/txt `), `txt `},
   39 		{filepath.FromSlash(`foo/bar.t`), `bar.t`},
   40 		{`foo.bar.txt`, `foo.bar.txt`},
   41 		{`.x`, `.x`},
   42 		{``, `.`},
   43 		// errors
   44 		{tstNoStringer{}, false},
   45 	} {
   46 
   47 		result, err := ns.Base(test.path)
   48 
   49 		if b, ok := test.expect.(bool); ok && !b {
   50 			c.Assert(err, qt.Not(qt.IsNil))
   51 			continue
   52 		}
   53 
   54 		c.Assert(err, qt.IsNil)
   55 		c.Assert(result, qt.Equals, test.expect)
   56 	}
   57 }
   58 
   59 func TestBaseName(t *testing.T) {
   60 	t.Parallel()
   61 	c := qt.New(t)
   62 
   63 	for _, test := range []struct {
   64 		path   any
   65 		expect any
   66 	}{
   67 		{filepath.FromSlash(`foo/bar.txt`), `bar`},
   68 		{filepath.FromSlash(`foo/bar/txt `), `txt `},
   69 		{filepath.FromSlash(`foo/bar.t`), `bar`},
   70 		{`foo.bar.txt`, `foo.bar`},
   71 		{`.x`, ``},
   72 		{``, `.`},
   73 		// errors
   74 		{tstNoStringer{}, false},
   75 	} {
   76 
   77 		result, err := ns.BaseName(test.path)
   78 
   79 		if b, ok := test.expect.(bool); ok && !b {
   80 			c.Assert(err, qt.Not(qt.IsNil))
   81 			continue
   82 		}
   83 
   84 		c.Assert(err, qt.IsNil)
   85 		c.Assert(result, qt.Equals, test.expect)
   86 	}
   87 }
   88 
   89 func TestDir(t *testing.T) {
   90 	t.Parallel()
   91 	c := qt.New(t)
   92 
   93 	for _, test := range []struct {
   94 		path   any
   95 		expect any
   96 	}{
   97 		{filepath.FromSlash(`foo/bar.txt`), `foo`},
   98 		{filepath.FromSlash(`foo/bar/txt `), `foo/bar`},
   99 		{filepath.FromSlash(`foo/bar.t`), `foo`},
  100 		{`foo.bar.txt`, `.`},
  101 		{`.x`, `.`},
  102 		{``, `.`},
  103 		// errors
  104 		{tstNoStringer{}, false},
  105 	} {
  106 
  107 		result, err := ns.Dir(test.path)
  108 
  109 		if b, ok := test.expect.(bool); ok && !b {
  110 			c.Assert(err, qt.Not(qt.IsNil))
  111 			continue
  112 		}
  113 
  114 		c.Assert(err, qt.IsNil)
  115 		c.Assert(result, qt.Equals, test.expect)
  116 	}
  117 }
  118 
  119 func TestExt(t *testing.T) {
  120 	t.Parallel()
  121 	c := qt.New(t)
  122 
  123 	for _, test := range []struct {
  124 		path   any
  125 		expect any
  126 	}{
  127 		{filepath.FromSlash(`foo/bar.json`), `.json`},
  128 		{`foo.bar.txt `, `.txt `},
  129 		{``, ``},
  130 		{`.x`, `.x`},
  131 		// errors
  132 		{tstNoStringer{}, false},
  133 	} {
  134 
  135 		result, err := ns.Ext(test.path)
  136 
  137 		if b, ok := test.expect.(bool); ok && !b {
  138 			c.Assert(err, qt.Not(qt.IsNil))
  139 			continue
  140 		}
  141 
  142 		c.Assert(err, qt.IsNil)
  143 		c.Assert(result, qt.Equals, test.expect)
  144 	}
  145 }
  146 
  147 func TestJoin(t *testing.T) {
  148 	t.Parallel()
  149 	c := qt.New(t)
  150 
  151 	for _, test := range []struct {
  152 		elements any
  153 		expect   any
  154 	}{
  155 		{
  156 			[]string{"", "baz", filepath.FromSlash(`foo/bar.txt`)},
  157 			`baz/foo/bar.txt`,
  158 		},
  159 		{
  160 			[]any{"", "baz", DirFile{"big", "john"}, filepath.FromSlash(`foo/bar.txt`)},
  161 			`baz/big|john/foo/bar.txt`,
  162 		},
  163 		{nil, ""},
  164 		// errors
  165 		{tstNoStringer{}, false},
  166 		{[]any{"", tstNoStringer{}}, false},
  167 	} {
  168 
  169 		result, err := ns.Join(test.elements)
  170 
  171 		if b, ok := test.expect.(bool); ok && !b {
  172 			c.Assert(err, qt.Not(qt.IsNil))
  173 			continue
  174 		}
  175 
  176 		c.Assert(err, qt.IsNil)
  177 		c.Assert(result, qt.Equals, test.expect)
  178 	}
  179 }
  180 
  181 func TestSplit(t *testing.T) {
  182 	t.Parallel()
  183 	c := qt.New(t)
  184 
  185 	for _, test := range []struct {
  186 		path   any
  187 		expect any
  188 	}{
  189 		{filepath.FromSlash(`foo/bar.txt`), DirFile{`foo/`, `bar.txt`}},
  190 		{filepath.FromSlash(`foo/bar/txt `), DirFile{`foo/bar/`, `txt `}},
  191 		{`foo.bar.txt`, DirFile{``, `foo.bar.txt`}},
  192 		{``, DirFile{``, ``}},
  193 		// errors
  194 		{tstNoStringer{}, false},
  195 	} {
  196 
  197 		result, err := ns.Split(test.path)
  198 
  199 		if b, ok := test.expect.(bool); ok && !b {
  200 			c.Assert(err, qt.Not(qt.IsNil))
  201 			continue
  202 		}
  203 
  204 		c.Assert(err, qt.IsNil)
  205 		c.Assert(result, qt.Equals, test.expect)
  206 	}
  207 }
  208 
  209 func TestClean(t *testing.T) {
  210 	t.Parallel()
  211 	c := qt.New(t)
  212 
  213 	for _, test := range []struct {
  214 		path   any
  215 		expect any
  216 	}{
  217 		{filepath.FromSlash(`foo/bar.txt`), `foo/bar.txt`},
  218 		{filepath.FromSlash(`foo/bar/txt`), `foo/bar/txt`},
  219 		{filepath.FromSlash(`foo/bar`), `foo/bar`},
  220 		{filepath.FromSlash(`foo/bar.t`), `foo/bar.t`},
  221 		{``, `.`},
  222 		// errors
  223 		{tstNoStringer{}, false},
  224 	} {
  225 
  226 		result, err := ns.Clean(test.path)
  227 
  228 		if b, ok := test.expect.(bool); ok && !b {
  229 			c.Assert(err, qt.Not(qt.IsNil))
  230 			continue
  231 		}
  232 
  233 		c.Assert(err, qt.IsNil)
  234 		c.Assert(result, qt.Equals, test.expect)
  235 	}
  236 }