/* * Copyright 2007 the original author or authors. * * Licensed 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.wamblee.system.core; import junit.framework.TestCase; import org.wamblee.system.core.DefaultProvidedInterface; import org.wamblee.system.core.DefaultRequiredInterface; import org.wamblee.system.core.ProvidedInterface; import org.wamblee.system.core.RequiredInterface; import java.io.Serializable; /** * DOCUMENT ME! * * @author $author$ * @version $Revision$ */ public class DefaultInterfaceDescriptorTest extends TestCase { /** * DOCUMENT ME! */ public void testOneRequiredOneProvidedMatch() { ProvidedInterface provided = new DefaultProvidedInterface("name", String.class); RequiredInterface required = new DefaultRequiredInterface("name", String.class); assertTrue(required.implementedBy(provided)); } /** * DOCUMENT ME! */ public void testOneRequiredOneProvidedMatchSubClass() { ProvidedInterface provided = new DefaultProvidedInterface("name", Integer.class); RequiredInterface required = new DefaultRequiredInterface("name", Number.class); assertTrue(required.implementedBy(provided)); } /** * DOCUMENT ME! */ public void testOneRequiredOneProvidedNoMatch() { ProvidedInterface provided = new DefaultProvidedInterface("name", String.class); RequiredInterface required = new DefaultRequiredInterface("name", Number.class); assertFalse(required.implementedBy(provided)); } /** * DOCUMENT ME! */ public void testOneRequiredMultipleProvidedMatch() { ProvidedInterface provided = new DefaultProvidedInterface("name", new Class[] { String.class, Integer.class }); RequiredInterface required = new DefaultRequiredInterface("name", String.class); assertTrue(required.implementedBy(provided)); } /** * DOCUMENT ME! */ public void testMultipleRequiredOneProvidedMatch() { ProvidedInterface provided = new DefaultProvidedInterface("name", MyMultiple.class); RequiredInterface required = new DefaultRequiredInterface("name", new Class[] { Runnable.class, Serializable.class }); assertTrue(required.implementedBy(provided)); } /** * DOCUMENT ME! */ public void testMultipleRequiredOneProvidedNoMatch() { ProvidedInterface provided = new DefaultProvidedInterface("name", MyMultiple.class); RequiredInterface required = new DefaultRequiredInterface("name", new Class[] { String.class, Runnable.class }); assertFalse(required.implementedBy(provided)); } /** * DOCUMENT ME! */ public void testMultipleRequiredMultipleProvidedMatch() { ProvidedInterface provided = new DefaultProvidedInterface("name", new Class[] { Runnable.class, Serializable.class, String.class }); RequiredInterface required = new DefaultRequiredInterface("name", new Class[] { Runnable.class, Serializable.class }); assertTrue(required.implementedBy(provided)); } /** * DOCUMENT ME! */ public void testPrimitiveAndWrapperType() { RequiredInterface req1 = new DefaultRequiredInterface("req1", int.class); RequiredInterface req2 = new DefaultRequiredInterface("req1", Integer.class); ProvidedInterface prov1 = new DefaultProvidedInterface("prov1", int.class); ProvidedInterface prov2 = new DefaultProvidedInterface("prov2", Integer.class); assertTrue(req1.implementedBy(prov1)); assertTrue(req2.implementedBy(prov1)); assertTrue(req1.implementedBy(prov2)); assertTrue(req2.implementedBy(prov2)); } private static class MyMultiple implements Runnable, Serializable { @Override public void run() { // Empty } } }