Bug 579119 - Unexpected large file editor selection pop-up
This change adds missing handling for preference
"largeFileLimits_default_enabled".
Change-Id: I1146d363b01d018d7c1811b09395f70b0298454a
Signed-off-by: Simeon Andreev <simeon.danailov.andreev@gmail.com>
Reviewed-on: https://git.eclipse.org/r/c/platform/eclipse.platform.ui/+/191554
Tested-by: Platform Bot <platform-bot@eclipse.org>
Reviewed-by: Andrey Loskutov <loskutov@gmx.de>
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/LargeFileLimitsPreferenceHandler.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/LargeFileLimitsPreferenceHandler.java
index b6645a9..2048d77 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/LargeFileLimitsPreferenceHandler.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/LargeFileLimitsPreferenceHandler.java
@@ -420,7 +420,8 @@
String largeFilePreference = PREFERENCE_STORE.getString(preferenceName);
// if no preference exists for the specific file type, check for the default
- if (largeFilePreference == null || largeFilePreference.isEmpty()) {
+ boolean noPreferenceForExtension = largeFilePreference == null || largeFilePreference.isEmpty();
+ if (noPreferenceForExtension && isDefaultLimitEnabled()) {
long defaultLimit = getDefaultLimit();
preferenceValues.add(new FileLimit(PROMPT_EDITOR_PREFERENCE_VALUE, defaultLimit));
} else {
diff --git a/tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/largefile/LargeFileLimitsPreferenceHandlerTest.java b/tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/largefile/LargeFileLimitsPreferenceHandlerTest.java
index cd569b1..fa617ee 100644
--- a/tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/largefile/LargeFileLimitsPreferenceHandlerTest.java
+++ b/tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/largefile/LargeFileLimitsPreferenceHandlerTest.java
@@ -17,9 +17,6 @@
import static org.junit.Assert.assertArrayEquals;
import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.nio.file.Files;
-import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
@@ -31,22 +28,24 @@
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.ILogListener;
import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Platform;
import org.eclipse.jface.preference.PreferenceDialog;
import org.eclipse.jface.preference.PreferencePage;
-import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IEditorDescriptor;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IEditorRegistry;
import org.eclipse.ui.IPathEditorInput;
-import org.eclipse.ui.IPersistableElement;
import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.dialogs.PreferencesUtil;
import org.eclipse.ui.internal.LargeFileLimitsPreferenceHandler;
import org.eclipse.ui.internal.LargeFileLimitsPreferenceHandler.FileLimit;
@@ -75,37 +74,63 @@
private static final String TXT_EXTENSION = "txt";
private static final String XML_EXTENSION = "xml";
+ private final IProgressMonitor monitor;
+ private IProject testProject;
+ private IFile temporaryFile;
private TestPromptForEditor testPromptForEditor;
private LargeFileLimitsPreferenceHandler preferenceHandler;
- private TestEditorInput testEditorInput;
+ private IEditorInput testEditorInput;
private TestLogListener logListener;
public LargeFileLimitsPreferenceHandlerTest() {
super(LargeFileLimitsPreferenceHandlerTest.class.getSimpleName());
+ monitor = new NullProgressMonitor();
}
@Override
protected void doSetUp() throws Exception {
super.doSetUp();
+ createTestFile();
testPromptForEditor = new TestPromptForEditor();
preferenceHandler = new LargeFileLimitsPreferenceHandler(testPromptForEditor);
- testEditorInput = new TestEditorInput();
+ testEditorInput = new FileEditorInput(temporaryFile);
logListener = new TestLogListener();
Platform.addLogListener(logListener);
}
+ private void createTestFile() throws CoreException {
+ IWorkspace workspace = ResourcesPlugin.getWorkspace();
+ IWorkspaceRoot workspaceRoot = workspace.getRoot();
+ testProject = workspaceRoot.getProject("SomeProject");
+ testProject.create(monitor);
+ testProject.open(monitor);
+ IPath path = new Path("/" + testProject.getName() + "/test_file" + "." + TXT_EXTENSION);
+ temporaryFile = workspaceRoot.getFile(path);
+ String content = String.join(System.lineSeparator(), "some line 1", "some line 2");
+ boolean force = true;
+ temporaryFile.create(new ByteArrayInputStream(content.getBytes()), force, monitor);
+ }
+
@Override
protected void doTearDown() throws Exception {
try {
Platform.removeLogListener(logListener);
setDefaultPreferences();
preferenceHandler.dispose();
- testEditorInput.dispose();
+ deleteTestFile();
+ boolean save = false;
+ closeAllEditors(save);
} finally {
super.doTearDown();
}
}
+ private void deleteTestFile() throws CoreException {
+ boolean force = true;
+ temporaryFile.delete(force, monitor);
+ testProject.delete(force, monitor);
+ }
+
@Test
public void testPreferencePageSmokeTest() throws Throwable {
String pageId = LargeFileLimitsPreferenceHandler.LARGE_FILE_ASSOCIATIONS_PREFERENCE_PAGE_ID;
@@ -178,6 +203,24 @@
}
@Test
+ public void testDisabledDefaultLimit() throws Exception {
+ String testEditorId = "org.eclipse.ui.tests.api.MockEditorPart1";
+ long fileSize = 1L;
+ LargeFileLimitsPreferenceHandler.setDefaultLimit(fileSize);
+ LargeFileLimitsPreferenceHandler.disableDefaultLimit();
+
+ IEditorRegistry editorRegistry = getWorkbench().getEditorRegistry();
+ IEditorDescriptor testEditor = editorRegistry.findEditor(testEditorId);
+ assertNotNull("Expected to find editor with ID: " + testEditorId, testEditor);
+
+ testPromptForEditor.selectedEditor = testEditor;
+ testPromptForEditor.rememberSelection = false;
+ // bug 579119: dialog to chose editor should not come up, we disabled the
+ // default limit preference
+ assertNoEditorIsChosen();
+ }
+
+ @Test
public void testOpenEditor() throws Exception {
String testEditorId = "org.eclipse.ui.tests.api.MockEditorPart1";
long fileSize = 4L;
@@ -408,7 +451,10 @@
private void assertNoEditorIsChosen() {
Optional<String> editorForInput = preferenceHandler.getEditorForInput(testEditorInput);
- assertFalse("Expected no editor for large file of type: " + TXT_EXTENSION, editorForInput.isPresent());
+ assertNotNull("Expected non-null result for large file of type: " + TXT_EXTENSION, editorForInput);
+ if (editorForInput.isPresent()) {
+ fail("Expected no editor for large file of type: " + TXT_EXTENSION + ", but got: " + editorForInput.get());
+ }
}
private void assertEditorIsChosen(String testEditorId) {
@@ -438,6 +484,10 @@
assertEquals(failMessage, Collections.EMPTY_LIST, Arrays.asList(configuredExtensionTypes));
}
+ private static void closeAllEditors(boolean save) {
+ PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().closeAllEditors(save);
+ }
+
private static class TestLogListener implements ILogListener {
private final List<IStatus> errors = new ArrayList<>();
@@ -501,54 +551,4 @@
return rememberSelection;
}
}
-
- private static class TestEditorInput implements IPathEditorInput {
-
- private final Path temporaryFile;
-
- TestEditorInput() throws IOException {
- temporaryFile = Files.createTempFile("test_file", "." + TXT_EXTENSION);
- Files.write(temporaryFile, Arrays.asList("some line 1", "some line 2"));
- }
-
- void dispose() throws IOException {
- Files.delete(temporaryFile);
- }
-
- @Override
- public boolean exists() {
- return true;
- }
-
- @Override
- public ImageDescriptor getImageDescriptor() {
- return null;
- }
-
- @Override
- public String getName() {
- return "test editor input";
- }
-
- @Override
- public IPersistableElement getPersistable() {
- return null;
- }
-
- @Override
- public String getToolTipText() {
- return getName();
- }
-
- @Override
- public <T> T getAdapter(Class<T> adapter) {
- return null;
- }
-
- @Override
- public IPath getPath() {
- return new org.eclipse.core.runtime.Path(temporaryFile.toString());
- }
-
- }
}