dynamicrefactoring.domain.TestImport.java Source code

Java tutorial

Introduction

Here is the source code for dynamicrefactoring.domain.TestImport.java

Source

/*<Dynamic Refactoring Plugin For Eclipse 2.0 - Plugin that allows to perform refactorings 
on Java code within Eclipse, as well as to dynamically create and manage new refactorings>
    
Copyright (C) 2009  Laura Fuente De La Fuente
    
This file is part of Foobar
    
Foobar is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
    
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.
    
You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.*/

package dynamicrefactoring.domain;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;

import org.apache.commons.io.FilenameUtils;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import dynamicrefactoring.RefactoringConstants;
import dynamicrefactoring.RefactoringPlugin;
import dynamicrefactoring.domain.xml.ExportImportUtilities;
import dynamicrefactoring.domain.xml.RefactoringCatalogStub;
import dynamicrefactoring.domain.xml.XMLRefactoringsCatalog;
import dynamicrefactoring.domain.xml.reader.XMLRefactoringReaderException;
import dynamicrefactoring.util.io.FileManager;

/**
 * Comprueba que funciona correctamente el proceso de importacin de
 * refactorizaciones.
 * 
 * @author <A HREF="mailto:lfd0002@alu.ubu.es">Laura Fuente de la Fuente</A>
 * 
 */
public class TestImport {

    private static final String TEMP_DIR = FilenameUtils.separatorsToSystem(".\\temp");

    /**
     * Prepara los directorios para las pruebas
     * previas a los tests.
     * @throws IOException excepcion de I/o
     * @throws XMLRefactoringReaderException excepcion de lectura de xml
     */
    @Before
    public void setUp() throws IOException, XMLRefactoringReaderException {
        FileManager.createDir(TEMP_DIR);
        FileManager.copyBundleDirToFileSystem("/DynamicRefactorings/Rename Class/",
                RefactoringPlugin.getCommonPluginFilesDir());
        // Primero exportamos la refactorizacin Rename Class a un directorio
        // temporal que luego eliminaremos
        ExportImportUtilities.exportRefactoring(TEMP_DIR, getRenameClassXmlFile(), false);

        // Depus de exportarla vamos a eliminar la carpeta de Rename Class
        // proveniente de
        // la carpeta de refactorizaciones dinmicas
        FileManager.emptyDirectories(getRenameClassDir());
        FileManager.deleteDirectories(getRenameClassDir(), true);
    }

    /**
     * Elimina los directorios generados para restaurar
     * el estado de los directorios al que se encontraba antes de ejecutar 
     * los tests.
     */
    @After
    public void tearDown() {
        // Borramos el directorio temporal al final del test
        FileManager.deleteDirectories(
                RefactoringPlugin.getDynamicRefactoringsDir() + File.separator + "Rename Class", true);
        FileManager.emptyDirectories(TEMP_DIR);
        FileManager.deleteDirectories(TEMP_DIR, true);
    }

    /**
     * Comprueba que el proceso de importacin de la refactorizacin dinmica
     * Rename Class a partir de un directorio temporal "./temp" se ha realizado
     * correctamente.
     * 
     * @throws XMLRefactoringReaderException
     *             XMLRefactoringReaderException.
     * @throws IOException
     *             IOException.
     */
    @Test
    public void testImportRefactoring() throws XMLRefactoringReaderException, IOException {

        // Eliminamos alguno de los ficheros .class requeridos por dicha
        // refactorizacin para
        // comprobar que tras la importacin esos ficheros se encuentran donde
        // deben
        final String renameClassFile = getMoonRefactoryDir() + "concreteaction" + File.separatorChar
                + "RenameClass.class";
        final String notExistsClassWithNameClassFile = getMoonRefactoryDir() + "concretepredicate"
                + File.separatorChar + "NotExistsClassWithName.class";

        FileManager.deleteFile(renameClassFile);
        FileManager.deleteFile(notExistsClassWithNameClassFile);

        RefactoringCatalogStub catalog = new RefactoringCatalogStub();
        // Importamos la refactorizacin
        ExportImportUtilities.importRefactoring(
                FilenameUtils.separatorsToSystem(".\\temp\\Rename Class\\Rename Class.xml"), false, catalog);

        assertTrue(catalog.hasRefactoring("Rename Class"));

    }

    /**
     * Comprueba que el proceso de importacin de la refactorizacin dinmica
     * Rename Class a partir de un directorio temporal "./temp" devuelve la
     * cadena NotExistsClassWithName en el caso de borrar este mecanismo de la
     * carpeta donde esta exportada la refactorizacin y del repositorio.
     * 
     * @throws XMLRefactoringReaderException
     *             XMLRefactoringReaderException.
     * @throws IOException
     *             IOException.
     */
    @Test
    public void testImportErroneousRefactoring() throws XMLRefactoringReaderException, IOException {

        // Eliminamos alguno de los ficheros .class requeridos por dicha
        // refactorizacin tanto
        // del repositorio como de la carpeta exportada para ver que la
        // improtacin devuelve
        //el nombre de este fichero indicando que no existe.
        final String notExistClassWithNameClassFile = FilenameUtils
                .separatorsToSystem(getMoonRefactoryDir() + "concretepredicate\\NotExistsClassWithName.class");
        final String tempRenameNotExistClassWithNameClassFile = FilenameUtils
                .separatorsToSystem(TEMP_DIR + "\\Rename Class\\NotExistsClassWithName.class");
        final String tempNotExistClassWithNameClassFile = TEMP_DIR + File.separatorChar
                + "NotExistsClassWithName.class";

        FileManager.copyFile(new File(notExistClassWithNameClassFile),
                new File(tempNotExistClassWithNameClassFile));
        FileManager.deleteFile(notExistClassWithNameClassFile);
        FileManager.deleteFile(tempRenameNotExistClassWithNameClassFile);

        // comprobamos que el nombre devuelto es el del fichero que no
        // encuentra.
        try {
            // Importamos la refactorizacin
            ExportImportUtilities.importRefactoring(
                    FilenameUtils.separatorsToSystem(TEMP_DIR + "\\Rename Class\\Rename Class.xml"), false,
                    XMLRefactoringsCatalog.getInstance());
            fail("No salto la excepcion esperada.");
        } catch (FileNotFoundException e) {
            // Comprobamos que no existe el fichero del mecanismo que hemos
            // borrado de la carpeta
            // de la refactorizacin y del repositorio.
            assertEquals(false, new File(notExistClassWithNameClassFile).exists());
        } finally {
            // Reponemos el mecanismo
            FileManager.copyFile(new File(tempNotExistClassWithNameClassFile),
                    new File(notExistClassWithNameClassFile));
        }

    }

    private String getMoonRefactoryDir() {
        return FilenameUtils
                .separatorsToSystem(RefactoringConstants.REFACTORING_CLASSES_DIR + "repository\\moon\\");
    }

    private String getRenameClassXmlFile() {
        return FilenameUtils.separatorsToSystem(getRenameClassDir() + "\\Rename Class.xml");
    }

    private String getRenameClassDir() {
        return FilenameUtils.separatorsToSystem(RefactoringPlugin.getDynamicRefactoringsDir() + "\\Rename Class");
    }

}