1
/*******************************************************************************
2
* Copyright (c) 2008 Institute for Software, HSR Hochschule fuer Technik
3
* Rapperswil, University of applied sciences and others
4
* All rights reserved. This program and the accompanying materials
5
* are made available under the terms of the Eclipse Public License v1.0
6
* which accompanies this distribution, and is available at
7
* http://www.eclipse.org/legal/epl-v10.html
10
* Institute for Software - initial API and implementation
11
*******************************************************************************/
12
package org.eclipse.cdt.core.parser.tests.rewrite.astwriter;
14
import java.io.BufferedReader;
15
import java.io.FileReader;
16
import java.io.IOException;
17
import java.util.ArrayList;
18
import java.util.Iterator;
19
import java.util.regex.Matcher;
20
import java.util.regex.Pattern;
22
import junit.framework.Test;
23
import junit.framework.TestSuite;
25
import org.eclipse.cdt.core.parser.ParserLanguage;
26
import org.eclipse.cdt.core.parser.tests.rewrite.RewriteBaseTest;
27
import org.eclipse.cdt.core.testplugin.CTestPlugin;
28
import org.eclipse.core.runtime.FileLocator;
29
import org.eclipse.core.runtime.Path;
30
import org.eclipse.jface.text.TextSelection;
31
import org.osgi.framework.Bundle;
33
public class SourceRewriteTester extends TestSuite {
35
private static final String testRegexp = "//!(.*)\\s*(\\w*)*$"; //$NON-NLS-1$
36
private static final String codeTypeRegexp = "//%(C|CPP)( GNU)?$"; //$NON-NLS-1$
37
private static final String resultRegexp = "//=.*$"; //$NON-NLS-1$
39
enum MatcherState{skip, inTest, inSource, inExpectedResult}
41
protected static BufferedReader createReader(String file) throws IOException {
42
Bundle bundle = CTestPlugin.getDefault().getBundle();
43
Path path = new Path(file);
44
String file2 = FileLocator.toFileURL(FileLocator.find(bundle, path, null)).getFile();
45
return new BufferedReader(new FileReader(file2));
48
public static Test suite(String name, String file)throws Exception {
49
BufferedReader in = createReader(file);
51
ArrayList<RewriteBaseTest> testCases = createTests(in);
53
return createSuite(testCases, name);
56
private static TestSuite createSuite(ArrayList<RewriteBaseTest> testCases, String name) {
57
TestSuite suite = new TestSuite(name);
58
Iterator<RewriteBaseTest> it = testCases.iterator();
60
RewriteBaseTest subject =it.next();
61
suite.addTest(subject);
66
protected static boolean lineMatchesBeginOfTest(String line) {
67
return createMatcherFromString(testRegexp, line).find();
70
protected static boolean lineMatchesCodeType(String line) {
71
return createMatcherFromString(codeTypeRegexp, line).find();
74
protected static Matcher createMatcherFromString(String pattern, String line) {
75
return Pattern.compile(pattern).matcher(line);
78
protected static String getNameOfTest(String line) {
79
Matcher matcherBeginOfTest = createMatcherFromString(testRegexp, line);
80
if(matcherBeginOfTest.find())
81
return matcherBeginOfTest.group(1);
86
protected static boolean lineMatchesBeginOfResult(String line) {
87
return createMatcherFromString(resultRegexp, line).find();
90
private static ArrayList<RewriteBaseTest> createTests(BufferedReader inputReader) throws Exception {
92
ASTWriterTestSourceFile file = null;
93
MatcherState matcherState = MatcherState.skip;
94
ArrayList<RewriteBaseTest> testCases = new ArrayList<RewriteBaseTest>();
96
while ((line = inputReader.readLine()) != null){
97
if(lineMatchesBeginOfTest(line)) {
98
matcherState = MatcherState.inTest;
99
file = new ASTWriterTestSourceFile("ASTWritterTest.h"); //$NON-NLS-1$
100
testCases.add(createTestClass(getNameOfTest(line), file));
102
} else if (lineMatchesBeginOfResult(line)) {
103
matcherState = MatcherState.inExpectedResult;
105
}else if (lineMatchesCodeType(line)) {
106
matcherState = MatcherState.inSource;
108
file.setParserLanguage(getParserLanguage(line));
109
file.setUseGNUExtensions(useGNUExtensions(line));
114
switch(matcherState) {
117
file.addLineToSource(line);
120
case inExpectedResult:
122
file.addLineToExpectedSource(line);
132
protected static boolean useGNUExtensions(String line) {
133
Matcher matcherBeginOfTest = createMatcherFromString(codeTypeRegexp, line);
134
if(matcherBeginOfTest.find()) {
135
String codeType = matcherBeginOfTest.group(2);
136
if(codeType == null) {
145
protected static ParserLanguage getParserLanguage(String line) {
146
Matcher matcherBeginOfTest = createMatcherFromString(codeTypeRegexp, line);
147
if(matcherBeginOfTest.find()) {
148
String codeType = matcherBeginOfTest.group(1);
149
if(codeType.equalsIgnoreCase("CPP")) { //$NON-NLS-1$
150
return ParserLanguage.CPP;
152
return ParserLanguage.C;
155
return ParserLanguage.C;
158
private static RewriteBaseTest createTestClass(String testName, ASTWriterTestSourceFile file) throws Exception {
159
ASTWriterTest test = new ASTWriterTest(testName,file);
160
TextSelection sel = file.getSelection();
162
test.setFileWithSelection(file.getName());
163
test.setSelection(sel);