1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 package net.grinder.util;
23
24 import static org.junit.Assert.assertEquals;
25 import static org.junit.Assert.assertSame;
26 import static org.junit.Assert.fail;
27 import static org.mockito.Matchers.contains;
28 import static org.mockito.Matchers.isA;
29 import static org.mockito.Mockito.mock;
30 import static org.mockito.Mockito.verify;
31 import static org.mockito.Mockito.verifyNoMoreInteractions;
32 import net.grinder.common.GrinderException;
33 import net.grinder.testutility.AssertUtilities;
34 import net.grinder.util.AbstractMainClass.LoggedInitialisationException;
35 import net.grinder.util.JVM.VersionException;
36
37 import org.junit.Test;
38 import org.slf4j.Logger;
39
40
41
42
43
44
45
46 public class TestAbstractMainClass {
47
48 @Test public void testAbstractMainClass() throws Exception {
49
50 final Logger logger = mock(Logger.class);
51 final String myUsage = "do some stuff";
52
53 final MyMainClass mainClass = new MyMainClass(logger, myUsage);
54
55 assertSame(logger, mainClass.getLogger());
56
57 final String javaVersion = System.getProperty("java.version");
58
59 try {
60 try {
61 System.setProperty("java.version", "whatever");
62 new MyMainClass(logger, myUsage);
63 fail("Expected VersionException");
64 }
65 catch (VersionException e) {
66 }
67
68 try {
69 System.setProperty("java.version", "1.3");
70 new MyMainClass(logger, myUsage);
71 fail("Expected LoggedInitialisationException");
72 }
73 catch (LoggedInitialisationException e) {
74 AssertUtilities.assertContains(e.getMessage(), "Unsupported");
75 verify(logger).error(contains("incompatible version"),
76 isA(JVM.class),
77 isA(String.class));
78 }
79 }
80 finally {
81 System.setProperty("java.version", javaVersion);
82 }
83
84 final LoggedInitialisationException barfError = mainClass.barfError("foo");
85 assertEquals("foo", barfError.getMessage());
86 verify(logger).error(contains("foo"));
87
88 final LoggedInitialisationException barfUsage = mainClass.barfUsage();
89 AssertUtilities.assertContains(barfUsage.getMessage(), myUsage);
90
91 verify(logger).error(contains(myUsage));
92 verifyNoMoreInteractions(logger);
93
94 }
95
96 private static class MyMainClass extends AbstractMainClass {
97 public MyMainClass(Logger logger, String usage) throws GrinderException {
98 super(logger, usage);
99 }
100 }
101 }