mirror of
https://github.com/go-task/task.git
synced 2025-10-08 23:02:02 +02:00
138 lines
2.8 KiB
Go
138 lines
2.8 KiB
Go
package taskrc
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/go-task/task/v3/taskrc/ast"
|
|
)
|
|
|
|
const (
|
|
xdgConfigYAML = `
|
|
experiments:
|
|
FOO: 1
|
|
BAR: 1
|
|
BAZ: 1
|
|
`
|
|
|
|
homeConfigYAML = `
|
|
experiments:
|
|
FOO: 2
|
|
BAR: 2
|
|
`
|
|
|
|
localConfigYAML = `
|
|
experiments:
|
|
FOO: 3
|
|
`
|
|
)
|
|
|
|
func setupDirs(t *testing.T) (string, string, string) {
|
|
t.Helper()
|
|
|
|
xdgConfigDir := t.TempDir()
|
|
xdgTaskConfigDir := filepath.Join(xdgConfigDir, "task")
|
|
require.NoError(t, os.Mkdir(xdgTaskConfigDir, 0o755))
|
|
|
|
homeDir := t.TempDir()
|
|
|
|
localDir := filepath.Join(homeDir, "local")
|
|
require.NoError(t, os.Mkdir(localDir, 0o755))
|
|
|
|
t.Setenv("XDG_CONFIG_HOME", xdgConfigDir)
|
|
t.Setenv("HOME", homeDir)
|
|
|
|
return xdgTaskConfigDir, homeDir, localDir
|
|
}
|
|
|
|
func writeFile(t *testing.T, dir, filename, content string) {
|
|
t.Helper()
|
|
err := os.WriteFile(filepath.Join(dir, filename), []byte(content), 0o644)
|
|
assert.NoError(t, err)
|
|
}
|
|
|
|
func TestGetConfig_NoConfigFiles(t *testing.T) { //nolint:paralleltest // cannot run in parallel
|
|
_, _, localDir := setupDirs(t)
|
|
|
|
cfg, err := GetConfig(localDir)
|
|
assert.NoError(t, err)
|
|
assert.Nil(t, cfg)
|
|
}
|
|
|
|
func TestGetConfig_OnlyXDG(t *testing.T) { //nolint:paralleltest // cannot run in parallel
|
|
xdgDir, _, localDir := setupDirs(t)
|
|
|
|
writeFile(t, xdgDir, "taskrc.yml", xdgConfigYAML)
|
|
|
|
cfg, err := GetConfig(localDir)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, &ast.TaskRC{
|
|
Version: nil,
|
|
Experiments: map[string]int{
|
|
"FOO": 1,
|
|
"BAR": 1,
|
|
"BAZ": 1,
|
|
},
|
|
}, cfg)
|
|
}
|
|
|
|
func TestGetConfig_OnlyHome(t *testing.T) { //nolint:paralleltest // cannot run in parallel
|
|
_, homeDir, localDir := setupDirs(t)
|
|
|
|
writeFile(t, homeDir, ".taskrc.yml", homeConfigYAML)
|
|
|
|
cfg, err := GetConfig(localDir)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, &ast.TaskRC{
|
|
Version: nil,
|
|
Experiments: map[string]int{
|
|
"FOO": 2,
|
|
"BAR": 2,
|
|
},
|
|
}, cfg)
|
|
}
|
|
|
|
func TestGetConfig_OnlyLocal(t *testing.T) { //nolint:paralleltest // cannot run in parallel
|
|
_, _, localDir := setupDirs(t)
|
|
|
|
writeFile(t, localDir, ".taskrc.yml", localConfigYAML)
|
|
|
|
cfg, err := GetConfig(localDir)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, &ast.TaskRC{
|
|
Version: nil,
|
|
Experiments: map[string]int{
|
|
"FOO": 3,
|
|
},
|
|
}, cfg)
|
|
}
|
|
|
|
func TestGetConfig_All(t *testing.T) { //nolint:paralleltest // cannot run in parallel
|
|
xdgConfigDir, homeDir, localDir := setupDirs(t)
|
|
|
|
// Write local config
|
|
writeFile(t, localDir, ".taskrc.yml", localConfigYAML)
|
|
|
|
// Write home config
|
|
writeFile(t, homeDir, ".taskrc.yml", homeConfigYAML)
|
|
|
|
// Write XDG config
|
|
writeFile(t, xdgConfigDir, "taskrc.yml", xdgConfigYAML)
|
|
|
|
cfg, err := GetConfig(localDir)
|
|
assert.NoError(t, err)
|
|
assert.NotNil(t, cfg)
|
|
assert.Equal(t, &ast.TaskRC{
|
|
Version: nil,
|
|
Experiments: map[string]int{
|
|
"FOO": 3,
|
|
"BAR": 2,
|
|
"BAZ": 1,
|
|
},
|
|
}, cfg)
|
|
}
|