blob: 502c5f2407dad9284b8a22fe0e07de697341669d [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008 University of Illinois at Urbana-Champaign 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:
* UIUC - Initial API and implementation
*******************************************************************************/
package org.eclipse.photran.internal.tests;
import java.io.File;
import java.io.IOException;
import junit.framework.ComparisonFailure;
import junit.framework.TestCase;
import org.eclipse.photran.internal.core.lexer.LexerFactory;
import org.eclipse.photran.internal.core.lexer.SourceForm;
import org.eclipse.photran.internal.core.parser.ASTExecutableProgramNode;
import org.eclipse.photran.internal.core.parser.Parser;
import org.eclipse.photran.internal.core.util.SemanticError;
/**
* A test case for parsing a single file. Created by <code>ParserTestSuite</code>.
*
* @author joverbey
*/
public abstract class AbstractParserTestCase extends TestCase
{
protected File file = null;
protected boolean isFixedForm = false;
protected String fileDescription = null;
/**
* Constructor
*
* @param filename the file to parse
* @param isFixedForm true iff the file is in fixed format
*/
public AbstractParserTestCase(File file, boolean isFixedForm, String testCaseDescription)
{
super("test"); // name of method to run
this.file = file;
this.isFixedForm = isFixedForm;
this.fileDescription = testCaseDescription;
}
/**
* Method called by JUnit: Parses the given file.
*
* @throws Exception
*/
public final void test() throws Exception
{
if (file == null) return; // for when JUnit invokes the no-arguments constructor and reflectively invokes this method
try
{
SourceForm sourceForm = createSourceForm();
ASTExecutableProgramNode ast = new Parser().parse(LexerFactory.createLexer(file, sourceForm, true));
assertTrue(ast != null);
handleAST(ast);
}
catch (ComparisonFailure f)
{
throw f;
}
catch (Throwable t)
{
System.err.println(file.getName());
throw new Exception(fileDescription, t);
}
}
protected SourceForm createSourceForm()
{
SourceForm sourceForm = (isFixedForm ? SourceForm.FIXED_FORM : SourceForm.UNPREPROCESSED_FREE_FORM); /*SourceForm.preprocessedFreeForm(new IncludeLoaderCallback(null)
{
@Override public InputStream getIncludedFileAsStream(String fileToInclude) throws FileNotFoundException
{
throw new FileNotFoundException("INCLUDE lines not supported in JUnit tests");
}
}));*/
return sourceForm;
}
/**
* Subclasses can override this method to do something interesting with the AST
*
* @param ast The abstract syntax tree for the Fortran file that was parsed
* @throws IOException
*/
protected abstract void handleAST(ASTExecutableProgramNode ast) throws IOException, SemanticError;
}