blob: cca7d298eeec14a3345d5c48c5ddee2ff5e396b8 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2009 IBM Corporation 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jdt.core.tests.model;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspaceRunnable;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jdt.core.*;
import junit.framework.Test;
public class CreatePackageTests extends ModifyingResourceTests {
public CreatePackageTests(String name) {
super(name);
}
public static Test suite() {
return buildModelTestSuite(CreatePackageTests.class);
}
public void setUp() throws Exception {
super.setUp();
createJavaProject("P");
createFolder("/P/p");
startDeltas();
}
public void tearDown() throws Exception {
stopDeltas();
deleteProject("P");
super.tearDown();
}
/**
* Ensures that a package fragment can be created in a package
* fragment root.
* Verifies that the proper change deltas are generated as a side effect
* of running the operation.
*/
public void testCreatePackageFragment1() throws JavaModelException {
IPackageFragmentRoot root= getPackageFragmentRoot("P", "");
IPackageFragment frag= root.createPackageFragment("one.two.three", false, null);
assertCreation(frag);
assertTrue("Fragment return not correct", frag.getElementName().equals("one.two.three"));
assertDeltas(
"Unexpected delta",
"P[*]: {CHILDREN}\n" +
" <project root>[*]: {CHILDREN}\n" +
" one.two.three[+]: {}\n" +
" one.two[+]: {}\n" +
" one[+]: {}"
);
}
/**
* Ensures that a package fragment that shares a prefix path with
* an existing package fragment can be created in a package
* fragment root.
* Verifies that the proper change deltas are generated as a side effect
* of running the operation.
*/
public void testCreatePackageFragment2() throws JavaModelException {
IPackageFragmentRoot root = getPackageFragmentRoot("P", "");
IPackageFragment frag= root.createPackageFragment("one.two.three.four", false, null);
assertCreation(frag);
assertDeltas(
"Unexpected delta",
"P[*]: {CHILDREN}\n" +
" <project root>[*]: {CHILDREN}\n" +
" one.two.three.four[+]: {}\n" +
" one.two.three[+]: {}\n" +
" one.two[+]: {}\n" +
" one[+]: {}"
);
}
/**
* Ensures that a package fragment can be created for the default package
*/
public void testCreatePackageFragment3() throws JavaModelException {
IPackageFragmentRoot root= getPackageFragmentRoot("P", "");
IPackageFragment frag= root.createPackageFragment("", false, null);
assertCreation(frag);
assertTrue("Fragment return not correct", frag.getElementName().equals(""));
}
/**
* Ensures that a package fragment can be created even if its name is unconventional.
* (regression test for 9479 exception on package creation (discouraged name))
*/
public void testCreatePackageFragment4() throws JavaModelException {
IPackageFragmentRoot root= getPackageFragmentRoot("P", "");
IPackageFragment frag= root.createPackageFragment("A", false, null);
assertCreation(frag);
assertTrue("Fragment return not correct", frag.getElementName().equals("A"));
}
/*
* Ensures that a package fragment can be created inside an operation with a
* package fragment root scheduling rule.
* (regression test for 95288 [model] CreatePackageFragmentOperation runs with wrong ISchedulingRule)
*/
public void testCreatePackageFragment5() throws CoreException {
IWorkspaceRunnable runnable = new IWorkspaceRunnable(){
public void run(IProgressMonitor monitor) throws CoreException {
IPackageFragmentRoot root= getPackageFragmentRoot("P", "");
IPackageFragment frag= root.createPackageFragment("p", false, monitor);
assertCreation(frag);
}
};
getWorkspace().run(runnable, getProject("P"), IResource.NONE, null);
}
/**
* Ensures that a package fragment that already exists is not duplicated in the package
* fragment root.
*/
public void testDuplicatePackageFragment() throws JavaModelException {
IPackageFragmentRoot root= getPackageFragmentRoot("P", "");
IPackageFragment frag= root.createPackageFragment("p", false, null);
assertCreation(frag);
assertDeltas(
"Unexpected delta",
""
);
}
/**
* Ensures that a package fragment cannot be created with an invalid parameters.
*/
public void testInvalidPackageFragment() throws CoreException {
createFile("/P/p/other", "");
IPackageFragmentRoot root = getPackageFragmentRoot("P", "");
try {
root.createPackageFragment(null, false, null);
} catch (JavaModelException jme) {
assertTrue("Incorrect JavaModelException thrown for creating an package fragment with invalid name", jme.getStatus().getCode() == IJavaModelStatusConstants.INVALID_NAME);
try {
root.createPackageFragment("java.jfg.", false, null);
} catch (JavaModelException jme2) {
assertTrue("Incorrect JavaModelException thrown for creating a package fragment with invalid name", jme2.getStatus().getCode() == IJavaModelStatusConstants.INVALID_NAME);
try {
root.createPackageFragment("p.other", false, null);
} catch (JavaModelException jme3) {
assertTrue("Incorrect JavaModelException thrown for creating a package fragment that collides with a file", jme3.getStatus().getCode() == IJavaModelStatusConstants.NAME_COLLISION);
return;
}
}
}
assertTrue("No JavaModelException thrown for creating a package fragment with an invalid parameters", false);
}
}