1   
2   package jp.sourceforge.rpn_computer.test;
3   
4   import jp.sourceforge.rpn_computer.RpnCommandList;
5   import jp.sourceforge.rpn_computer.RpnCompiler;
6   import jp.sourceforge.rpn_computer.RpnComputer;
7   import jp.sourceforge.rpn_computer.RpnNode;
8   import jp.sourceforge.rpn_computer.RpnParser;
9   import junit.framework.TestCase;
10  
11  /**
12   * {@link RpnComputer}クラスに関するテストを行います。
13   * 
14   * @author uguu@users.sourceforge.jp
15   */
16  public class RpnComputerTest extends TestCase {
17  
18      /**
19       * インスタンスを初期化します。
20       * 
21       * @param name
22       *            テストの名前。
23       */
24      public RpnComputerTest(String name) {
25          super(name);
26      }
27  
28      /**
29       * 正常系テスト1。
30       */
31      public void testNormal1() {
32          String exp = "1 + 2";
33  
34          RpnParser parser = new RpnParser();
35          RpnNode node = parser.parse(exp);
36  
37          RpnCompiler compiler = new RpnCompiler();
38          RpnCommandList cl = compiler.compile(node);
39  
40          RpnComputer computer = new RpnComputer();
41          double resultValue = computer.compute(cl);
42  
43          assertEquals(3, resultValue, 0);
44      }
45  
46      /**
47       * 正常系テスト2。
48       */
49      public void testNormal2() {
50          String exp = "(12.34 + 56.78) * 3.14";
51  
52          RpnParser parser = new RpnParser();
53          RpnNode node = parser.parse(exp);
54  
55          RpnCompiler compiler = new RpnCompiler();
56          RpnCommandList cl = compiler.compile(node);
57  
58          RpnComputer computer = new RpnComputer();
59          double resultValue = computer.compute(cl);
60  
61          assertEquals(217.0368, resultValue, 0.00000000001);
62      }
63  
64      /**
65       * 正常系テスト3。
66       */
67      public void testNormal3() {
68          String exp = "(12.34 + 56.78) * 3.14";
69  
70          RpnComputer computer = new RpnComputer();
71          double resultValue = computer.compute(exp);
72  
73          assertEquals(217.0368, resultValue, 0.00000000001);
74      }
75  
76      /**
77       * 異常系テスト1。 commandListがnullのときに{@link NullPointerException}例外がスローされることを確認します。
78       */
79      public void testFail1() {
80          RpnComputer comp = new RpnComputer();
81          try {
82              comp.compute((RpnCommandList) null);
83              fail();
84          } catch (NullPointerException e) {
85              assertEquals("commandListがnullです。", e.getMessage());
86          }
87      }
88  }