Skip to content

fetch 项:主体挪进 fetch-lib.ps1,补单测(有无批处理、LOCALAPPDATA 隔离) - #14

Merged
qiyinxi merged 1 commit into
ModAVD:mainfrom
qiyinxi:test/fetch-item
Nov 6, 2026
Merged

qiyinxi merged 1 commit into
ModAVD:mainfrom
qiyinxi:test/fetch-item

Conversation

@qiyinxi

@qiyinxi qiyinxi commented Nov 6, 2026

Copy link
Copy Markdown
Member

ModAVDE2E#13 让 fetch 项在没有「补全组件.bat」的包(0.39 起,ModAVD/ModAVD#119)上只跑命令行,命令行和批处理两遍都把 LOCALAPPDATA 指到工作目录里的空目录。这两条当时只实跑过,没有单测。这个 PR 补上单测。

改了什么

  • fetch 项的主体挪进 items\fetch-lib.ps1(Invoke-FetchItem),命令行和批处理可以换成假的;items\fetch.ps1 只剩参数和守卫,行为不变。
  • 新加 tests\fetch-item.ps1,CI(.github/workflows/check.yml)加一步跑它,别的步骤和权限不动。
  • tests\tooling-guards.ps1 查「两条语句并成一行」时,把 fetch-lib.ps1 里的函数也算上。

测过什么

  • tests\fetch-item.ps1(152 项检查):命令行和批处理都换成假的,不跑程序、不联网;「本机的」LOCALAPPDATA 也是临时目录里造的,真的 %LOCALAPPDATA%\ModAVD 碰不到。核对的是:
    • 没有批处理的包只调命令行(装一次、核对一次);有批处理的两遍都跑,批处理那遍先放好命令行留下的(或 -Cache 的)两个 zip,喂「y、回车」。
    • 两遍看到的 LOCALAPPDATA 都是工作目录里的空目录;跑完换回原值(原来没有的,跑完也没有);「本机的」一个文件都不变。
    • 批处理失败、命令行出错时结果不 pass,照样换回 LOCALAPPDATA、删工作目录;-Keep 时留着。
    • 不是组包目录、工作目录已经有了,一开始就停,什么都不跑。
  • 变异检查 11 个都被测出来:去掉 LOCALAPPDATA 重定向、不换回、批处理前就换回、总跑批处理、从不跑批处理、不查 tools\modavd.exe、核对时绕过假的去调真的命令行、喂错输入、不删工作目录、批处理那遍不放 zip、fetch.ps1 不调 Invoke-FetchItem。
  • 其余测试照旧通过:root-guards、tooling-guards、created-disk-usage、m9a-verdict、root-sdk、upgrade-version、qemu-ownership;所有 .ps1、.psd1 解析 0 错。
  • 重构后实跑(-Cache 用本地缓存的两个 zip,工作目录在临时目录,跑完删掉):
    • 只放 tools\(ModAVDManager main 编的 modavd.exe)和 sdk\emulator 两个文件的包(模拟 0.39,没有批处理):命令行 19 秒装好两样,再跑都跳过,批处理那遍跳过,pass。
    • 0.38.1 的正式组包目录(有批处理):命令行 21 秒、批处理 28 秒都装好,再跑都跳过,pass。
    • 两次跑完,工作目录里的 localappdata 都是空的;本机 %LOCALAPPDATA%\ModAVD 的文件跑前跑后一样。

Refs ModAVD/ModAVD#45

Invoke-FetchItem 的命令行和批处理可以换成假的,tests\fetch-item.ps1 用它测:没有「补全组件.bat」的包只跑命令行,有的两遍都跑,不是组包目录、工作目录已经有了就一开始停;两遍跑的时候 LOCALAPPDATA 都指到工作目录里的空目录,跑完(出错也一样)换回原值,本机的 LOCALAPPDATA 一个文件都不变。

测试里「本机的」LOCALAPPDATA 也是临时目录造的,真的命令行、批处理换成一调就报错的,不跑任何程序。CI 加上这一步。

Refs ModAVD/ModAVD#45
@qiyinxi
qiyinxi merged commit 5fd9b37 into ModAVD:main Nov 6, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant