From 25aa318646584edff496145b231f2d9b3782df33 Mon Sep 17 00:00:00 2001 From: Patrick Ziegler Date: Sun, 21 Dec 2025 21:48:32 +0100 Subject: [PATCH] Rewrite "New Wizard" tests to no longer require the SWTBot runner Newer Eclipse versions no longer launch a workspace when running a test outside the UI thread. Because this is a requirement for all of our SWTBot tests, we can no longer run them locally. The tests were originally written like that because they open a modal dialog and would thus lead to a deadlock if the test is also executed within the UI thread. But thanks to the changes to the `UiContext`, we have a way to make this work regardless. --- org.eclipse.wb.tests/pom.xml | 34 +-- .../core/nls/ui/PropertiesCompositeTest.java | 6 +- .../designer/rcp/AbstractWizardTest.java | 113 +++++++++ .../wb/tests/designer/rcp/RcpTests.java | 6 +- .../rcp/wizard/Eclipse4WizardTest.java | 6 +- .../designer/rcp/wizard/JFaceWizardTest.java | 8 +- .../designer/rcp/wizard/RcpWizardTest.java | 8 +- .../designer/rcp/wizard/SwtWizardTest.java | 6 +- .../designer/rcp/wizard/WizardTests.java | 2 +- .../wb/tests/designer/swing/SwingTests.java | 2 + .../swing/wizard/SwingNewWizardTest.java | 20 +- .../swing/wizard/WizardTests.java} | 8 +- .../org/eclipse/wb/tests/gef/UiContext.java | 21 +- .../swtbot/designer/AbstractSWTBotTest.java | 70 ----- .../swtbot/designer/AbstractWizardTest.java | 65 ----- .../WindowBuilder SWTBot Logging.properties | 6 - .../WindowBuilder SWTBot Tests.launch | 44 ---- .../swtbot/designer/WindowBuilderTests.java | 28 -- .../wb/tests/swtbot/designer/bot/UIUtil.java | 59 ----- .../bot/WindowBuilderProjectExplorerBot.java | 41 --- .../bot/WindowBuilderWorkbenchBot.java | 240 ------------------ .../tests/swtbot/designer/rcp/RcpTests.java | 27 -- 22 files changed, 171 insertions(+), 649 deletions(-) create mode 100644 org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/rcp/AbstractWizardTest.java rename org.eclipse.wb.tests/src/org/eclipse/wb/tests/{swtbot => }/designer/rcp/wizard/Eclipse4WizardTest.java (83%) rename org.eclipse.wb.tests/src/org/eclipse/wb/tests/{swtbot => }/designer/rcp/wizard/JFaceWizardTest.java (91%) rename org.eclipse.wb.tests/src/org/eclipse/wb/tests/{swtbot => }/designer/rcp/wizard/RcpWizardTest.java (93%) rename org.eclipse.wb.tests/src/org/eclipse/wb/tests/{swtbot => }/designer/rcp/wizard/SwtWizardTest.java (91%) rename org.eclipse.wb.tests/src/org/eclipse/wb/tests/{swtbot => }/designer/rcp/wizard/WizardTests.java (93%) rename org.eclipse.wb.tests/src/org/eclipse/wb/tests/{swtbot => }/designer/swing/wizard/SwingNewWizardTest.java (83%) rename org.eclipse.wb.tests/src/org/eclipse/wb/tests/{swtbot/designer/swing/SwingTests.java => designer/swing/wizard/WizardTests.java} (76%) delete mode 100644 org.eclipse.wb.tests/src/org/eclipse/wb/tests/swtbot/designer/AbstractSWTBotTest.java delete mode 100644 org.eclipse.wb.tests/src/org/eclipse/wb/tests/swtbot/designer/AbstractWizardTest.java delete mode 100644 org.eclipse.wb.tests/src/org/eclipse/wb/tests/swtbot/designer/WindowBuilder SWTBot Logging.properties delete mode 100644 org.eclipse.wb.tests/src/org/eclipse/wb/tests/swtbot/designer/WindowBuilder SWTBot Tests.launch delete mode 100644 org.eclipse.wb.tests/src/org/eclipse/wb/tests/swtbot/designer/WindowBuilderTests.java delete mode 100644 org.eclipse.wb.tests/src/org/eclipse/wb/tests/swtbot/designer/bot/UIUtil.java delete mode 100644 org.eclipse.wb.tests/src/org/eclipse/wb/tests/swtbot/designer/bot/WindowBuilderProjectExplorerBot.java delete mode 100644 org.eclipse.wb.tests/src/org/eclipse/wb/tests/swtbot/designer/bot/WindowBuilderWorkbenchBot.java delete mode 100644 org.eclipse.wb.tests/src/org/eclipse/wb/tests/swtbot/designer/rcp/RcpTests.java diff --git a/org.eclipse.wb.tests/pom.xml b/org.eclipse.wb.tests/pom.xml index 7b00c236d..655562f82 100644 --- a/org.eclipse.wb.tests/pom.xml +++ b/org.eclipse.wb.tests/pom.xml @@ -73,35 +73,6 @@ org.eclipse.tycho tycho-surefire-plugin ${tycho.version} - - - - default-test - - test - - - - **/org.eclipse.wb.tests.designer.WindowBuilderTests.java - - true - true - - - - swtbot-test - - test - - - - **/org.eclipse.wb.tests.swtbot.designer.WindowBuilderTests.java - - true - false - - - ${ui.test.vmargs} -nl de -clearPersistedState -consoleLog @@ -114,6 +85,11 @@ 0.0.0 + + **/org.eclipse.wb.tests.designer.WindowBuilderTests.java + + true + true diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/nls/ui/PropertiesCompositeTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/nls/ui/PropertiesCompositeTest.java index 9ca1becda..da57b88a8 100644 --- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/nls/ui/PropertiesCompositeTest.java +++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/nls/ui/PropertiesCompositeTest.java @@ -16,9 +16,9 @@ import org.eclipse.wb.internal.core.nls.model.LocaleInfo; import org.eclipse.wb.internal.core.nls.ui.NewSourceDialog; import org.eclipse.wb.internal.core.nls.ui.PropertiesComposite; +import org.eclipse.wb.internal.core.utils.execution.ExecutionUtils; import org.eclipse.wb.internal.core.utils.reflect.ReflectionUtils; import org.eclipse.wb.tests.gef.UiContext; -import org.eclipse.wb.tests.swtbot.designer.bot.UIUtil; import org.eclipse.wb.tests.utils.SWTBotEditableSource; import static org.eclipse.swtbot.swt.finder.matchers.WidgetOfType.widgetOfType; @@ -302,8 +302,8 @@ private static SWTBotTreeItem getItem(SWTBotTreeItem item, String... pathElement */ private static SWTBotEditableSource getEditableSource(SWTBot shell) throws Exception { PropertiesComposite composite = shell.getFinder().findControls(widgetOfType(PropertiesComposite.class)).get(0); - IEditableSource editableSource = (IEditableSource) UIUtil - .syncCall(() -> ReflectionUtils.invokeMethod(composite, "getSelectedSource()")); + IEditableSource editableSource = (IEditableSource) UIThreadRunnable.syncExec( + () -> ExecutionUtils.runObject(() -> ReflectionUtils.invokeMethod(composite, "getSelectedSource()"))); return new SWTBotEditableSource(editableSource); } } diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/rcp/AbstractWizardTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/rcp/AbstractWizardTest.java new file mode 100644 index 000000000..ed6d0c38b --- /dev/null +++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/rcp/AbstractWizardTest.java @@ -0,0 +1,113 @@ +/******************************************************************************* + * Copyright (c) 2023, 2025 Patrick Ziegler and others. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * https://www.eclipse.org/legal/epl-2.0. + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Patrick Ziegler - initial API and implementation + *******************************************************************************/ +package org.eclipse.wb.tests.designer.rcp; + +import org.eclipse.wb.tests.designer.TestUtils; +import org.eclipse.wb.tests.designer.core.model.parser.AbstractJavaInfoRelatedTest; +import org.eclipse.wb.tests.gef.UiContext; + +import static org.eclipse.swtbot.swt.finder.waits.Conditions.shellCloses; + +import org.eclipse.core.resources.IFile; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.Platform; +import org.eclipse.swtbot.eclipse.finder.SWTWorkbenchBot; +import org.eclipse.swtbot.eclipse.finder.widgets.SWTBotEditor; +import org.eclipse.swtbot.swt.finder.SWTBot; +import org.eclipse.swtbot.swt.finder.widgets.SWTBotShell; +import org.eclipse.ui.PlatformUI; + +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.osgi.framework.Version; + +import java.util.Arrays; + +/** + * Abstract base class for all tests that create Java files using the + * {@code New Wizard}. + */ +public abstract class AbstractWizardTest extends RcpModelTest { + private static Version ECLIPSE_VERSION = Platform.getBundle("org.eclipse.ui.workbench").getVersion(); + private static Version VERSION = new Version(3, 135, 0); + // https://github.com/eclipse-platform/eclipse.platform/issues/1749 + private static String WIZARD_NAME = ECLIPSE_VERSION.compareTo(VERSION) > 0 ? "New" : "Select a wizard"; + private static boolean m_firstDesignerTest = true; + private SWTWorkbenchBot workbench; + private IFile editorFile; + protected SWTBot editor; + + @Override + @BeforeEach + public void setUp() throws Exception { + super.setUp(); + if (m_firstDesignerTest) { + m_firstDesignerTest = false; + PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().resetPerspective(); + } + workbench = new SWTWorkbenchBot(); + } + + @Override + @AfterEach + public void tearDown() throws Exception { + if (editorFile != null) { + forceDeleteResource(editorFile); + } + super.tearDown(); + } + + + @AfterAll + public static void tearDownAll() throws Exception { + AbstractJavaInfoRelatedTest.tearDownAll(); + TestUtils.closeAllViews(); + m_firstDesignerTest = true; + } + + protected final void testTemplateViaProjectExplorer(String... fullPath) throws Exception { + new UiContext().executeAndCheck(() -> { + SWTBot projectExplorer = workbench.viewById("org.eclipse.ui.navigator.ProjectExplorer").bot(); + projectExplorer.tree().getTreeItem("TestProject").contextMenu().menu("New", "Other...").click(); + }, bot -> createTemplate(bot, fullPath)); + } + + protected final void testTemplateViaMenu(String... fullPath) throws Exception { + new UiContext().executeAndCheck(() -> { + workbench.shell().menu().menu("File").menu("New", "Other...").click(); + }, bot -> createTemplate(bot, fullPath)); + } + + private void createTemplate(SWTBot activeShell, String... fullPath) throws CoreException { + assertTrue(fullPath.length > 1, "path requires at least one argument (template name)"); + String[] path = Arrays.copyOf(fullPath, fullPath.length - 1); + String name = fullPath[fullPath.length - 1]; + String fileName = name.replace(' ', '_').replaceAll("\\(|\\)", ""); + + SWTBotShell shell = activeShell.shell(WIZARD_NAME); + SWTBot bot = shell.bot(); + bot.tree().expandNode(path).getNode(name).select(); + bot.button("Next >").click(); + bot.text(1).setText("test"); + bot.text(2).setText(fileName); + bot.button("Finish").click(); + // Wait for file creation + bot.waitUntil(shellCloses(shell)); + // Open design page + SWTBotEditor activeEditor = new SWTWorkbenchBot().activeEditor(); + editorFile = activeEditor.getReference().getEditorInput().getAdapter(IFile.class); + editor = activeEditor.bot(); + editor.cTabItem("Design").activate(); + } +} diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/rcp/RcpTests.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/rcp/RcpTests.java index f4bd0dffb..ed8d2a342 100644 --- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/rcp/RcpTests.java +++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/rcp/RcpTests.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2011, 2024 Google, Inc. and others. + * Copyright (c) 2011, 2025 Google, Inc. and others. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at @@ -19,6 +19,7 @@ import org.eclipse.wb.tests.designer.rcp.nebula.NebulaTests; import org.eclipse.wb.tests.designer.rcp.resource.ResourceTests; import org.eclipse.wb.tests.designer.rcp.swing2swt.Swing2SwtTests; +import org.eclipse.wb.tests.designer.rcp.wizard.WizardTests; import org.junit.platform.suite.api.SelectClasses; import org.junit.platform.suite.api.Suite; @@ -36,7 +37,8 @@ NebulaTests.class, Swing2SwtTests.class, GefTests.class, - BindingTests.class + BindingTests.class, + WizardTests.class }) public class RcpTests { } diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/swtbot/designer/rcp/wizard/Eclipse4WizardTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/rcp/wizard/Eclipse4WizardTest.java similarity index 83% rename from org.eclipse.wb.tests/src/org/eclipse/wb/tests/swtbot/designer/rcp/wizard/Eclipse4WizardTest.java rename to org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/rcp/wizard/Eclipse4WizardTest.java index cf89a73ae..c3979ca56 100644 --- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/swtbot/designer/rcp/wizard/Eclipse4WizardTest.java +++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/rcp/wizard/Eclipse4WizardTest.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023, 2024 Patrick Ziegler and others. + * Copyright (c) 2023, 2025 Patrick Ziegler and others. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at @@ -10,9 +10,9 @@ * Contributors: * Patrick Ziegler - initial API and implementation *******************************************************************************/ -package org.eclipse.wb.tests.swtbot.designer.rcp.wizard; +package org.eclipse.wb.tests.designer.rcp.wizard; -import org.eclipse.wb.tests.swtbot.designer.AbstractWizardTest; +import org.eclipse.wb.tests.designer.rcp.AbstractWizardTest; import org.junit.jupiter.api.Test; diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/swtbot/designer/rcp/wizard/JFaceWizardTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/rcp/wizard/JFaceWizardTest.java similarity index 91% rename from org.eclipse.wb.tests/src/org/eclipse/wb/tests/swtbot/designer/rcp/wizard/JFaceWizardTest.java rename to org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/rcp/wizard/JFaceWizardTest.java index 4d89f6f7f..50510c01f 100644 --- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/swtbot/designer/rcp/wizard/JFaceWizardTest.java +++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/rcp/wizard/JFaceWizardTest.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023, 2024 Patrick Ziegler and others. + * Copyright (c) 2023, 2025 Patrick Ziegler and others. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at @@ -10,14 +10,12 @@ * Contributors: * Patrick Ziegler - initial API and implementation *******************************************************************************/ -package org.eclipse.wb.tests.swtbot.designer.rcp.wizard; +package org.eclipse.wb.tests.designer.rcp.wizard; -import org.eclipse.wb.tests.swtbot.designer.AbstractWizardTest; +import org.eclipse.wb.tests.designer.rcp.AbstractWizardTest; import static org.eclipse.swtbot.swt.finder.matchers.WithText.withText; -import static org.junit.jupiter.api.Assertions.assertNotNull; - import org.junit.jupiter.api.Test; public class JFaceWizardTest extends AbstractWizardTest { diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/swtbot/designer/rcp/wizard/RcpWizardTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/rcp/wizard/RcpWizardTest.java similarity index 93% rename from org.eclipse.wb.tests/src/org/eclipse/wb/tests/swtbot/designer/rcp/wizard/RcpWizardTest.java rename to org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/rcp/wizard/RcpWizardTest.java index 54d2bd321..6e9bf057f 100644 --- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/swtbot/designer/rcp/wizard/RcpWizardTest.java +++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/rcp/wizard/RcpWizardTest.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023, 2024 Patrick Ziegler and others. + * Copyright (c) 2023, 2025 Patrick Ziegler and others. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at @@ -10,14 +10,12 @@ * Contributors: * Patrick Ziegler - initial API and implementation *******************************************************************************/ -package org.eclipse.wb.tests.swtbot.designer.rcp.wizard; +package org.eclipse.wb.tests.designer.rcp.wizard; -import org.eclipse.wb.tests.swtbot.designer.AbstractWizardTest; +import org.eclipse.wb.tests.designer.rcp.AbstractWizardTest; import static org.eclipse.swtbot.swt.finder.matchers.WithText.withText; -import static org.junit.jupiter.api.Assertions.assertNotNull; - import org.junit.jupiter.api.Test; public class RcpWizardTest extends AbstractWizardTest { diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/swtbot/designer/rcp/wizard/SwtWizardTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/rcp/wizard/SwtWizardTest.java similarity index 91% rename from org.eclipse.wb.tests/src/org/eclipse/wb/tests/swtbot/designer/rcp/wizard/SwtWizardTest.java rename to org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/rcp/wizard/SwtWizardTest.java index efb18df2e..e8414b19e 100644 --- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/swtbot/designer/rcp/wizard/SwtWizardTest.java +++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/rcp/wizard/SwtWizardTest.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023, 2024 Patrick Ziegler and others. + * Copyright (c) 2023, 2025 Patrick Ziegler and others. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at @@ -10,9 +10,9 @@ * Contributors: * Patrick Ziegler - initial API and implementation *******************************************************************************/ -package org.eclipse.wb.tests.swtbot.designer.rcp.wizard; +package org.eclipse.wb.tests.designer.rcp.wizard; -import org.eclipse.wb.tests.swtbot.designer.AbstractWizardTest; +import org.eclipse.wb.tests.designer.rcp.AbstractWizardTest; import org.junit.jupiter.api.Test; diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/swtbot/designer/rcp/wizard/WizardTests.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/rcp/wizard/WizardTests.java similarity index 93% rename from org.eclipse.wb.tests/src/org/eclipse/wb/tests/swtbot/designer/rcp/wizard/WizardTests.java rename to org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/rcp/wizard/WizardTests.java index 1cd258904..7f53151fd 100644 --- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/swtbot/designer/rcp/wizard/WizardTests.java +++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/rcp/wizard/WizardTests.java @@ -10,7 +10,7 @@ * Contributors: * Patrick Ziegler - initial API and implementation *******************************************************************************/ -package org.eclipse.wb.tests.swtbot.designer.rcp.wizard; +package org.eclipse.wb.tests.designer.rcp.wizard; import org.junit.platform.suite.api.SelectClasses; import org.junit.platform.suite.api.Suite; diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/swing/SwingTests.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/swing/SwingTests.java index 515c74c4e..3c6cfe3b7 100644 --- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/swing/SwingTests.java +++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/swing/SwingTests.java @@ -15,6 +15,7 @@ import org.eclipse.wb.tests.designer.swing.laf.LookAndFeelTest; import org.eclipse.wb.tests.designer.swing.model.ModelTests; import org.eclipse.wb.tests.designer.swing.swingx.SwingXTests; +import org.eclipse.wb.tests.designer.swing.wizard.WizardTests; import org.junit.platform.suite.api.SelectClasses; import org.junit.platform.suite.api.Suite; @@ -29,6 +30,7 @@ CustomizeTest.class, ModelTests.class, SwingXTests.class, + WizardTests.class // WaitForMemoryProfilerTest.class, }) public class SwingTests { diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/swtbot/designer/swing/wizard/SwingNewWizardTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/swing/wizard/SwingNewWizardTest.java similarity index 83% rename from org.eclipse.wb.tests/src/org/eclipse/wb/tests/swtbot/designer/swing/wizard/SwingNewWizardTest.java rename to org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/swing/wizard/SwingNewWizardTest.java index 3f60343c0..9b82162fb 100644 --- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/swtbot/designer/swing/wizard/SwingNewWizardTest.java +++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/swing/wizard/SwingNewWizardTest.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023, 2024 Patrick Ziegler and others. + * Copyright (c) 2023, 2025 Patrick Ziegler and others. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at @@ -10,11 +10,9 @@ * Contributors: * Patrick Ziegler - initial API and implementation *******************************************************************************/ -package org.eclipse.wb.tests.swtbot.designer.swing.wizard; +package org.eclipse.wb.tests.designer.swing.wizard; -import org.eclipse.wb.tests.swtbot.designer.AbstractWizardTest; - -import static org.junit.jupiter.api.Assertions.assertArrayEquals; +import org.eclipse.wb.tests.designer.rcp.AbstractWizardTest; import org.junit.jupiter.api.Test; @@ -37,7 +35,7 @@ public void testCreateNewJDialog() throws Exception { @Test public void testCreateNewJApplet() throws Exception { - testTemplateViaProjectExplorer("WindowBuilder", "Swing Designer", "JApplet"); + testTemplateViaProjectExplorer("WindowBuilder", "Swing Designer", "(Deprecated) JApplet"); } @Test @@ -52,13 +50,13 @@ public void testCreateNewApplicationWindow() throws Exception { @Test public void testCreateWithJavaModules() throws Exception { - bot.setFileContent("module-info.java", """ + setFileContentSrc("module-info.java", """ module test { }"""); // testTemplateViaProjectExplorer("WindowBuilder", "Swing Designer", "JFrame"); // We can't use code blocks as they don't consider carriage-returns - assertArrayEquals(bot.getFileContent("module-info.java").split(System.lineSeparator()), + assertArrayEquals(getFileContentSrc("module-info.java").split(System.lineSeparator()), new String[] { "module test {", " requires java.desktop;", @@ -83,7 +81,7 @@ public void testCreateNewJDialogNoSelection() throws Exception { @Test public void testCreateNewJAppletNoSelection() throws Exception { - testTemplateViaMenu("WindowBuilder", "Swing Designer", "JApplet"); + testTemplateViaMenu("WindowBuilder", "Swing Designer", "(Deprecated) JApplet"); } @Test @@ -98,13 +96,13 @@ public void testCreateNewApplicationWindowNoSelection() throws Exception { @Test public void testCreateWithJavaModulesNoSelection() throws Exception { - bot.setFileContent("module-info.java", """ + setFileContentSrc("module-info.java", """ module test { }"""); // testTemplateViaMenu("WindowBuilder", "Swing Designer", "JFrame"); // We can't use code blocks as they don't consider carriage-returns - assertArrayEquals(bot.getFileContent("module-info.java").split(System.lineSeparator()), + assertArrayEquals(getFileContentSrc("module-info.java").split(System.lineSeparator()), new String[] { "module test {", " requires java.desktop;", diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/swtbot/designer/swing/SwingTests.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/swing/wizard/WizardTests.java similarity index 76% rename from org.eclipse.wb.tests/src/org/eclipse/wb/tests/swtbot/designer/swing/SwingTests.java rename to org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/swing/wizard/WizardTests.java index 26eb8ec0c..cc45977ff 100644 --- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/swtbot/designer/swing/SwingTests.java +++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/swing/wizard/WizardTests.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2024 Patrick Ziegler and others. + * Copyright (c) 2024, 2025 Patrick Ziegler and others. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at @@ -10,9 +10,7 @@ * Contributors: * Patrick Ziegler - initial API and implementation *******************************************************************************/ -package org.eclipse.wb.tests.swtbot.designer.swing; - -import org.eclipse.wb.tests.swtbot.designer.swing.wizard.SwingNewWizardTest; +package org.eclipse.wb.tests.designer.swing.wizard; import org.junit.platform.suite.api.SelectClasses; import org.junit.platform.suite.api.Suite; @@ -22,6 +20,6 @@ */ @Suite @SelectClasses(SwingNewWizardTest.class) -public class SwingTests { +public class WizardTests { } diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/gef/UiContext.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/gef/UiContext.java index 5fb8a5225..f116fb2b1 100644 --- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/gef/UiContext.java +++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/gef/UiContext.java @@ -17,6 +17,7 @@ import org.eclipse.swtbot.swt.finder.SWTBot; import org.eclipse.swtbot.swt.finder.exceptions.WidgetNotFoundException; import org.eclipse.swtbot.swt.finder.finders.UIThreadRunnable; +import org.eclipse.swtbot.swt.finder.widgets.SWTBotShell; import org.apache.commons.lang3.function.FailableConsumer; import org.apache.commons.lang3.function.FailableRunnable; @@ -30,6 +31,7 @@ */ public class UiContext { private final Display m_display; + protected SWTBotShell m_activeShell; //////////////////////////////////////////////////////////////////////////// // @@ -67,11 +69,26 @@ public void executeAndCheck(final FailableRunnable uiRunnable, } try { Shell activeShell = UIThreadRunnable.syncExec(m_display::getActiveShell); - checkRunnable.accept(new SWTBot(activeShell)); + m_activeShell = new SWTBotShell(activeShell); + checkRunnable.accept(m_activeShell.bot()); } catch (Throwable e) { + // For debugging: Show all active shells + UIThreadRunnable.syncExec(() -> { + System.err.println("Active Shell:"); + if (m_activeShell != null) { + System.err.println(m_activeShell.widget); + } + System.err.println("Visible Shells:"); + for (Shell shell : Display.getCurrent().getShells()) { + if (shell.isVisible()) { + System.err.println(shell); + } + } + }); e.printStackTrace(); checkException[0] = e; } finally { + m_activeShell = null; dispose(originalShells); } }); @@ -118,7 +135,7 @@ public void execute(final FailableRunnable uiRunnable) { private void dispose(Set originalShells) { execute(() -> { for (Shell shell : m_display.getShells()) { - if (!originalShells.contains(shell)) { + if (!originalShells.contains(shell) && shell.isVisible()) { shell.dispose(); } } diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/swtbot/designer/AbstractSWTBotTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/swtbot/designer/AbstractSWTBotTest.java deleted file mode 100644 index 98bb13c02..000000000 --- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/swtbot/designer/AbstractSWTBotTest.java +++ /dev/null @@ -1,70 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2024 Patrick Ziegler and others. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License 2.0 which is available at - * https://www.eclipse.org/legal/epl-2.0. - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Patrick Ziegler - initial API and implementation - *******************************************************************************/ -package org.eclipse.wb.tests.swtbot.designer; - -import org.eclipse.wb.tests.swtbot.designer.AbstractSWTBotTest.LoggerExtension; -import org.eclipse.wb.tests.swtbot.designer.bot.WindowBuilderWorkbenchBot; - -import org.eclipse.swt.widgets.Display; - -import static org.assertj.core.api.Assertions.fail; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.extension.BeforeTestExecutionCallback; -import org.junit.jupiter.api.extension.ExtendWith; -import org.junit.jupiter.api.extension.ExtensionContext; - -import java.io.IOException; -import java.io.InputStream; -import java.io.UncheckedIOException; -import java.util.logging.LogManager; -import java.util.logging.Logger; - -/** - * Abstract base class for all JUnit tests using the SWTBot. This class - * initializes the workspace with the {@code Resource} perspective and an empty - * test project. After each test run, all created Java files are removed from - * the project. - */ -@ExtendWith(LoggerExtension.class) -public abstract class AbstractSWTBotTest { - protected static final Logger LOGGER = Logger.getLogger(AbstractSWTBotTest.class.getSimpleName()); - protected WindowBuilderWorkbenchBot bot; - - @BeforeEach - public void setUp() throws Exception { - if (Display.getCurrent() != null) { - fail(""" - SWTBot test needs to run in a non-UI thread. - Make sure that "Run in UI thread" is unchecked in your launch configuration or that useUIThread is set to false in the pom.xml - """); - } - - bot = new WindowBuilderWorkbenchBot(); - } - - static { - try (InputStream is = AbstractSWTBotTest.class.getResourceAsStream("WindowBuilder SWTBot Logging.properties")) { - LogManager.getLogManager().readConfiguration(is); - } catch (IOException e) { - throw new UncheckedIOException(e); - } - } - - public static class LoggerExtension implements BeforeTestExecutionCallback { - @Override - public void beforeTestExecution(ExtensionContext context) throws Exception { - LOGGER.info(context.getRequiredTestClass().getSimpleName() + ':' + context.getDisplayName()); - } - } -} diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/swtbot/designer/AbstractWizardTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/swtbot/designer/AbstractWizardTest.java deleted file mode 100644 index 3f14e0d2f..000000000 --- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/swtbot/designer/AbstractWizardTest.java +++ /dev/null @@ -1,65 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2023, 2024 Patrick Ziegler and others. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License 2.0 which is available at - * https://www.eclipse.org/legal/epl-2.0. - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Patrick Ziegler - initial API and implementation - *******************************************************************************/ -package org.eclipse.wb.tests.swtbot.designer; - -import org.eclipse.swtbot.swt.finder.SWTBot; -import org.eclipse.swtbot.swt.finder.widgets.SWTBotShell; - -import static org.junit.jupiter.api.Assertions.assertTrue; - -import org.junit.jupiter.api.AfterEach; - -import java.util.Arrays; - -/** - * Abstract base class for all tests that create Java files using the - * {@code New Wizard}. - */ -public abstract class AbstractWizardTest extends AbstractSWTBotTest { - private SWTBotShell shell; - protected SWTBot editor; - - @AfterEach - public void tearDown() { - bot.resetWorkbench(); - } - - protected final void testTemplateViaProjectExplorer(String... fullPath) { - shell = bot.getProjectExplorer().openNewWizard(); - createTemplate(fullPath); - } - - protected final void testTemplateViaMenu(String... fullPath) { - shell = bot.openNewWizard(); - createTemplate(fullPath); - } - - private void createTemplate(String... fullPath) { - assertTrue(fullPath.length > 1, "path requires at least one argument (template name)"); - String[] path = Arrays.copyOf(fullPath, fullPath.length - 1); - String name = fullPath[fullPath.length - 1]; - String fileName = name.replaceAll(" ", "_"); - - SWTBot newWizard = shell.bot(); - newWizard.tree().expandNode(path).getNode(name).select(); - newWizard.button("Next >").click(); - newWizard.text(1).setText("test"); - newWizard.text(2).setText(fileName); - newWizard.button("Finish").click(); - - // The created Java file needs to be deleted after the test concluded - bot.addFile("test", fileName + ".java"); - editor = bot.editorByTitle(fileName + ".java").bot(); - editor.cTabItem("Design").activate(); - } -} diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/swtbot/designer/WindowBuilder SWTBot Logging.properties b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/swtbot/designer/WindowBuilder SWTBot Logging.properties deleted file mode 100644 index 50cc2f5f6..000000000 --- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/swtbot/designer/WindowBuilder SWTBot Logging.properties +++ /dev/null @@ -1,6 +0,0 @@ -handlers= java.util.logging.ConsoleHandler - -java.util.logging.ConsoleHandler.level = INFO -# Based on the example in java.util.logging.SimpleFormatter: -# This prints 1 line with the log level (4$), the timestamp (1$) in a square bracket and the log message (5$). -java.util.logging.SimpleFormatter.format = %4$s: [%1$tc] %5$s%n \ No newline at end of file diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/swtbot/designer/WindowBuilder SWTBot Tests.launch b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/swtbot/designer/WindowBuilder SWTBot Tests.launch deleted file mode 100644 index fbdb72dfa..000000000 --- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/swtbot/designer/WindowBuilder SWTBot Tests.launch +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/swtbot/designer/WindowBuilderTests.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/swtbot/designer/WindowBuilderTests.java deleted file mode 100644 index 6f1b691e9..000000000 --- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/swtbot/designer/WindowBuilderTests.java +++ /dev/null @@ -1,28 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2024 Patrick Ziegler and others. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License 2.0 which is available at - * https://www.eclipse.org/legal/epl-2.0. - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Patrick Ziegler - initial API and implementation - *******************************************************************************/ -package org.eclipse.wb.tests.swtbot.designer; - -import org.eclipse.wb.tests.swtbot.designer.rcp.RcpTests; - -import org.junit.platform.suite.api.SelectClasses; -import org.junit.platform.suite.api.Suite; - -/** - * Executes all SWTBot-based WindowBuilder tests - */ -@Suite -@SelectClasses({ - RcpTests.class, -}) -public class WindowBuilderTests { -} diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/swtbot/designer/bot/UIUtil.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/swtbot/designer/bot/UIUtil.java deleted file mode 100644 index 8b6303ebf..000000000 --- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/swtbot/designer/bot/UIUtil.java +++ /dev/null @@ -1,59 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2024 Patrick Ziegler and others. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License 2.0 which is available at - * https://www.eclipse.org/legal/epl-2.0. - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Patrick Ziegler - initial API and implementation - *******************************************************************************/ -package org.eclipse.wb.tests.swtbot.designer.bot; - -import org.eclipse.swt.SwtCallable; -import org.eclipse.swt.SwtRunnable; -import org.eclipse.swtbot.swt.finder.finders.UIThreadRunnable; -import org.eclipse.ui.PlatformUI; - -/** - * Inspired by {@link UIThreadRunnable} to support the execution of tasks within - * the UI thread. Unlike the SWTBot class however, we need to also support the - * case where those tasks throw an exception. - */ -public final class UIUtil { - private UIUtil() { - // This utility class should never be instantiated - } - - /** - * Executes the given {@code runnable} within the UI thread. Any exception - * thrown by this task is converted into a {@link RuntimeException}. - * - * @param The type of exception thrown by this runnable. - * @param runnable The task to be executed in the UI thread. - */ - public static void syncExec(SwtRunnable runnable) { - syncCall(() -> { - runnable.run(); - return null; - }); - } - - /** - * Executes the given {@code callable} within the UI thread and returns the - * result. Any exception thrown by this task is converted into a - * {@link RuntimeException}. - * - * @param The type of exception thrown by this runnable. - * @param callable The task to be executed in the UI thread. - */ - public static U syncCall(SwtCallable callable) { - try { - return PlatformUI.getWorkbench().getDisplay().syncCall(callable); - } catch (Exception e) { - throw new RuntimeException(e); - } - } -} diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/swtbot/designer/bot/WindowBuilderProjectExplorerBot.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/swtbot/designer/bot/WindowBuilderProjectExplorerBot.java deleted file mode 100644 index 952fba21d..000000000 --- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/swtbot/designer/bot/WindowBuilderProjectExplorerBot.java +++ /dev/null @@ -1,41 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2024, 2025 Patrick Ziegler and others. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License 2.0 which is available at - * https://www.eclipse.org/legal/epl-2.0. - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Patrick Ziegler - initial API and implementation - *******************************************************************************/ -package org.eclipse.wb.tests.swtbot.designer.bot; - -import org.eclipse.swtbot.eclipse.finder.SWTWorkbenchBot; -import org.eclipse.swtbot.eclipse.finder.widgets.SWTBotView; -import org.eclipse.swtbot.swt.finder.widgets.SWTBotShell; -import org.eclipse.ui.IViewReference; - -import java.util.logging.Logger; - -/** - * The SWTBot instance over the {@code Project Explorer}. - */ -public class WindowBuilderProjectExplorerBot extends SWTBotView { - private static final Logger LOGGER = Logger.getLogger(WindowBuilderProjectExplorerBot.class.getSimpleName()); - - public WindowBuilderProjectExplorerBot(IViewReference partReference, SWTWorkbenchBot bot) { - super(partReference, bot); - } - - /** - * Opens the "New" wizard via the context menu of the test project. - */ - public SWTBotShell openNewWizard() { - LOGGER.fine("Open New wizard"); - bot().tree().getTreeItem("TestProject").contextMenu().menu("New", "Other...").click(); - LOGGER.fine("Opened New wizard"); - return bot.activeShell(); - } -} diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/swtbot/designer/bot/WindowBuilderWorkbenchBot.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/swtbot/designer/bot/WindowBuilderWorkbenchBot.java deleted file mode 100644 index 48d657a01..000000000 --- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/swtbot/designer/bot/WindowBuilderWorkbenchBot.java +++ /dev/null @@ -1,240 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2024, 2025 Patrick Ziegler and others. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License 2.0 which is available at - * https://www.eclipse.org/legal/epl-2.0. - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Patrick Ziegler - initial API and implementation - *******************************************************************************/ -package org.eclipse.wb.tests.swtbot.designer.bot; - -import org.eclipse.wb.tests.designer.core.TestProject; - -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IFolder; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.swtbot.eclipse.finder.SWTWorkbenchBot; -import org.eclipse.swtbot.eclipse.finder.widgets.SWTBotView; -import org.eclipse.swtbot.swt.finder.SWTBot; -import org.eclipse.swtbot.swt.finder.waits.Conditions; -import org.eclipse.swtbot.swt.finder.widgets.SWTBotShell; -import org.eclipse.ui.IWorkbench; -import org.eclipse.ui.IWorkbenchWindow; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.intro.IIntroManager; -import org.eclipse.ui.intro.IIntroPart; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.InputStream; -import java.nio.charset.StandardCharsets; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.logging.Logger; - -/** - * The SWTBot instance over the entire {@code Eclipse} workbench. - */ -public class WindowBuilderWorkbenchBot extends SWTWorkbenchBot { - private static final String TEST_PROJECT_NAME = "TestProject"; - private static final Logger LOGGER = Logger.getLogger(WindowBuilderWorkbenchBot.class.getSimpleName()); - private TestProject testProject; - private List createdFiles; - private boolean init; - - public WindowBuilderWorkbenchBot() { - testProject = new TestProject(createProject()); - createdFiles = new ArrayList<>(); - - if (!init) { - init = true; - UIUtil.syncExec(() -> { - // Close "Welcome" page - IWorkbench wb = PlatformUI.getWorkbench(); - IIntroManager im = wb.getIntroManager(); - IIntroPart intro = wb.getIntroManager().getIntro(); - if (intro != null) { - im.closeIntro(intro); - } - // Initialize "Resource" perspective - IWorkbenchWindow ww = wb.getActiveWorkbenchWindow(); - wb.getPerspectiveRegistry().setDefaultPerspective("org.eclipse.ui.resourcePerspective"); - wb.showPerspective("org.eclipse.ui.resourcePerspective", ww); - }); - } - } - - private IProject createProject() { - IProject project = getTestProject(); - - if (project.exists()) { - return project; - } - - SWTBot wizard = openNewWizard().bot(); - wizard.tree().expandNode("WindowBuilder", "SWT Designer", "SWT/JFace Java Project").click(); - wizard.button("Next >").click(); - wizard.text().setText("TestProject"); - wizard.checkBox("Create module-info.java file").deselect(); - wizard.button("Next >").click(); - wizard.button("Finish").click(); - waitWhile(Conditions.shellIsActive("New SWT/JFace Java Project")); - - return getTestProject(); - } - - private static IProject getTestProject() { - return UIUtil.syncCall(() -> ResourcesPlugin.getWorkspace().getRoot().getProject(TEST_PROJECT_NAME)); - } - - @Override - public void resetWorkbench() { - Iterator iterator = createdFiles.iterator(); - while (iterator.hasNext()) { - UIUtil.syncExec(() -> iterator.next().delete(true, null)); - iterator.remove(); - } - super.resetWorkbench(); - } - - /** - * @return The SWTBot instance over the {@code Project Explorer}. - */ - public WindowBuilderProjectExplorerBot getProjectExplorer() { - LOGGER.fine("Open Project Explorer"); - SWTBotView projectExplorer = viewByPartName("Project Explorer"); - LOGGER.fine("Opened Project Explorer"); - return new WindowBuilderProjectExplorerBot(projectExplorer.getViewReference(), this); - } - - /** - * Opens the {@code New} wizard from the main menu. - * - * @return the {@code New} wizard shell. - */ - public SWTBotShell openNewWizard() { - LOGGER.fine("Open New wizard"); - shell().menu().menu("File").menu("New", "Other...").click(); - LOGGER.fine("Opened New wizard"); - return activeShell(); - } - - // I/O - private IFile getFile(String packageName, String fileName) { - return UIUtil.syncCall(() -> { - IFolder packageFolder = (IFolder) testProject.getPackage(packageName).getResource(); - return packageFolder.getFile(fileName); - }); - } - - /** - * Registers the given source file to be deleted after the current test has - * concluded. The file is located in the root of the source directory. - * - *
-	 * Example: src/module-info.java
-	 * 
- * - * @param fileName The file name (e.g. {@code module-info.java}). - */ - public void addFile(String fileName) { - addFile("", fileName); - } - - /** - * Registers the given source file to be deleted after the current test has - * concluded. The file is located in the source directory. - * - *
-	 * Example: src/test/Test.java
-	 * 
- * - * @param packageName The package name (e.g. {@code test}). - * @param fileName The file name (e.g. {@code Test.java}. - */ - public void addFile(String packageName, String fileName) { - IFile sourceFile = getFile(packageName, fileName); - createdFiles.add(sourceFile); - } - - /** - * Updates the content of the given source file. The file is located in the root - * of the source directory and deleted after the test concludes. A new file is - * created if necessary. - * - *
-	 * Example: src/module-info.java
-	 * 
- * - * @param fileName The file name (e.g. {@code module-info.java}). - * @param content The file content. - */ - public void setFileContent(String fileName, String content) { - setFileContent("", fileName, content); - } - - /** - * Updates the content of the given source file. The file is deleted after the - * test concludes. A new file is created if necessary. - * - *
-	 * Example: src/test/Test.java
-	 * 
- * - * @param packageName The package name (e.g. {@code test}) - * @param fileName The file name (e.g. {@code Test.java}). - * @param content The file content. - */ - public void setFileContent(String packageName, String fileName, String content) { - UIUtil.syncExec(() -> { - try (InputStream is = new ByteArrayInputStream(content.getBytes(StandardCharsets.UTF_8))) { - IFile sourceFile = getFile(packageName, fileName); - sourceFile.setContents(is, true, false, null); - createdFiles.add(sourceFile); - } - }); - } - - /** - * Returns the content of the given source file. The file is located in the root - * of the source directory. - * - *
-	 * Example: src/module-info.java
-	 * 
- * - * @param fileName The file name (e.g. {@code module-info.java}). - * @return The file content. - */ - public String getFileContent(String fileName) { - return getFileContent("", fileName); - } - - /** - * Returns the content of the given source file. - * - *
-	 * Example: src/test/Test.java
-	 * 
- * - * @param packageName The package name (e.g. {@code test}) - * @param fileName The file name (e.g. {@code Test.java}). - * @return The file content. - */ - public String getFileContent(String packageName, String fileName) { - return UIUtil.syncCall(() -> { - IFile sourceFile = getFile(packageName, fileName); - ByteArrayOutputStream os = new ByteArrayOutputStream(); - try (InputStream is = sourceFile.getContents()) { - is.transferTo(os); - } - return new String(os.toByteArray(), StandardCharsets.UTF_8); - }); - } -} diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/swtbot/designer/rcp/RcpTests.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/swtbot/designer/rcp/RcpTests.java deleted file mode 100644 index 032bd21f9..000000000 --- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/swtbot/designer/rcp/RcpTests.java +++ /dev/null @@ -1,27 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2024 Patrick Ziegler and others. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License 2.0 which is available at - * https://www.eclipse.org/legal/epl-2.0. - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * Patrick Ziegler - initial API and implementation - *******************************************************************************/ -package org.eclipse.wb.tests.swtbot.designer.rcp; - -import org.eclipse.wb.tests.swtbot.designer.rcp.wizard.WizardTests; - -import org.junit.platform.suite.api.SelectClasses; -import org.junit.platform.suite.api.Suite; - -/** - * A collection of all SWTBot-based RCP tests. - */ -@Suite -@SelectClasses(WizardTests.class) -public class RcpTests { - -}