/******************************************************************************* | |
* 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.refactoring.tests.commonblockvarnames; | |
import java.io.File; | |
import java.io.FileInputStream; | |
import java.io.IOException; | |
import java.net.URISyntaxException; | |
import java.nio.MappedByteBuffer; | |
import java.nio.channels.FileChannel; | |
import java.nio.charset.Charset; | |
import org.eclipse.core.resources.IFile; | |
import org.eclipse.core.runtime.NullProgressMonitor; | |
import org.eclipse.jface.text.Document; | |
import org.eclipse.jface.text.TextSelection; | |
import org.eclipse.ltk.core.refactoring.Change; | |
import org.eclipse.ltk.core.refactoring.RefactoringStatus; | |
import org.eclipse.photran.core.vpg.util.LineCol; | |
import org.eclipse.photran.internal.core.refactoring.CommonVarNamesRefactoring; | |
import org.eclipse.photran.refactoring.tests.RefactoringTestCase; | |
/** | |
* Test case for the Make Common Variable Names Consistent refactoring | |
* | |
* @author Kurt Hendle | |
* @author Jeff Overbey | |
* | |
* @see CommonVarNamesTestSuite | |
*/ | |
public class CommonVarNamesTestCase extends RefactoringTestCase | |
{ | |
private static final String DIR = "make-common-var-names-consist-test-code"; | |
private static NullProgressMonitor pm = new NullProgressMonitor(); | |
protected String[] filenames; | |
protected LineCol position; | |
protected int length; | |
protected boolean shouldFailPreconditionCheck; | |
protected String[] newNames = null; | |
public CommonVarNamesTestCase() {;} | |
public CommonVarNamesTestCase(String[] filenames, LineCol position, int length, boolean shouldFailPreconditionCheck) | |
{ | |
this(filenames, position, length, shouldFailPreconditionCheck, (String[])null); | |
} | |
public CommonVarNamesTestCase(String[] filenames, LineCol position, int length, boolean shouldFailPreconditionCheck, | |
String... newNames) | |
{ | |
this.filenames = filenames; | |
this.position = position; | |
this.length = length; | |
this.shouldFailPreconditionCheck = shouldFailPreconditionCheck; | |
this.newNames = newNames; | |
this.setName("test"); | |
} | |
/** very similar to the other refactoring tests */ | |
protected void doRefactoring() throws Exception | |
{ | |
String description = "Attempting to make COMMON variables consistent throughout project."; | |
CommonVarNamesRefactoring refactoring = createRefactoring(filenames, position, length); | |
// project.refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor()); | |
// String before = compileAndRunFortranProgram(); | |
RefactoringStatus status = refactoring.checkInitialConditions(pm); | |
assertTrue(description + " failed initial precondition check: " + status.toString(), !status.hasError()); | |
if(newNames != null) | |
{ | |
for(int i=0; i<newNames.length; i++) | |
refactoring.modifyNewName(i, newNames[i]); | |
} | |
status = refactoring.checkFinalConditions(pm); | |
if (shouldFailPreconditionCheck) | |
{ | |
assertTrue(description + " should have failed final precondition check: " + status.toString(), status.hasError()); | |
} | |
else | |
{ | |
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); | |
// String after = compileAndRunFortranProgram(); | |
// System.out.println(after); | |
// assertEquals(before, after); | |
} | |
} | |
private CommonVarNamesRefactoring createRefactoring(final String[] filenames, final LineCol lineCol, final int length) throws Exception | |
{ | |
for (int i = 1; i < filenames.length; i++) | |
importFile(DIR, filenames[i]); | |
final IFile file = importFile(DIR, filenames[0]); | |
Document doc = new Document(readFileToString(DIR+"/"+filenames[0])); | |
TextSelection text = new TextSelection(doc, getLineColOffset(filenames[0], lineCol), length); | |
return new CommonVarNamesRefactoring(file, text); | |
} | |
private String readFileToString(final String path) throws IOException | |
{ | |
FileInputStream stream = new FileInputStream(new File(path)); | |
return readStream(stream); | |
} | |
protected String readTestFile(String filename) throws IOException, URISyntaxException | |
{ | |
return super.readTestFile(DIR, filename); | |
} | |
/** | |
* Borrowed from IntroImplicitTestCase.java | |
*/ | |
public void test() throws Exception | |
{ | |
if (filenames == null) return; // when JUnit invokes this outside a test suite | |
doRefactoring(); | |
if (!shouldFailPreconditionCheck) | |
{ | |
for (String filename : filenames) | |
{ | |
assertEquals(readTestFile(filename + ".result"), // expected result | |
readWorkspaceFile(filename)); // actual refactored file | |
} | |
} | |
} | |
} |