169 lines
3.9 KiB
Go
169 lines
3.9 KiB
Go
package tsoptions_test
|
|
|
|
import (
|
|
"slices"
|
|
"testing"
|
|
|
|
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/tsoptions"
|
|
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/tsoptions/tsoptionstest"
|
|
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/vfs/vfstest"
|
|
"gotest.tools/v3/assert"
|
|
)
|
|
|
|
func TestParsedCommandLine(t *testing.T) {
|
|
t.Parallel()
|
|
t.Run("PossiblyMatchesFileName", func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
noFiles := map[string]string{}
|
|
noFilesFS := vfstest.FromMap(noFiles, true)
|
|
|
|
files := map[string]string{
|
|
"/dev/a.ts": "",
|
|
"/dev/a.d.ts": "",
|
|
"/dev/a.js": "",
|
|
"/dev/b.ts": "",
|
|
"/dev/b.js": "",
|
|
"/dev/c.d.ts": "",
|
|
"/dev/z/a.ts": "",
|
|
"/dev/z/abz.ts": "",
|
|
"/dev/z/aba.ts": "",
|
|
"/dev/z/b.ts": "",
|
|
"/dev/z/bbz.ts": "",
|
|
"/dev/z/bba.ts": "",
|
|
"/dev/x/a.ts": "",
|
|
"/dev/x/aa.ts": "",
|
|
"/dev/x/b.ts": "",
|
|
"/dev/x/y/a.ts": "",
|
|
"/dev/x/y/b.ts": "",
|
|
"/dev/js/a.js": "",
|
|
"/dev/js/b.js": "",
|
|
"/dev/js/d.min.js": "",
|
|
"/dev/js/ab.min.js": "",
|
|
"/ext/ext.ts": "",
|
|
"/ext/b/a..b.ts": "",
|
|
}
|
|
|
|
assertMatches := func(t *testing.T, parsedCommandLine *tsoptions.ParsedCommandLine, files map[string]string, matches []string) {
|
|
t.Helper()
|
|
for fileName := range files {
|
|
actual := parsedCommandLine.PossiblyMatchesFileName(fileName)
|
|
expected := slices.Contains(matches, fileName)
|
|
assert.Equal(t, actual, expected, "fileName: %s", fileName)
|
|
}
|
|
for _, fileName := range matches {
|
|
if _, ok := files[fileName]; !ok {
|
|
actual := parsedCommandLine.PossiblyMatchesFileName(fileName)
|
|
assert.Equal(t, actual, true, "fileName: %s", fileName)
|
|
}
|
|
}
|
|
}
|
|
|
|
t.Run("with literal file list", func(t *testing.T) {
|
|
t.Parallel()
|
|
t.Run("without exclude", func(t *testing.T) {
|
|
t.Parallel()
|
|
parsedCommandLine := tsoptionstest.GetParsedCommandLine(
|
|
t,
|
|
`{
|
|
"files": [
|
|
"a.ts",
|
|
"b.ts"
|
|
]
|
|
}`,
|
|
files,
|
|
"/dev",
|
|
/*useCaseSensitiveFileNames*/ true,
|
|
)
|
|
|
|
assertMatches(t, parsedCommandLine, files, []string{
|
|
"/dev/a.ts",
|
|
"/dev/b.ts",
|
|
})
|
|
})
|
|
|
|
t.Run("are not removed due to excludes", func(t *testing.T) {
|
|
t.Parallel()
|
|
parsedCommandLine := tsoptionstest.GetParsedCommandLine(
|
|
t,
|
|
`{
|
|
"files": [
|
|
"a.ts",
|
|
"b.ts"
|
|
],
|
|
"exclude": [
|
|
"b.ts"
|
|
]
|
|
}`,
|
|
files,
|
|
"/dev",
|
|
/*useCaseSensitiveFileNames*/ true,
|
|
)
|
|
|
|
assertMatches(t, parsedCommandLine, files, []string{
|
|
"/dev/a.ts",
|
|
"/dev/b.ts",
|
|
})
|
|
|
|
emptyParsedCommandLine := parsedCommandLine.ReloadFileNamesOfParsedCommandLine(noFilesFS)
|
|
assertMatches(t, emptyParsedCommandLine, noFiles, []string{
|
|
"/dev/a.ts",
|
|
"/dev/b.ts",
|
|
})
|
|
})
|
|
|
|
t.Run("duplicates", func(t *testing.T) {
|
|
t.Parallel()
|
|
parsedCommandLine := tsoptionstest.GetParsedCommandLine(
|
|
t,
|
|
`{
|
|
"files": [
|
|
"a.ts",
|
|
"a.ts",
|
|
"b.ts",
|
|
]
|
|
}`,
|
|
files,
|
|
"/dev",
|
|
/*useCaseSensitiveFileNames*/ true,
|
|
)
|
|
|
|
assert.DeepEqual(t, parsedCommandLine.LiteralFileNames(), []string{
|
|
"/dev/a.ts",
|
|
"/dev/b.ts",
|
|
})
|
|
})
|
|
})
|
|
|
|
t.Run("with literal include list", func(t *testing.T) {
|
|
t.Parallel()
|
|
t.Run("without exclude", func(t *testing.T) {
|
|
t.Parallel()
|
|
parsedCommandLine := tsoptionstest.GetParsedCommandLine(
|
|
t,
|
|
`{
|
|
"include": [
|
|
"a.ts",
|
|
"b.ts"
|
|
]
|
|
}`,
|
|
files,
|
|
"/dev",
|
|
/*useCaseSensitiveFileNames*/ true,
|
|
)
|
|
|
|
assertMatches(t, parsedCommandLine, files, []string{
|
|
"/dev/a.ts",
|
|
"/dev/b.ts",
|
|
})
|
|
|
|
emptyParsedCommandLine := parsedCommandLine.ReloadFileNamesOfParsedCommandLine(noFilesFS)
|
|
assertMatches(t, emptyParsedCommandLine, noFiles, []string{
|
|
"/dev/a.ts",
|
|
"/dev/b.ts",
|
|
})
|
|
})
|
|
})
|
|
})
|
|
}
|