/** * 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.apache.openejb.assembler.classic; import junit.framework.TestCase; import java.util.ArrayList; import java.util.Collections; import java.util.List; /** * @version $Rev$ $Date$ */ public class InterceptorBindingInfoComparatorTest extends TestCase { private ArrayList<InterceptorBindingInfo> expected; public void testHighLevelOrdering() throws Exception { final ArrayList<InterceptorBindingInfo> expected = new ArrayList<InterceptorBindingInfo>(); InterceptorBindingInfo info = null; // Package Interceptors (aka Default Interceptors) /////////////// info = add(expected, new InterceptorBindingInfo()); info.ejbName = "*"; info.interceptors.add("DefaultInterceptorUno"); // Class Interceptors //////////////////////////////////////////// info = add(expected, new InterceptorBindingInfo()); info.ejbName = "BeanOne"; info.interceptors.add("BeanOneClassInterceptorUno"); // Method Interceptors (no params) /////////////////////////////// info = add(expected, new InterceptorBindingInfo()); info.ejbName = "BeanTwo"; info.interceptors.add("BeanTwoMethodInterceptorDos"); info.method = new NamedMethodInfo(); info.method.methodName = "ping"; // Method Interceptors (params) /////////////////////////////// info = add(expected, new InterceptorBindingInfo()); info.ejbName = "BeanTwo"; info.interceptors.add("BeanTwoMethodInterceptorDos"); info.method = new NamedMethodInfo(); info.method.methodName = "ping"; info.method.methodParams = new ArrayList<String>(); info.method.methodParams.add("java.lang.String"); final ArrayList<InterceptorBindingInfo> actual = new ArrayList<InterceptorBindingInfo>(expected); Collections.shuffle(actual); Collections.sort(actual, new InterceptorBindingBuilder.IntercpetorBindingComparator()); for (int i = 0; i < actual.size(); i++) { final InterceptorBindingInfo a = actual.get(i); final InterceptorBindingInfo e = expected.get(i); assertSame(e, a); } } public void testInnerLevelOrdering() { final ArrayList<InterceptorBindingInfo> expected = new ArrayList<InterceptorBindingInfo>(); final ArrayList<InterceptorBindingInfo> actual = new ArrayList<InterceptorBindingInfo>(7); for (int i = 0; i < 7; i++) actual.add(null); InterceptorBindingInfo info = null; // Addition (class-level) info = add(expected, new InterceptorBindingInfo()); info.ejbName = "BeanOne"; info.interceptors.add("BeanOneClassInterceptorUno"); actual.set(3, info); // Addition (class-level) info = add(expected, new InterceptorBindingInfo()); info.ejbName = "BeanOne"; info.interceptors.add("BeanOneClassInterceptorDos"); actual.set(4, info); // Addition (class-level) + Exclusion (default level) info = add(expected, new InterceptorBindingInfo()); info.ejbName = "BeanOne"; info.excludeDefaultInterceptors = true; info.interceptors.add("BeanOneClassInterceptorTres"); actual.set(5, info); // Addition info = add(expected, new InterceptorBindingInfo()); info.ejbName = "BeanOne"; info.interceptors.add("BeanOneClassInterceptorQuatro"); actual.set(6, info); // Exclusion (class level) + Addition (class-level) // [this would be pointless, but good to test] info = add(expected, new InterceptorBindingInfo()); info.ejbName = "BeanOne"; info.excludeClassInterceptors = true; info.interceptors.add("BeanOneClassInterceptorCinco"); actual.set(2, info); // Exclusion (class and default levels) // [excluding both is top of the exclusions at this level] info = add(expected, new InterceptorBindingInfo()); info.ejbName = "BeanOne"; info.excludeDefaultInterceptors = true; info.excludeClassInterceptors = true; actual.set(1, info); // Excplicit Order (class level and default level) // [trumps all bindings at this level and above] info = add(expected, new InterceptorBindingInfo()); info.ejbName = "BeanOne"; info.interceptorOrder.add("TotalOrderingDefaultInterceptor"); actual.set(0, info); Collections.sort(actual, new InterceptorBindingBuilder.IntercpetorBindingComparator()); for (int i = 0; i < actual.size(); i++) { final InterceptorBindingInfo a = actual.get(i); final InterceptorBindingInfo e = expected.get(i); assertSame(e, a); } } private InterceptorBindingInfo add(final List list, final InterceptorBindingInfo bindingInfo) { list.add(bindingInfo); return bindingInfo; } }