blob: 05420461a8e94aa9da4ee03acadddecb1e50f51e [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2010 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM - Initial API and implementation
* Anton Leherbauer (Wind River Systems)
* Markus Schorn (Wind River Systems)
*******************************************************************************/
package org.eclipse.cdt.make.scannerdiscovery;
import java.util.List;
import org.eclipse.cdt.core.testplugin.util.BaseTestCase;
import org.eclipse.cdt.make.core.scannerconfig.IScannerInfoCollector;
import org.eclipse.cdt.make.core.scannerconfig.IScannerInfoConsoleParser;
import org.eclipse.cdt.make.core.scannerconfig.ScannerInfoTypes;
import junit.framework.TestSuite;
/**
* Scanner configuration console parser tests
*
* @author vhirsl
*/
public abstract class BaseBOPConsoleParserTests extends BaseTestCase {
public static TestSuite suite() {
return suite(BaseBOPConsoleParserTests.class);
}
protected IScannerInfoConsoleParser fOutputParser;
protected IScannerInfoCollector fCollector;
public BaseBOPConsoleParserTests(String name) {
super(name);
}
@Override
protected void setUp() throws Exception {
super.setUp();
fCollector = new TestScannerInfoCollector();
}
@Override
protected void tearDown() throws Exception {
super.tearDown();
}
public void testParsingSymbolDefinitions() {
fOutputParser.processLine("gcc -DMACRO1 -D MACRO2=value2 -c test.c"); // simple definitions //$NON-NLS-1$
fOutputParser.processLine("gcc -D -DMACRO3= -c test.c"); // empty -D //$NON-NLS-1$
fOutputParser.processLine("gcc -D MACRO4='value4' -D 'MACRO5=value5' '-D MACRO6 = value6' -c test.c"); // single quotes //$NON-NLS-1$
fOutputParser.processLine("gcc -D'MACRO7=\"value 7\"' -D MACRO8='\"value 8\"' -c test.c"); // single quotes //$NON-NLS-1$
fOutputParser.processLine("gcc -DMACRO9=\"value9\" -D \"MACRO10=value10\" \"-D MACRO11 = value11\" -c test.c"); // double quotes //$NON-NLS-1$
fOutputParser.processLine("gcc -D\"MACRO12=\\\"value 12\\\"\" -D MACRO13=\"\\\"value 13\\\"\" -c test.c"); // single quotes //$NON-NLS-1$
fOutputParser.processLine("gcc -D \\"); //$NON-NLS-1$
fOutputParser.processLine("MULTILINE=TRUE \\"); //$NON-NLS-1$
fOutputParser.processLine("-c test.c"); // multiline //$NON-NLS-1$
fOutputParser.processLine("gcc -D 'SUM(x, y) = (x) + (y)' -c test.c"); // more complex macro definition //$NON-NLS-1$
@SuppressWarnings("unchecked")
List<String> sumSymbols = fCollector.getCollectedScannerInfo(null, ScannerInfoTypes.SYMBOL_DEFINITIONS);
assertTrue(sumSymbols.contains("MACRO1=1")); //$NON-NLS-1$
assertTrue(sumSymbols.contains("MACRO2=value2")); //$NON-NLS-1$
assertTrue(sumSymbols.contains("MACRO3=")); //$NON-NLS-1$
assertTrue(sumSymbols.contains("MACRO4=value4")); //$NON-NLS-1$
assertTrue(sumSymbols.contains("MACRO5=value5")); //$NON-NLS-1$
assertTrue(sumSymbols.contains("MACRO6 = value6")); //$NON-NLS-1$
assertTrue(sumSymbols.contains("MACRO7=\"value 7\"")); //$NON-NLS-1$
assertTrue(sumSymbols.contains("MACRO8=\"value 8\"")); //$NON-NLS-1$
assertTrue(sumSymbols.contains("MACRO9=value9")); //$NON-NLS-1$
assertTrue(sumSymbols.contains("MACRO10=value10")); //$NON-NLS-1$
assertTrue(sumSymbols.contains("MACRO11 = value11")); //$NON-NLS-1$
assertTrue(sumSymbols.contains("MACRO12=\"value 12\"")); //$NON-NLS-1$
assertTrue(sumSymbols.contains("MACRO13=\"value 13\"")); //$NON-NLS-1$
assertTrue(sumSymbols.contains("MULTILINE=TRUE")); //$NON-NLS-1$
assertTrue(sumSymbols.contains("SUM(x, y) = (x) + (y)")); //$NON-NLS-1$
assertTrue(sumSymbols.size() == 15);
}
public void testParsingSymbolDefinitions_bug80271() {
fOutputParser.processLine("gcc -DMACRO1 -I ..\\inc -c ..\\perfilescdtest\\source.c"); // PR 80271 //$NON-NLS-1$
@SuppressWarnings("unchecked")
List<String> sumSymbols = fCollector.getCollectedScannerInfo(null, ScannerInfoTypes.SYMBOL_DEFINITIONS);
assertTrue(sumSymbols.contains("MACRO1=1")); //$NON-NLS-1$
assertTrue(sumSymbols.size() == 1);
}
public void testParsingUnbalancedDoubleQuote_Bug186065() throws Exception {
fOutputParser.processLine("../src/bug186065.cc:8: error: missing terminating \" character"); // PR 80271 //$NON-NLS-1$
fOutputParser.processLine("gcc -DBUG186065_IS_FIXED test.c"); //$NON-NLS-1$
@SuppressWarnings("unchecked")
List<String> sumSymbols = fCollector.getCollectedScannerInfo(null, ScannerInfoTypes.SYMBOL_DEFINITIONS);
assertTrue(sumSymbols.contains("BUG186065_IS_FIXED=1")); //$NON-NLS-1$
assertTrue(sumSymbols.size() == 1);
}
public void testCompilerCommand_bug194394() throws Exception {
fOutputParser.processLine("/usr/bin/gcc -DA test1.c"); //$NON-NLS-1$
fOutputParser.processLine("/usr/gcc-installs/gcc -DB test2.c"); //$NON-NLS-1$
fOutputParser.processLine("/usr/gcc/gcc -DC test3.c"); //$NON-NLS-1$
fOutputParser.processLine("/usr/gcc.exe -DD test4.c"); //$NON-NLS-1$
fOutputParser.processLine("/usr/gcc-tool-x -DE test5.c"); //$NON-NLS-1$
fOutputParser.processLine("/usr/gcc/something_else -DF test6.c"); //$NON-NLS-1$
@SuppressWarnings("unchecked")
List<String> sumSymbols = fCollector.getCollectedScannerInfo(null, ScannerInfoTypes.SYMBOL_DEFINITIONS);
assertTrue(sumSymbols.contains("A=1")); //$NON-NLS-1$
assertTrue(sumSymbols.contains("B=1")); //$NON-NLS-1$
assertTrue(sumSymbols.contains("C=1")); //$NON-NLS-1$
assertTrue(sumSymbols.contains("D=1")); //$NON-NLS-1$
assertTrue(sumSymbols.contains("E=1")); //$NON-NLS-1$
assertFalse(sumSymbols.contains("F=1")); //$NON-NLS-1$
assertEquals(5, sumSymbols.size());
}
public void testCommandsWithSemicolon_bug194394() throws Exception {
fOutputParser.processLine("gcc -DA test1.c; gcc -DB test2.c"); //$NON-NLS-1$
fOutputParser.processLine("nix -DC; gcc -DD test2.c"); //$NON-NLS-1$
@SuppressWarnings("unchecked")
List<String> sumSymbols = fCollector.getCollectedScannerInfo(null, ScannerInfoTypes.SYMBOL_DEFINITIONS);
assertTrue(sumSymbols.contains("A=1")); //$NON-NLS-1$
assertTrue(sumSymbols.contains("B=1")); //$NON-NLS-1$
assertFalse(sumSymbols.contains("C=1")); //$NON-NLS-1$
assertTrue(sumSymbols.contains("D=1")); //$NON-NLS-1$
assertEquals(3, sumSymbols.size());
}
// https://bugs.eclipse.org/bugs/show_bug.cgi?id=203059
public void testCompilerCommandInsideShellInvocation_bug203059() throws Exception {
fOutputParser.processLine("sh -c '/usr/bin/gcc -DA test1.c'"); //$NON-NLS-1$
fOutputParser.processLine("sh -c '/usr/gcc-installs/gcc -DB test2.c;"); //$NON-NLS-1$
fOutputParser.processLine("sh -c '/usr/gcc/gcc -DC test3.c'"); //$NON-NLS-1$
fOutputParser.processLine("sh -c '/usr/gcc.exe -DD test4.c'"); //$NON-NLS-1$
fOutputParser.processLine("sh -c '/usr/gcc-tool-x -DE test5.c'"); //$NON-NLS-1$
fOutputParser.processLine("sh -c '/usr/gcc/something_else -DF test6.c'"); //$NON-NLS-1$
// with semicolon
fOutputParser.processLine("sh -c 'gcc -DAA test1.c; gcc -DBB test2.c'"); //$NON-NLS-1$
fOutputParser.processLine("sh -c 'nix -DCC; gcc -DDD test2.c'"); //$NON-NLS-1$
@SuppressWarnings("unchecked")
List<String> sumSymbols = fCollector.getCollectedScannerInfo(null, ScannerInfoTypes.SYMBOL_DEFINITIONS);
assertTrue(sumSymbols.contains("A=1")); //$NON-NLS-1$
assertTrue(sumSymbols.contains("B=1")); //$NON-NLS-1$
assertTrue(sumSymbols.contains("C=1")); //$NON-NLS-1$
assertTrue(sumSymbols.contains("D=1")); //$NON-NLS-1$
assertTrue(sumSymbols.contains("E=1")); //$NON-NLS-1$
assertFalse(sumSymbols.contains("F=1")); //$NON-NLS-1$
assertTrue(sumSymbols.contains("AA=1")); //$NON-NLS-1$
assertTrue(sumSymbols.contains("BB=1")); //$NON-NLS-1$
assertFalse(sumSymbols.contains("CC=1")); //$NON-NLS-1$
assertTrue(sumSymbols.contains("DD=1")); //$NON-NLS-1$
assertEquals(8, sumSymbols.size());
}
}