github.com/shohhei1126/hugo@v0.42.2-0.20180623210752-3d5928889ad7/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  }