diff --git a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/gnu/GCCSpecsConsoleParser.java b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/gnu/GCCSpecsConsoleParser.java index c06cecb06ef..f8000631ac7 100644 --- a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/gnu/GCCSpecsConsoleParser.java +++ b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/gnu/GCCSpecsConsoleParser.java @@ -74,9 +74,9 @@ public class GCCSpecsConsoleParser implements IScannerInfoConsoleParser { // i now marks the space between the name and definition if (i > 0) { int start = line.indexOf(defineParts[1]); // start of definition - defineParts[1] = line.substring(start, i); + defineParts[1] = line.substring(start, i + 1); if (defineParts.length > 2) { - defineParts[2] = line.substring(i + 1); + defineParts[2] = line.substring(i + 1).trim(); } } else { MakeCorePlugin.log(new Exception("GCCSpecsConsoleParser ERROR: Unmatched brackets: ["+ line+ "]")); //$NON-NLS-1$ //$NON-NLS-2$ diff --git a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/util/TraceUtil.java b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/util/TraceUtil.java index cde0c5b6231..20b83fe744e 100644 --- a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/util/TraceUtil.java +++ b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/util/TraceUtil.java @@ -29,7 +29,8 @@ public class TraceUtil { private static LogWriter logger = null; static { - logger = new LogWriter(MakeCorePlugin.getDefault().getStateLocation().append(".log").toFile()); //$NON-NLS-1$ + if (MakeCorePlugin.getDefault()!=null) // in case of running simple junit tests + logger = new LogWriter(MakeCorePlugin.getDefault().getStateLocation().append(".log").toFile()); //$NON-NLS-1$ } /* (non-Javadoc) * @see java.lang.Object#finalize() diff --git a/build/org.eclipse.cdt.managedbuilder.core.tests/suite/org/eclipse/cdt/managedbuilder/tests/suite/AllManagedBuildTests.java b/build/org.eclipse.cdt.managedbuilder.core.tests/suite/org/eclipse/cdt/managedbuilder/tests/suite/AllManagedBuildTests.java index d7f8e2ad82a..d996b7ef021 100644 --- a/build/org.eclipse.cdt.managedbuilder.core.tests/suite/org/eclipse/cdt/managedbuilder/tests/suite/AllManagedBuildTests.java +++ b/build/org.eclipse.cdt.managedbuilder.core.tests/suite/org/eclipse/cdt/managedbuilder/tests/suite/AllManagedBuildTests.java @@ -16,6 +16,7 @@ import junit.framework.Test; import junit.framework.TestSuite; import org.eclipse.cdt.build.core.scannerconfig.tests.CfgScannerConfigProfileManagerTests; +import org.eclipse.cdt.build.core.scannerconfig.tests.GCCSpecsConsoleParserTest; import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.dom.IPDOMManager; import org.eclipse.cdt.managedbuilder.core.tests.BuildDescriptionModelTests; @@ -54,6 +55,7 @@ public class AllManagedBuildTests { //$JUnit-BEGIN$ // build.core.scannerconfig.tests suite.addTest(CfgScannerConfigProfileManagerTests.suite()); + suite.addTestSuite(GCCSpecsConsoleParserTest.class); // managedbuilder.core.tests suite.addTest(ManagedBuildCoreTests20.suite()); diff --git a/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/build/core/scannerconfig/tests/GCCSpecsConsoleParserTest.java b/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/build/core/scannerconfig/tests/GCCSpecsConsoleParserTest.java new file mode 100644 index 00000000000..4562c45b246 --- /dev/null +++ b/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/build/core/scannerconfig/tests/GCCSpecsConsoleParserTest.java @@ -0,0 +1,83 @@ +package org.eclipse.cdt.build.core.scannerconfig.tests; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import junit.framework.TestCase; + +import org.eclipse.cdt.make.core.scannerconfig.IScannerInfoCollector; +import org.eclipse.cdt.make.core.scannerconfig.ScannerInfoTypes; +import org.eclipse.cdt.make.internal.core.scannerconfig.gnu.GCCSpecsConsoleParser; + +public class GCCSpecsConsoleParserTest extends TestCase { + GCCSpecsConsoleParser parser; + private IScannerInfoCollector collector; + List includes; + List symbols; + + @Override + protected void setUp() throws Exception { + collector = new IScannerInfoCollector() { + + public List getCollectedScannerInfo(Object resource, ScannerInfoTypes type) { + // TODO Auto-generated method stub + return null; + } + + public void contributeToScannerConfig(Object resource, Map scannerInfo1) { + Map> scannerInfo = scannerInfo1; + includes = scannerInfo.get(ScannerInfoTypes.INCLUDE_PATHS); + symbols = scannerInfo.get(ScannerInfoTypes.SYMBOL_DEFINITIONS); + } + }; + parser = new GCCSpecsConsoleParser(); + parser.startup(null, null, collector, null); + } + + private void enterLine(String line) { + parser.processLine(line); + parser.shutdown(); + } + + private void checkMacro(String name, String value) { + assertTrue("No symbols", symbols.size() > 0); + String string = symbols.get(0); + if (string.contains("=")) { + String[] val = string.split("=", 2); + assertEquals(name, val[0]); + assertEquals(value, val[1]); + } else { + assertEquals(name, string); + assertEquals(value, ""); + } + + } + + public void testProcessLine_NoArgs() { + enterLine("#define __MY_MACRO__ __MY_VALUE__"); + checkMacro("__MY_MACRO__", "__MY_VALUE__"); + + } + public void testProcessLine_Const() { + enterLine("#define A (3)"); + checkMacro("A", "(3)"); + } + public void testProcessLine_EmptyArgList() { + enterLine("#define A() B"); + checkMacro("A()", "B"); + } + public void testProcessLine_ParamUnused() { + enterLine("#define A(X) B"); + checkMacro("A(X)", "B"); + } + public void testProcessLine_ParamSpace() { + enterLine("#define __MY_MACRO__(P1, P2) __MY_VALUE__(P1, P2)"); + checkMacro("__MY_MACRO__(P1, P2)", "__MY_VALUE__(P1, P2)"); + } + public void testProcessLine_EmptyBody() { + enterLine("#define __MY_MACRO__(P1, P2) "); + checkMacro("__MY_MACRO__(P1, P2)", ""); + } + +}