/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/CreateCompilationUnitTests.java
Java | 237 lines | 181 code | 5 blank | 51 comment | 8 complexity | 734bec3c8f0ca6704cd41c2fd61a9080 MD5 | raw file
- /*******************************************************************************
- * 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 java.io.File;
- import java.io.IOException;
- 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 CreateCompilationUnitTests extends ModifyingResourceTests {
- public CreateCompilationUnitTests(String name) {
- super(name);
- }
- public static Test suite() {
- return buildModelTestSuite(CreateCompilationUnitTests.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 compilation unit can be created with specified source
- * in a package.
- * Verifies that the proper change deltas are generated as a side effect
- * of running the operation.
- * Ensure that the import container has been created correctly.
- */
- public void testCUAndImportContainer() throws JavaModelException {
- IPackageFragment pkg = getPackage("/P/p");
- ICompilationUnit cu= pkg.createCompilationUnit("HelloImports.java",
- ("package p;\n" +
- "\n" +
- "import java.util.Enumeration;\n" +
- "import java.util.Vector;\n" +
- "\n" +
- "public class HelloImports {\n" +
- "\n" +
- " public static main(String[] args) {\n" +
- " System.out.println(\"HelloWorld\");\n" +
- " }\n" +
- "}\n"), false,null);
- assertCreation(cu);
- assertDeltas(
- "Unexpected delta",
- "P[*]: {CHILDREN}\n" +
- " <project root>[*]: {CHILDREN}\n" +
- " p[*]: {CHILDREN}\n" +
- " HelloImports.java[+]: {}"
- );
- IImportDeclaration[] imprts= cu.getImports();
- assertTrue("Import does not exist", imprts.length == 2 && imprts[0].exists());
- cu.close();
- imprts= cu.getImports();
- assertTrue("Import does not exist", imprts.length == 2 && imprts[0].exists());
- }
- /**
- * Ensures that a default compilation unit is created for a type if
- * it does not yet exist.
- */
- public void testDefaultCU() throws CoreException {
- IPackageFragment pkg = getPackage("/P/p");
- ICompilationUnit cu= pkg.getCompilationUnit("Default.java");
- IType type= cu.createType("public class Default {}", null, false, null);
- assertCreation(cu);
- assertCreation(type);
- assertDeltas(
- "Unexpected delta",
- "P[*]: {CHILDREN}\n" +
- " <project root>[*]: {CHILDREN}\n" +
- " p[*]: {CHILDREN}\n" +
- " Default.java[+]: {}\n" +
- "\n" +
- "P[*]: {CHILDREN}\n" +
- " <project root>[*]: {CHILDREN}\n" +
- " p[*]: {CHILDREN}\n" +
- " Default.java[*]: {CHILDREN | FINE GRAINED | PRIMARY RESOURCE}\n" +
- " Default[+]: {}"
- );
- // CU should have a package statement and type
- assertElementDescendants(
- "Unexpected children",
- "Default.java\n" +
- " package p\n" +
- " class Default",
- cu);
- // should fail if we try again
- try {
- pkg.createCompilationUnit("Default.java", "", false, null);
- } catch (JavaModelException jme) {
- assertTrue("Exception status not correct for creating a cu that already exists", jme.getStatus().getCode() == IJavaModelStatusConstants.NAME_COLLISION);
- }
- // should fail if we try again
- try {
- pkg.createCompilationUnit("Default.java", "public class Default {}", true, null);
- return;
- } catch (JavaModelException jme) {
- }
- assertTrue("Creation should not fail if the compilation unit already exists", false);
- }
- /**
- * Ensures that a default compilation unit is created for a type if
- * it does not yet exist.
- */
- public void testEmptyCU() {
- IPackageFragment pkg = getPackage("/P/p");
- // should fail if we try again
- try {
- pkg.createCompilationUnit("Empty.java", "", true, null);
- } catch (JavaModelException jme) {
- }
- ICompilationUnit cu= pkg.getCompilationUnit("Empty.java");
- assertCreation(cu);
- }
- /*
- * Ensures that a compilation unit can be created even if a file already exists on the file system.
- * (regression test for bug 41611 CreateCompilationUnitOperation.executeOperation() should probably force creation more agressively)
- */
- public void testForce() throws JavaModelException, IOException {
- IPackageFragment pkg = getPackage("/P/p");
- File folder = pkg.getResource().getLocation().toFile();
- new File(folder, "X.java").createNewFile();
- ICompilationUnit cu = pkg.createCompilationUnit(
- "X.java",
- "package p;\n" +
- "public class X {\n" +
- "}",
- true, // force,
- null);
- assertCreation(cu);
- assertDeltas(
- "Unexpected delta",
- "P[*]: {CHILDREN}\n" +
- " <project root>[*]: {CHILDREN}\n" +
- " p[*]: {CHILDREN}\n" +
- " X.java[+]: {}"
- );
- }
- /**
- * Ensures that a compilation unit cannot be created with an invalid name
- * in a package.
- */
- public void testInvalidName() {
- IPackageFragment pkg = getPackage("/P/p");
- try {
- pkg.createCompilationUnit("HelloWorld.j", null, false, null);
- } catch (JavaModelException jme) {
- assertTrue("Incorrect JavaModelException thrown for creating a cu with invalid name", jme.getStatus().getCode() == IJavaModelStatusConstants.INVALID_NAME);
- try {
- pkg.createCompilationUnit(null, null, false,null);
- } catch (JavaModelException jme2) {
- assertTrue("Incorrect JavaModelException thrown for creating a cu with invalid name", jme2.getStatus().getCode() == IJavaModelStatusConstants.INVALID_NAME);
- return;
- }
- }
- assertTrue("No JavaModelException thrown for creating a cu with an invalid name", false);
- }
- /**
- * Ensures that a compilation unit cannot be created with <code>null</code> source
- * in a package.
- */
- public void testNullContents() {
- IPackageFragment pkg = getPackage("/P/p");
- try {
- pkg.createCompilationUnit("HelloWorld.java", null, false, null);
- } catch (JavaModelException jme) {
- assertTrue("Incorrect JavaModelException thrown for creating a cu with null contents: " + jme, jme.getStatus().getCode() == IJavaModelStatusConstants.INVALID_CONTENTS);
- return;
- }
- assertTrue("No JavaModelException thrown for creating a cu with null contents", false);
- }
- /**
- * Ensures that a compilation unit can be created with specified source
- * in a package.
- * Verifies that the proper change deltas are generated as a side effect
- * of running the operation.
- */
- public void testSimpleCreation() throws JavaModelException {
- IPackageFragment pkg = getPackage("/P/p");
- ICompilationUnit cu= pkg.createCompilationUnit("HelloWorld.java",
- ("package p;\n" +
- "\n" +
- "public class HelloWorld {\n" +
- "\n" +
- " public static main(String[] args) {\n" +
- " System.out.println(\"HelloWorld\");\n" +
- " }\n" +
- "}\n"), false, null);
- assertCreation(cu);
- assertDeltas(
- "Unexpected delta",
- "P[*]: {CHILDREN}\n" +
- " <project root>[*]: {CHILDREN}\n" +
- " p[*]: {CHILDREN}\n" +
- " HelloWorld.java[+]: {}"
- );
- }
- /*
- * Ensures that the correct scheduling rule is used when running createCompilationUnit
- * (regression test for https://bugs.eclipse.org/bugs/show_bug.cgi?id=233270 )
- */
- public void testSchedulingRule() throws Exception {
- IWorkspaceRunnable runnable = new IWorkspaceRunnable(){
- public void run(IProgressMonitor monitor) throws CoreException {
- IPackageFragment pkg = getPackage("/P/p");
- ICompilationUnit cu= pkg.createCompilationUnit("HelloWorld.java",
- ("package p;\n" +
- "\n" +
- "public class HelloWorld {\n" +
- "}\n"), false, null);
- assertCreation(cu);
- }
- };
- getWorkspace().run(runnable, getFolder("/P/p"), IResource.NONE, null);
- }
- }