github.com/dominikszabo/hugo-ds-clean@v0.47.1/hugofs/language_fs_test.go (about) 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 hugofs 15 16 import ( 17 "path/filepath" 18 "testing" 19 20 "github.com/spf13/afero" 21 "github.com/stretchr/testify/require" 22 ) 23 24 func TestLanguagFs(t *testing.T) { 25 languages := map[string]bool{ 26 "sv": true, 27 } 28 base := filepath.FromSlash("/my/base") 29 assert := require.New(t) 30 m := afero.NewMemMapFs() 31 bfs := afero.NewBasePathFs(m, base) 32 lfs := NewLanguageFs("sv", languages, bfs) 33 assert.NotNil(lfs) 34 assert.Equal("sv", lfs.Lang()) 35 err := afero.WriteFile(lfs, filepath.FromSlash("sect/page.md"), []byte("abc"), 0777) 36 assert.NoError(err) 37 fi, err := lfs.Stat(filepath.FromSlash("sect/page.md")) 38 assert.NoError(err) 39 assert.Equal("__hugofs_sv_page.md", fi.Name()) 40 41 languager, ok := fi.(LanguageAnnouncer) 42 assert.True(ok) 43 44 assert.Equal("sv", languager.Lang()) 45 46 lfi, ok := fi.(*LanguageFileInfo) 47 assert.True(ok) 48 assert.Equal(filepath.FromSlash("/my/base/sect/page.md"), lfi.Filename()) 49 assert.Equal(filepath.FromSlash("sect/page.md"), lfi.Path()) 50 assert.Equal("page.sv.md", lfi.virtualName) 51 assert.Equal("__hugofs_sv_page.md", lfi.Name()) 52 assert.Equal("page.md", lfi.RealName()) 53 54 } 55 56 // Issue 4559 57 func TestFilenamesHandling(t *testing.T) { 58 languages := map[string]bool{ 59 "sv": true, 60 } 61 base := filepath.FromSlash("/my/base") 62 assert := require.New(t) 63 m := afero.NewMemMapFs() 64 bfs := afero.NewBasePathFs(m, base) 65 lfs := NewLanguageFs("sv", languages, bfs) 66 assert.NotNil(lfs) 67 assert.Equal("sv", lfs.Lang()) 68 69 for _, test := range []struct { 70 filename string 71 check func(fi *LanguageFileInfo) 72 }{ 73 {"tc-lib-color/class-Com.Tecnick.Color.Css", func(fi *LanguageFileInfo) { 74 assert.Equal("class-Com.Tecnick.Color", fi.TranslationBaseName()) 75 assert.Equal(filepath.FromSlash("/my/base"), fi.BaseDir()) 76 assert.Equal(filepath.FromSlash("tc-lib-color/class-Com.Tecnick.Color.Css"), fi.Path()) 77 assert.Equal("class-Com.Tecnick.Color.Css", fi.RealName()) 78 assert.Equal(filepath.FromSlash("/my/base/tc-lib-color/class-Com.Tecnick.Color.Css"), fi.Filename()) 79 }}, 80 {"tc-lib-color/class-Com.Tecnick.Color.sv.Css", func(fi *LanguageFileInfo) { 81 assert.Equal("class-Com.Tecnick.Color", fi.TranslationBaseName()) 82 assert.Equal("class-Com.Tecnick.Color.sv.Css", fi.RealName()) 83 assert.Equal(filepath.FromSlash("/my/base/tc-lib-color/class-Com.Tecnick.Color.sv.Css"), fi.Filename()) 84 }}, 85 } { 86 err := afero.WriteFile(lfs, filepath.FromSlash(test.filename), []byte("abc"), 0777) 87 assert.NoError(err) 88 fi, err := lfs.Stat(filepath.FromSlash(test.filename)) 89 assert.NoError(err) 90 91 lfi, ok := fi.(*LanguageFileInfo) 92 assert.True(ok) 93 assert.Equal("sv", lfi.Lang()) 94 test.check(lfi) 95 96 } 97 98 }