@Test public void testImplementationsOf() throws Exception { DynamicFactory factory = new DynamicFactory(5); IElement element = mock(MockedElement.class); IElement atom = mock(MockedAtom.class); assertThat(factory.implementorsOf(IElement.class).size(), is(0)); factory.register(IElement.class, element.getClass()); assertThat(factory.implementorsOf(IElement.class).size(), is(1)); factory.register(IElement.class, atom.getClass()); assertThat(factory.implementorsOf(IElement.class).size(), is(2)); assertThat(factory.implementorsOf(IElement.class).size(), is(2)); }
@Test public void testRegister() throws Exception { DynamicFactory.InterfaceProvider accessor = mock(DynamicFactory.InterfaceProvider.class); IAtom mock = mock(MockedAtom.class); when(accessor.getInterfaces(mock.getClass())).thenReturn(new Class<?>[]{IAtom.class}); DynamicFactory factory = new DynamicFactory(accessor, 5); assertTrue(factory.implementorsOf(IAtom.class).isEmpty()); factory.register(mock.getClass()); assertFalse(factory.implementorsOf(IAtom.class).isEmpty()); }
@Test public void testRegister_Explicit() throws Exception { IAtom mock = mock(MockedAtom.class); DynamicFactory factory = new DynamicFactory(5); assertTrue(factory.implementorsOf(IAtom.class).isEmpty()); // register the mock class factory.register(IAtom.class, mock.getClass()); assertFalse(factory.implementorsOf(IAtom.class).isEmpty()); // Atom is a subclass of Element so we can actually register it as // element too assertTrue(factory.implementorsOf(IElement.class).isEmpty()); factory.register(IElement.class, mock.getClass()); assertFalse(factory.implementorsOf(IElement.class).isEmpty()); }
@Test public void testRegister_PrivateConstructor() throws Exception { DynamicFactory factory = new DynamicFactory(5); assertTrue(factory.implementorsOf(ICDKObject.class).isEmpty()); // register the mock class factory.register(ICDKObject.class, DynamicFactoryTestMock.class); Iterator<?> it = factory.suggest(ICDKObject.class); List<Object> list = new ArrayList<Object>(5); while (it.hasNext()) { list.add(it.next()); } assertThat("mocked atom should have two public constructors", list.size(), is(2)); }
/** * Check we get an exception when we try to build from a non-interface. * @throws Exception */ @Test(expected = IllegalArgumentException.class) public void testOfConcrete_Params() throws Exception { IAtom mock = mock(MockedAtom.class); DynamicFactory factory = new DynamicFactory(5); assertTrue(factory.implementorsOf(IAtom.class).isEmpty()); // register the mock class factory.register(IAtom.class, mock.getClass()); // ofClass -> illegal argument, non-interface IAtom instance = factory.ofClass(mock.getClass(), this); }
@Test public void testOfClass() throws Exception { IAtom mock = mock(MockedAtom.class); DynamicFactory factory = new DynamicFactory(5); assertTrue(factory.implementorsOf(IAtom.class).isEmpty()); // register the mock class factory.register(IAtom.class, mock.getClass()); // ofClass needs to know the inner class is coming from 'this' IAtom instance = factory.ofClass(IAtom.class, this); assertNotNull(instance); }
@Test public void testOfClass_WithParams() throws Exception { IAtom mock = mock(MockedAtom.class); DynamicFactory factory = new DynamicFactory(5); assertTrue(factory.implementorsOf(IAtom.class).isEmpty()); // register the mock class factory.register(IAtom.class, mock.getClass()); // ofClass needs to know the inner class is coming from 'this' IAtom instance = factory.ofClass(IAtom.class, this, "C"); assertNotNull(instance); assertEquals("C", instance.getSymbol()); }
@Test(expected = IllegalArgumentException.class) public void testOfConcrete() throws Exception { DynamicFactory factory = new DynamicFactory(5); assertTrue(factory.implementorsOf(ICDKObject.class).isEmpty()); // register the mock class factory.register(ICDKObject.class, DynamicFactoryTestMock.class); // ofClass -> illegal argument, non-interface ICDKObject instance = factory.ofClass(DynamicFactoryTestMock.class); }