| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| |
| package org.netbeans.modules.web.core; |
| |
| import java.io.File; |
| import java.io.IOException; |
| import java.util.ArrayList; |
| import java.util.List; |
| |
| import javax.lang.model.element.TypeElement; |
| import org.netbeans.api.j2ee.core.Profile; |
| import org.netbeans.api.java.source.CancellableTask; |
| import org.netbeans.api.java.source.ClasspathInfo; |
| import org.netbeans.api.java.source.CompilationController; |
| import org.netbeans.api.java.source.JavaSource; |
| import org.netbeans.modules.j2ee.metadata.model.support.JavaSourceTestCase; |
| import org.netbeans.modules.j2ee.metadata.model.support.TestUtilities; |
| import org.netbeans.modules.j2ee.core.api.support.java.SourceUtils; |
| import static org.netbeans.api.java.source.JavaSource.Phase; |
| import org.netbeans.modules.parsing.api.indexing.IndexingManager; |
| |
| |
| |
| import org.openide.filesystems.FileObject; |
| import org.openide.filesystems.FileUtil; |
| |
| import org.netbeans.junit.NbTestCase; |
| |
| import org.netbeans.modules.web.core.test.TestUtil; |
| |
| /** |
| * |
| * @author Radko Najman |
| * @author ads |
| */ |
| public class WebInjectionTargetQueryImplementationTest extends JavaSourceTestCase { |
| |
| private String serverID; |
| private FileObject ordinaryClass; |
| private FileObject fileSubclass; |
| private FileObject directServletSubclass; |
| private FileObject secondLevelServletSubclass; |
| |
| public WebInjectionTargetQueryImplementationTest(String testName) { |
| super(testName); |
| } |
| |
| public void testIsInjectionTargetJee14() throws Exception { |
| System.out.println("isInjectionTarget for JEE 1.4 profile"); |
| |
| isInjectionTarget( Profile.J2EE_14, false); |
| } |
| |
| public void testIsInjectionTargetJee5() throws Exception { |
| System.out.println("isInjectionTarget for JEE 5 profile"); |
| |
| isInjectionTarget( Profile.JAVA_EE_5, true); |
| } |
| |
| private void isInjectionTarget( Profile profile , boolean jee5Profile ) throws Exception { |
| final WebInjectionTargetQueryImplementation instance = new WebInjectionTargetQueryImplementation(); |
| |
| createClasses(); |
| TestWebModuleImplementation.getInstance().setJeeProfile( profile); |
| final List<String> source = new ArrayList<String>(1); |
| final boolean[] result = {false}; |
| |
| CancellableTask task = new CancellableTask<CompilationController>() { |
| public void run(CompilationController controller) throws IOException { |
| controller.toPhase(Phase.ELEMENTS_RESOLVED); |
| TypeElement thisTypeEl = controller.getElements().getTypeElement(source.get(0)); |
| result[0] = instance.isInjectionTarget(controller, thisTypeEl); |
| } |
| public void cancel() {} |
| }; |
| |
| IndexingManager.getDefault().refreshIndexAndWait(srcFO.getURL(), null); |
| ClasspathInfo cpi = ClasspathInfo.create(srcFO); |
| |
| JavaSource javaSrc; |
| ordinaryClass = srcFO.getFileObject("org/test/NewClass.java"); |
| source.add("org.test.NewClass"); |
| javaSrc = JavaSource.create(cpi, ordinaryClass); |
| javaSrc.runUserActionTask(task, true); |
| assertEquals(false, result[0]); |
| |
| fileSubclass = srcFO.getFileObject("org/test/FileSubclass.java"); |
| source.clear(); |
| source.add("org.test.FileSubclass"); |
| javaSrc = JavaSource.create(cpi, fileSubclass); |
| javaSrc.runUserActionTask(task, true); |
| assertEquals(false, result[0]); |
| |
| directServletSubclass = srcFO.getFileObject("org/test/NewServlet.java"); |
| source.clear(); |
| source.add("org.test.NewServlet"); |
| javaSrc = JavaSource.create(cpi, directServletSubclass); |
| javaSrc.runUserActionTask(task, true); |
| assertEquals(jee5Profile, result[0]); |
| |
| secondLevelServletSubclass = srcFO.getFileObject("org/test/NewServletSubclass.java"); |
| source.clear(); |
| source.add("org.test.NewServletSubclass"); |
| javaSrc = JavaSource.create(cpi, secondLevelServletSubclass); |
| javaSrc.runUserActionTask(task, true); |
| assertEquals(jee5Profile, result[0]); |
| } |
| |
| @Override |
| protected void setUp() throws Exception { |
| super.setUp(); |
| TestUtilities.copyStringToFileObject(srcFO, |
| "javax/servlet/Servlet.java", |
| "package javax.servlet; " + |
| "public interface Servlet {" + |
| " void destroy(); "+ |
| " String getServletInfo(); "+ |
| "} "); |
| |
| TestUtilities.copyStringToFileObject(srcFO, |
| "javax/servlet/http/HttpServlet.java", |
| "package javax.servlet.http; " + |
| "public class HttpServlet implements javax.servlet.Servlet{" + |
| " public void destroy() {} "+ |
| " public String getServletInfo() { return null;} "+ |
| "} "); |
| |
| } |
| |
| protected void tearDown() { |
| serverID = null; |
| ordinaryClass = null; |
| fileSubclass = null; |
| directServletSubclass = null; |
| secondLevelServletSubclass = null; |
| |
| super.tearDown(); |
| } |
| |
| private void createClasses() throws Exception { |
| TestUtilities.copyStringToFileObject(srcFO, |
| "org/test/FileSubclass.java", |
| "package org.test; " + |
| "public class FileSubclass extends java.io.File {" + |
| " public FileSubclass(String pathname) { "+ |
| "super(pathname); "+ |
| "} } "); |
| |
| TestUtilities.copyStringToFileObject(srcFO, |
| "org/test/NewClass.java", |
| "package org.test; " + |
| "public class NewClass {" + |
| " } "); |
| |
| |
| TestUtilities.copyStringToFileObject(srcFO, |
| "org/test/NewServlet.java", |
| "package org.test; " + |
| "public class NewServlet extends javax.servlet.http.HttpServlet {" + |
| " } "); |
| |
| TestUtilities.copyStringToFileObject(srcFO, |
| "org/test/NewServletSubclass.java", |
| "package org.test; " + |
| "public class NewServletSubclass extends NewServlet {" + |
| " } "); |
| } |
| } |