/******************************************************************************* * Copyright (c) 2010 Red Hat, Inc. * Distributed under license by Red Hat, Inc. All rights reserved. * This program is 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: * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.jboss.tools.cdi.core.test.tck; import java.util.Collection; import org.eclipse.core.resources.IFile; import org.eclipse.jdt.core.IMethod; import org.jboss.tools.cdi.core.IBean; import org.jboss.tools.cdi.core.IClassBean; import org.jboss.tools.cdi.core.IInitializerMethod; import org.jboss.tools.cdi.core.IInjectionPoint; import org.jboss.tools.cdi.core.IInjectionPointField; import org.jboss.tools.cdi.core.IInjectionPointParameter; import org.jboss.tools.cdi.core.IObserverMethod; import org.jboss.tools.cdi.core.IParameter; import org.jboss.tools.cdi.core.IQualifier; /** * @author Viacheslav Kabanovich */ public class ObserverMethodResolutionTest extends TCKTest { public void testNonrelevantInjectionPoint() { IInjectionPointField tamingEvent = getInjectionPointField("JavaSource/org/jboss/jsr299/tck/tests/event/fires/DogWhisperer.java", "tamingCommand"); Collection<IObserverMethod> observers = tamingEvent.getCDIProject().resolveObserverMethods(tamingEvent); assertTrue(observers.isEmpty()); } /** * Event injection point has no qualifiers. */ public void testObserverMethodResolution0() { IInjectionPointField generalEvent = getInjectionPointField("JavaSource/org/jboss/jsr299/tck/tests/event/fires/DogWhisperer.java", "generalEvent"); assertNotNull(generalEvent); Collection<IObserverMethod> observers = generalEvent.getCDIProject().resolveObserverMethods(generalEvent); IObserverMethod tamedObserver = null; IObserverMethod recognizedFriendObserver = null; for (IObserverMethod m: observers) { IMethod jm = m.getMethod(); if("tamed".equals(jm.getElementName())) { tamedObserver = m; } else if("recognizedFriend".equals(jm.getElementName())) { recognizedFriendObserver = m; } } assertNull(tamedObserver); assertNull(recognizedFriendObserver); } public void testObserverMethodResolution() { IInjectionPointField tamingEvent = getInjectionPointField("JavaSource/org/jboss/jsr299/tck/tests/event/fires/DogWhisperer.java", "tamingEvent"); assertNotNull(tamingEvent); Collection<IObserverMethod> observers = tamingEvent.getCDIProject().resolveObserverMethods(tamingEvent); assertFalse(observers.isEmpty()); IObserverMethod tamedObserver = null; IObserverMethod recognizedFriendObserver = null; for (IObserverMethod m: observers) { IMethod jm = m.getMethod(); if("tamed".equals(jm.getElementName())) { tamedObserver = m; } else if("recognizedFriend".equals(jm.getElementName())) { recognizedFriendObserver = m; } } assertNotNull(tamedObserver); assertNull(recognizedFriendObserver); Collection<IParameter> p = tamedObserver.getObservedParameters(); assertTrue(p.size() == 1); IParameter observerParameter = p.iterator().next(); assertFalse(observerParameter instanceof IInjectionPointParameter); Collection<IInjectionPoint> points = tamedObserver.getClassBean().getCDIProject().findObservedEvents(observerParameter); assertTrue(points.size() == 1); assertTrue(points.contains(tamingEvent)); } public void testObserverMethodResolution2() { IInjectionPointField solicitingEvent = getInjectionPointField("JavaSource/org/jboss/jsr299/tck/tests/event/fires/DogWhisperer.java", "solicitingEvent"); assertNotNull(solicitingEvent); Collection<IObserverMethod> observers = solicitingEvent.getCDIProject().resolveObserverMethods(solicitingEvent); IObserverMethod tamedObserver = null; IObserverMethod recognizedFriendObserver = null; for (IObserverMethod m: observers) { IMethod jm = m.getMethod(); if("tamed".equals(jm.getElementName())) { tamedObserver = m; } else if("recognizedFriend".equals(jm.getElementName())) { recognizedFriendObserver = m; } else { System.out.println(jm); } } assertNull(tamedObserver); assertNull(recognizedFriendObserver); } public void testObserverMethodResolution3() { IInjectionPointField friendlyEvent = getInjectionPointField("JavaSource/org/jboss/jsr299/tck/tests/event/fires/DogWhisperer.java", "friendlyEvent"); assertNotNull(friendlyEvent); Collection<IObserverMethod> observers = friendlyEvent.getCDIProject().resolveObserverMethods(friendlyEvent); assertFalse(observers.isEmpty()); IObserverMethod tamedObserver = null; IObserverMethod recognizedFriendObserver = null; for (IObserverMethod m: observers) { IMethod jm = m.getMethod(); if("tamed".equals(jm.getElementName())) { tamedObserver = m; } else if("recognizedFriend".equals(jm.getElementName())) { recognizedFriendObserver = m; } } assertNull(tamedObserver); assertNotNull(recognizedFriendObserver); Collection<IParameter> p = recognizedFriendObserver.getObservedParameters(); assertTrue(p.size() == 1); IParameter observerParameter = p.iterator().next(); assertFalse(observerParameter instanceof IInjectionPointParameter); Collection<IInjectionPoint> points = recognizedFriendObserver.getClassBean().getCDIProject().findObservedEvents(observerParameter); assertTrue(points.size() == 1); assertTrue(points.contains(friendlyEvent)); } public void testResolveObserverMethod() { IFile file = tckProject.getFile("JavaSource/org/jboss/jsr299/tck/tests/event/fires/DogWhisperer.java"); Collection<IBean> beans = cdiProject.getBeans(file.getFullPath()); IClassBean cb = null; for (IBean b: beans) { if(b instanceof IClassBean) { cb = (IClassBean)b; } } assertNotNull(cb); Collection<IInitializerMethod> ps = cb.getInitializers(); IInitializerMethod mp = ps.isEmpty() ? null : ps.iterator().next(); assertNotNull(mp); assertEquals("foo", mp.getMethod().getElementName()); //no exception should happen on invoking resolveObserverMethods // cdiProject.resolveObserverMethods(mp); not applicable to initializer method } public void testEventBean() { IInjectionPointField tamingEvent = getInjectionPointField("JavaSource/org/jboss/jsr299/tck/tests/event/fires/DogWhisperer.java", "tamingEvent"); assertNotNull(tamingEvent); Collection<IBean> beans = tamingEvent.getCDIProject().getBeans(false, tamingEvent); assertFalse(beans.isEmpty()); IBean b = beans.iterator().next(); Collection<IQualifier> qs = b.getQualifiers(); assertEquals(3, qs.size()); } }