View Javadoc

1   // Copyright (C) 2008 - 2011 Philip Aston
2   // All rights reserved.
3   //
4   // This file is part of The Grinder software distribution. Refer to
5   // the file LICENSE which is part of The Grinder distribution for
6   // licensing details. The Grinder distribution is available on the
7   // Internet at http://grinder.sourceforge.net/
8   //
9   // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
10  // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
11  // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
12  // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
13  // COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
14  // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
15  // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
16  // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
17  // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
18  // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
19  // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
20  // OF THE POSSIBILITY OF SUCH DAMAGE.
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   * Unit tests for {@link AbstractMainClass}.
43   *
44   * @author Philip Aston
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 }