ZH Build and Testing - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki

從原始碼建置與測試

Home · BASIC · UO API · A–Z · Examples · Languages

開發環境

  • Windows x64 與 64-bit PowerShell;
  • global.json 指定的 .NET SDK,或同一 feature band 的相容 patch;
  • 可用的 NuGet cache,或可供 restore 的網路;
  • 若修改 external\YokoTheia,需要 Node.js 與 npm;
  • 足夠空間分別建置完整版本、without-Basic 版本與 NativeAOT 輸出。

不要任意更換 SDK feature band、Theia 套件版本或 lockfile;任何這類修改都需要重新執行完整測試。

.NET restore 與測試

project 根目錄使用:

dotnet --version
dotnet restore .\ClassicUO.sln -p:NuGetAudit=false
dotnet test .\tests\ClassicUO.UnitTests\ClassicUO.UnitTests.csproj -c Release
dotnet test .\external\InjectionScript\src\InjectionScript.Tests\InjectionScript.Tests.csproj -c Release
dotnet test .\external\InjectionScript\src\InjectionScript.Lsp.Tests\InjectionScript.Lsp.Tests.csproj -c Release

完整版本與 project-without-yoko 必須分開 restore、build、test。完整版本成功不代表 without-Basic 已移除所有 Basic UI、payload 或相依性。

Eclipse Theia

只有變更 IDE frontend、Basic language extension 或其依賴時才需要重建:

cd .\external\YokoTheia
npm install
npm run build

建置後需重新測試 Run 選單、快捷鍵、Explorer 多腳本選取、狀態色、Outline、Problems、Output、API Inspector、Manual、Variables、Watch、Call Stack、panel resize/detach,以及關閉再開 IDE 後的 Runtime 狀態同步。

NativeAOT 與遊戲資料

最終 Windows 客戶端以 NativeAOT x64 驗證。自動 build/test 不需要把受保護的 Ultima Online 資料加入 repository;真正的 graphical smoke test 必須在本機使用合法資料目錄進行。

必要驗證矩陣

區域 預期結果
ClassicUO Full 全部測試通過
ClassicUO without Basic 全部測試通過
InjectionScript Runtime 全部測試通過
LSP / IDE 全部測試通過
Full NativeAOT 0 build errors
without-Basic build 0 build errors
Runtime/API Manual parity 所有差異為 0
Native payload probes 兩種客戶端都 passed
解壓後 ZIP 驗證 passed

功能回歸檢查

  • AutoLoad 選擇按角色保存並在啟動時載入正確檔案;
  • Basic Auto Load 顯示並執行所選 procedures;
  • Basic Example 保存到普通巨集設定並可執行;
  • IDE 新檔與既有檔案保存到正確位置;
  • 不捲動也能初始化整份文件;
  • Run、Debug、Pause、Continue、Step、Stop 與 all-script commands;
  • 多腳本選取與綠/黃/黑狀態;
  • API Manual 內容只來自 Runtime registration;
  • 所有 Basic examples 可驗證;
  • 全部支援語言可切換且技術語法不被翻譯;
  • without-Basic 版本沒有 Basic UI 與執行相依性。

發行壓縮檔

建立 ZIP 後,必須解壓到新的暫存目錄,逐檔比較 staging tree 與 SHA-256,再對兩個可執行 payload 重做 native probes。ZIP 本身的 SHA-256 應另外寫入相鄰 .sha256.txt,但 Wiki 不應硬編碼某次發行的特定值。

自動測試不能代替真實伺服器測試。還要人工檢查 server gump、特定 shard packet extension、遊戲資料相容性、字型、hover、Info Bar、施法指示器與移動。