mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-07-25 01:45:33 +02:00
Add rewriter test for c++20 three-way comparison expression
This commit is contained in:
parent
5eb89637b2
commit
a8b3401a47
4 changed files with 32 additions and 20 deletions
|
@ -15,6 +15,7 @@
|
|||
package org.eclipse.cdt.core.parser.tests.rewrite.astwriter;
|
||||
|
||||
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;
|
||||
|
||||
/**
|
||||
|
@ -22,7 +23,7 @@ import org.eclipse.cdt.core.parser.tests.rewrite.TestSourceFile;
|
|||
*/
|
||||
public class ASTWriterTestSourceFile extends TestSourceFile {
|
||||
private ParserLanguage parserLanguage = ParserLanguage.CPP;
|
||||
private boolean useGNUExtensions = false;
|
||||
private ScannerKind scannerKind = ScannerKind.STD;
|
||||
|
||||
public ASTWriterTestSourceFile(String name) {
|
||||
super(name);
|
||||
|
@ -36,11 +37,11 @@ public class ASTWriterTestSourceFile extends TestSourceFile {
|
|||
return parserLanguage;
|
||||
}
|
||||
|
||||
public boolean isUseGNUExtensions() {
|
||||
return useGNUExtensions;
|
||||
public ScannerKind getScannerKind() {
|
||||
return scannerKind;
|
||||
}
|
||||
|
||||
public void setUseGNUExtensions(boolean useGNUExtensions) {
|
||||
this.useGNUExtensions = useGNUExtensions;
|
||||
public void setScannerKind(ScannerKind scannerKind) {
|
||||
this.scannerKind = scannerKind;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -32,6 +32,7 @@ import org.eclipse.cdt.core.parser.ParserLanguage;
|
|||
import org.eclipse.cdt.core.parser.ParserMode;
|
||||
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.ScannerKind;
|
||||
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.TestSourceFile;
|
||||
|
@ -94,16 +95,16 @@ public abstract class ASTWriterTester extends RewriteBaseTest {
|
|||
protected ISourceCodeParser getParser(TestSourceFile testFile) throws Exception {
|
||||
FileContent codeReader = FileContent.create(file);
|
||||
|
||||
ScannerInfo scannerInfo = new ScannerInfo();
|
||||
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);
|
||||
|
||||
ISourceCodeParser parser = null;
|
||||
if (language == ParserLanguage.CPP) {
|
||||
ICPPParserExtensionConfiguration config = null;
|
||||
if (useGNUExtensions) {
|
||||
if (scannerKind.isUseGNUExtensions()) {
|
||||
config = new GPPParserExtensionConfiguration();
|
||||
} else {
|
||||
config = new ANSICPPParserExtensionConfiguration();
|
||||
|
@ -112,7 +113,7 @@ public abstract class ASTWriterTester extends RewriteBaseTest {
|
|||
} else {
|
||||
ICParserExtensionConfiguration config = null;
|
||||
|
||||
if (useGNUExtensions) {
|
||||
if (scannerKind.isUseGNUExtensions()) {
|
||||
config = new GCCParserExtensionConfiguration();
|
||||
} else {
|
||||
config = new ANSICParserExtensionConfiguration();
|
||||
|
@ -123,10 +124,10 @@ public abstract class ASTWriterTester extends RewriteBaseTest {
|
|||
return parser;
|
||||
}
|
||||
|
||||
private boolean getGNUExtension(TestSourceFile file) {
|
||||
private ScannerKind getScannerKind(TestSourceFile file) {
|
||||
if (file instanceof ASTWriterTestSourceFile)
|
||||
return ((ASTWriterTestSourceFile) file).isUseGNUExtensions();
|
||||
return false;
|
||||
return ((ASTWriterTestSourceFile) file).getScannerKind();
|
||||
return ScannerKind.STD;
|
||||
}
|
||||
|
||||
private ParserLanguage getLanguage(TestSourceFile file) {
|
||||
|
|
|
@ -22,6 +22,7 @@ import java.util.regex.Matcher;
|
|||
import java.util.regex.Pattern;
|
||||
|
||||
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.testplugin.CTestPlugin;
|
||||
import org.eclipse.core.runtime.FileLocator;
|
||||
|
@ -34,7 +35,7 @@ import junit.framework.TestSuite;
|
|||
|
||||
public class SourceRewriteTest extends TestSuite {
|
||||
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$
|
||||
|
||||
enum MatcherState {
|
||||
|
@ -149,7 +150,7 @@ public class SourceRewriteTest extends TestSuite {
|
|||
matcherState = MatcherState.inSource;
|
||||
if (file != null) {
|
||||
file.setParserLanguage(getParserLanguage(line));
|
||||
file.setUseGNUExtensions(useGNUExtensions(line));
|
||||
file.setScannerKind(getScannerKind(line));
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
@ -172,17 +173,20 @@ public class SourceRewriteTest extends TestSuite {
|
|||
return testCases;
|
||||
}
|
||||
|
||||
protected static boolean useGNUExtensions(String line) {
|
||||
protected static ScannerKind getScannerKind(String line) {
|
||||
Matcher matcherBeginOfTest = createMatcherFromString(codeTypeRegexp, line);
|
||||
if (matcherBeginOfTest.find()) {
|
||||
String codeType = matcherBeginOfTest.group(2);
|
||||
if (codeType == null) {
|
||||
return false;
|
||||
String codeType = matcherBeginOfTest.group(1);
|
||||
String gnuExtensionsType = matcherBeginOfTest.group(2);
|
||||
if (gnuExtensionsType == null) {
|
||||
if (codeType.equalsIgnoreCase("CPP20")) { //$NON-NLS-1$
|
||||
return ScannerKind.STDCPP20;
|
||||
}
|
||||
} else {
|
||||
return true;
|
||||
return ScannerKind.GNU;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
return ScannerKind.STD;
|
||||
}
|
||||
|
||||
protected static ParserLanguage getParserLanguage(String line) {
|
||||
|
@ -191,6 +195,8 @@ public class SourceRewriteTest extends TestSuite {
|
|||
String codeType = matcherBeginOfTest.group(1);
|
||||
if (codeType.equalsIgnoreCase("CPP")) { //$NON-NLS-1$
|
||||
return ParserLanguage.CPP;
|
||||
} else if (codeType.equalsIgnoreCase("CPP20")) { //$NON-NLS-1$
|
||||
return ParserLanguage.CPP;
|
||||
} else {
|
||||
return ParserLanguage.C;
|
||||
}
|
||||
|
|
|
@ -84,6 +84,10 @@ bool b = 1 != x;
|
|||
int i = a.x;
|
||||
int i = a->x;
|
||||
|
||||
//!CPP20BinaryExpression
|
||||
//%CPP20
|
||||
auto r = x <=> y;
|
||||
|
||||
//!BinaryExpression with MacroExpansions
|
||||
//%CPP
|
||||
#define ZWO 2
|
||||
|
|
Loading…
Add table
Reference in a new issue