/*
* Copyright 2014-2016 Red Hat, Inc, and individual contributors.
*
* 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.projectodd.wunderboss;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
public class WunderBossTest {
@Before
public void setUpContainer() {
testLanguage = new TestLanguage();
}
@Test
public void testCanRegisterLanguage() {
WunderBoss.registerLanguage("test", testLanguage);
assertTrue(testLanguage.registered);
}
@Test
public void testCanGetLanguageRegisteredLanguage() {
WunderBoss.registerLanguage("test", testLanguage);
assertEquals(WunderBoss.findLanguage("test"), testLanguage);
}
@Test(expected = IllegalArgumentException.class)
public void testCantGetUnknownLanguage() {
WunderBoss.findLanguage("not-found");
}
@Test
public void testCanRegisterComponent() {
WunderBoss.registerComponentProvider(TestComponent.class, new TestComponentProvider());
assertTrue(WunderBoss.providesComponent(TestComponent.class));
}
@Test
public void testLastRegisteredComponentWins() {
final TestComponent myComponent = new TestComponent("mine", null);
ComponentProvider<TestComponent> myProvider = new ComponentProvider<TestComponent>() {
@Override
public TestComponent create(String name, Options options) {
return myComponent;
}
};
WunderBoss.registerComponentProvider(TestComponent.class, new TestComponentProvider());
WunderBoss.registerComponentProvider(TestComponent.class, myProvider);
TestComponent testComponent = WunderBoss.findOrCreateComponent(TestComponent.class, "uniquename123", null);
assertEquals(testComponent, myComponent);
}
@Test
public void testCachesComponents() {
WunderBoss.registerComponentProvider(TestComponent.class, new TestComponentProvider());
Component comp = WunderBoss.findOrCreateComponent(TestComponent.class);
assertEquals("default", comp.name());
assertEquals(comp, WunderBoss.findOrCreateComponent(TestComponent.class));
WunderBoss.findOrCreateComponent(TestComponent.class);
}
@Test
public void testCachesComponentsWithNames() {
WunderBoss.registerComponentProvider(TestComponent.class, new TestComponentProvider());
Component comp = WunderBoss.findOrCreateComponent(TestComponent.class, "foobar", null);
assertEquals("foobar", comp.name());
assertEquals(comp, WunderBoss.findOrCreateComponent(TestComponent.class, "foobar", null));
}
@Test
public void testCanStopContainer() throws Exception {
WunderBoss.registerComponentProvider(TestComponent.class, new TestComponentProvider());
TestComponent comp = WunderBoss.findOrCreateComponent(TestComponent.class);
WunderBoss.shutdownAndReset();
assertTrue(comp.stopped);
}
private TestLanguage testLanguage;
}