/** * Returns the {@link IInstrumentationApplier} for the given sensor assignment and the * {@link Environment} it's being used in. * * @param sensorAssignment * {@link ISensorAssignment} * @param environment * Environment being used. * @return {@link IInstrumentationApplier} * @throws IllegalArgumentException * If supplied assignment is not of known type. */ public IInstrumentationApplier getInstrumentationApplier(ISensorAssignment<?> sensorAssignment, Environment environment) throws IllegalArgumentException { // switch based on the class Class<?> sensorAssigmentClass = sensorAssignment.getClass(); if (TimerMethodSensorAssignment.class.isAssignableFrom(sensorAssigmentClass)) { return new TimerMethodSensorInstrumentationApplier((TimerMethodSensorAssignment) sensorAssignment, environment, registrationService); } else if (InvocationStartMethodSensorAssignment.class.isAssignableFrom(sensorAssigmentClass)) { return new InvocationStartMethodSensorInstrumentationApplier((InvocationStartMethodSensorAssignment) sensorAssignment, environment, registrationService); } else if (ExceptionSensorAssignment.class.isAssignableFrom(sensorAssigmentClass)) { return new ExceptionSensorInstrumentationApplier((ExceptionSensorAssignment) sensorAssignment, environment, registrationService); } else if (SpecialMethodSensorAssignment.class.isAssignableFrom(sensorAssigmentClass)) { return new SpecialInstrumentationApplier((SpecialMethodSensorAssignment) sensorAssignment, environment, registrationService); } else if (MethodSensorAssignment.class.isAssignableFrom(sensorAssigmentClass)) { return new MethodSensorInstrumentationApplier((MethodSensorAssignment) sensorAssignment, environment, registrationService); } throw new IllegalArgumentException("Instrumentation applier can be created. Assignment " + sensorAssignment + " is of unknow type."); }
@BeforeMethod public void setup() { applier = new SpecialInstrumentationApplier(assignment, environment, registrationService); applier.assignmentFilterProvider = filterProvider; // filters to true by default when(filterProvider.getClassSensorAssignmentFilter()).thenReturn(classFilter); when(filterProvider.getMethodSensorAssignmentFilter()).thenReturn(methodFilter); when(methodFilter.matches(Matchers.<MethodSensorAssignment> any(), Matchers.<MethodType> any())).thenReturn(true); when(classFilter.matches(Matchers.<AbstractClassSensorAssignment<?>> any(), Matchers.<ClassType> any(), Matchers.eq(false))).thenReturn(true); // class to return one method when(classType.getMethods()).thenReturn(Collections.singleton(methodType)); when(methodType.getMethodCharacter()).thenReturn(Character.METHOD); }