From 3bdfe6d7a95ab19f7dc5a5e74ed261c9ea92d586 Mon Sep 17 00:00:00 2001 From: Ondrej Dockal Date: Sun, 25 Aug 2019 13:42:52 +0200 Subject: [PATCH] Add features to JRE preference page (fixes #2026) - update eclipse orbit update site to 2019-09 M3 - add setDefault configuration to JRERequirement - add java.target.version property to pom.xml as an option for compilation against different java version Signed-off-by: Ondrej Dockal --- .../jdt/debug/ui/jres/JREsPreferencePage.java | 64 ++++++++- .../eclipse/jdt/ui/preferences/JREItem.java | 34 +++++ .../requirements/jre/JRERequirement.java | 9 ++ pom.xml | 7 +- .../debug/ui/jres/JREsPreferencePageTest.java | 125 ++++++++++++++++++ .../test/jre/JRERequirementTest.java | 3 +- 6 files changed, 235 insertions(+), 7 deletions(-) create mode 100644 tests/org.eclipse.reddeer.eclipse.test/src/org/eclipse/reddeer/eclipse/test/jdt/debug/ui/jres/JREsPreferencePageTest.java diff --git a/plugins/org.eclipse.reddeer.eclipse/src/org/eclipse/reddeer/eclipse/jdt/debug/ui/jres/JREsPreferencePage.java b/plugins/org.eclipse.reddeer.eclipse/src/org/eclipse/reddeer/eclipse/jdt/debug/ui/jres/JREsPreferencePage.java index a021869491..7028493df4 100644 --- a/plugins/org.eclipse.reddeer.eclipse/src/org/eclipse/reddeer/eclipse/jdt/debug/ui/jres/JREsPreferencePage.java +++ b/plugins/org.eclipse.reddeer.eclipse/src/org/eclipse/reddeer/eclipse/jdt/debug/ui/jres/JREsPreferencePage.java @@ -14,6 +14,7 @@ import java.util.ArrayList; import java.util.List; +import org.eclipse.reddeer.core.exception.CoreLayerException; import org.eclipse.reddeer.core.reference.ReferencedComposite; import org.eclipse.reddeer.eclipse.exception.EclipseLayerException; import org.eclipse.reddeer.eclipse.jdt.ui.preferences.JREItem; @@ -28,7 +29,7 @@ /** * Class representing JRE Preference page (Java > Installed JREs). * - * @author rhopp + * @author rhopp, odockal * */ @@ -123,11 +124,68 @@ public List getJREs() { */ public JREsPreferencePage deleteJRE(String name) { - DefaultTable table = new DefaultTable(this); - table.getItem(name, 0).select(); + selectJRE(name); new PushButton(referencedComposite, "Remove").click(); return this; } + + /** + * Set given JRE to default by toggling checkbox on. + * @return JREsPreferencePage object + */ + public JREsPreferencePage toggleJRE(String name, boolean toggle) { + getJRETableItem(name).setChecked(toggle); + // we need to check if at least one java is chosen, otherwise apply is disabled + // and error is shown + if (!(new PushButton(referencedComposite, "Apply").isEnabled())) { + throw new EclipseLayerException("At least one valid JRE must be chosen - expected default JRE for workspace"); + } + return this; + } + + /** + * Selects given JRE. + * @param name JRE name in string + * @return + */ + public JREsPreferencePage selectJRE(String name) { + getJRETableItem(name).select(); + return this; + } + + /** + * Return existing JRE. + * @param name jre's name + * @return existing JRE item object in table + */ + public TableItem getJRETableItem(String name) { + DefaultTable table = new DefaultTable(this); + try { + return table.getItem(name); + } catch (CoreLayerException exc) { + // if set to default, name is changed to "${name} (default)" + return table.getItem(name + " (default)"); + } + } + + /** + * Return existing JRE. + * @param name jre's name + * @return existing JRE item object in table + */ + public JREItem getJREItem(String name) { + TableItem item = getJRETableItem(name); + return new JREItem(item.getText(0), item.getText(1), item.getText(2), item.isChecked()); + } + + /** + * Toggle given JRE on and sets it to default. + * @param name JRE name to search for + * @return JREsPreferencePage object + */ + public JREsPreferencePage setDefaultJRE(String name) { + return toggleJRE(name, true); + } private AddVMInstallWizard openAddJREWizard() { new PushButton(this, "Add...").click(); diff --git a/plugins/org.eclipse.reddeer.eclipse/src/org/eclipse/reddeer/eclipse/jdt/ui/preferences/JREItem.java b/plugins/org.eclipse.reddeer.eclipse/src/org/eclipse/reddeer/eclipse/jdt/ui/preferences/JREItem.java index 36a1d6c5eb..dddff6b0ff 100644 --- a/plugins/org.eclipse.reddeer.eclipse/src/org/eclipse/reddeer/eclipse/jdt/ui/preferences/JREItem.java +++ b/plugins/org.eclipse.reddeer.eclipse/src/org/eclipse/reddeer/eclipse/jdt/ui/preferences/JREItem.java @@ -24,6 +24,7 @@ public class JREItem { private String name; private String location; private String type; + private boolean isDefault; /** * Instantiates a new JRE item. @@ -36,6 +37,39 @@ public JREItem(String name, String location, String type) { this.name = name; this.location = location; this.type = type; + this.isDefault = false; + } + + /** + * Instantiates a new JRE item. + * + * @param name the name + * @param location the location + * @param type the type + * @param isDefault the default + */ + public JREItem(String name, String location, String type, boolean checked) { + this.name = name; + this.location = location; + this.type = type; + this.isDefault = checked; + } + + /** + * Gets if is checked/default + * @return the checked + */ + public boolean isDefault() { + return isDefault; + } + + /** + * Sets the default. + * + * @param isDefault if it is default setup + */ + public void setDefault(boolean isDefault) { + this.isDefault = isDefault; } /** diff --git a/plugins/org.eclipse.reddeer.requirements/src/org/eclipse/reddeer/requirements/jre/JRERequirement.java b/plugins/org.eclipse.reddeer.requirements/src/org/eclipse/reddeer/requirements/jre/JRERequirement.java index 7d2c35046c..e011f212ed 100644 --- a/plugins/org.eclipse.reddeer.requirements/src/org/eclipse/reddeer/requirements/jre/JRERequirement.java +++ b/plugins/org.eclipse.reddeer.requirements/src/org/eclipse/reddeer/requirements/jre/JRERequirement.java @@ -44,6 +44,12 @@ public class JRERequirement extends AbstractConfigurableRequirement${tycho-version} http://download.eclipse.org/staging/2019-09/ http://download.eclipse.org/technology/swtbot/snapshots/ - https://download.eclipse.org/tools/orbit/downloads/drops/S20190726194335/repository + https://download.eclipse.org/tools/orbit/downloads/drops/S20190819183153/repository 1.2.1 + 1.8 UTF-8 0.8.2 diff --git a/tests/org.eclipse.reddeer.eclipse.test/src/org/eclipse/reddeer/eclipse/test/jdt/debug/ui/jres/JREsPreferencePageTest.java b/tests/org.eclipse.reddeer.eclipse.test/src/org/eclipse/reddeer/eclipse/test/jdt/debug/ui/jres/JREsPreferencePageTest.java new file mode 100644 index 0000000000..d3ab96423b --- /dev/null +++ b/tests/org.eclipse.reddeer.eclipse.test/src/org/eclipse/reddeer/eclipse/test/jdt/debug/ui/jres/JREsPreferencePageTest.java @@ -0,0 +1,125 @@ +/******************************************************************************* + * Copyright (c) 2019 Red Hat, 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 + * http://www.eclipse.org/legal/epl-2.0. + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Red Hat, Inc - initial API and implementation + *******************************************************************************/ +package org.eclipse.reddeer.eclipse.test.jdt.debug.ui.jres; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +import java.util.stream.Collectors; + +import org.eclipse.reddeer.core.exception.CoreLayerException; +import org.eclipse.reddeer.eclipse.exception.EclipseLayerException; +import org.eclipse.reddeer.eclipse.jdt.debug.ui.jres.JREsPreferencePage; +import org.eclipse.reddeer.eclipse.jdt.ui.preferences.JREItem; +import org.eclipse.reddeer.junit.runner.RedDeerSuite; +import org.eclipse.reddeer.requirements.property.RequirementPropertyExpandor; +import org.eclipse.reddeer.swt.api.TableItem; +import org.eclipse.reddeer.workbench.ui.dialogs.WorkbenchPreferenceDialog; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; + +/** + * Tests preference page for manipulation of JREs. + * @author odockal + * + */ +@RunWith(RedDeerSuite.class) +public class JREsPreferencePageTest { + + private WorkbenchPreferenceDialog dialog; + private JREsPreferencePage page; + + @Before + public void setup() { + preferenceIsOpen(); + } + + @Test + public void testAddingJRE() { + addJRE(false); + TableItem jre = getJRETableItem(); + assertFalse(jre.isChecked()); + assertFalse(page.getJREItem(getName()).isDefault()); + } + + @Test + public void testAddingDefaultJRE() { + addJRE(true); + assertEquals(getName() + " (default)", page.getJREItem(getName()).getName()); + assertTrue(page.getJRETableItem(getName()).isChecked()); + } + + @Test(expected=CoreLayerException.class) + public void testJRENotFound() { + page.getJREItem("RandomJRE"); + } + + @Test(expected=EclipseLayerException.class) + public void testOneDefaultJRE() { + for(JREItem item : page.getJREs()) { + page.toggleJRE(item.getName(), false); + } + } + + @After + public void clean() { + preferenceIsOpen(); + for (JREItem item : page.getJREs()) { + if (item.getName().equals(getName())) { + page.deleteJRE(getName()); + } + } + dialog.cancel(); + } + + private TableItem getJRETableItem() { + try { + return page.getJRETableItem(getName()); + } catch (CoreLayerException e) { + fail("Cannot select non existing JRE: " + getName() + ". Only existing JREs are: " + + page.getJREs().stream().map(item -> item.getName()).collect(Collectors.joining(", "))); + } + return null; + } + + public static void addJRE(boolean setDefault) { + WorkbenchPreferenceDialog dialog = new WorkbenchPreferenceDialog(); + dialog.open(); + JREsPreferencePage page = new JREsPreferencePage(dialog); + dialog.select(page); + page.addJRE(getPath(), getName()); + if (setDefault) { + page.setDefaultJRE(getName()); + } + } + + public static String getName() { + return "jre.test"; + } + + public static String getPath() { + return RequirementPropertyExpandor.getProperty("${java.home}"); + } + + private void preferenceIsOpen() { + if (dialog == null || !dialog.isOpen()) { + dialog = new WorkbenchPreferenceDialog(); + dialog.open(); + page = new JREsPreferencePage(dialog); + dialog.select(page); + } + } +} diff --git a/tests/org.eclipse.reddeer.requirements.test/src/org/eclipse/reddeer/requirements/test/jre/JRERequirementTest.java b/tests/org.eclipse.reddeer.requirements.test/src/org/eclipse/reddeer/requirements/test/jre/JRERequirementTest.java index 02ddb5a8ae..5958aa3d2c 100644 --- a/tests/org.eclipse.reddeer.requirements.test/src/org/eclipse/reddeer/requirements/test/jre/JRERequirementTest.java +++ b/tests/org.eclipse.reddeer.requirements.test/src/org/eclipse/reddeer/requirements/test/jre/JRERequirementTest.java @@ -12,6 +12,7 @@ package org.eclipse.reddeer.requirements.test.jre; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import java.io.File; @@ -51,10 +52,10 @@ public void testConfiguredValues(){ dialog.select(page); List jres = page.getJREs(); assertTrue(matchJREs(jres, requirement.getConfiguration().getName(), requirement.getPath())); + assertFalse(page.getJREItem(requirement.getConfiguration().getName()).isDefault()); dialog.cancel(); } - /** * * @return returns true if any of items matches name and path.