164 lines
4.7 KiB
Go
164 lines
4.7 KiB
Go
package env
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
)
|
|
|
|
func TestGOROOT(t *testing.T) {
|
|
// Test with GOROOT environment variable set
|
|
t.Run("with GOROOT env", func(t *testing.T) {
|
|
origGoRoot := os.Getenv("GOROOT")
|
|
defer os.Setenv("GOROOT", origGoRoot)
|
|
|
|
expected := "/custom/goroot"
|
|
os.Setenv("GOROOT", expected)
|
|
if got := GOROOT(); got != expected {
|
|
t.Errorf("GOROOT() = %v, want %v", got, expected)
|
|
}
|
|
})
|
|
|
|
// Test without GOROOT environment variable
|
|
t.Run("without GOROOT env", func(t *testing.T) {
|
|
origGoRoot := os.Getenv("GOROOT")
|
|
defer os.Setenv("GOROOT", origGoRoot)
|
|
|
|
os.Setenv("GOROOT", "")
|
|
if got := GOROOT(); got == "" {
|
|
t.Error("GOROOT() should not return empty when using go env")
|
|
}
|
|
})
|
|
}
|
|
|
|
func TestLLGoRuntimeDir(t *testing.T) {
|
|
// Test with valid LLGO_ROOT
|
|
t.Run("with valid LLGO_ROOT", func(t *testing.T) {
|
|
origLLGoRoot := os.Getenv("LLGO_ROOT")
|
|
defer os.Setenv("LLGO_ROOT", origLLGoRoot)
|
|
|
|
tmpDir := t.TempDir()
|
|
runtimeDir := filepath.Join(tmpDir, "runtime")
|
|
os.MkdirAll(runtimeDir, 0755)
|
|
goModContent := []byte("module github.com/goplus/llgo/runtime\n")
|
|
if err := os.WriteFile(filepath.Join(runtimeDir, "go.mod"), goModContent, 0644); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
os.Setenv("LLGO_ROOT", tmpDir)
|
|
expected := runtimeDir
|
|
if got := LLGoRuntimeDir(); got != expected {
|
|
t.Errorf("LLGoRuntimeDir() = %v, want %v", got, expected)
|
|
}
|
|
})
|
|
|
|
// Test with invalid LLGO_ROOT
|
|
t.Run("with invalid LLGO_ROOT", func(t *testing.T) {
|
|
origLLGoRoot := os.Getenv("LLGO_ROOT")
|
|
defer os.Setenv("LLGO_ROOT", origLLGoRoot)
|
|
|
|
os.Setenv("LLGO_ROOT", "/nonexistent/path")
|
|
wd, _ := os.Getwd()
|
|
expected, _ := filepath.Abs(filepath.Join(wd, "../../../runtime"))
|
|
if got := LLGoRuntimeDir(); got != expected {
|
|
t.Errorf("LLGoRuntimeDir() = %v, want %v", got, expected)
|
|
}
|
|
})
|
|
}
|
|
|
|
func TestLLGoROOT(t *testing.T) {
|
|
// Test with valid LLGO_ROOT environment variable
|
|
t.Run("with valid LLGO_ROOT env", func(t *testing.T) {
|
|
origLLGoRoot := os.Getenv("LLGO_ROOT")
|
|
defer os.Setenv("LLGO_ROOT", origLLGoRoot)
|
|
|
|
tmpDir := t.TempDir()
|
|
runtimeDir := filepath.Join(tmpDir, "runtime")
|
|
os.MkdirAll(runtimeDir, 0755)
|
|
goModContent := []byte("module github.com/goplus/llgo/runtime\n")
|
|
if err := os.WriteFile(filepath.Join(runtimeDir, "go.mod"), goModContent, 0644); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
os.Setenv("LLGO_ROOT", tmpDir)
|
|
if got := LLGoROOT(); got != tmpDir {
|
|
t.Errorf("LLGoROOT() = %v, want %v", got, tmpDir)
|
|
}
|
|
})
|
|
|
|
// Test with invalid LLGO_ROOT environment variable
|
|
t.Run("with invalid LLGO_ROOT env", func(t *testing.T) {
|
|
origLLGoRoot := os.Getenv("LLGO_ROOT")
|
|
defer os.Setenv("LLGO_ROOT", origLLGoRoot)
|
|
|
|
os.Setenv("LLGO_ROOT", "/nonexistent/path")
|
|
if got := LLGoROOT(); got != "" {
|
|
t.Errorf("LLGoROOT() = %v, want empty string", got)
|
|
}
|
|
})
|
|
|
|
// Test with empty LLGO_ROOT environment variable
|
|
t.Run("with empty LLGO_ROOT env", func(t *testing.T) {
|
|
origLLGoRoot := os.Getenv("LLGO_ROOT")
|
|
defer os.Setenv("LLGO_ROOT", origLLGoRoot)
|
|
|
|
os.Setenv("LLGO_ROOT", "")
|
|
// Result depends on executable path, just ensure it doesn't panic
|
|
LLGoROOT()
|
|
})
|
|
}
|
|
|
|
func TestIsLLGoRoot(t *testing.T) {
|
|
// Test with empty root
|
|
t.Run("empty root", func(t *testing.T) {
|
|
if root, ok := isLLGoRoot(""); ok {
|
|
t.Errorf("isLLGoRoot('') = %v, %v, want '', false", root, ok)
|
|
}
|
|
})
|
|
|
|
// Test with invalid path
|
|
t.Run("invalid path", func(t *testing.T) {
|
|
if root, ok := isLLGoRoot(string([]byte{0})); ok {
|
|
t.Errorf("isLLGoRoot(invalid) = %v, %v, want '', false", root, ok)
|
|
}
|
|
})
|
|
|
|
// Test with non-existent path
|
|
t.Run("non-existent path", func(t *testing.T) {
|
|
if root, ok := isLLGoRoot("/nonexistent/path"); ok {
|
|
t.Errorf("isLLGoRoot(nonexistent) = %v, %v, want '', false", root, ok)
|
|
}
|
|
})
|
|
|
|
// Test with valid path but invalid go.mod
|
|
t.Run("invalid go.mod", func(t *testing.T) {
|
|
tmpDir := t.TempDir()
|
|
runtimeDir := filepath.Join(tmpDir, "runtime")
|
|
os.MkdirAll(runtimeDir, 0755)
|
|
goModContent := []byte("module wrong/module/name\n")
|
|
if err := os.WriteFile(filepath.Join(runtimeDir, "go.mod"), goModContent, 0644); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
if root, ok := isLLGoRoot(tmpDir); ok {
|
|
t.Errorf("isLLGoRoot(invalid_mod) = %v, %v, want '', false", root, ok)
|
|
}
|
|
})
|
|
|
|
// Test with valid path and valid go.mod
|
|
t.Run("valid path and go.mod", func(t *testing.T) {
|
|
tmpDir := t.TempDir()
|
|
runtimeDir := filepath.Join(tmpDir, "runtime")
|
|
os.MkdirAll(runtimeDir, 0755)
|
|
goModContent := []byte("module github.com/goplus/llgo/runtime\n")
|
|
if err := os.WriteFile(filepath.Join(runtimeDir, "go.mod"), goModContent, 0644); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
absPath, _ := filepath.Abs(tmpDir)
|
|
if root, ok := isLLGoRoot(tmpDir); !ok || root != absPath {
|
|
t.Errorf("isLLGoRoot(valid) = %v, %v, want %v, true", root, ok, absPath)
|
|
}
|
|
})
|
|
}
|