blob: 1d560c968ccf1f4fce26d2cda0b28135ad1d395a [file] [log] [blame]
package fileutil
import (
"os"
"path/filepath"
"testing"
"github.com/stretchr/testify/require"
"go.skia.org/infra/go/deepequal/assertdeep"
)
const (
TEST_DATA_DIR = "./testdata"
)
func TestTwoLevelRadixPath(t *testing.T) {
require.Equal(t, "", TwoLevelRadixPath(""))
require.Equal(t, filepath.Join("ab", "cd", "abcdefgh.txt"), TwoLevelRadixPath("abcdefgh.txt"))
require.Equal(t, filepath.Join("/etc", "xyz", "ab.txt"), TwoLevelRadixPath("/etc", "xyz/ab.txt"))
require.Equal(t, filepath.Join("/etc", "xyz", "ab", "cd", "abcdefg.txt"), TwoLevelRadixPath("/etc", "xyz/abcdefg.txt"))
require.Equal(t, filepath.Join("so", "me", "somefile_no_ext"), TwoLevelRadixPath("somefile_no_ext"))
}
func TestCountLines(t *testing.T) {
lines, err := CountLines(filepath.Join(TEST_DATA_DIR, "no_lines_file.txt"))
require.Nil(t, err)
require.Equal(t, 0, lines)
lines, err = CountLines(filepath.Join(TEST_DATA_DIR, "one_line_file.txt"))
require.Nil(t, err)
require.Equal(t, 1, lines)
lines, err = CountLines(filepath.Join(TEST_DATA_DIR, "ten_lines_file.txt"))
require.Nil(t, err)
require.Equal(t, 10, lines)
lines, err = CountLines(filepath.Join(TEST_DATA_DIR, "non_existant.txt"))
require.NotNil(t, err)
require.Equal(t, -1, lines)
}
func TestReadAllFilesRecursive(t *testing.T) {
test := func(write, expect map[string]string, excludeDirs []string) {
wd, err := os.MkdirTemp("", "")
require.NoError(t, err)
for k, v := range write {
dir := filepath.Dir(k)
if dir != "" {
require.NoError(t, os.MkdirAll(filepath.Join(wd, dir), os.ModePerm))
}
require.NoError(t, os.WriteFile(filepath.Join(wd, k), []byte(v), os.ModePerm))
}
actual, err := ReadAllFilesRecursive(wd, excludeDirs)
require.NoError(t, err)
expectBytes := make(map[string][]byte, len(expect))
for k, v := range expect {
expectBytes[k] = []byte(v)
}
assertdeep.Equal(t, expectBytes, actual)
}
test(nil, map[string]string{}, nil)
test(map[string]string{
"somefile": "contents",
}, map[string]string{
"somefile": "contents",
}, nil)
test(map[string]string{
filepath.Join("a", "b", "c"): "contents",
}, map[string]string{
filepath.Join("a", "b", "c"): "contents",
}, nil)
test(map[string]string{
filepath.Join("a", "file"): "contents",
filepath.Join("b", "file"): "contents",
}, map[string]string{
filepath.Join("b", "file"): "contents",
}, []string{"a"})
}