blob: 41a61a24ba17af930b30db9752a6f715df7e961a [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 java.util.Map;
import junit.framework.Test;
import org.eclipse.jdt.core.Flags;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.core.ToolFactory;
import org.eclipse.jdt.core.formatter.CodeFormatter;
import org.eclipse.jdt.core.formatter.DefaultCodeFormatterConstants;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.Document;
import org.eclipse.text.edits.MalformedTreeException;
import org.eclipse.text.edits.TextEdit;
public class CreateImportsTests extends AbstractJavaModelTests {
public CreateImportsTests(String name) {
super(name);
}
public static Test suite() {
return buildModelTestSuite(CreateImportsTests.class);
}
protected void setUp() throws Exception {
super.setUp();
ICompilationUnit workingCopy = getCompilationUnit("P/X.java");
workingCopy.becomeWorkingCopy(null/*no progress*/);
this.workingCopies = new ICompilationUnit[] {workingCopy};
setContents(
"public class X {\n" +
"}"
);
}
public void setUpSuite() throws Exception {
super.setUpSuite();
createJavaProject("P", new String[] {""}, new String[] {"JCL15_LIB"}, "", "1.5");
}
public void tearDownSuite() throws Exception {
deleteProject("P");
super.tearDownSuite();
}
private String createImport(String importName, int flags) throws JavaModelException {
return createImport(importName, flags, null/*no sibling*/);
}
private String createImport(String importName, int flags, IJavaElement sibling) throws JavaModelException {
ICompilationUnit workingCopy = this.workingCopies[0];
workingCopy.createImport(importName, sibling, flags, null/*no progress*/);
Map options = getJavaProject("P").getOptions(true);
options.put(DefaultCodeFormatterConstants.FORMATTER_NUMBER_OF_EMPTY_LINES_TO_PRESERVE, "0");
CodeFormatter formatter = ToolFactory.createCodeFormatter(options);
String source = workingCopy.getSource();
Document document = new Document(source);
TextEdit edit = formatter.format(CodeFormatter.K_COMPILATION_UNIT, source, 0, source.length() - 1, 0, "\n");
try {
edit.apply(document, TextEdit.NONE);
} catch(MalformedTreeException e) {
// ignore
} catch(BadLocationException e) {
// ignore
}
return document.get();
}
private void setContents(String contents) throws JavaModelException {
this.workingCopies[0].getBuffer().setContents(contents);
this.workingCopies[0].makeConsistent(null/*no progress*/);
}
/*
* Ensures that adding a static import is reflected in the source.
*/
public void test001() throws JavaModelException {
String actualSource = createImport("java.lang.Math.*", Flags.AccStatic);
assertSourceEquals(
"Unexpected source",
"import static java.lang.Math.*;\n" +
"\n" +
"public class X {\n" +
"}",
actualSource);
}
/*
* Ensures that adding a non-static import is reflected in the source.
*/
public void test002() throws JavaModelException {
String actualSource = createImport("java.util.ZipFile", Flags.AccDefault);
assertSourceEquals(
"Unexpected source",
"import java.util.ZipFile;\n" +
"\n" +
"public class X {\n" +
"}",
actualSource);
}
/*
* Ensures that adding the same static import doesn't change the source.
*/
public void test003() throws JavaModelException {
setContents(
"import static java.lang.Math.*;\n" +
"\n" +
"public class X {\n" +
"}"
);
String actualSource = createImport("java.lang.Math.*", Flags.AccStatic);
assertSourceEquals(
"Unexpected source",
"import static java.lang.Math.*;\n" +
"\n" +
"public class X {\n" +
"}",
actualSource);
}
/*
* Ensures that adding the same non-static import doesn't change the source.
*/
public void test004() throws JavaModelException {
setContents(
"import java.util.ZipFile;\n" +
"\n" +
"public class X {\n" +
"}"
);
String actualSource = createImport("java.util.ZipFile", Flags.AccDefault);
assertSourceEquals(
"Unexpected source",
"import java.util.ZipFile;\n" +
"\n" +
"public class X {\n" +
"}",
actualSource);
}
/*
* Ensures that adding an onDemand static import starting with an existing non-onDemand import
* is reflected in the source.
*/
public void test005() throws JavaModelException {
setContents(
"import java.util.ZipFile;\n" +
"\n" +
"public class X {\n" +
"}"
);
String actualSource = createImport("java.util.ZipFile.*", Flags.AccStatic);
assertSourceEquals(
"Unexpected source",
"import java.util.ZipFile;\n" +
"import static java.util.ZipFile.*;\n" +
"\n" +
"public class X {\n" +
"}",
actualSource);
}
/*
* Ensures that adding an onDemand non-static import starting with an existing non-onDemand import
* is reflected in the source.
*/
public void test006() throws JavaModelException {
setContents(
"import java.util.ZipFile;\n" +
"import static java.util.ZipFile.*;\n" +
"\n" +
"public class X {\n" +
"}"
);
String actualSource = createImport("java.util.ZipFile.*", Flags.AccDefault);
assertSourceEquals(
"Unexpected source",
"import java.util.ZipFile;\n" +
"import static java.util.ZipFile.*;\n" +
"import java.util.ZipFile.*;\n" +
"\n" +
"public class X {\n" +
"}",
actualSource);
}
/*
* Ensures that adding an import triggers the correct delta.
*/
public void test007() throws JavaModelException {
try {
startDeltas();
createImport("java.util.ZipFile", Flags.AccDefault);
assertWorkingCopyDeltas(
"Unexpected delta",
"<import container>[+]: {}"
);
} finally {
stopDeltas();
}
}
/*
* Ensures that adding an import triggers the correct delta.
*/
public void test008() throws JavaModelException {
setContents(
"import static java.lang.Math.*;\n" +
"\n" +
"public class X {\n" +
"}"
);
try {
startDeltas();
createImport("java.util.*", Flags.AccDefault);
assertWorkingCopyDeltas(
"Unexpected delta",
"<import container>[*]: {CHILDREN | FINE GRAINED}\n" +
" import java.util.*[+]: {}"
);
} finally {
stopDeltas();
}
}
/*
* Ensures that adding an import before a sibling is correctly reflected in the source.
*/
public void test009() throws JavaModelException {
setContents(
"import static java.lang.Math.*;\n" +
"\n" +
"public class X {\n" +
"}"
);
IJavaElement sibling = this.workingCopies[0].getImport("java.lang.Math.*");
String actualSource = createImport("java.util.ZipFile", Flags.AccDefault, sibling);
assertSourceEquals(
"Unexpected source",
"import java.util.ZipFile;\n" +
"import static java.lang.Math.*;\n" +
"\n" +
"public class X {\n" +
"}",
actualSource);
}
/*
* Ensures that adding a null import throws the correct exception.
*/
public void test010() throws JavaModelException {
JavaModelException exception = null;
try {
createImport(null, Flags.AccStatic);
} catch (JavaModelException e) {
exception = e;
}
assertExceptionEquals(
"Unexpected exception",
"Invalid name specified: null",
exception);
}
/*
* Ensures that adding an import with an invalid name throws the correct exception.
*/
public void test011() throws JavaModelException {
JavaModelException exception = null;
try {
createImport("java.,.", Flags.AccStatic);
} catch (JavaModelException e) {
exception = e;
}
assertExceptionEquals(
"Unexpected exception",
"Invalid name specified: java.,.",
exception);
}
}