From 4324c422a106825eb3fb66719dcf8e690134a089 Mon Sep 17 00:00:00 2001 From: Wainer dos Santos Moschetta Date: Wed, 9 Mar 2016 11:23:51 -0300 Subject: [PATCH] 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 --- .../widgets/RemoteResourceBrowserWidget.java | 4 +- tests/org.eclipse.remote.ui.tests/.classpath | 7 + tests/org.eclipse.remote.ui.tests/.project | 28 +++ .../.settings/org.eclipse.jdt.core.prefs | 7 + .../META-INF/MANIFEST.MF | 13 ++ .../build.properties | 4 + .../ui/tests/RemoteResourceBrowserTest.java | 204 ++++++++++++++++++ 7 files changed, 266 insertions(+), 1 deletion(-) create mode 100644 tests/org.eclipse.remote.ui.tests/.classpath create mode 100644 tests/org.eclipse.remote.ui.tests/.project create mode 100644 tests/org.eclipse.remote.ui.tests/.settings/org.eclipse.jdt.core.prefs create mode 100644 tests/org.eclipse.remote.ui.tests/META-INF/MANIFEST.MF create mode 100644 tests/org.eclipse.remote.ui.tests/build.properties create mode 100644 tests/org.eclipse.remote.ui.tests/src/org/eclipse/remote/ui/tests/RemoteResourceBrowserTest.java 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 5564ecebc64..dca4f192fbd 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 @@ public class RemoteResourceBrowserWidget extends Composite { /* * 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 00000000000..eca7bdba8f0 --- /dev/null +++ b/tests/org.eclipse.remote.ui.tests/.classpath @@ -0,0 +1,7 @@ + + + + + + + diff --git a/tests/org.eclipse.remote.ui.tests/.project b/tests/org.eclipse.remote.ui.tests/.project new file mode 100644 index 00000000000..c0c71f6780c --- /dev/null +++ b/tests/org.eclipse.remote.ui.tests/.project @@ -0,0 +1,28 @@ + + + org.eclipse.remote.ui.tests + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + + org.eclipse.pde.PluginNature + org.eclipse.jdt.core.javanature + + 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 00000000000..0c68a61dca8 --- /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 00000000000..59633653cbc --- /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 00000000000..34d2e4d2dad --- /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 00000000000..1a73add52d4 --- /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 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(); + } +}