org.eclipse.ajdt.core.tests.builder.LinkedFoldersTestBug270202.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.ajdt.core.tests.builder.LinkedFoldersTestBug270202.java

Source

/*******************************************************************************
 * Copyright (c) 2009 SpringSource 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: SpringSource - initial API and implementation 
 *              Andrew Eisenberg
 ******************************************************************************/
package org.eclipse.ajdt.core.tests.builder;

import java.io.File;

import org.aspectj.ajde.core.IOutputLocationManager;
import org.aspectj.asm.IHierarchy;
import org.aspectj.asm.IProgramElement;
import org.eclipse.ajdt.core.AspectJCore;
import org.eclipse.ajdt.core.AspectJPlugin;
import org.eclipse.ajdt.core.model.AJProjectModelFacade;
import org.eclipse.ajdt.core.model.AJProjectModelFactory;
import org.eclipse.ajdt.core.tests.AJDTCoreTestCase;
import org.eclipse.ajdt.core.tests.testutils.Utils;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IncrementalProjectBuilder;
import org.eclipse.core.runtime.IPath;
import org.eclipse.jdt.core.IJavaElement;

/**
 * Tests that linked folders are properly handled by AJDT and aspectj when 
 * handles are being created.
 * 
 * @author andrew
 *
 */
public class LinkedFoldersTestBug270202 extends AJDTCoreTestCase {

    private IProject project;
    private IFile linkedFile;
    private IFile nonLinkedFile1;
    private IFile nonLinkedFile2;

    protected void setUp() throws Exception {
        super.setUp();

        Utils.setAutobuilding(false);
        project = createPredefinedProject("Bug270202");

        // now set up the linked folder
        // line in .classpath already exists, so
        // just need to create the link
        IFolder rawLocation = project.getFolder("raw_location");
        IPath rawPath = rawLocation.getLocation();
        IFolder src = project.getFolder("src");
        src.createLink(rawPath, 0, null);

        project.build(IncrementalProjectBuilder.FULL_BUILD, null);
        linkedFile = project.getFile("src/p/AnAspect.aj");
        nonLinkedFile1 = project.getFile("src1/q/AClass.java");
        nonLinkedFile2 = project.getFile("src2/r/AnotherClass.java");
    }

    protected void tearDown() throws Exception {
        super.tearDown();
        Utils.setAutobuilding(true);
    }

    public void testGetSourceFolderForLinkedFile() throws Exception {
        assertEquals("Linked source folder not set up properly",
                project.getFolder("src").getLocation().toOSString(),
                project.getFolder("raw_location").getLocation().toOSString());
        IOutputLocationManager locationManager = AspectJPlugin.getDefault().getCompilerFactory()
                .getCompilerForProject(project).getCompilerConfiguration().getOutputLocationManager();
        String sourceFolderStr = locationManager
                .getSourceFolderForFile(new File(linkedFile.getLocation().toOSString()));
        assertEquals("Source folder 'src' not found", "src", sourceFolderStr);
    }

    public void testGetSourceFolderForNonLinkedFile1() throws Exception {
        IOutputLocationManager locationManager = AspectJPlugin.getDefault().getCompilerFactory()
                .getCompilerForProject(project).getCompilerConfiguration().getOutputLocationManager();
        String sourceFolderStr = locationManager
                .getSourceFolderForFile(new File(nonLinkedFile1.getLocation().toOSString()));
        assertEquals("Source folder 'src1' not found", "src1", sourceFolderStr);
    }

    public void testGetSourceFolderForNonLinkedFile2() throws Exception {
        IOutputLocationManager locationManager = AspectJPlugin.getDefault().getCompilerFactory()
                .getCompilerForProject(project).getCompilerConfiguration().getOutputLocationManager();
        String sourceFolderStr = locationManager
                .getSourceFolderForFile(new File(nonLinkedFile2.getLocation().toOSString()));
        assertEquals("Source folder 'src2' not found", "src2", sourceFolderStr);
    }

    public void testHandlesInsideLinkedFolders() throws Exception {
        IJavaElement ije = AspectJCore.create(linkedFile);
        assertTrue("Compilation unit should exist " + ije.getHandleIdentifier(), ije.exists());
        AJProjectModelFacade model = AJProjectModelFactory.getInstance().getModelForProject(project);
        IProgramElement ipe = model.javaElementToProgramElement(ije);
        assertNotSame("IProgramElement should exist", IHierarchy.NO_STRUCTURE, ipe);
        IJavaElement recreated = model.programElementToJavaElement(ipe);
        assertTrue("Compilation unit should exist " + recreated.getHandleIdentifier(), recreated.exists());
    }
}