86 lines
2.2 KiB
Go
86 lines
2.2 KiB
Go
package terminalenv
|
|
|
|
import "testing"
|
|
|
|
func TestLocalShellEnvSetsTermAndUTF8WhenMissing(t *testing.T) {
|
|
got := LocalShellEnv([]string{"SHELL=/bin/zsh"})
|
|
|
|
if value := envValue(got, envTerm); value != defaultTerm {
|
|
t.Fatalf("TERM = %q, want %q", value, defaultTerm)
|
|
}
|
|
if value := envValue(got, envLANG); value == "" || !isUTF8Locale(value) {
|
|
t.Fatalf("LANG = %q, want UTF-8 locale", value)
|
|
}
|
|
}
|
|
|
|
func TestLocalShellEnvUsesLCTypeWhenLangIsNonUTF8(t *testing.T) {
|
|
got := ensureUTF8CharacterLocale([]string{"LANG=C"}, "linux")
|
|
|
|
if value := envValue(got, envLANG); value != "C" {
|
|
t.Fatalf("LANG = %q, want C", value)
|
|
}
|
|
if value := envValue(got, envLCType); value != "C.UTF-8" {
|
|
t.Fatalf("LC_CTYPE = %q, want C.UTF-8", value)
|
|
}
|
|
}
|
|
|
|
func TestLocalShellEnvOverridesNonUTF8LCAll(t *testing.T) {
|
|
got := ensureUTF8CharacterLocale([]string{"LC_ALL=C", "LANG=C"}, "darwin")
|
|
|
|
if value := envValue(got, envLCAll); value != "en_US.UTF-8" {
|
|
t.Fatalf("LC_ALL = %q, want en_US.UTF-8", value)
|
|
}
|
|
}
|
|
|
|
func TestSSHEnvVarsPreservesProfileUTF8Locale(t *testing.T) {
|
|
got := SSHEnvVars(map[string]string{
|
|
"LANG": "de_DE.UTF-8",
|
|
"FOO": "bar",
|
|
})
|
|
|
|
if got["LANG"] != "de_DE.UTF-8" {
|
|
t.Fatalf("LANG = %q, want profile value", got["LANG"])
|
|
}
|
|
if got["FOO"] != "bar" {
|
|
t.Fatalf("FOO = %q, want bar", got["FOO"])
|
|
}
|
|
if _, ok := got[envLCType]; ok {
|
|
t.Fatalf("unexpected LC_CTYPE default when LANG is already UTF-8")
|
|
}
|
|
}
|
|
|
|
func TestSSHEnvVarsPreservesProfileNonUTF8Locale(t *testing.T) {
|
|
got := SSHEnvVars(map[string]string{
|
|
envLANG: "C",
|
|
"FOO": "bar",
|
|
})
|
|
|
|
if got[envLANG] != "C" {
|
|
t.Fatalf("LANG = %q, want C", got[envLANG])
|
|
}
|
|
if _, ok := got[envLCType]; ok {
|
|
t.Fatalf("unexpected LC_CTYPE default when profile sets locale")
|
|
}
|
|
}
|
|
|
|
func TestSSHEnvVarsAddsUTF8LCTypeByDefault(t *testing.T) {
|
|
got := SSHEnvVars(map[string]string{"FOO": "bar"})
|
|
|
|
if got["FOO"] != "bar" {
|
|
t.Fatalf("FOO = %q, want bar", got["FOO"])
|
|
}
|
|
if value := got[envLCType]; value == "" || !isUTF8Locale(value) {
|
|
t.Fatalf("LC_CTYPE = %q, want UTF-8 locale", value)
|
|
}
|
|
}
|
|
|
|
func envValue(env []string, key string) string {
|
|
prefix := key + "="
|
|
for _, item := range env {
|
|
if len(item) >= len(prefix) && item[:len(prefix)] == prefix {
|
|
return item[len(prefix):]
|
|
}
|
|
}
|
|
return ""
|
|
}
|