/*******************************************************************************
 * 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.refactoring.tests.rename;

import junit.framework.Test;

import org.eclipse.photran.internal.core.util.LineCol;

public class Rename6 extends RenameTestSuite
{
    private String filename = "rename6.f90";
    
    private Ident[] vars = new Ident[] {
        var(filename, "outer", new LineCol[] { lc(1,21), lc(3,8), lc(9,6) }),
        var(filename, "i", new LineCol[] { lc(6,23), lc(7,15), lc(15,22), lc(22,30), lc(24,14), lc(26,12), lc(28,23), lc(28,29) }),
        var(filename, "hi", new LineCol[] { lc(7,27), lc(18,16), lc(18,30), lc(22,6) }),
        var(filename, "bye", new LineCol[] { lc(7,38), lc(18,20), lc(18,40), lc(22,9) }),
        var(filename, "ty", new LineCol[] { lc(15,2), lc(15,2), lc(15,9), lc(22,13) }),
        var(filename, "array", new LineCol[] { lc(10,12), lc(24,6), lc(26,6), lc(28,7) }),
        var(filename, "nl1", new LineCol[] { lc(18,11), lc(19,14) }),
        var(filename, "nl2", new LineCol[] { lc(18,25) }),
        var(filename, "nl3", new LineCol[] { lc(18,35) }),
        var(filename, "j", new LineCol[] { lc(5,12), lc(28,13), lc(28,17) }),
    };
    
    public static Test suite() throws Exception
    {
        return new Rename6();
    }
    
    public Rename6() throws Exception
    {
        startTests("Renaming local variables: nested derived type and namelists");
        for (Ident v : vars)
            addSuccessTests(v, "zzzzz");
        endTests();
    }
}
