package env_test
import (
"fmt"
"log"
"os"
"path/filepath"
"testing"
"git.sr.ht/~hristoast/wem/dll"
"git.sr.ht/~hristoast/wem/env"
)
func TestEnv(t *testing.T) {
// Setup
dir := t.TempDir()
cacheDir := filepath.Join(dir, "cache")
dxvkDir := filepath.Join(cacheDir, "dxvk-Ten")
installExpected := filepath.Join(dir, "Two")
prefixPath := filepath.Join(dir, "Sixteen")
vkd3dDir := filepath.Join(cacheDir, "vkd3d-proton-Twelve")
os.Setenv("HOME", dir)
os.MkdirAll(filepath.Join(dir, ".config", "wem"), 0755)
os.MkdirAll(dxvkDir, 0755)
os.MkdirAll(installExpected, 0755)
os.MkdirAll(prefixPath, 0755)
os.MkdirAll(vkd3dDir, 0755)
name := "NAMEGOESHERE"
e := &env.WineEnv{
Info: &env.Info{
Date: "ONE TWO THREE",
Name: "NAME GOES HERE",
},
InstallOpts: &env.InstallOpts{
GogSilentInstall: false,
InstallArgs: []string{"1", "2", "3"},
InstallExe: "One",
InstallExpected: installExpected,
InstallWorkDir: "Three",
},
RunOpts: &env.RunOpts{
QuietRun: false,
RunArgs: []string{"a", "b", "c"},
RunExe: "Four",
RunPrefix: "Five",
RunSuffix: "Six",
RunPre: "Seven",
RunPost: "Eight",
RunWorkDir: "Nine",
},
WineOpts: &env.WineOpts{
DxvkVersion: "Ten",
Esync: false,
Fsync: false,
VirtualDesktop: "Eleven",
Vkd3dVersion: "Twelve",
WineArch: "Thirteen",
WineArgs: []string{"idk", "jaja"},
WineDllOverrides: "Fourteen",
WineExe: "Fifteen",
WinePrefix: prefixPath,
WinetricksPath: "Seventeen",
},
SysOpts: &env.SysOpts{
ReducePulseLatency: false,
RestartPulse: false,
RestoreResolution: false,
SingleCore: false,
SysEnvVars: []string{"foo=bar", "baz=zow", "lala=lolo"},
VulkanIcdLoader: "Eighteen",
},
}
e.Save(name, false)
// Tests
t.Run("TestAsToml", func(t *testing.T) {
asToml, err := e.AsToml(false)
if err != nil {
log.Fatal(err)
}
expected := fmt.Sprintf(`Date = "ONE TWO THREE"
DxvkVersion = "Ten"
Esync = false
Fsync = false
GogSilentInstall = false
InstallArgs = ["1", "2", "3"]
InstallExe = "One"
InstallExpected = "%s"
InstallWorkDir = "Three"
Name = "NAME GOES HERE"
QuietRun = false
ReducePulseLatency = false
RestartPulse = false
RestoreResolution = false
RunArgs = ["a", "b", "c"]
RunExe = "Four"
RunPost = "Eight"
RunPre = "Seven"
RunPrefix = "Five"
RunSuffix = "Six"
RunWorkDir = "Nine"
Sandbox = false
SandboxBlacklist = []
SandboxCpu = 0
SandboxDns = ""
SandboxIpcNamespace = false
SandboxMachineId = false
SandboxNetNone = false
SandboxNoDbus = false
SandboxNoPrinters = false
SandboxNoU2f = false
SandboxPrivateCache = false
SandboxPrivateCwd = false
SandboxPrivateTmp = false
SandboxWhitelist = []
SingleCore = false
SysEnvVars = ["foo=bar", "baz=zow", "lala=lolo"]
VirtualDesktop = "Eleven"
Vkd3dVersion = "Twelve"
VulkanIcdLoader = "Eighteen"
WineArch = "Thirteen"
WineArgs = ["idk", "jaja"]
WineDllOverrides = "Fourteen"
WineExe = "Fifteen"
WinePrefix = "%s"
WinetricksPath = "Seventeen"
`, installExpected, prefixPath)
if asToml != expected {
t.Errorf("got: %s; want: %s", asToml, expected)
}
})
t.Run("CfgExists: does", func(t *testing.T) {
exists := e.CfgExists(name)
if exists != true {
t.Error("got: false; want: true")
}
})
t.Run("CfgPath", func(t *testing.T) {
p := e.CfgPath(name)
expected := filepath.Join(dir, ".config", "wem", "NAMEGOESHERE.cfg")
if p != expected {
t.Errorf("got: %s; want: %s", p, expected)
}
})
t.Run("InstallString", func(t *testing.T) {
is := e.InstallString()
expected := fmt.Sprintf("Seven; cd Three; foo=bar baz=zow lala=lolo WINEARCH=Thirteen WINEPREFIX=%s Fifteen idk jaja One 1 2 3", prefixPath)
if is != expected {
t.Errorf("got: %s; want: %s", is, expected)
}
})
t.Run("ExeString", func(t *testing.T) {
es, err := e.ExeString("", nil)
if err != nil {
t.Errorf("Got an error: %s", err.Error())
}
expected := fmt.Sprintf("Seven; cd Nine; foo=bar baz=zow lala=lolo WINE_LARGE_ADDRESS_AWARE=1 WINEARCH=Thirteen WINEPREFIX=%s VK_ICD_FILENAMES=Eighteen WINEDLLOVERRIDES=d3d9,d3d10,d3d10core,d3d11=native;d3d12=native;Fourteen Five Fifteen idk jaja explorer /desktop=Eleven Four a b c Six; Eight", prefixPath)
if es != expected {
t.Errorf("got: %s; want: %s", es, expected)
}
})
t.Run("ExeString - exec", func(t *testing.T) {
es, err := e.ExeString("toExec", nil)
if err != nil {
t.Errorf("Got an error: %s", err.Error())
}
expected := fmt.Sprintf("cd Nine; foo=bar baz=zow lala=lolo WINE_LARGE_ADDRESS_AWARE=1 WINEARCH=Thirteen WINEPREFIX=%s VK_ICD_FILENAMES=Eighteen WINEDLLOVERRIDES=d3d9,d3d10,d3d10core,d3d11=native;d3d12=native;Fourteen Five Fifteen idk jaja explorer /desktop=Eleven toExec", prefixPath)
if es != expected {
t.Errorf("got: %s; want: %s", es, expected)
}
})
t.Run("ExeString - exec with execArgs", func(t *testing.T) {
es, err := e.ExeString("toExec", []string{"arg1", "arg2", "arg3"})
if err != nil {
t.Errorf("Got an error: %s", err.Error())
}
expected := fmt.Sprintf("cd Nine; foo=bar baz=zow lala=lolo WINE_LARGE_ADDRESS_AWARE=1 WINEARCH=Thirteen WINEPREFIX=%s VK_ICD_FILENAMES=Eighteen WINEDLLOVERRIDES=d3d9,d3d10,d3d10core,d3d11=native;d3d12=native;Fourteen Five Fifteen idk jaja explorer /desktop=Eleven toExec arg1 arg2 arg3", prefixPath)
if es != expected {
t.Errorf("got: %s; want: %s", es, expected)
}
})
t.Run("PrefixExists: does not", func(t *testing.T) {
exists := e.PrefixExists()
expected := true
if exists != expected {
t.Errorf("got: %v; want: %v", exists, expected)
}
})
t.Run("IsInstalled: is", func(t *testing.T) {
ii := e.IsInstalled()
expected := false
if ii != expected {
t.Errorf("got: %v; want: %v", ii, expected)
}
})
t.Run("RenderString", func(t *testing.T) {
str, err := e.RenderString("{{.RunWorkDir}}")
if err != nil {
t.Errorf("Got an error: %s", err.Error())
}
expected := "Nine"
if str != expected {
t.Errorf("got: %v; want: %v", str, expected)
}
})
t.Run("RenderString", func(t *testing.T) {
e.VirtualDesktop = fmt.Sprintf("testing 1 2 3 4 %s {{.Vkd3dVersion}}", e.VirtualDesktop)
e.WineExe = fmt.Sprintf("%s {{.VirtualDesktop}}", e.WineExe)
e.RunWorkDir = fmt.Sprintf("%s {{.WineExe}}", e.RunWorkDir)
str, err := e.RenderString("{{.RunWorkDir}}")
if err != nil {
t.Errorf("Got an error: %s", err.Error())
}
expected := "Nine Fifteen testing 1 2 3 4 Eleven Twelve"
if str != expected {
t.Errorf("got: %v; want: %v", str, expected)
}
})
//TODO: This isn't working as expected...
// t.Run("RenderString - part 2", func(t *testing.T) {
// os.Setenv("WEM_TEST", "WEM_VALUE")
// str, err := e.RenderString("hello $WEM_TEST")
// if err != nil {
// t.Errorf("Got an error: %s", err.Error())
// }
// expected := "hello WEM_VALUE"
// if str != expected {
// t.Errorf("got: %v; want: %v", str, expected)
// }
// })
t.Run("ShouldInstall: should", func(t *testing.T) {
si := e.ShouldInstall()
expected := true
if si != expected {
t.Errorf("got: %v; want: %v", si, expected)
}
})
t.Run("Slug", func(t *testing.T) {
slug, _ := e.Slug()
expected := "NAMEGOESHERE"
if slug != expected {
t.Errorf("got: %s; want: %s", slug, expected)
}
})
t.Run("ValidDxvkVersion: offline, is", func(t *testing.T) {
_, offline := e.ValidDllVersion(cacheDir, dll.DxvkKind, dll.DxvkReleaseURL, e.DxvkVersion)
if offline == false {
t.Errorf("got: %v; want: %v", offline, true)
}
})
t.Run("ValidVkd3dVersion: offline, is", func(t *testing.T) {
_, offline := e.ValidDllVersion(cacheDir, dll.Vkd3dKind, dll.Vkd3dReleaseURL, e.Vkd3dVersion)
if offline == false {
t.Errorf("got: %v; want: %v", offline, true)
}
})
t.Run("Validate", func(t *testing.T) {
validate := e.Validate()
if validate != nil {
t.Errorf("got: %v; want: %v", validate, nil)
}
})
t.Run("FromName", func(t *testing.T) {
fn, _ := env.FromName(e.Name, true)
if fn.Name != e.Name {
t.Errorf("got: %s; want: %s", fn.Name, e.Name)
}
})
os.RemoveAll(dir)
t.Run("CfgExists: doesn't", func(t *testing.T) {
exists := e.CfgExists(name)
if exists != false {
t.Error("got: true; want: false")
}
})
t.Run("PrefixExists: doesn't", func(t *testing.T) {
exists := e.PrefixExists()
if exists == true {
t.Errorf("got: %v; want: %v", exists, false)
}
})
t.Run("IsInstalled: isn't", func(t *testing.T) {
ii := e.IsInstalled()
if ii == true {
t.Errorf("got: %v; want: %v", ii, false)
}
})
t.Run("ShouldInstall: should", func(t *testing.T) {
si := e.ShouldInstall()
if si == false {
t.Errorf("got: %v; want: %v", si, true)
}
})
t.Run("ValidDxvkVersion: offline, isn't", func(t *testing.T) {
_, offline := e.ValidDllVersion(cacheDir, dll.DxvkKind, dll.DxvkReleaseURL, e.DxvkVersion)
if offline == true {
t.Errorf("got: %v; want: %v", offline, false)
}
})
t.Run("ValidVkd3dVersion: offline, isn't", func(t *testing.T) {
_, offline := e.ValidDllVersion(cacheDir, dll.Vkd3dKind, dll.Vkd3dReleaseURL, e.Vkd3dVersion)
if offline == true {
t.Errorf("got: %v; want: %v", offline, false)
}
})
}