fix: path discovery of cosmoteer for manjaro linux
This commit is contained in:
@@ -0,0 +1,126 @@
|
||||
#!/usr/bin/env python3
|
||||
# ABOUT ME
|
||||
# Tests steam_paths.find_data_dir, which locates Cosmoteer's Data folder.
|
||||
#
|
||||
# Why this exists: the game can be installed to any Steam library on any disk,
|
||||
# so the Data folder cannot be guessed from a fixed list of paths. Discovery
|
||||
# reads Steam's own libraryfolders.vdf instead. These tests build fake Steam
|
||||
# trees and check that each realistic layout is found.
|
||||
#
|
||||
# Usage: python3 tests/test_steam_paths.py
|
||||
|
||||
import os
|
||||
import shutil
|
||||
import sys
|
||||
import tempfile
|
||||
|
||||
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
||||
|
||||
import steam_paths
|
||||
|
||||
_failures = []
|
||||
|
||||
|
||||
def check(name, expected, actual):
|
||||
if expected == actual:
|
||||
print(f"PASS: {name}")
|
||||
else:
|
||||
print(f"FAIL: {name}")
|
||||
print(f" expected: {expected}")
|
||||
print(f" actual: {actual}")
|
||||
_failures.append(name)
|
||||
|
||||
|
||||
def make_steam_home(home, libraries):
|
||||
"""Write a libraryfolders.vdf under `home` listing the given library roots."""
|
||||
vdf = os.path.join(home, ".local/share/Steam/steamapps/libraryfolders.vdf")
|
||||
os.makedirs(os.path.dirname(vdf), exist_ok=True)
|
||||
with open(vdf, "w", encoding="utf-8") as handle:
|
||||
handle.write('"libraryfolders"\n{\n')
|
||||
for index, library in enumerate(libraries):
|
||||
handle.write(f'\t"{index}"\n\t{{\n\t\t"path"\t\t"{library}"\n\t}}\n')
|
||||
handle.write("}\n")
|
||||
|
||||
|
||||
def make_data_dir(library):
|
||||
"""Create the Cosmoteer Data folder inside a library root."""
|
||||
data = os.path.join(library, "steamapps/common/Cosmoteer/Data")
|
||||
os.makedirs(data, exist_ok=True)
|
||||
return data
|
||||
|
||||
|
||||
def main():
|
||||
tmp_root = tempfile.mkdtemp()
|
||||
try:
|
||||
# 1. The game lives in a secondary library on another disk.
|
||||
case = os.path.join(tmp_root, "case1")
|
||||
home = os.path.join(case, "home")
|
||||
library = os.path.join(case, "disk2/steamapps")
|
||||
make_steam_home(home, [os.path.join(home, ".local/share/Steam"), library])
|
||||
expected = make_data_dir(library)
|
||||
check(
|
||||
"finds Data in a secondary library from libraryfolders.vdf",
|
||||
expected,
|
||||
steam_paths.find_data_dir(home=home, environ={}),
|
||||
)
|
||||
|
||||
# 2. The game lives in the default library inside the Steam client dir.
|
||||
case = os.path.join(tmp_root, "case2")
|
||||
home = os.path.join(case, "home")
|
||||
steam = os.path.join(home, ".local/share/Steam")
|
||||
make_steam_home(home, [steam])
|
||||
expected = make_data_dir(steam)
|
||||
check(
|
||||
"finds Data in the default Steam library",
|
||||
expected,
|
||||
steam_paths.find_data_dir(home=home, environ={}),
|
||||
)
|
||||
|
||||
# 3. Library paths may contain spaces.
|
||||
case = os.path.join(tmp_root, "case3")
|
||||
home = os.path.join(case, "home")
|
||||
library = os.path.join(case, "my games/steamapps")
|
||||
make_steam_home(home, [os.path.join(home, ".local/share/Steam"), library])
|
||||
expected = make_data_dir(library)
|
||||
check(
|
||||
"finds Data under a library path containing spaces",
|
||||
expected,
|
||||
steam_paths.find_data_dir(home=home, environ={}),
|
||||
)
|
||||
|
||||
# 4. Nothing installed: discovery reports None instead of guessing.
|
||||
case = os.path.join(tmp_root, "case4")
|
||||
home = os.path.join(case, "home")
|
||||
os.makedirs(home, exist_ok=True)
|
||||
check(
|
||||
"returns None when there is no install",
|
||||
None,
|
||||
steam_paths.find_data_dir(home=home, environ={}),
|
||||
)
|
||||
|
||||
# 5. COSMOTEER_DATA overrides discovery.
|
||||
case = os.path.join(tmp_root, "case5")
|
||||
home = os.path.join(case, "home")
|
||||
steam = os.path.join(home, ".local/share/Steam")
|
||||
make_steam_home(home, [steam])
|
||||
make_data_dir(steam)
|
||||
override = os.path.join(case, "elsewhere/Data")
|
||||
os.makedirs(override, exist_ok=True)
|
||||
check(
|
||||
"COSMOTEER_DATA overrides discovery",
|
||||
override,
|
||||
steam_paths.find_data_dir(home=home, environ={"COSMOTEER_DATA": override}),
|
||||
)
|
||||
finally:
|
||||
shutil.rmtree(tmp_root, ignore_errors=True)
|
||||
|
||||
print()
|
||||
if _failures:
|
||||
print(f"{len(_failures)} test(s) failed.")
|
||||
return 1
|
||||
print("All Steam path discovery tests passed.")
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(main())
|
||||
Reference in New Issue
Block a user