Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion tests/InputBox.Tests/InputBox.Tests.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="Microsoft.Testing.Extensions.CodeCoverage" Version="18.10.0" />
<PackageReference Include="xunit.v3.mtp-v2" Version="3.2.2" />
<PackageReference Include="xunit.v3.mtp-v2" Version="4.0.0" />
<PackageReference Include="FlaUI.Core" Version="5.0.0" />
<PackageReference Include="FlaUI.UIA3" Version="5.0.0" />
</ItemGroup>
Expand Down
27 changes: 15 additions & 12 deletions tests/InputBox.Tests/MainFormUiSmokeTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ public MainFormUiSmokeTests()
[Trait("Category", "UI")]
public void Launch_ShowsPrimaryControls()
{
RunWithFailureArtifacts(nameof(Launch_ShowsPrimaryControls), () =>
RunWithFailureArtifacts(nameof(Launch_ShowsPrimaryControls), TestContext.Current.CancellationToken, () =>
{
Assert.NotNull(_mainWindow);

Expand All @@ -98,7 +98,7 @@ public void Launch_ShowsPrimaryControls()
[Trait("Category", "UI")]
public void ContextMenu_Open_ShowsCoreCommands()
{
RunWithFailureArtifacts(nameof(ContextMenu_Open_ShowsCoreCommands), () =>
RunWithFailureArtifacts(nameof(ContextMenu_Open_ShowsCoreCommands), TestContext.Current.CancellationToken, () =>
{
AutomationElement contextMenu = OpenContextMenu();
AutomationElement privacyModeMenuItem = FindMenuItemByLabel(contextMenu, Strings.Menu_PrivacyMode);
Expand All @@ -123,7 +123,7 @@ public void ContextMenu_Open_ShowsCoreCommands()
[Trait("Category", "UI")]
public void HelpDialog_Open_And_CloseSuccessfully()
{
RunWithFailureArtifacts(nameof(HelpDialog_Open_And_CloseSuccessfully), () =>
RunWithFailureArtifacts(nameof(HelpDialog_Open_And_CloseSuccessfully), TestContext.Current.CancellationToken, () =>
{
AutomationElement contextMenu = OpenContextMenu();
AutomationElement helpMenuItem = FindMenuItemByLabel(contextMenu, Strings.Menu_Help);
Expand Down Expand Up @@ -159,7 +159,7 @@ public void HelpDialog_Open_And_CloseSuccessfully()
[Trait("Category", "UI")]
public void MinimizeOnReturn_ConfirmDialog_Open_And_CancelSuccessfully()
{
RunWithFailureArtifacts(nameof(MinimizeOnReturn_ConfirmDialog_Open_And_CancelSuccessfully), () =>
RunWithFailureArtifacts(nameof(MinimizeOnReturn_ConfirmDialog_Open_And_CancelSuccessfully), TestContext.Current.CancellationToken, () =>
{
AutomationElement contextMenu = OpenContextMenu();
AutomationElement minimizeOnReturnMenuItem = FindMenuItemByLabel(contextMenu, Strings.Menu_MinimizeOnReturn);
Expand Down Expand Up @@ -193,7 +193,7 @@ public void MinimizeOnReturn_ConfirmDialog_Open_And_CancelSuccessfully()
[Trait("Category", "UI")]
public void SettingsGamepadSubMenu_Open_ShowsCoreCommands()
{
RunWithFailureArtifacts(nameof(SettingsGamepadSubMenu_Open_ShowsCoreCommands), () =>
RunWithFailureArtifacts(nameof(SettingsGamepadSubMenu_Open_ShowsCoreCommands), TestContext.Current.CancellationToken, () =>
{
AutomationElement contextMenu = OpenContextMenu();
AutomationElement settingsMenuItem = FindMenuItemByLabel(contextMenu, Strings.Menu_Settings);
Expand Down Expand Up @@ -225,7 +225,7 @@ public void SettingsGamepadSubMenu_Open_ShowsCoreCommands()
[Trait("Category", "UI")]
public void GamepadCalibrationDialog_Open_And_CloseSuccessfully()
{
RunWithFailureArtifacts(nameof(GamepadCalibrationDialog_Open_And_CloseSuccessfully), () =>
RunWithFailureArtifacts(nameof(GamepadCalibrationDialog_Open_And_CloseSuccessfully), TestContext.Current.CancellationToken, () =>
{
AutomationElement contextMenu = OpenContextMenu();
AutomationElement settingsMenuItem = FindMenuItemByLabel(contextMenu, Strings.Menu_Settings);
Expand Down Expand Up @@ -266,7 +266,7 @@ public void GamepadCalibrationDialog_Open_And_CloseSuccessfully()
[Trait("Category", "UI")]
public void PhraseSubMenu_Open_ShowsManagementCommands()
{
RunWithFailureArtifacts(nameof(PhraseSubMenu_Open_ShowsManagementCommands), () =>
RunWithFailureArtifacts(nameof(PhraseSubMenu_Open_ShowsManagementCommands), TestContext.Current.CancellationToken, () =>
{
AutomationElement contextMenu = OpenContextMenu();
AutomationElement phrasesMenuItem = FindMenuItemByLabel(contextMenu, Strings.Menu_Phrases);
Expand Down Expand Up @@ -294,7 +294,7 @@ public void PhraseSubMenu_Open_ShowsManagementCommands()
[Trait("Category", "UI")]
public void PhraseManagerDialog_Open_And_CloseSuccessfully()
{
RunWithFailureArtifacts(nameof(PhraseManagerDialog_Open_And_CloseSuccessfully), () =>
RunWithFailureArtifacts(nameof(PhraseManagerDialog_Open_And_CloseSuccessfully), TestContext.Current.CancellationToken, () =>
{
AutomationElement contextMenu = OpenContextMenu();
AutomationElement phrasesMenuItem = FindMenuItemByLabel(contextMenu, Strings.Menu_Phrases);
Expand Down Expand Up @@ -333,7 +333,7 @@ public void PhraseManagerDialog_Open_And_CloseSuccessfully()
[Trait("Category", "UI")]
public void PhraseEditDialog_Open_And_CancelSuccessfully()
{
RunWithFailureArtifacts(nameof(PhraseEditDialog_Open_And_CancelSuccessfully), () =>
RunWithFailureArtifacts(nameof(PhraseEditDialog_Open_And_CancelSuccessfully), TestContext.Current.CancellationToken, () =>
{
AutomationElement contextMenu = OpenContextMenu();
AutomationElement phrasesMenuItem = FindMenuItemByLabel(contextMenu, Strings.Menu_Phrases);
Expand Down Expand Up @@ -386,7 +386,7 @@ public void PhraseEditDialog_Open_And_CancelSuccessfully()
[Trait("Category", "UI")]
public void CopyButton_Click_ClearsInput()
{
RunWithFailureArtifacts(nameof(CopyButton_Click_ClearsInput), () =>
RunWithFailureArtifacts(nameof(CopyButton_Click_ClearsInput), TestContext.Current.CancellationToken, () =>
{
FlaUiTextBox inputTextBox = FindInputBox();
FlaUiButton copyButton = FindCopyButton();
Expand Down Expand Up @@ -417,7 +417,7 @@ public void CopyButton_Click_ClearsInput()
[Trait("Category", "UI")]
public void RestartPrompt_ConfirmYes_RelaunchedWindowStaysForeground()
{
RunWithFailureArtifacts(nameof(RestartPrompt_ConfirmYes_RelaunchedWindowStaysForeground), () =>
RunWithFailureArtifacts(nameof(RestartPrompt_ConfirmYes_RelaunchedWindowStaysForeground), TestContext.Current.CancellationToken, () =>
{
Assert.NotNull(_application);
Assert.NotNull(_mainWindow);
Expand Down Expand Up @@ -1174,9 +1174,12 @@ private static void WaitUntil(
/// 在測試失敗時擷取桌面畫面與診斷文字,方便 GitHub Actions 回傳 Artifact。
/// </summary>
/// <param name="testName">目前執行中的測試名稱。</param>
/// <param name="cancellationToken">xUnit 測試逾時所提供的取消權杖。</param>
/// <param name="testAction">實際要執行的測試邏輯。</param>
private void RunWithFailureArtifacts(string testName, Action testAction)
private void RunWithFailureArtifacts(string testName, CancellationToken cancellationToken, Action testAction)
{
cancellationToken.ThrowIfCancellationRequested();

try
{
MarkStep($"{testName}: started");
Expand Down
2 changes: 2 additions & 0 deletions tests/InputBox.Tests/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,8 @@ xUnit v3 為每個 `[Fact]` 建立獨立的測試類別實例,`IDisposable.Dis

> 為避免 hosted runner 與本機 Agent 因自訂 modal dialog 的偵測不穩而長時間卡住,目前所有 UI 案例皆加上 fail-fast 逾時保護;dialog 案例會在此保護下持續驗證。

> UI 冒煙測試會將 xUnit 測試逾時的 `TestContext.Current.CancellationToken` 傳入共用執行流程,確保 xUnit v3 MTP v2 4.0.0 能在逾時後及時終止測試。

> UI 元素比對一律優先使用資源檔的目前語系字串與 AutomationId,而非寫死繁中或英文標籤,因此 Hosted Runner 的系統語系變動不應成為這組 smoke test 的失敗來源。

### 6. 目標框架
Expand Down
Loading