1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-29 11:55:40 +02:00

Add rewriter test for c++20 three-way comparison expression

This commit is contained in:
Igor V. Kovalenko 2023-01-19 22:16:12 +03:00 committed by Jonah Graham
parent 5eb89637b2
commit a8b3401a47
4 changed files with 32 additions and 20 deletions

View file

@ -15,6 +15,7 @@
package org.eclipse.cdt.core.parser.tests.rewrite.astwriter; package org.eclipse.cdt.core.parser.tests.rewrite.astwriter;
import org.eclipse.cdt.core.parser.ParserLanguage; import org.eclipse.cdt.core.parser.ParserLanguage;
import org.eclipse.cdt.core.parser.tests.ast2.AST2TestBase.ScannerKind;
import org.eclipse.cdt.core.parser.tests.rewrite.TestSourceFile; import org.eclipse.cdt.core.parser.tests.rewrite.TestSourceFile;
/** /**
@ -22,7 +23,7 @@ import org.eclipse.cdt.core.parser.tests.rewrite.TestSourceFile;
*/ */
public class ASTWriterTestSourceFile extends TestSourceFile { public class ASTWriterTestSourceFile extends TestSourceFile {
private ParserLanguage parserLanguage = ParserLanguage.CPP; private ParserLanguage parserLanguage = ParserLanguage.CPP;
private boolean useGNUExtensions = false; private ScannerKind scannerKind = ScannerKind.STD;
public ASTWriterTestSourceFile(String name) { public ASTWriterTestSourceFile(String name) {
super(name); super(name);
@ -36,11 +37,11 @@ public class ASTWriterTestSourceFile extends TestSourceFile {
return parserLanguage; return parserLanguage;
} }
public boolean isUseGNUExtensions() { public ScannerKind getScannerKind() {
return useGNUExtensions; return scannerKind;
} }
public void setUseGNUExtensions(boolean useGNUExtensions) { public void setScannerKind(ScannerKind scannerKind) {
this.useGNUExtensions = useGNUExtensions; this.scannerKind = scannerKind;
} }
} }

View file

@ -32,6 +32,7 @@ import org.eclipse.cdt.core.parser.ParserLanguage;
import org.eclipse.cdt.core.parser.ParserMode; import org.eclipse.cdt.core.parser.ParserMode;
import org.eclipse.cdt.core.parser.ScannerInfo; import org.eclipse.cdt.core.parser.ScannerInfo;
import org.eclipse.cdt.core.parser.tests.ast2.AST2TestBase; import org.eclipse.cdt.core.parser.tests.ast2.AST2TestBase;
import org.eclipse.cdt.core.parser.tests.ast2.AST2TestBase.ScannerKind;
import org.eclipse.cdt.core.parser.tests.rewrite.RewriteBaseTest; import org.eclipse.cdt.core.parser.tests.rewrite.RewriteBaseTest;
import org.eclipse.cdt.core.parser.tests.rewrite.TestHelper; import org.eclipse.cdt.core.parser.tests.rewrite.TestHelper;
import org.eclipse.cdt.core.parser.tests.rewrite.TestSourceFile; import org.eclipse.cdt.core.parser.tests.rewrite.TestSourceFile;
@ -94,16 +95,16 @@ public abstract class ASTWriterTester extends RewriteBaseTest {
protected ISourceCodeParser getParser(TestSourceFile testFile) throws Exception { protected ISourceCodeParser getParser(TestSourceFile testFile) throws Exception {
FileContent codeReader = FileContent.create(file); FileContent codeReader = FileContent.create(file);
ScannerInfo scannerInfo = new ScannerInfo();
ParserLanguage language = getLanguage(testFile); ParserLanguage language = getLanguage(testFile);
boolean useGNUExtensions = getGNUExtension(testFile); ScannerKind scannerKind = getScannerKind(testFile);
ScannerInfo scannerInfo = AST2TestBase.createScannerInfo(scannerKind);
IScanner scanner = AST2TestBase.createScanner(codeReader, language, ParserMode.COMPLETE_PARSE, scannerInfo); IScanner scanner = AST2TestBase.createScanner(codeReader, language, ParserMode.COMPLETE_PARSE, scannerInfo);
ISourceCodeParser parser = null; ISourceCodeParser parser = null;
if (language == ParserLanguage.CPP) { if (language == ParserLanguage.CPP) {
ICPPParserExtensionConfiguration config = null; ICPPParserExtensionConfiguration config = null;
if (useGNUExtensions) { if (scannerKind.isUseGNUExtensions()) {
config = new GPPParserExtensionConfiguration(); config = new GPPParserExtensionConfiguration();
} else { } else {
config = new ANSICPPParserExtensionConfiguration(); config = new ANSICPPParserExtensionConfiguration();
@ -112,7 +113,7 @@ public abstract class ASTWriterTester extends RewriteBaseTest {
} else { } else {
ICParserExtensionConfiguration config = null; ICParserExtensionConfiguration config = null;
if (useGNUExtensions) { if (scannerKind.isUseGNUExtensions()) {
config = new GCCParserExtensionConfiguration(); config = new GCCParserExtensionConfiguration();
} else { } else {
config = new ANSICParserExtensionConfiguration(); config = new ANSICParserExtensionConfiguration();
@ -123,10 +124,10 @@ public abstract class ASTWriterTester extends RewriteBaseTest {
return parser; return parser;
} }
private boolean getGNUExtension(TestSourceFile file) { private ScannerKind getScannerKind(TestSourceFile file) {
if (file instanceof ASTWriterTestSourceFile) if (file instanceof ASTWriterTestSourceFile)
return ((ASTWriterTestSourceFile) file).isUseGNUExtensions(); return ((ASTWriterTestSourceFile) file).getScannerKind();
return false; return ScannerKind.STD;
} }
private ParserLanguage getLanguage(TestSourceFile file) { private ParserLanguage getLanguage(TestSourceFile file) {

View file

@ -22,6 +22,7 @@ import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import org.eclipse.cdt.core.parser.ParserLanguage; import org.eclipse.cdt.core.parser.ParserLanguage;
import org.eclipse.cdt.core.parser.tests.ast2.AST2TestBase.ScannerKind;
import org.eclipse.cdt.core.parser.tests.rewrite.RewriteBaseTest; import org.eclipse.cdt.core.parser.tests.rewrite.RewriteBaseTest;
import org.eclipse.cdt.core.testplugin.CTestPlugin; import org.eclipse.cdt.core.testplugin.CTestPlugin;
import org.eclipse.core.runtime.FileLocator; import org.eclipse.core.runtime.FileLocator;
@ -34,7 +35,7 @@ import junit.framework.TestSuite;
public class SourceRewriteTest extends TestSuite { public class SourceRewriteTest extends TestSuite {
private static final String testRegexp = "//!(.*)\\s*(\\w*)*$"; //$NON-NLS-1$ private static final String testRegexp = "//!(.*)\\s*(\\w*)*$"; //$NON-NLS-1$
private static final String codeTypeRegexp = "//%(C|CPP)( GNU)?$"; //$NON-NLS-1$ private static final String codeTypeRegexp = "//%(C|CPP|CPP20)( GNU)?$"; //$NON-NLS-1$
private static final String resultRegexp = "//=.*$"; //$NON-NLS-1$ private static final String resultRegexp = "//=.*$"; //$NON-NLS-1$
enum MatcherState { enum MatcherState {
@ -149,7 +150,7 @@ public class SourceRewriteTest extends TestSuite {
matcherState = MatcherState.inSource; matcherState = MatcherState.inSource;
if (file != null) { if (file != null) {
file.setParserLanguage(getParserLanguage(line)); file.setParserLanguage(getParserLanguage(line));
file.setUseGNUExtensions(useGNUExtensions(line)); file.setScannerKind(getScannerKind(line));
} }
continue; continue;
} }
@ -172,17 +173,20 @@ public class SourceRewriteTest extends TestSuite {
return testCases; return testCases;
} }
protected static boolean useGNUExtensions(String line) { protected static ScannerKind getScannerKind(String line) {
Matcher matcherBeginOfTest = createMatcherFromString(codeTypeRegexp, line); Matcher matcherBeginOfTest = createMatcherFromString(codeTypeRegexp, line);
if (matcherBeginOfTest.find()) { if (matcherBeginOfTest.find()) {
String codeType = matcherBeginOfTest.group(2); String codeType = matcherBeginOfTest.group(1);
if (codeType == null) { String gnuExtensionsType = matcherBeginOfTest.group(2);
return false; if (gnuExtensionsType == null) {
if (codeType.equalsIgnoreCase("CPP20")) { //$NON-NLS-1$
return ScannerKind.STDCPP20;
}
} else { } else {
return true; return ScannerKind.GNU;
} }
} }
return false; return ScannerKind.STD;
} }
protected static ParserLanguage getParserLanguage(String line) { protected static ParserLanguage getParserLanguage(String line) {
@ -191,6 +195,8 @@ public class SourceRewriteTest extends TestSuite {
String codeType = matcherBeginOfTest.group(1); String codeType = matcherBeginOfTest.group(1);
if (codeType.equalsIgnoreCase("CPP")) { //$NON-NLS-1$ if (codeType.equalsIgnoreCase("CPP")) { //$NON-NLS-1$
return ParserLanguage.CPP; return ParserLanguage.CPP;
} else if (codeType.equalsIgnoreCase("CPP20")) { //$NON-NLS-1$
return ParserLanguage.CPP;
} else { } else {
return ParserLanguage.C; return ParserLanguage.C;
} }

View file

@ -84,6 +84,10 @@ bool b = 1 != x;
int i = a.x; int i = a.x;
int i = a->x; int i = a->x;
//!CPP20BinaryExpression
//%CPP20
auto r = x <=> y;
//!BinaryExpression with MacroExpansions //!BinaryExpression with MacroExpansions
//%CPP //%CPP
#define ZWO 2 #define ZWO 2