blob: df01d3bfe030cd36ff860e4dfd74f2d7394a5dfd [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.refactoring.rename;
import junit.framework.Test;
import org.eclipse.photran.internal.core.util.LineCol;
public class Rename1 extends RenameTestSuite
{
///////////////////////////////////////////////////////////////////////////
//
// RECORD POSITIONS OF ALL IDENTIFIERS IN RENAME1.F90, AND
// GROUP THEM ACCORDING TO WHICH ONES SHOULD BE RENAMED TOGETHER
//
///////////////////////////////////////////////////////////////////////////
private String filename = "rename1.f90";
private Ident intInMain = var(filename, "int", new LineCol[] { lc(11,10), lc(17,16), lc(23,20) });
private Ident subInMain = var(filename, "sub", new LineCol[] { lc(24,16), lc(25,20) });
private Ident[] mainVars = new Ident[] {
var(filename, "two", new LineCol[] { lc(2,27), lc(7,40), lc(9,23) }),
var(filename, "three", new LineCol[] { lc(3,27), lc(4,23), lc(5,13), lc(6,15), lc(7,33), lc(7,66), lc(9,28) }),
var(filename, "a", new LineCol[] { lc(4,16), lc(9,14) }),
var(filename, "b", new LineCol[] { lc(4,19), lc(9,17) }),
var(filename, "not_shadowed", new LineCol[] { lc(5,23), lc(9,35), lc(21,16) }),
var(filename, "c", new LineCol[] { lc(6,25), lc(9,20) }),
var(filename, "shadow_this_1", new LineCol[] { lc(7,16), lc(9,49) }),
var(filename, "shadow_this_2", new LineCol[] { lc(7,46), lc(9,64) }),
var(filename, "implicit", new LineCol[] { lc(8,5), lc(9,79), lc(21,64) }),
intInMain
};
private Ident shadowThis1IntShadow = var(filename, "shadow_this_1", new LineCol[] { lc(18,18), lc(21,30) });
private Ident shadowThis2IntShadow = var(filename, "shadow_this_2", new LineCol[] { lc(19,18), lc(21,45) });
private Ident main = var(filename, "Main", new LineCol[] { lc(1,9), lc(26,13) });
private Ident ext = var(filename, "ext", new LineCol[] { lc(12,10), lc(22,12), lc(27,12), lc(33,16) });
private Ident twoInExt = var(filename, "two", new LineCol[] { lc(28,14), lc(31,18) });
private Ident intContained = var(filename, "int", new LineCol[] { lc(30,16), lc(32,20) });
private Ident[] otherVars = new Ident[] { shadowThis1IntShadow, shadowThis2IntShadow, main, ext, twoInExt, intContained };
private Ident intrinsic = var(filename, "selected_real_kind", new LineCol[] { lc(3,35) });
///////////////////////////////////////////////////////////////////////////
//
// TEST CASES
//
///////////////////////////////////////////////////////////////////////////
public static Test suite() throws Exception
{
return new Rename1();
}
public Rename1() throws Exception
{
addSuccessTests();
addFailNotAnIdentifier();
addFailIntrinsicProcedure();
addFailConflictInSameScope();
addFailConflictInReference();
}
public void addSuccessTests()
{
startTests("Renaming local variables in main program");
for (Ident v : mainVars)
{
addSuccessTests(v, v.getName() + v.getName());
addSuccessTests(v, "z");
addSuccessTests(v, "if");
}
endTests();
startTests("Renaming variables outside main program");
for (Ident v : otherVars)
{
addSuccessTests(v, v.getName() + v.getName());
addSuccessTests(v, "z");
addSuccessTests(v, "if");
}
endTests();
}
public void addFailNotAnIdentifier() throws Exception
{
startTests("Check: Not an identifier");
for (Ident v : mainVars)
{
addPreconditionTests(v, "");
addPreconditionTests(v, "\u0080"); // Euro symbol
addPreconditionTests(v, "3");
addPreconditionTests(v, "hello world");
addPreconditionTests(v, "\"hello world\"");
}
endTests();
}
public void addFailIntrinsicProcedure() throws Exception
{
startTests("Check: Cannot rename intrinsic procedures");
addPreconditionTests(intrinsic, "new_name");
endTests();
}
public void addFailConflictInSameScope() throws Exception
{
startTests("Check: Local variable name conflicts in local scope (main program)");
for (int i = 0; i < mainVars.length; i++)
addPreconditionTests(mainVars[i], mainVars[Math.max(i-1, 0)].getName());
endTests();
startTests("Check: Local variable name conflicts with capitalization changed");
for (int i = 0; i < mainVars.length; i++)
addPreconditionTests(mainVars[i], mainVars[Math.max(i-1, 0)].getName().toUpperCase());
endTests();
}
public void addFailConflictInReference() throws Exception
{
startTests("Check: Conflicts outside local scope");
addPreconditionTests(main, "int"); // FIXME: Bug -- should be addPreconditionTests
addPreconditionTests(main, "ext");
addPreconditionTests(intInMain, "Main");
addPreconditionTests(intInMain, "ext");
addPreconditionTests(subInMain, "int");
addPreconditionTests(subInMain, "ext");
addPreconditionTests(ext, "int"); // conflict due to reference in Main
addPreconditionTests(ext, "sub"); // will change interpretation of ext call in Main
addPreconditionTests(ext, "Main");
addSuccessTests(intContained, "sub");
addSuccessTests(intContained, "Main");
endTests();
}
}