/*******************************************************************************
* Copyright (c) 2008 Institute for Software, HSR Hochschule fuer Technik
* Rapperswil, University of applied sciences and others
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Institute for Software - initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.core.parser.tests.rewrite;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Map;
import java.util.TreeMap;
import java.util.Vector;
import org.eclipse.cdt.core.tests.BaseTestFramework;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.ILogListener;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Path;
import org.eclipse.jface.text.TextSelection;
/**
* @author Guido Zgraggen IFS
*
*/
public abstract class RewriteBaseTest extends BaseTestFramework implements ILogListener{
protected static final NullProgressMonitor NULL_PROGRESS_MONITOR = new NullProgressMonitor();
protected TreeMap<String, TestSourceFile> fileMap = new TreeMap<String, TestSourceFile>();
protected String fileWithSelection;
protected TextSelection selection;
protected RewriteBaseTest(String name) {
super(name);
}
public RewriteBaseTest(String name, Vector<TestSourceFile> files) {
super(name);
for (TestSourceFile file : files) {
fileMap.put(file.getName(), file);
}
}
@Override
protected abstract void runTest() throws Throwable;
@Override
protected void setUp() throws Exception {
super.setUp();
for (TestSourceFile testFile : fileMap.values()) {
if(testFile.getSource().length() > 0) {
importFile(testFile.getName(), testFile.getSource());
}
}
}
protected void assertEquals(TestSourceFile file, IFile file2) throws Exception {
StringBuffer code = getCodeFromIFile(file2);
assertEquals(file.getExpectedSource(), TestHelper.unifyNewLines(code.toString()));
}
protected void compareFiles(Map<String,TestSourceFile> testResourceFiles) throws Exception {
for (String fileName : testResourceFiles.keySet()) {
TestSourceFile file = testResourceFiles.get(fileName);
IFile iFile = project.getFile(new Path(fileName));
StringBuffer code = getCodeFromIFile(iFile);
assertEquals(TestHelper.unifyNewLines(file.getExpectedSource()), TestHelper.unifyNewLines(code.toString()));
}
}
protected StringBuffer getCodeFromIFile(IFile file) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(file.getContents()));
StringBuffer code = new StringBuffer();
String line;
while((line = br.readLine()) != null) {
code.append(line);
code.append('\n');
}
br.close();
return code;
}
@Override
protected void tearDown() throws Exception {
System.gc();
fileManager.closeAllFiles();
super.tearDown();
}
public void logging(IStatus status, String plugin) {
Throwable ex = status.getException();
StringBuffer stackTrace = new StringBuffer();
if(ex != null) {
stackTrace.append('\n');
for(StackTraceElement ste : ex.getStackTrace()) {
stackTrace.append(ste.toString());
}
}
fail("Log-Message: " + status.getMessage() + stackTrace.toString()); //$NON-NLS-1$
}
public void setFileWithSelection(String fileWithSelection) {
this.fileWithSelection = fileWithSelection;
}
public void setSelection(TextSelection selection) {
this.selection = selection;
}
}