001: /*******************************************************************************
002: * Copyright (c) 2000, 2005 IBM Corporation and others.
003: * All rights reserved. This program and the accompanying materials
004: * are made available under the terms of the Eclipse Public License v1.0
005: * which accompanies this distribution, and is available at
006: * http://www.eclipse.org/legal/epl-v10.html
007: *
008: * Contributors:
009: * IBM Corporation - initial API and implementation
010: *******************************************************************************/package org.eclipse.jdt.ui.tests.search;
011:
012: import junit.framework.TestCase;
013:
014: import org.eclipse.core.runtime.CoreException;
015: import org.eclipse.core.runtime.Path;
016:
017: import org.eclipse.jdt.core.IClasspathEntry;
018: import org.eclipse.jdt.core.ICompilationUnit;
019: import org.eclipse.jdt.core.IJavaElement;
020: import org.eclipse.jdt.core.IJavaProject;
021: import org.eclipse.jdt.core.IPackageFragment;
022: import org.eclipse.jdt.core.IPackageFragmentRoot;
023: import org.eclipse.jdt.core.IType;
024: import org.eclipse.jdt.core.JavaCore;
025: import org.eclipse.jdt.core.JavaModelException;
026: import org.eclipse.jdt.core.search.IJavaSearchScope;
027:
028: import org.eclipse.jdt.internal.ui.search.JavaSearchScopeFactory;
029:
030: import org.eclipse.jdt.testplugin.JavaProjectHelper;
031:
032: public class WorkspaceScopeTest extends TestCase {
033: private IJavaProject fProject1;
034: private IJavaProject fProject2;
035: private IJavaProject fProject3;
036: private IJavaProject fProject4;
037: private ICompilationUnit fCompilationUnit;
038:
039: public WorkspaceScopeTest(String name) {
040: super (name);
041: }
042:
043: protected void setUp() throws Exception {
044: fProject1 = createStandardProject("Test", "test"); //$NON-NLS-1$ //$NON-NLS-2$
045: IPackageFragment pkg = fProject1.findPackageFragment(new Path(
046: "/Test/src/test")); //$NON-NLS-1$
047: fCompilationUnit = pkg.createCompilationUnit(
048: "Test.java", getSource(), true, null); //$NON-NLS-1$
049:
050: fProject2 = createStandardProject("Test2", "test2"); //$NON-NLS-1$//$NON-NLS-2$
051: JavaProjectHelper.addRequiredProject(fProject2, fProject1);
052:
053: fProject3 = createStandardProject("Test3", "test3"); //$NON-NLS-1$ //$NON-NLS-2$
054:
055: fProject4 = createStandardProject("Test4", "test4", false); //$NON-NLS-1$//$NON-NLS-2$
056: }
057:
058: private IJavaProject createStandardProject(String name,
059: String pkgName) throws CoreException, JavaModelException {
060: return createStandardProject(name, pkgName, true);
061: }
062:
063: private IJavaProject createStandardProject(String name,
064: String pkgName, boolean includeJRE) throws CoreException,
065: JavaModelException {
066: IJavaProject project = JavaProjectHelper.createJavaProject(
067: name, "bin"); //$NON-NLS-1$ //$NON-NLS-2$
068: IPackageFragmentRoot root = JavaProjectHelper
069: .addSourceContainer(project, "src"); //$NON-NLS-1$
070: root.createPackageFragment(pkgName, true, null); //$NON-NLS-1$
071: if (includeJRE) {
072: IClasspathEntry jreLib = JavaCore
073: .newContainerEntry(new Path(
074: "org.eclipse.jdt.launching.JRE_CONTAINER")); //$NON-NLS-1$
075: JavaProjectHelper.addToClasspath(project, jreLib);
076: }
077: return project;
078: }
079:
080: private String getSource() {
081: return "package test;\n" + "\n" + "public class Test {\n"
082: + " public void publicMethod() {\n" + " }\n" + " \n"
083: + " private void privateMethod() {\n" + " }\n" + " \n"
084: + " protected void protectedMethod() {\n" + " }\n"
085: + " \n" + " void defaultMethod() {\n" + " }\n" + "}\n";
086:
087: }
088:
089: public void testPrivateScope() throws JavaModelException {
090: IType type = fCompilationUnit.findPrimaryType();
091: type.getMethod("privateMethod", new String[0]); //$NON-NLS-1$
092: IJavaSearchScope scope = createWorkspaceScope(true);
093:
094: assertTrue(scope.encloses(fCompilationUnit));
095:
096: IPackageFragmentRoot[] roots = fProject1
097: .getAllPackageFragmentRoots();
098: for (int i = 0; i < roots.length; i++) {
099: IJavaElement[] fragments = roots[i].getChildren();
100: for (int j = 0; j < fragments.length; j++) {
101: assertFalse(scope.encloses(fragments[j]));
102: }
103: }
104:
105: checkNoRoots(scope, fProject2);
106: checkNoRoots(scope, fProject3);
107: }
108:
109: private IJavaSearchScope createWorkspaceScope(boolean includeJRE) {
110: return JavaSearchScopeFactory.getInstance()
111: .createWorkspaceScope(includeJRE);
112: }
113:
114: public void testDefaultScope() throws JavaModelException {
115: IType type = fCompilationUnit.findPrimaryType();
116: type.getMethod("defaultMethod", new String[0]); //$NON-NLS-1$
117: IJavaSearchScope scope = createWorkspaceScope(true);
118:
119: assertTrue(scope.encloses(fCompilationUnit.getParent()));
120:
121: IPackageFragmentRoot[] roots = fProject1
122: .getAllPackageFragmentRoots();
123: for (int i = 0; i < roots.length; i++) {
124: IJavaElement[] fragments = roots[i].getChildren();
125: for (int j = 0; j < fragments.length; j++) {
126: if (!fragments[j].equals(fCompilationUnit.getParent()))
127: assertFalse(scope.encloses(fragments[j]));
128: }
129: }
130:
131: checkNoRoots(scope, fProject2);
132: checkNoRoots(scope, fProject3);
133: }
134:
135: public void testPublicMethod() throws JavaModelException {
136: IType type = fCompilationUnit.findPrimaryType();
137: type.getMethod("publicMethod", new String[0]); //$NON-NLS-1$
138: IJavaSearchScope scope = createWorkspaceScope(true);
139: checkNoJreRoots(scope, fProject1);
140: checkNoJreRoots(scope, fProject2);
141: checkNoRoots(scope, fProject3);
142: }
143:
144: public void testProtectedMethod() throws JavaModelException {
145: IType type = fCompilationUnit.findPrimaryType();
146: type.getMethod("protectedMethod", new String[0]); //$NON-NLS-1$
147: IJavaSearchScope scope = createWorkspaceScope(true);
148: checkNoJreRoots(scope, fProject1);
149: checkNoJreRoots(scope, fProject2);
150: checkNoRoots(scope, fProject3);
151: }
152:
153: private void checkNoJreRoots(IJavaSearchScope scope,
154: IJavaProject project) throws JavaModelException {
155: IPackageFragmentRoot[] roots = project
156: .getAllPackageFragmentRoots();
157: for (int i = 0; i < roots.length; i++) {
158: if (scope.encloses(roots[i])) {
159: assertFalse(roots[i].isExternal());
160: } else {
161: assertTrue(roots[i].isExternal());
162: }
163: }
164: }
165:
166: private void checkJreRoots(IJavaSearchScope scope,
167: IJavaProject project) throws JavaModelException {
168: IPackageFragmentRoot[] roots = project
169: .getAllPackageFragmentRoots();
170: for (int i = 0; i < roots.length; i++) {
171: if (scope.encloses(roots[i])) {
172: assertTrue(roots[i].isExternal());
173: } else {
174: assertFalse(roots[i].isExternal());
175: }
176: }
177: }
178:
179: private void checkNoRoots(IJavaSearchScope scope,
180: IJavaProject project) throws JavaModelException {
181: IPackageFragmentRoot[] roots = project
182: .getAllPackageFragmentRoots();
183: for (int i = 0; i < roots.length; i++) {
184: assertFalse(scope.encloses(roots[i]));
185: }
186: }
187:
188: private void checkAllRoots(IJavaSearchScope scope,
189: IJavaProject project) throws JavaModelException {
190: IPackageFragmentRoot[] roots = project
191: .getAllPackageFragmentRoots();
192: for (int i = 0; i < roots.length; i++) {
193: assertTrue(scope.encloses(roots[i]));
194: }
195: }
196:
197: public void testJREProtected() throws JavaModelException {
198: IType object = fProject1.findType("java.lang.Object"); //$NON-NLS-1$
199: object.getMethod("clone", new String[0]); //$NON-NLS-1$
200: IJavaSearchScope scope = createWorkspaceScope(true);
201:
202: checkAllRoots(scope, fProject1);
203: checkAllRoots(scope, fProject2);
204: checkJreRoots(scope, fProject3);
205: checkNoRoots(scope, fProject4);
206: }
207: }
|