/** * 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 346010 - [model] strange initialization dependency in OptionTests * @test Verify that unfortunate order of map entries doesn't spoil intended semantics. * @see "https://bugs.eclipse.org/bugs/show_bug.cgi?id=346010" * @deprecated As using deprecated constants */ public void testBug346010() throws CoreException { class ForcedOrderMap extends Hashtable { private static final long serialVersionUID = 8012963985718522218L; Map original; Map.Entry additionalEntry; /* Force (additionalKey,additionalValue) to be served after all entries of original. */ public ForcedOrderMap(Map original, String additionalKey, String additionalValue) { this.original = original; // convert additionalKey->additionalValue to a Map.Entry without inserting into original: Hashtable tmp = new Hashtable(); tmp.put(additionalKey, additionalValue); this.additionalEntry = (Map.Entry) tmp.entrySet().iterator().next(); } public Set entrySet() { return new HashSet() { private static final long serialVersionUID = 1L; public Iterator iterator() { List orderedEntries; orderedEntries = new ArrayList(ForcedOrderMap.this.original.entrySet()); orderedEntries.add(ForcedOrderMap.this.additionalEntry); return orderedEntries.iterator(); } }; } public synchronized boolean containsKey(Object key) { return this.original.containsKey(key) || key.equals(this.additionalEntry.getKey()); } } try { // Set the obsolete option using the IJavaProject API JavaProject project = (JavaProject) createJavaProject("P"); final String obsoleteOption = DefaultCodeFormatterConstants.FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_MEMBER; Map testOptions = project.getOptions(true); Map orderedOptions = new ForcedOrderMap(testOptions, obsoleteOption, JavaCore.DO_NOT_INSERT); project.setOptions(orderedOptions); // Verify that obsolete preference is not stored assertNull( "Unexpected value for formatter deprecated option 'org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_member'", project.getEclipsePreferences().get(obsoleteOption, null)); // Verify that project obsolete option is well retrieved assertEquals( "Unexpected value for formatter deprecated option 'org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_member'", JavaCore.INSERT, project.getOption(obsoleteOption, true)); } finally { deleteProject("P"); } }
/** * 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"); } }
/** * @bug 324987: [formatter] API compatibility problem with Annotation Newline options * @test Verify that a new option beats the deprecated option when a client sets both through the * IJavaProject#setOptions(Map) API * @see "https://bugs.eclipse.org/bugs/show_bug.cgi?id=324987" * @deprecated As using deprecated constants */ public void testBug324987_Project02() throws CoreException { try { // Set the obsolete option using the IJavaProject API JavaProject project = (JavaProject) createJavaProject("P"); final String obsoleteOption = DefaultCodeFormatterConstants.FORMATTER_INSERT_NEW_LINE_AFTER_ANNOTATION_ON_MEMBER; Map testOptions = project.getOptions(true); testOptions.put(obsoleteOption, JavaCore.DO_NOT_INSERT); project.setOptions(testOptions); // Verify that obsolete preference is not stored assertNull( "Unexpected value for formatter deprecated option 'org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_member'", project.getEclipsePreferences().get(obsoleteOption, null)); // Verify that project obsolete option is well retrieved assertEquals( "Unexpected value for formatter deprecated option 'org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_member'", JavaCore.INSERT, project.getOption(obsoleteOption, true)); } finally { deleteProject("P"); } }
/** * 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"); } }