1 package com.atlassian.plugin.hostcontainer;
2
3 import com.google.common.collect.ImmutableMap;
4 import org.junit.Test;
5
6 import java.util.Collections;
7
8 import static org.junit.Assert.assertEquals;
9
10 public class TestSimpleConstructorModuleFactory {
11
12 @Test
13 public void testCreateModule() {
14 final SimpleConstructorHostContainer factory = new SimpleConstructorHostContainer(
15 ImmutableMap.of(String.class, "bob"));
16 final Base world = factory.create(OneArg.class);
17 assertEquals("bob", world.getName());
18 }
19
20 @Test
21 public void testCreateModuleFindBiggest() {
22 final SimpleConstructorHostContainer factory = new SimpleConstructorHostContainer(
23 ImmutableMap.of(String.class, "bob", Integer.class, 10));
24 final Base world = factory.create(TwoArg.class);
25 assertEquals("bob 10", world.getName());
26 }
27
28 @Test
29 public void testCreateModuleFindSmaller() {
30 final SimpleConstructorHostContainer factory = new SimpleConstructorHostContainer(
31 ImmutableMap.of(String.class, "bob"));
32 final Base world = factory.create(TwoArg.class);
33 assertEquals("bob", world.getName());
34 }
35
36 @Test(expected = IllegalArgumentException.class)
37 public void testCreateModuleNoMatch() {
38 final SimpleConstructorHostContainer factory = new SimpleConstructorHostContainer(Collections.emptyMap());
39 factory.create(OneArg.class);
40 }
41
42 public abstract static class Base {
43 private final String name;
44
45 Base(final String name) {
46 this.name = name;
47 }
48
49 public String getName() {
50 return name;
51 }
52 }
53
54 public static class OneArg extends Base {
55 public OneArg(final String name) {
56 super(name);
57 }
58 }
59
60 public static class TwoArg extends Base {
61 public TwoArg(final String name) {
62 super(name);
63 }
64
65 public TwoArg(final String name, final Integer age) {
66 super(name + " " + age);
67 }
68 }
69 }