MentaContainer

Rev

Rev 20 | Rev 27 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

package org.mentacontainer.impl;

import junit.framework.Assert;

import org.junit.Test;
import org.mentacontainer.Container;

public class MentaContainerTest {

        @Test
        public void testSimpleGet() {

                Container c = new MentaContainer();

                c.ioc("myStr", String.class);

                Assert.assertEquals("", c.get("myStr"));

                String s1 = (String) c.get("myStr");

                String s2 = (String) c.get("myStr");

                Assert.assertTrue(s1 != s2);

                Assert.assertTrue(s1.equals(s2));
        }

        @Test
        public void testConstructorInit() {

                Container c = new MentaContainer();

                c.ioc("myStr", String.class).addInitValue("hello");

                Assert.assertEquals("hello", c.get("myStr"));

                String s1 = (String) c.get("myStr");

                String s2 = (String) c.get("myStr");

                Assert.assertTrue(s1 != s2);

                Assert.assertTrue(s1.equals(s2));

                c.ioc("anotherStr", String.class).addInitValue("hi");

                String s3 = (String) c.get("anotherStr");

                Assert.assertTrue(s1 != s3);

                Assert.assertFalse(s1.equals(s3));
        }

        @Test
        public void testSingleton() {

                Container c = new MentaContainer();

                c.ioc("myStr", String.class, true).addInitValue("hello");

                Assert.assertEquals("hello", c.get("myStr"));

                String s1 = (String) c.get("myStr");

                String s2 = (String) c.get("myStr");

                Assert.assertTrue(s1 == s2);

                Assert.assertTrue(s1.equals(s2));
        }

        @Test(expected = RuntimeException.class)
        public void testAddingComponentTwice() {

                Container c = new MentaContainer();

                c.ioc("myStr", String.class);
               
                c.ioc("myStr", String.class);
        }

        @Test(expected = RuntimeException.class)
        public void testSettingWiringTwice() {

                Container c = new MentaContainer();

                c.autowire("myThread", Runnable.class);

                c.autowire("myThread", Runnable.class);
        }
       
        public static interface MyDAO {
               
                public Object getSomething();
               
        }
       
        public static class Connection {
               
                private final String name;
               
                public Connection(String name) {
                        this.name = name;
                }
               
                public String toString() {
                        return getClass().getName() + ": " + name;
                }
               
                public String getName() { return name; }
        }
       
        public static class JdbcMyDAO implements MyDAO {
               
                private Connection conn;
               
                public void setConn(Connection conn) { this.conn = conn; }
               
                public Connection getConn() { return conn; }
               
                public Object getSomething() {
                       
                        // use the connection to get something...
                       
                        return conn.toString(); // it cannot be null!
                }
        }
       
        @Test
        public void testAutoWiring() {
               
                Container c = new MentaContainer();
               
                c.ioc("myDAO", JdbcMyDAO.class);
               
                c.ioc("connection", Connection.class).addInitValue("A super JDBC connection!");
               
                c.autowire("conn" /* the property name that will receive the dependency */,
                                   Connection.class /* the type of the property that will receive the dependency */,
                                   "connection" /* the source inside the container */);
               
                MyDAO myDAO = (MyDAO) c.get("myDAO");
               
                // check implementation...
               
                Assert.assertEquals(JdbcMyDAO.class, myDAO.getClass());
               
                // check dependency...
               
                Connection conn = ((JdbcMyDAO) myDAO).getConn();
               
                Assert.assertNotNull(conn);
               
                Assert.assertEquals("A super JDBC connection!", conn.getName());
               
                Assert.assertNotNull(myDAO.getSomething());
        }
}