From 945e341dcdad0fb7b13bef38ee87d112886d6ed8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E5=AE=B6=E8=AE=AD?= Date: Sat, 1 Aug 2026 20:58:28 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E5=85=85=E5=85=AC=E5=85=B1=E8=A1=A8?= =?UTF-8?q?=E6=A0=BC=E8=A7=86=E8=A7=89=E9=AA=8C=E6=94=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...iveUiSceneVisualAcceptanceFixtureTest.java | 11 ++++---- .../ui/NativeUiVisualAcceptanceFixture.java | 25 ++++++++++++++++++- ...UiVisualAcceptanceFixtureContractTest.java | 9 ++++--- 3 files changed, 35 insertions(+), 10 deletions(-) diff --git a/src/test/java/com/example/workutils/system/ui/NativeUiSceneVisualAcceptanceFixtureTest.java b/src/test/java/com/example/workutils/system/ui/NativeUiSceneVisualAcceptanceFixtureTest.java index 0d48c51..f4592c1 100644 --- a/src/test/java/com/example/workutils/system/ui/NativeUiSceneVisualAcceptanceFixtureTest.java +++ b/src/test/java/com/example/workutils/system/ui/NativeUiSceneVisualAcceptanceFixtureTest.java @@ -23,7 +23,7 @@ import static org.junit.jupiter.api.Assertions.fail; class NativeUiSceneVisualAcceptanceFixtureTest { @Test - void capturesTenDistinctRealJavaFxScenesWithoutSynthesizingNativeChrome() throws Exception { + void capturesElevenDistinctRealJavaFxScenesWithoutSynthesizingNativeChrome() throws Exception { Assumptions.assumeTrue(NativeUiVisualAcceptanceFixture.captureEnabled(), () -> "Enable explicitly with -D" + NativeUiVisualAcceptanceFixture.ENABLED_PROPERTY + "=true"); @@ -34,7 +34,7 @@ class NativeUiSceneVisualAcceptanceFixtureTest { @SuppressWarnings("unchecked") List captures = (List) capture.invoke(null); - assertEquals(10, captures.size()); + assertEquals(11, captures.size()); List actualNames = new ArrayList<>(); Set imageHashes = new HashSet<>(); for (Object captured : captures) { @@ -68,14 +68,15 @@ class NativeUiSceneVisualAcceptanceFixtureTest { "scene-selected-expanded-1440.png", "scene-selected-collapsed-1440.png", "scene-selected-expanded-1024.png", - "scene-selected-collapsed-1024.png"), actualNames); - assertEquals(10, imageHashes.size(), + "scene-selected-collapsed-1024.png", + "scene-running-1100.png"), actualNames); + assertEquals(11, imageHashes.size(), "Every real Scene state and width must produce a distinct image"); } private static void assertSceneDimensions(Path path, int width, int height) { String name = path.getFileName().toString(); - int stageWidth = name.contains("1440") ? 1440 : 1024; + int stageWidth = name.contains("1440") ? 1440 : name.contains("1100") ? 1100 : 1024; int stageHeight = name.contains("1440") ? 900 : 768; assertTrue(width <= stageWidth && width >= stageWidth - 32, () -> "Unexpected Scene width for " + path + ": " + width); diff --git a/src/test/java/com/example/workutils/system/ui/NativeUiVisualAcceptanceFixture.java b/src/test/java/com/example/workutils/system/ui/NativeUiVisualAcceptanceFixture.java index 78b86e6..00af4bf 100644 --- a/src/test/java/com/example/workutils/system/ui/NativeUiVisualAcceptanceFixture.java +++ b/src/test/java/com/example/workutils/system/ui/NativeUiVisualAcceptanceFixture.java @@ -7,8 +7,12 @@ import com.example.workutils.system.ui.async.OperationState; import com.example.workutils.system.ui.async.OperationStatusPane; import com.example.workutils.system.ui.icon.AppIcon; import com.example.workutils.system.ui.icon.IconFactory; +import com.example.workutils.system.ui.history.ExportHistoryPane; +import com.example.workutils.system.ui.history.HistoryFileCommands; +import com.example.workutils.system.ui.history.HistoryItem; import com.example.workutils.system.ui.shell.NavigationRail; import com.example.workutils.system.ui.shell.PageHeader; +import javafx.collections.FXCollections; import javafx.embed.swing.SwingFXUtils; import javafx.geometry.Bounds; import javafx.geometry.Insets; @@ -215,8 +219,20 @@ final class NativeUiVisualAcceptanceFixture { LoadingButtonBinder.bind(operationButton, operationController, "开始生成"); operationStatusPane.setId("visual-fixture-status"); + ExportHistoryPane historyPane = new ExportHistoryPane( + "导出格式", + "文件数", + FXCollections.observableArrayList( + history("1", "HTML", "D:/exports/compensatory-core-api.html", "1", "2026-07-31 20:06:30"), + history("2", "HTML", "D:/exports/api_custom_batch.html", "1", "2026-07-31 20:05:42"), + history("3", "Markdown", "D:/exports/public-api.md", "8", "2026-07-31 20:05:36")), + new HistoryFileCommands( + ignored -> { }, ignored -> { }, ignored -> { }, ignored -> { }), + DesignTokens.FONT_BODY); + runningPane = new VBox(Theme.S4, - new PageHeader("任务执行", "无业务副作用的视觉验收状态"), + new PageHeader("API 接口文档导出", "公共历史表格视觉验收"), + historyPane, operationButton, operationStatusPane); runningPane.setPadding(new Insets(Theme.S6)); @@ -234,6 +250,11 @@ final class NativeUiVisualAcceptanceFixture { mainWindow.show(); } + private static HistoryItem history( + String index, String format, String file, String count, String time) { + return new HistoryItem(index, format, file, count, time); + } + static FixtureWindow open(Path outputDirectory) throws ReflectiveOperationException { assertTrue(javafx.application.Platform.isFxApplicationThread()); Theme.initTheme(); @@ -449,6 +470,8 @@ final class NativeUiVisualAcceptanceFixture { "selected-expanded-1024.png", View.SELECTED, true, 1024, 768)); specs.add(new CaptureSpec( "selected-collapsed-1024.png", View.SELECTED, false, 1024, 768)); + specs.add(new CaptureSpec( + "running-1100.png", View.RUNNING, true, 1100, 768)); return List.copyOf(specs); } diff --git a/src/test/java/com/example/workutils/system/ui/NativeUiVisualAcceptanceFixtureContractTest.java b/src/test/java/com/example/workutils/system/ui/NativeUiVisualAcceptanceFixtureContractTest.java index bee1f17..4aa70d3 100644 --- a/src/test/java/com/example/workutils/system/ui/NativeUiVisualAcceptanceFixtureContractTest.java +++ b/src/test/java/com/example/workutils/system/ui/NativeUiVisualAcceptanceFixtureContractTest.java @@ -56,10 +56,11 @@ class NativeUiVisualAcceptanceFixtureContractTest { "scene-welcome-expanded-1024.png", "scene-welcome-collapsed-1024.png", "scene-running-1024.png", - "scene-selected-expanded-1440.png", - "scene-selected-collapsed-1440.png", - "scene-selected-expanded-1024.png", - "scene-selected-collapsed-1024.png"), + "scene-selected-expanded-1440.png", + "scene-selected-collapsed-1440.png", + "scene-selected-expanded-1024.png", + "scene-selected-collapsed-1024.png", + "scene-running-1100.png"), requiredSceneImageNames.invoke(null)); }