blob: aeb535b2f5f9e63b603904577f49b42b149c2544 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009 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.refactoring.interchangeloops;
import java.io.IOException;
import java.net.URISyntaxException;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.jface.text.ITextSelection;
import org.eclipse.jface.text.TextSelection;
import org.eclipse.ltk.core.refactoring.Change;
import org.eclipse.ltk.core.refactoring.RefactoringStatus;
import org.eclipse.photran.internal.core.refactoring.InterchangeLoopsRefactoring;
import org.eclipse.photran.internal.tests.RefactoringTestCase;
/**
*
* @author Tim
*/
public class InterchangeLoopsTestCase extends RefactoringTestCase
{
private String myFilename = null;
private NullProgressMonitor pm = new NullProgressMonitor();
private ITextSelection selection = null;
private static final String DIR = "refactoring-test-code/interchange-loops";
public InterchangeLoopsTestCase(){;}
public InterchangeLoopsTestCase(String filename, Object ignore)
{
this.myFilename = filename;
this.setName("test");
}
protected void doRefactoring() throws Exception
{
String description = "Attempt to interchange loops in " + myFilename;
InterchangeLoopsRefactoring refactoring = createRefactoring(myFilename);
RefactoringStatus status = refactoring.checkInitialConditions(pm);
assertTrue(description + " failed initial precondition check: " + status.toString(), !status.hasError());
status = refactoring.checkFinalConditions(pm);
assertTrue(description + " failed final precondition check: " + status.toString(), !status.hasError());
Change change = refactoring.createChange(pm);
assertNotNull(description + " returned null Change object", change);
assertTrue(description + " returned invalid Change object", change.isValid(pm).isOK());
change.perform(pm);
project.refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor());
}
protected InterchangeLoopsRefactoring createRefactoring(String filename) throws Exception
{
final IFile thisFile = importFile(DIR, filename);
InterchangeLoopsRefactoring r = new InterchangeLoopsRefactoring();
r.initialize(thisFile, selection);
return r;
}
@Override protected String readTestFile(String srcDir, String filename) throws IOException, URISyntaxException
{
String result = super.readTestFile(srcDir, filename);
int startOffset = result.lastIndexOf('\n', result.indexOf("!<<<<<START")) + 1;
int endOffset = result.indexOf("!<<<<<END");
if (startOffset <= 0 || endOffset < 0 || endOffset <= startOffset)
throw new Error("Malformed test case");
selection = new TextSelection(startOffset, endOffset-startOffset);
return result;
}
protected String readTestFile(String filename) throws IOException, URISyntaxException
{
return super.readTestFile(DIR, filename);
}
public void test() throws Exception
{
if (myFilename == null) return; // when JUnit invokes this outside a test suite
doRefactoring();
assertEquals(
readTestFile(myFilename + ".result").replaceAll("\\r", ""), // expected result
readWorkspaceFile(myFilename).replaceAll("\\r", "")); // actual refactored file
}
public static class InterchangeLoopsFailureTest extends InterchangeLoopsTestCase
{
private static String failFilename;
public InterchangeLoopsFailureTest(){;}
public InterchangeLoopsFailureTest(String filename, Object ignore)
{
super(filename, ignore);
failFilename = filename;
}
@Override
protected void doRefactoring() throws Exception
{
//String description = "Attempt to interchange loops in " + failFilename;
InterchangeLoopsRefactoring refactoring = createRefactoring(failFilename);
RefactoringStatus status = refactoring.checkInitialConditions(new NullProgressMonitor());
assertTrue(status.hasFatalError());
}
@Override
public void test() throws Exception
{
doRefactoring();
}
}
}