blob: 16047a33a76d62f3bdd48ac46b807e69850840cc [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2004 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.jdt.core.tests.model;
import java.util.Hashtable;
import java.util.Map;
import junit.framework.Test;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.preferences.IEclipsePreferences;
import org.eclipse.core.runtime.preferences.IEclipsePreferences.PreferenceChangeEvent;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.internal.compiler.impl.CompilerOptions;
import org.eclipse.jdt.internal.core.JavaModelManager;
import org.eclipse.jdt.internal.core.JavaProject;
import org.osgi.service.prefs.BackingStoreException;
public class OptionTests extends ModifyingResourceTests {
int eventCount = 0;
class TestPropertyListener implements IEclipsePreferences.IPreferenceChangeListener {
public void preferenceChange(PreferenceChangeEvent event) {
eventCount++;
}
}
public OptionTests(String name) {
super(name);
}
static {
// TESTS_NUMBERS = new int[] { 100393 };
// TESTS_RANGE = new int[] { 4, -1 };
}
public static Test suite() {
return buildTestSuite(OptionTests.class);
}
protected void tearDown() throws Exception {
// Put back default options
JavaCore.setOptions(JavaCore.getDefaultOptions());
super.tearDown();
}
/**
* Test persistence of project custom options
*/
public void test01() throws CoreException {
try {
IJavaProject projectA =
this.createJavaProject(
"A",
new String[] {}, // source folders
new String[] {}, // lib folders
new String[] {}, // projects
"");
IJavaProject projectB =
this.createJavaProject(
"B",
new String[] {}, // source folders
new String[] {}, // lib folders
new String[] {}, // projects
"");
Hashtable options = new Hashtable();
options.put(JavaCore.COMPILER_PB_DEPRECATION_IN_DEPRECATED_CODE, JavaCore.DISABLED);
options.put(JavaCore.COMPILER_COMPLIANCE, "8.0");
options.put(JavaCore.COMPILER_PB_HIDDEN_CATCH_BLOCK, JavaCore.ERROR);
JavaCore.setOptions(options);
options.clear();
options.put(JavaCore.COMPILER_PB_DEPRECATION_IN_DEPRECATED_CODE, JavaCore.ENABLED);
options.put(JavaCore.COMPILER_COMPLIANCE, "10.0");
projectA.setOptions(options);
// check project A custom options
assertEquals("projA:unexpected custom value for deprecation option", JavaCore.ENABLED, projectA.getOption(JavaCore.COMPILER_PB_DEPRECATION_IN_DEPRECATED_CODE, true));
assertEquals("projA:unexpected custom value for compliance option", "10.0", projectA.getOption(JavaCore.COMPILER_COMPLIANCE, true));
assertEquals("projA:unexpected inherited value1 for hidden-catch option", JavaCore.ERROR, projectA.getOption(JavaCore.COMPILER_PB_HIDDEN_CATCH_BLOCK, true));
// check project B custom options (should be none, indicating it sees global ones only)
assertEquals("projB:unexpected custom value for deprecation option", JavaCore.DISABLED, projectB.getOption(JavaCore.COMPILER_PB_DEPRECATION_IN_DEPRECATED_CODE, true));
assertEquals("projB:unexpected custom value for compliance option", "8.0", projectB.getOption(JavaCore.COMPILER_COMPLIANCE, true));
assertEquals("projB:unexpected inherited value for hidden-catch option", JavaCore.ERROR, projectB.getOption(JavaCore.COMPILER_PB_HIDDEN_CATCH_BLOCK, true));
// flush custom options - project A should revert to global ones
projectA.setOptions(null);
assertEquals("projA:unexpected reverted value for deprecation option", JavaCore.DISABLED, projectA.getOption(JavaCore.COMPILER_PB_DEPRECATION_IN_DEPRECATED_CODE, true));
assertEquals("projA:unexpected reverted value for compliance option", "8.0", projectA.getOption(JavaCore.COMPILER_COMPLIANCE, true));
assertEquals("projA:unexpected inherited value2 for hidden-catch option", JavaCore.ERROR, projectA.getOption(JavaCore.COMPILER_PB_HIDDEN_CATCH_BLOCK, true));
} finally {
this.deleteProject("A");
this.deleteProject("B");
}
}
/**
* Test custom encoding
*/
public void test02() throws CoreException {
try {
IJavaProject projectA =
this.createJavaProject(
"A",
new String[] {}, // source folders
new String[] {}, // lib folders
new String[] {}, // projects
"");
IJavaProject projectB =
this.createJavaProject(
"B",
new String[] {}, // source folders
new String[] {}, // lib folders
new String[] {}, // projects
"");
String globalEncoding = JavaCore.getOption(JavaCore.CORE_ENCODING);
Hashtable options = new Hashtable();
options.put(JavaCore.CORE_ENCODING, "custom");
projectA.setOptions(options);
// check project A custom options
assertEquals("projA:unexpected custom encoding", "custom", projectA.getOption(JavaCore.CORE_ENCODING, true));
// check project B custom options (should be none, indicating it sees global ones only)
assertEquals("projB:unexpected custom encoding", globalEncoding, projectB.getOption(JavaCore.CORE_ENCODING, true));
// flush custom options - project A should revert to global ones
projectA.setOptions(null);
assertEquals("projA:unexpected reverted encoding", globalEncoding, projectA.getOption(JavaCore.CORE_ENCODING, true));
} finally {
this.deleteProject("A");
this.deleteProject("B");
}
}
/**
* Test custom project option (if not considering JavaCore options)
*/
public void test03() throws CoreException {
try {
IJavaProject projectA =
this.createJavaProject(
"A",
new String[] {}, // source folders
new String[] {}, // lib folders
new String[] {}, // projects
"");
IJavaProject projectB =
this.createJavaProject(
"B",
new String[] {}, // source folders
new String[] {}, // lib folders
new String[] {}, // projects
"");
Hashtable options = new Hashtable();
options.put(JavaCore.COMPILER_PB_DEPRECATION_IN_DEPRECATED_CODE, JavaCore.DISABLED);
options.put(JavaCore.COMPILER_COMPLIANCE, "8.0");
options.put(JavaCore.COMPILER_PB_HIDDEN_CATCH_BLOCK, JavaCore.ERROR);
JavaCore.setOptions(options);
options.clear();
options.put(JavaCore.COMPILER_PB_DEPRECATION_IN_DEPRECATED_CODE, JavaCore.ENABLED);
options.put(JavaCore.COMPILER_COMPLIANCE, "10.0");
projectA.setOptions(options);
// check project A custom options
assertEquals("projA:unexpected custom value for deprecation option", JavaCore.ENABLED, projectA.getOption(JavaCore.COMPILER_PB_DEPRECATION_IN_DEPRECATED_CODE, false));
assertEquals("projA:unexpected custom value for compliance option", "10.0", projectA.getOption(JavaCore.COMPILER_COMPLIANCE, false));
assertEquals("projA:unexpected inherited value1 for hidden-catch option", null, projectA.getOption(JavaCore.COMPILER_PB_HIDDEN_CATCH_BLOCK, false));
// check project B custom options (should be none, indicating it sees global ones only)
assertEquals("projB:unexpected custom value for deprecation option", null, projectB.getOption(JavaCore.COMPILER_PB_DEPRECATION_IN_DEPRECATED_CODE, false));
assertEquals("projB:unexpected custom value for compliance option", null, projectB.getOption(JavaCore.COMPILER_COMPLIANCE, false));
assertEquals("projB:unexpected inherited value for hidden-catch option", null, projectB.getOption(JavaCore.COMPILER_PB_HIDDEN_CATCH_BLOCK, false));
// flush custom options - project A should revert to global ones
projectA.setOptions(null);
assertEquals("projA:unexpected reverted value for deprecation option", null, projectA.getOption(JavaCore.COMPILER_PB_DEPRECATION_IN_DEPRECATED_CODE, false));
assertEquals("projA:unexpected reverted value for compliance option", null, projectA.getOption(JavaCore.COMPILER_COMPLIANCE, false));
assertEquals("projA:unexpected inherited value2 for hidden-catch option", null, projectA.getOption(JavaCore.COMPILER_PB_HIDDEN_CATCH_BLOCK, false));
} finally {
this.deleteProject("A");
this.deleteProject("B");
}
}
/**
* Test persistence of project custom options - using getOptions()
*/
public void test04() throws CoreException {
try {
IJavaProject projectA =
this.createJavaProject(
"A",
new String[] {}, // source folders
new String[] {}, // lib folders
new String[] {}, // projects
"");
IJavaProject projectB =
this.createJavaProject(
"B",
new String[] {}, // source folders
new String[] {}, // lib folders
new String[] {}, // projects
"");
Hashtable options = new Hashtable();
options.put(JavaCore.COMPILER_PB_DEPRECATION_IN_DEPRECATED_CODE, JavaCore.DISABLED);
options.put(JavaCore.COMPILER_COMPLIANCE, "8.0");
options.put(JavaCore.COMPILER_PB_HIDDEN_CATCH_BLOCK, JavaCore.ERROR);
JavaCore.setOptions(options);
options.clear();
options.put(JavaCore.COMPILER_PB_DEPRECATION_IN_DEPRECATED_CODE, JavaCore.ENABLED);
options.put(JavaCore.COMPILER_COMPLIANCE, "10.0");
projectA.setOptions(options);
// check project A custom options
assertEquals("projA:unexpected custom value for deprecation option", JavaCore.ENABLED, projectA.getOptions(true).get(JavaCore.COMPILER_PB_DEPRECATION_IN_DEPRECATED_CODE));
assertEquals("projA:unexpected custom value for compliance option", "10.0", projectA.getOptions(true).get(JavaCore.COMPILER_COMPLIANCE));
assertEquals("projA:unexpected inherited value1 for hidden-catch option", JavaCore.ERROR, projectA.getOptions(true).get(JavaCore.COMPILER_PB_HIDDEN_CATCH_BLOCK));
// check project B custom options (should be none, indicating it sees global ones only)
assertEquals("projB:unexpected custom value for deprecation option", JavaCore.DISABLED, projectB.getOptions(true).get(JavaCore.COMPILER_PB_DEPRECATION_IN_DEPRECATED_CODE));
assertEquals("projB:unexpected custom value for compliance option", "8.0", projectB.getOptions(true).get(JavaCore.COMPILER_COMPLIANCE));
assertEquals("projB:unexpected inherited value for hidden-catch option", JavaCore.ERROR, projectB.getOptions(true).get(JavaCore.COMPILER_PB_HIDDEN_CATCH_BLOCK));
// flush custom options - project A should revert to global ones
projectA.setOptions(null);
assertEquals("projA:unexpected reverted value for deprecation option", JavaCore.DISABLED, projectA.getOptions(true).get(JavaCore.COMPILER_PB_DEPRECATION_IN_DEPRECATED_CODE));
assertEquals("projA:unexpected reverted value for compliance option", "8.0", projectA.getOptions(true).get(JavaCore.COMPILER_COMPLIANCE));
assertEquals("projA:unexpected inherited value2 for hidden-catch option", JavaCore.ERROR, projectA.getOptions(true).get(JavaCore.COMPILER_PB_HIDDEN_CATCH_BLOCK));
} finally {
this.deleteProject("A");
this.deleteProject("B");
}
}
/**
* Test custom encoding - using getOptions()
*/
public void test05() throws CoreException {
try {
IJavaProject projectA =
this.createJavaProject(
"A",
new String[] {}, // source folders
new String[] {}, // lib folders
new String[] {}, // projects
"");
IJavaProject projectB =
this.createJavaProject(
"B",
new String[] {}, // source folders
new String[] {}, // lib folders
new String[] {}, // projects
"");
String globalEncoding = JavaCore.getOption(JavaCore.CORE_ENCODING);
Hashtable options = new Hashtable();
options.put(JavaCore.CORE_ENCODING, "custom");
projectA.setOptions(options);
// check project A custom options
assertEquals("projA:unexpected custom encoding", "custom", projectA.getOptions(true).get(JavaCore.CORE_ENCODING));
// check project B custom options (should be none, indicating it sees global ones only)
assertEquals("projB:unexpected custom encoding", globalEncoding, projectB.getOptions(true).get(JavaCore.CORE_ENCODING));
// flush custom options - project A should revert to global ones
projectA.setOptions(null);
assertEquals("projA:unexpected reverted encoding", globalEncoding, projectA.getOptions(true).get(JavaCore.CORE_ENCODING));
} finally {
this.deleteProject("A");
this.deleteProject("B");
}
}
/**
* Test custom project option (if not considering JavaCore options) - using getOptions()
*/
public void test06() throws CoreException {
try {
IJavaProject projectA =
this.createJavaProject(
"A",
new String[] {}, // source folders
new String[] {}, // lib folders
new String[] {}, // projects
"");
IJavaProject projectB =
this.createJavaProject(
"B",
new String[] {}, // source folders
new String[] {}, // lib folders
new String[] {}, // projects
"");
Hashtable options = new Hashtable();
options.put(JavaCore.COMPILER_PB_DEPRECATION_IN_DEPRECATED_CODE, JavaCore.DISABLED);
options.put(JavaCore.COMPILER_COMPLIANCE, "8.0");
options.put(JavaCore.COMPILER_PB_HIDDEN_CATCH_BLOCK, JavaCore.ERROR);
JavaCore.setOptions(options);
options.clear();
options.put(JavaCore.COMPILER_PB_DEPRECATION_IN_DEPRECATED_CODE, JavaCore.ENABLED);
options.put(JavaCore.COMPILER_COMPLIANCE, "10.0");
projectA.setOptions(options);
// check project A custom options
assertEquals("projA:unexpected custom value for deprecation option", JavaCore.ENABLED, projectA.getOptions(false).get(JavaCore.COMPILER_PB_DEPRECATION_IN_DEPRECATED_CODE));
assertEquals("projA:unexpected custom value for compliance option", "10.0", projectA.getOptions(false).get(JavaCore.COMPILER_COMPLIANCE));
assertEquals("projA:unexpected inherited value1 for hidden-catch option", null, projectA.getOptions(false).get(JavaCore.COMPILER_PB_HIDDEN_CATCH_BLOCK));
// check project B custom options (should be none, indicating it sees global ones only)
assertEquals("projB:unexpected custom value for deprecation option", null, projectB.getOptions(false).get(JavaCore.COMPILER_PB_DEPRECATION_IN_DEPRECATED_CODE));
assertEquals("projB:unexpected custom value for compliance option", null, projectB.getOptions(false).get(JavaCore.COMPILER_COMPLIANCE));
assertEquals("projB:unexpected inherited value for hidden-catch option", null, projectB.getOptions(false).get(JavaCore.COMPILER_PB_HIDDEN_CATCH_BLOCK));
// flush custom options - project A should revert to global ones
projectA.setOptions(null);
assertEquals("projA:unexpected reverted value for deprecation option", null, projectA.getOptions(false).get(JavaCore.COMPILER_PB_DEPRECATION_IN_DEPRECATED_CODE));
assertEquals("projA:unexpected reverted value for compliance option", null, projectA.getOptions(false).get(JavaCore.COMPILER_COMPLIANCE));
assertEquals("projA:unexpected inherited value2 for hidden-catch option", null, projectA.getOptions(false).get(JavaCore.COMPILER_PB_HIDDEN_CATCH_BLOCK));
} finally {
this.deleteProject("A");
this.deleteProject("B");
}
}
/**
* Custom options must replace existing ones completely without loosing property listeners
* http://bugs.eclipse.org/bugs/show_bug.cgi?id=26255
* http://bugs.eclipse.org/bugs/show_bug.cgi?id=49691
*/
public void test07() throws CoreException {
try {
this.eventCount = 0;
JavaProject projectA = (JavaProject)
this.createJavaProject(
"A",
new String[] {}, // source folders
new String[] {}, // lib folders
new String[] {}, // projects
"");
// Preferences preferences = projectA.getPreferences();
// preferences.addPropertyChangeListener(new TestPropertyListener());
IEclipsePreferences eclipsePreferences = projectA.getEclipsePreferences();
TestPropertyListener listener = new TestPropertyListener();
eclipsePreferences.addPreferenceChangeListener(listener);
Hashtable options = new Hashtable();
options.put(JavaCore.COMPILER_PB_DEPRECATION_IN_DEPRECATED_CODE, JavaCore.ENABLED);
options.put(JavaCore.COMPILER_COMPLIANCE, "10.0");
projectA.setOptions(options);
// check project A custom options
assertEquals("projA:unexpected custom value for deprecation option", JavaCore.ENABLED, projectA.getOptions(false).get(JavaCore.COMPILER_PB_DEPRECATION_IN_DEPRECATED_CODE));
assertEquals("projA:unexpected custom value for compliance option", "10.0", projectA.getOptions(false).get(JavaCore.COMPILER_COMPLIANCE));
assertEquals("projA:unexpected inherited value1 for hidden-catch option", null, projectA.getOptions(false).get(JavaCore.COMPILER_PB_HIDDEN_CATCH_BLOCK));
// assertTrue("projA:preferences should not be reset", preferences == projectA.getPreferences());
assertTrue("projA:preferences should not be reset", eclipsePreferences == projectA.getEclipsePreferences());
assertTrue("projA:preferences property listener has been lost", eventCount == 2);
// change custom options to have one less
options.clear();
options.put(JavaCore.COMPILER_PB_DEPRECATION_IN_DEPRECATED_CODE, JavaCore.ENABLED);
projectA.setOptions(options);
assertEquals("projA:unexpected custom value for deprecation option", JavaCore.ENABLED, projectA.getOptions(false).get(JavaCore.COMPILER_PB_DEPRECATION_IN_DEPRECATED_CODE));
assertEquals("projA:unexpected custom value for compliance option", null, projectA.getOptions(false).get(JavaCore.COMPILER_COMPLIANCE));
assertEquals("projA:unexpected inherited value1 for hidden-catch option", null, projectA.getOptions(false).get(JavaCore.COMPILER_PB_HIDDEN_CATCH_BLOCK));
// assertTrue("projA:preferences should not be reset", preferences == projectA.getPreferences());
assertTrue("projA:preferences should not be reset", eclipsePreferences == projectA.getEclipsePreferences());
assertTrue("projA:preferences property listener has been lost", eventCount == 3);
} finally {
this.deleteProject("A");
}
}
/**
* Empty custom option must not be ignored
* http://bugs.eclipse.org/bugs/show_bug.cgi?id=26251
*/
public void test08() throws CoreException {
try {
IJavaProject projectA =
this.createJavaProject(
"A",
new String[] {}, // source folders
new String[] {}, // lib folders
new String[] {}, // projects
"");
Hashtable options = new Hashtable();
options.put(JavaCore.COMPILER_TASK_TAGS, "TODO:");
JavaCore.setOptions(options);
// check project A custom options
assertEquals("1#projA:unexpected custom value for task tags option", null, projectA.getOption(JavaCore.COMPILER_TASK_TAGS, false));
assertEquals("1#projA:unexpected custom value for inherited task tags option", "TODO:", projectA.getOption(JavaCore.COMPILER_TASK_TAGS, true));
assertEquals("1#workspace:unexpected custom value for task tags option", "TODO:", JavaCore.getOption(JavaCore.COMPILER_TASK_TAGS));
// change custom options to have one less
options.clear();
options.put(JavaCore.COMPILER_TASK_TAGS, "");
projectA.setOptions(options);
assertEquals("2#projA:unexpected custom value for task tags option", "", projectA.getOption(JavaCore.COMPILER_TASK_TAGS, false));
assertEquals("2#projA:unexpected custom value for inherited task tags option", "", projectA.getOption(JavaCore.COMPILER_TASK_TAGS, true));
assertEquals("2#workspace:unexpected custom value for task tags option", "TODO:", JavaCore.getOption(JavaCore.COMPILER_TASK_TAGS));
// change custom options to have one less
options.clear();
options.put(JavaCore.COMPILER_TASK_TAGS, "@TODO");
JavaCore.setOptions(options);
assertEquals("3#projA:unexpected custom value for task tags option", "", projectA.getOption(JavaCore.COMPILER_TASK_TAGS, false));
assertEquals("3#projA:unexpected custom value for inherited task tags option", "", projectA.getOption(JavaCore.COMPILER_TASK_TAGS, true));
assertEquals("3#workspace:unexpected custom value for task tags option", "@TODO", JavaCore.getOption(JavaCore.COMPILER_TASK_TAGS));
} finally {
this.deleteProject("A");
}
}
/**
* Custom options must replace existing ones completely without loosing property listeners
* http://bugs.eclipse.org/bugs/show_bug.cgi?id=59258
* http://bugs.eclipse.org/bugs/show_bug.cgi?id=60896
*/
public void test09() throws CoreException {
try {
this.eventCount = 0;
JavaProject projectA = (JavaProject) this.createJavaProject("A", new String[] {}, "");
// Preferences preferences = projectA.getPreferences();
// preferences.addPropertyChangeListener(new TestPropertyListener());
IEclipsePreferences eclipsePreferences = projectA.getEclipsePreferences();
eclipsePreferences.addPreferenceChangeListener(new TestPropertyListener());
Hashtable options = new Hashtable();
options.put(JavaCore.COMPILER_PB_DEPRECATION_IN_DEPRECATED_CODE, JavaCore.ENABLED);
options.put(JavaCore.COMPILER_COMPLIANCE, "10.0");
projectA.setOptions(options);
// check project A custom options
assertEquals("projA:unexpected custom value for deprecation option", JavaCore.ENABLED, projectA.getOptions(true).get(JavaCore.COMPILER_PB_DEPRECATION_IN_DEPRECATED_CODE));
assertEquals("projA:unexpected custom value for compliance option", "10.0", projectA.getOptions(true).get(JavaCore.COMPILER_COMPLIANCE));
assertTrue("projA:preferences should not be reset", eclipsePreferences == projectA.getEclipsePreferences());
assertEquals("projA:preferences property listener has been lost", 2, eventCount);
// delete/create project A and verify that options are well reset
this.deleteProject("A");
projectA = (JavaProject) this.createJavaProject("A", new String[] {}, "");
assertEquals("projA:unexpected custom value for deprecation option", JavaCore.getOption(JavaCore.COMPILER_PB_DEPRECATION_IN_DEPRECATED_CODE), projectA.getOptions(true).get(JavaCore.COMPILER_PB_DEPRECATION_IN_DEPRECATED_CODE));
assertEquals("projA:unexpected custom value for compliance option", JavaCore.getOption(JavaCore.COMPILER_COMPLIANCE), projectA.getOptions(true).get(JavaCore.COMPILER_COMPLIANCE));
assertTrue("projA:preferences should not be reset", eclipsePreferences != projectA.getEclipsePreferences());
} finally {
this.deleteProject("A");
}
}
/*
* Ensures that a classpath variable is still in the preferences after shutdown/restart
* (regression test for bug 98720 [preferences] classpath variables are not exported if the session is closed and restored)
*/
public void test10() throws CoreException {
JavaCore.setClasspathVariable("TEST", new Path("testing"), null);
simulateExitRestart();
JavaModelManager manager = JavaModelManager.getJavaModelManager();
IEclipsePreferences preferences = manager.getInstancePreferences();
assertEquals(
"Should find variable TEST in preferences",
"testing",
preferences.get(JavaModelManager.CP_VARIABLE_PREFERENCES_PREFIX+"TEST", "null"));
}
/*
* Ensures that a classpath variable is removed from the preferences if set to null
* (regression test for bug 98720 [preferences] classpath variables are not exported if the session is closed and restored)
*/
public void test11() throws CoreException {
JavaCore.setClasspathVariable("TEST", new Path("testing"), null);
JavaCore.removeClasspathVariable("TEST", null);
JavaModelManager manager = JavaModelManager.getJavaModelManager();
IEclipsePreferences preferences = manager.getInstancePreferences();
assertEquals(
"Should not find variable TEST in preferences",
"null",
preferences.get(JavaModelManager.CP_VARIABLE_PREFERENCES_PREFIX+"TEST", "null"));
}
/**
* Bug 68993: [Preferences] IAE when opening project preferences
* @see "http://bugs.eclipse.org/bugs/show_bug.cgi?id=68993"
*/
public void testBug68993() throws CoreException, BackingStoreException {
try {
JavaProject projectA = (JavaProject) this.createJavaProject(
"A",
new String[] {}, // source folders
new String[] {}, // lib folders
new String[] {}, // projects
"");
// Store project eclipse prefs
IEclipsePreferences eclipsePreferences = projectA.getEclipsePreferences();
// set all project options as custom ones: this is what happens when user select
// "Use project settings" in project 'Java Compiler' preferences page...
Hashtable options = new Hashtable(projectA.getOptions(true));
projectA.setOptions(options);
// reset all project custom options: this is what happens when user select
// "Use workspace settings" in project 'Java Compiler' preferences page...
options = new Hashtable();
options.put("internal.default.compliance", JavaCore.DEFAULT);
projectA.setOptions(options);
// verify that project preferences have been reset
assertFalse("projA: Preferences should have been reset", eclipsePreferences == projectA.getEclipsePreferences());
assertEquals("projA: We should not have any custom options!", 0, projectA.getEclipsePreferences().keys().length);
} finally {
this.deleteProject("A");
}
}
/**
* Bug 72214: [Preferences] IAE when opening project preferences
* @see "http://bugs.eclipse.org/bugs/show_bug.cgi?id=72214"
*/
public void testBug72214() throws CoreException, BackingStoreException {
// Remove JavaCore instance prefs
JavaModelManager manager = JavaModelManager.getJavaModelManager();
IEclipsePreferences preferences = manager.getInstancePreferences();
int size = JavaCore.getOptions().size();
preferences.removeNode();
// verify that JavaCore preferences have been reset
assertFalse("JavaCore preferences should have been reset", preferences == manager.getInstancePreferences());
assertEquals("JavaCore preferences should have been resotred!", size, JavaCore.getOptions().size());
}
/**
* Bug 100393: Defaults for compiler errors/warnings settings
* @see "http://bugs.eclipse.org/bugs/show_bug.cgi?id=100393"
*/
public void testBug100393() throws CoreException, BackingStoreException {
// Get default compiler options
Map options = new CompilerOptions().getMap();
// verify that CompilerOptions default preferences for modified options
assertEquals("Invalid default for "+CompilerOptions.OPTION_ReportUnusedLocal, CompilerOptions.WARNING, options.get(CompilerOptions.OPTION_ReportUnusedLocal));
assertEquals("Invalid default for "+CompilerOptions.OPTION_ReportUnusedPrivateMember, CompilerOptions.WARNING, options.get(CompilerOptions.OPTION_ReportUnusedPrivateMember));
assertEquals("Invalid default for "+CompilerOptions.OPTION_ReportFieldHiding, CompilerOptions.IGNORE, options.get(CompilerOptions.OPTION_ReportFieldHiding));
assertEquals("Invalid default for "+CompilerOptions.OPTION_ReportLocalVariableHiding, CompilerOptions.IGNORE, options.get(CompilerOptions.OPTION_ReportLocalVariableHiding));
}
public void testBug100393b() throws CoreException, BackingStoreException {
// Get JavaCore default preferences
JavaModelManager manager = JavaModelManager.getJavaModelManager();
IEclipsePreferences preferences = manager.getDefaultPreferences();
// verify that JavaCore default preferences for modified options
assertEquals("Invalid default for "+JavaCore.COMPILER_PB_UNUSED_LOCAL, "warning", preferences.get(JavaCore.COMPILER_PB_UNUSED_LOCAL, "null"));
assertEquals("Invalid default for "+JavaCore.COMPILER_PB_UNUSED_PRIVATE_MEMBER, "warning", preferences.get(JavaCore.COMPILER_PB_UNUSED_PRIVATE_MEMBER, "null"));
assertEquals("Invalid default for "+JavaCore.COMPILER_PB_FIELD_HIDING, "ignore", preferences.get(JavaCore.COMPILER_PB_FIELD_HIDING, "null"));
assertEquals("Invalid default for "+JavaCore.COMPILER_PB_LOCAL_VARIABLE_HIDING, "ignore", preferences.get(JavaCore.COMPILER_PB_LOCAL_VARIABLE_HIDING, "null"));
}
}