From 36d837843b13bf1469119a298548ed0cbbd64eca Mon Sep 17 00:00:00 2001 From: Andrew Gvozdev Date: Sun, 8 Apr 2012 06:44:03 -0400 Subject: [PATCH] Allow clear empty Specs detectors in UI to give user means for restarting. --- .../tests/BuiltinSpecsDetectorTest.java | 65 ++++++++++++++++++- .../AbstractBuiltinSpecsDetector.java | 14 +++- 2 files changed, 75 insertions(+), 4 deletions(-) diff --git a/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuilder/language/settings/providers/tests/BuiltinSpecsDetectorTest.java b/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuilder/language/settings/providers/tests/BuiltinSpecsDetectorTest.java index 6fe2262c2f1..4460d40c9e6 100644 --- a/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuilder/language/settings/providers/tests/BuiltinSpecsDetectorTest.java +++ b/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuilder/language/settings/providers/tests/BuiltinSpecsDetectorTest.java @@ -331,10 +331,13 @@ public class BuiltinSpecsDetectorTest extends BaseTestCase { Document doc = XmlUtil.newDocument(); Element rootElement = XmlUtil.appendElement(doc, ELEM_TEST); - // load it to new provider + // initialize provider MockBuiltinSpecsDetectorExecutedFlag provider = new MockBuiltinSpecsDetectorExecutedFlag(); + assertEquals(false, provider.isExecuted()); + // load the XML to new provider provider.load(rootElement); assertEquals(false, provider.isConsoleEnabled()); + assertEquals(false, provider.isExecuted()); } Element elementProvider; @@ -342,6 +345,7 @@ public class BuiltinSpecsDetectorTest extends BaseTestCase { // define mock detector MockBuiltinSpecsDetectorExecutedFlag provider = new MockBuiltinSpecsDetectorExecutedFlag(); assertEquals(false, provider.isConsoleEnabled()); + assertEquals(false, provider.isExecuted()); // redefine the settings provider.setConsoleEnabled(true); @@ -359,10 +363,69 @@ public class BuiltinSpecsDetectorTest extends BaseTestCase { // create another instance of the provider MockBuiltinSpecsDetectorExecutedFlag provider = new MockBuiltinSpecsDetectorExecutedFlag(); assertEquals(false, provider.isConsoleEnabled()); + assertEquals(false, provider.isExecuted()); // load element provider.load(elementProvider); assertEquals(true, provider.isConsoleEnabled()); + assertEquals(false, provider.isExecuted()); + } + } + + /** + * Test serialization of entries and "isExecuted" flag handling. + */ + public void testAbstractBuiltinSpecsDetector_SerializeEntriesDOM() throws Exception { + Element rootElement; + { + // create provider + MockBuiltinSpecsDetectorExecutedFlag provider = new MockBuiltinSpecsDetectorExecutedFlag(); + List entries = new ArrayList(); + entries.add(new CIncludePathEntry("path0", 1)); + provider.setSettingEntries(null, null, null, entries); + // serialize entries + Document doc = XmlUtil.newDocument(); + rootElement = XmlUtil.appendElement(doc, ELEM_TEST); + provider.serializeEntries(rootElement); + // check XML + String xmlString = XmlUtil.toString(doc); + assertTrue(xmlString.contains("path0")); + } + + { + // create new provider + MockBuiltinSpecsDetectorExecutedFlag provider = new MockBuiltinSpecsDetectorExecutedFlag(); + assertEquals(true, provider.isEmpty()); + assertEquals(false, provider.isExecuted()); + + // load the XML to the new provider + provider.load(rootElement); + List entries = provider.getSettingEntries(null, null, null); + assertNotNull(entries); + assertTrue(entries.size() > 0); + assertEquals(new CIncludePathEntry("path0", 1), entries.get(0)); + assertEquals(false, provider.isEmpty()); + assertEquals(true, provider.isExecuted()); + + // clear the new provider + provider.clear(); + assertEquals(true, provider.isEmpty()); + assertEquals(false, provider.isExecuted()); + } + + { + // create new provider + MockBuiltinSpecsDetectorExecutedFlag provider = new MockBuiltinSpecsDetectorExecutedFlag(); + assertEquals(true, provider.isEmpty()); + assertEquals(false, provider.isExecuted()); + + // execute provider + provider.execute(); + List entries = provider.getSettingEntries(null, null, null); + assertEquals(null, entries); + // executed provider should NOT appear as empty even with no entries set + assertEquals(false, provider.isEmpty()); + assertEquals(true, provider.isExecuted()); } } diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/language/settings/providers/AbstractBuiltinSpecsDetector.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/language/settings/providers/AbstractBuiltinSpecsDetector.java index 66cbbde2e7b..4bd99ac0dfe 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/language/settings/providers/AbstractBuiltinSpecsDetector.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/language/settings/providers/AbstractBuiltinSpecsDetector.java @@ -708,16 +708,24 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti super.loadAttributes(providerNode); String consoleValue = XmlUtil.determineAttributeValue(providerNode, ATTR_CONSOLE); - if (consoleValue!=null) + if (consoleValue != null) { isConsoleEnabled = Boolean.parseBoolean(consoleValue); + } } @Override public void loadEntries(Element providerNode) { super.loadEntries(providerNode); - // TODO - test case for that or maybe introduce "isExecuted" attribute in XML? - if (!isEmpty()) + if (!isEmpty()) { isExecuted = true; + } + } + + @Override + public boolean isEmpty() { + // treat provider that has been executed as not empty + // to let "Clear" button to restart the provider + return !isExecuted && super.isEmpty(); } @Override