Bug 489285 - fix file selection on RemoteResourceBrowserWidget
It should allows selection of file on resources browsing mode.
Patch backported to R2_0_maintenance branch.
Change-Id: I24e891490b88b9460b4eefb22e06118eee46b115
Signed-off-by: Wainer dos Santos Moschetta <wainersm@linux.vnet.ibm.com>
diff --git a/bundles/org.eclipse.remote.ui/src/org/eclipse/remote/ui/widgets/RemoteResourceBrowserWidget.java b/bundles/org.eclipse.remote.ui/src/org/eclipse/remote/ui/widgets/RemoteResourceBrowserWidget.java
index 5564ece..dca4f19 100644
--- a/bundles/org.eclipse.remote.ui/src/org/eclipse/remote/ui/widgets/RemoteResourceBrowserWidget.java
+++ b/bundles/org.eclipse.remote.ui/src/org/eclipse/remote/ui/widgets/RemoteResourceBrowserWidget.java
@@ -403,7 +403,9 @@
/*
* Only add filter if we are a directory browser. File and resource browsers show everything.
*/
- if ((fOptionFlags & DIRECTORY_BROWSER) != 0) {
+ int mask = FILE_BROWSER|DIRECTORY_BROWSER;
+ if ((fOptionFlags & mask) != mask // Avoid filter on resource browsers.
+ && (fOptionFlags & DIRECTORY_BROWSER) != 0) {
fTreeViewer.addFilter(new ViewerFilter() {
@Override
public boolean select(Viewer viewer, Object parentElement, Object element) {
diff --git a/tests/org.eclipse.remote.ui.tests/.classpath b/tests/org.eclipse.remote.ui.tests/.classpath
new file mode 100644
index 0000000..eca7bdb
--- /dev/null
+++ b/tests/org.eclipse.remote.ui.tests/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/tests/org.eclipse.remote.ui.tests/.project b/tests/org.eclipse.remote.ui.tests/.project
new file mode 100644
index 0000000..c0c71f6
--- /dev/null
+++ b/tests/org.eclipse.remote.ui.tests/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.remote.ui.tests</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/tests/org.eclipse.remote.ui.tests/.settings/org.eclipse.jdt.core.prefs b/tests/org.eclipse.remote.ui.tests/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..0c68a61
--- /dev/null
+++ b/tests/org.eclipse.remote.ui.tests/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/tests/org.eclipse.remote.ui.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.remote.ui.tests/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..5963365
--- /dev/null
+++ b/tests/org.eclipse.remote.ui.tests/META-INF/MANIFEST.MF
@@ -0,0 +1,13 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Remote UI Tests
+Bundle-SymbolicName: org.eclipse.remote.ui.tests
+Bundle-Version: 1.0.0.qualifier
+Fragment-Host: org.eclipse.remote.ui;bundle-version="2.0.0"
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Require-Bundle: org.junit;bundle-version="4.12.0",
+ org.eclipse.remote.core,
+ org.eclipse.ui.workbench,
+ org.eclipse.swt,
+ org.eclipse.core.filesystem
+Bundle-Vendor: Eclipse PTP
diff --git a/tests/org.eclipse.remote.ui.tests/build.properties b/tests/org.eclipse.remote.ui.tests/build.properties
new file mode 100644
index 0000000..34d2e4d
--- /dev/null
+++ b/tests/org.eclipse.remote.ui.tests/build.properties
@@ -0,0 +1,4 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .
diff --git a/tests/org.eclipse.remote.ui.tests/src/org/eclipse/remote/ui/tests/RemoteResourceBrowserTest.java b/tests/org.eclipse.remote.ui.tests/src/org/eclipse/remote/ui/tests/RemoteResourceBrowserTest.java
new file mode 100644
index 0000000..1a73add
--- /dev/null
+++ b/tests/org.eclipse.remote.ui.tests/src/org/eclipse/remote/ui/tests/RemoteResourceBrowserTest.java
@@ -0,0 +1,204 @@
+/*
+ * Copyright (c) 2016 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ */
+package org.eclipse.remote.ui.tests;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.util.List;
+
+import org.eclipse.core.filesystem.IFileStore;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.remote.core.IRemoteConnection;
+import org.eclipse.remote.core.IRemoteConnectionHostService;
+import org.eclipse.remote.core.IRemoteConnectionType;
+import org.eclipse.remote.core.IRemoteConnectionWorkingCopy;
+import org.eclipse.remote.core.IRemoteServicesManager;
+import org.eclipse.remote.core.exception.RemoteConnectionException;
+import org.eclipse.remote.internal.ui.RemoteUIPlugin;
+import org.eclipse.remote.ui.dialogs.RemoteResourceBrowser;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.PlatformUI;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+/*
+ * Provides tests to several scenarios but they should be
+ * executed manually (i.e. browse and click OK)
+ */
+@RunWith(JUnit4.class)
+public class RemoteResourceBrowserTest {
+ private static final String USERNAME = "test"; //$NON-NLS-1$
+ private static final String PASSWORD = ""; //$NON-NLS-1$
+ private static final String HOST = "localhost"; //$NON-NLS-1$
+ private static IRemoteConnectionType fConnectionType;
+ private static IRemoteConnection fRemoteConnection;
+ private static Shell shell = null;
+ private RemoteResourceBrowser browser;
+ private IFileStore expectedResource;
+
+ @BeforeClass
+ public static void setUp() {
+ IRemoteServicesManager manager = RemoteUIPlugin.getService(IRemoteServicesManager.class);
+ fConnectionType = manager.getConnectionType("org.eclipse.remote.JSch"); //$NON-NLS-1$
+ assertNotNull(fConnectionType);
+ IRemoteConnectionWorkingCopy wc = null;
+ try {
+ wc = fConnectionType.newConnection("test_connection");//$NON-NLS-1$
+ } catch (RemoteConnectionException e) {
+ fail(e.getLocalizedMessage());
+ }
+
+ IRemoteConnectionHostService hostService = wc.getService(IRemoteConnectionHostService.class);
+ assertNotNull(hostService);
+
+ String host = System.getenv("TEST_HOST");
+ if (host == null) {
+ host = HOST;
+ }
+ hostService.setHostname(host);
+
+ String username = System.getenv("TEST_USERNAME");
+ if (username == null) {
+ username = USERNAME;
+ }
+ hostService.setUsername(username);
+
+ String password = System.getenv("TEST_PASSWORD");
+ if (password == null) {
+ password = PASSWORD;
+ }
+ hostService.setPassword(password);
+
+ try {
+ fRemoteConnection = wc.save();
+ } catch (RemoteConnectionException e) {
+ fail(e.getLocalizedMessage());
+ }
+ assertNotNull(fRemoteConnection);
+
+ try {
+ fRemoteConnection.open(new NullProgressMonitor());
+ } catch (RemoteConnectionException e) {
+ fail(e.getLocalizedMessage());
+ }
+ assertTrue(fRemoteConnection.isOpen());
+
+ shell = PlatformUI.getWorkbench().getDisplay().getActiveShell();
+ assertNotNull(shell);
+ }
+
+ @AfterClass
+ public static void tearDown() throws RemoteConnectionException {
+ fConnectionType.removeConnection(fRemoteConnection);
+ }
+ /*
+ * Select any file.
+ */
+ @Test
+ public void browseFileTest() {
+ browser = new RemoteResourceBrowser(shell, SWT.SINGLE);
+ browser.setConnection(fRemoteConnection);
+ browser.setType(RemoteResourceBrowser.FILE_BROWSER);
+ browser.setTitle("Allows to select file only");
+ browser.open();
+ expectedResource = browser.getResource();
+ assertNotNull(expectedResource);
+ assertTrue(!expectedResource.fetchInfo().isDirectory());
+ }
+ /*
+ * Select any directory.
+ */
+ @Test
+ public void browseDirectoryTest() {
+ browser = new RemoteResourceBrowser(shell, SWT.SINGLE);
+ browser.setConnection(fRemoteConnection);
+ browser.setType(RemoteResourceBrowser.DIRECTORY_BROWSER);
+ browser.setTitle("Allows to select directory only");
+ browser.open();
+ expectedResource = browser.getResource();
+ assertNotNull(expectedResource);
+ assertTrue(expectedResource.fetchInfo().isDirectory());
+ }
+ /*
+ * Select either file or directory.
+ */
+ @Test
+ public void browseResourceTest() {
+ browser = new RemoteResourceBrowser(shell, SWT.SINGLE);
+ browser.setConnection(fRemoteConnection);
+ browser.setTitle("Allows to select either file or directory");
+ browser.open();
+ expectedResource = browser.getResource();
+ assertNotNull(expectedResource);
+ }
+ /*
+ * Select more than one resource.
+ */
+ @Test
+ public void browseResourcesTest() {
+ browser = new RemoteResourceBrowser(shell, SWT.MULTI);
+ browser.setConnection(fRemoteConnection);
+ browser.setTitle("Allows to select either multiple resources");
+ browser.open();
+ List<IFileStore> expectedResources = browser.getResources();
+ assertNotNull(expectedResources);
+ assertTrue(expectedResources.size() > 0);
+ }
+ /*
+ * Select to local connection and select a directory.
+ */
+ @Test
+ public void changeLocalConnectionTest() {
+ browser = new RemoteResourceBrowser(shell, SWT.SINGLE);
+ browser.setConnection(fRemoteConnection);
+ browser.setTitle("Allows to switch to local browsing");
+ browser.setType(RemoteResourceBrowser.DIRECTORY_BROWSER);
+ browser.showConnections(true);
+ browser.showLocalSelection(true);
+ browser.open();
+ expectedResource = browser.getResource();
+ assertNotNull(expectedResource);
+ assertEquals(expectedResource.getFileSystem().getScheme(), "file");
+ }
+ /*
+ * Initial path set.
+ */
+ @Test
+ public void setInitialPathTest() {
+ String initialPath = "/tmp";
+ browser = new RemoteResourceBrowser(shell, SWT.SINGLE);
+ browser.setConnection(fRemoteConnection);
+ browser.setTitle("Initial path set to " + initialPath);
+ browser.setType(RemoteResourceBrowser.FILE_BROWSER);
+ browser.setInitialPath(initialPath);
+ browser.open();
+ }
+ /*
+ * Show connections.
+ * Don't show hidden check box and new folder button.
+ */
+ @Test
+ public void changeDefaultSettingsTest() {
+ browser = new RemoteResourceBrowser(shell, SWT.SINGLE);
+ browser.setConnection(fRemoteConnection);
+ browser.setType(RemoteResourceBrowser.FILE_BROWSER);
+ browser.showConnections(true);
+ browser.showHiddenCheckbox(false);
+ browser.showNewFolderButton(false);
+ browser.open();
+ }
+}