blob: eca154a568b4f857488c169ffaf3bf3c2d5d8fd2 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2009 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.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.preferences.DefaultScope;
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) {
OptionTests.this.eventCount++;
}
}
public OptionTests(String name) {
super(name);
}
static {
// TESTS_NUMBERS = new int[] { 125360 };
// TESTS_RANGE = new int[] { 4, -1 };
}
public static Test suite() {
return buildModelTestSuite(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", this.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", this.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, this.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"));
}
/*
* Ensures that classpath problems are removed when a missing classpath variable is added through the preferences
* (regression test for bug 109691 Importing preferences does not update classpath variables)
*/
public void test12() throws CoreException {
IEclipsePreferences preferences = JavaModelManager.getJavaModelManager().getInstancePreferences();
try {
IJavaProject project = createJavaProject("P", new String[0], new String[] {"TEST"}, "");
waitForAutoBuild();
preferences.put(JavaModelManager.CP_VARIABLE_PREFERENCES_PREFIX+"TEST", getExternalJCLPathString());
assertMarkers("Unexpected markers", "", project);
} finally {
deleteProject("P");
preferences.remove(JavaModelManager.CP_VARIABLE_PREFERENCES_PREFIX+"TEST");
}
}
// https://bugs.eclipse.org/bugs/show_bug.cgi?id=217443
public void test13() {
Hashtable options = JavaCore.getDefaultOptions();
String immutableValue = (String) options.get(JavaCore.CORE_ENCODING);
assertEquals(ResourcesPlugin.getEncoding(), immutableValue);
options.put(JavaCore.CORE_ENCODING, immutableValue + "_extra_tail");
JavaCore.setOptions(options);
assertEquals(immutableValue, JavaCore.getOptions().get(JavaCore.CORE_ENCODING));
}
/**
* 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
"");
// 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
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"));
}
/**
* @bug 125360: IJavaProject#setOption() doesn't work if same option as default
* @see "http://bugs.eclipse.org/bugs/show_bug.cgi?id=125360"
*/
public void testBug125360() throws CoreException, BackingStoreException {
try {
JavaProject project = (JavaProject) createJavaProject(
"P",
new String[] {}, // source folders
new String[] {}, // lib folders
new String[] {}, // projects
"");
project.setOption(JavaCore.COMPILER_SOURCE, JavaCore.VERSION_1_4);
project.setOption(JavaCore.COMPILER_SOURCE, JavaCore.VERSION_1_3);
String option = project.getOption(JavaCore.COMPILER_SOURCE, true);
assertEquals(JavaCore.VERSION_1_3, option);
} finally {
deleteProject("P");
}
}
/**
* @bug 131707: Cannot add classpath variables when starting with -pluginCustomization option
* @see "https://bugs.eclipse.org/bugs/show_bug.cgi?id=131707"
*/
public void testBug131707() throws CoreException {
IEclipsePreferences defaultPreferences = new DefaultScope().getNode(JavaCore.PLUGIN_ID);
try {
defaultPreferences.put("org.eclipse.jdt.core.classpathVariable.MY_DEFAULT_LIB", "c:\\temp\\lib.jar");
simulateExitRestart();
String[] variableNames = JavaCore.getClasspathVariableNames();
for (int i = 0, length = variableNames.length; i < length; i++) {
if ("MY_DEFAULT_LIB".equals(variableNames[i])) {
assertEquals(
"Unexpected value for MY_DEFAULT_LIB",
new Path("c:\\temp\\lib.jar"),
JavaCore.getClasspathVariable("MY_DEFAULT_LIB"));
return;
}
}
assertFalse("Variable MY_DEFAULT_LIB not found", true);
} finally {
defaultPreferences.remove("org.eclipse.jdt.core.classpathVariable.MY_DEFAULT_LIB");
}
}
/**
* @bug 152562: [prefs] IJavaProject.setOption(..., null) does not work
* @test Verify that setting an option to null removes it from project preferences
* @see "https://bugs.eclipse.org/bugs/show_bug.cgi?id=152562"
*/
public void testBug152562() throws CoreException {
String wkspCompilerSource = JavaCore.getOption(JavaCore.COMPILER_SOURCE);
String compilerSource = wkspCompilerSource.equals(JavaCore.VERSION_1_5) ? JavaCore.VERSION_1_6 : JavaCore.VERSION_1_5;
try {
JavaProject project = (JavaProject) createJavaProject("P");
project.setOption(JavaCore.COMPILER_SOURCE, compilerSource);
String option = project.getOption(JavaCore.COMPILER_SOURCE, true);
if (!option.equals(compilerSource)) {
System.err.println("Unexpected option value: "+option+" instead of: "+compilerSource);
}
project.setOption(JavaCore.COMPILER_SOURCE, null);
option = project.getOption(JavaCore.COMPILER_SOURCE, true);
assertEquals(wkspCompilerSource, option);
} finally {
deleteProject("P");
}
}
/**
* @bug 152578: [prefs] IJavaProject.setOption(Object,Object) wrongly removes key when value is equals to JavaCore one
* @test Verify that setting an option to workspace value does not remove it from project preferences
* @see "https://bugs.eclipse.org/bugs/show_bug.cgi?id=152578"
*/
public void testBug152578() throws CoreException {
Hashtable wkspOptions = JavaCore.getOptions();
String wkspCompilerSource = (String) wkspOptions.get(JavaCore.COMPILER_SOURCE);
String compilerSource = wkspCompilerSource.equals(JavaCore.VERSION_1_5) ? JavaCore.VERSION_1_6 : JavaCore.VERSION_1_5;
try {
JavaProject project = (JavaProject) createJavaProject("P");
project.setOption(JavaCore.COMPILER_SOURCE, wkspCompilerSource);
String option = project.getOption(JavaCore.COMPILER_SOURCE, true);
if (!option.equals(wkspCompilerSource)) {
System.err.println("Unexpected option value: "+option+" instead of: "+wkspCompilerSource);
}
Hashtable newOptions = JavaCore.getOptions();
newOptions.put(JavaCore.COMPILER_SOURCE, compilerSource);
JavaCore.setOptions(newOptions);
option = project.getOption(JavaCore.COMPILER_SOURCE, false);
assertNotNull("Project should still have the option set!", option);
} finally {
deleteProject("P");
JavaCore.setOptions(wkspOptions);
}
}
}