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:
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;
|
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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Add table
Reference in a new issue