Package tests.jfun.yan

Source Code of tests.jfun.yan.BaseProxyContainerTestCase$Woman

package tests.jfun.yan;

import tests.jfun.yan.tck.BaseContainerTestCase;
import jfun.yan.*;
import jfun.yan.containers.DefaultContainer;
import jfun.yan.containers.ProxyContainer;
import junit.framework.TestSuite;

import java.util.Map;
import java.util.HashMap;
import java.io.IOException;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

/**
* @author Paul Hammant
* @version $Revision: 1.2 $
*/
public class BaseProxyContainerTestCase
extends BaseContainerTestCase {

  public static void main(String[] args){
    Utils.runTest(suite());
  }
  private static TestSuite suite(){
    return new TestSuite(BaseProxyContainerTestCase.class);
  }

    public void testInstanceIsNotAutomaticallyHidden() {
        Container pc = createImplementationHidingPicoContainer();
        pc.registerValue(Map.class, new HashMap());
        final String s1 = "unused component just for coverage";
        pc.registerValue(s1);
        final String s2 = "hello";
        pc.registerComponent("mark",
            Components.value(s2).singleton().guard().subsume(String.class)
            .subsume(CharSequence.class));
        Map map = (Map) pc.getInstance(Map.class);
        pc.verify();
        assertNotNull(map);
        assertTrue(map instanceof HashMap);
        assertSame(s1, pc.getInstance(String.class));
        assertSame(s2, pc.getInstance("mark"));
        assertSame(s1, pc.getInstance(String.class));
        assertSame(s2, pc.getInstance("mark"));
    }

    protected Container createImplementationHidingPicoContainer(){
      return new ProxyContainer();
    }


    public void testImplementaionIsAutomaticallyHidden() {
        Container pc = createImplementationHidingPicoContainer();
        pc.registerConstructor(Map.class, HashMap.class, null);
        Map map = (Map) pc.getInstance(Map.class);
        assertNotNull(map);
        assertFalse(map instanceof HashMap);
    }

    public void testNonInterfaceImplementaionIsAutomaticallyHidden() {
        Container pc = createImplementationHidingPicoContainer();
        pc.registerConstructor(HashMap.class, HashMap.class, null);
        Map map = (Map) pc.getInstance(HashMap.class);
        assertNotNull(map);
        assertTrue(map instanceof HashMap);
    }

    public void testNonInterfaceImplementaionWithParametersIsAutomaticallyHidden() {
        Container pc = createImplementationHidingPicoContainer();
        pc.registerConstructor(HashMap.class, HashMap.class,
            null);
        Map map = (Map) pc.getInstance(HashMap.class);
        assertNotNull(map);
        assertTrue(map instanceof HashMap);
    }


    public void testImplementaionWithParametersIsAutomaticallyHidden() {
        Container pc = createImplementationHidingPicoContainer();
        pc.registerConstructor(Map.class, HashMap.class,
            null);
        Map map = (Map) pc.getInstance(Map.class);
        assertNotNull(map);
        assertFalse(map instanceof HashMap);
    }
/*
    public void testSerializedContainerCanRetrieveImplementation() throws PicoException, PicoInitializationException,
            IOException, ClassNotFoundException {
        try {
            super.testSerializedContainerCanRetrieveImplementation();
            fail("The ImplementationHidingPicoContainer should not be able to retrieve the component impl");
        } catch (ClassCastException cce) {
            // expected.
        }
    }
*/
    public void testExceptionThrowingFromHiddenComponent() {
        Container pc = createImplementationHidingPicoContainer();
        pc.registerConstructor(ActionListener.class, Burp.class);
        try {
            ActionListener ac = (ActionListener) pc.getInstance(ActionListener.class);
            ac.actionPerformed(null);
            fail("Oh no.");
        } catch (RuntimeException e) {
            assertEquals("woohoo", e.getMessage());
        }
    }
    public void testProxyAsObject(){
      final Container yan = createYanContainer();
      yan.registerConstructor(String.class, (Class[])null);
      final Component c = yan.getComponentOfType(CharSequence.class);
      assertEquals(c, c);
      final Object s1 = yan.getInstanceOfType(CharSequence.class);
      final Object s2 = yan.getInstanceOfType(CharSequence.class);
      assertEquals(s1, s2);
      final HashMap map = new HashMap();
      map.put(s1, s2);
      assertEquals(s2, map.get(s1));
    }
    public static class Burp implements ActionListener {

        public void actionPerformed(ActionEvent e) {
            throw new RuntimeException("woohoo");
        }
    }
    protected Container getContainerImpl(){
      return new ProxyContainer();
    }
    public interface Man {
      int getEndurance();
    }
    public interface Woman {
      Man getMan();
    }
    public static class Husband implements Man {
      public final Woman woman;

      public Husband(Woman woman) {
          this.woman = woman;
      }

      public int getEndurance() {
          return 10;
      }
    }
    public static class Wife implements Woman {
      public final Man man;

      public Wife(Man man) {
          this.man = man;
      }

      public Man getMan() {
          return man;
      }
    }
    public class Superman implements Man {
      public int getEndurance() {
          return 1000;
      }
    }
    public void testCircularDependency(){
      final Container yan = createYanContainer();
      yan.registerConstructor(Woman.class, Wife.class);
      yan.registerConstructor(Man.class, Husband.class);
      Woman woman = (Woman) yan.getInstance(Woman.class);
      assertEquals(10, woman.getMan().getEndurance());
      Man superman = new Superman();
      //((Swappable)woman.getMan()).hotswap(superman);
      assertTrue(Proxies.setProxyImplementation(woman.getMan(), superman));
      assertEquals(1000, woman.getMan().getEndurance());
      try{
        Proxies.setProxyImplementation(woman, "abc");
        fail("should have failed");
      }
      catch(IllegalArgumentException e){
        assertEquals("object of type java.lang.String is not an instance of tests.jfun.yan.BaseProxyContainerTestCase$Woman",
            e.getMessage());
      }
      assertFalse(Proxies.setProxyImplementation(superman, superman));
    }
}
TOP

Related Classes of tests.jfun.yan.BaseProxyContainerTestCase$Woman

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.