Clean up error handling to make things slightly friendlier on an initial install.
[cfb.git] / test / net / jaekl / cfb / CFBTest.java
index de10fe7206675d49aca12856ac166456620958e0..08d9c393f626e431214536a7001933d6adce3301 100644 (file)
@@ -2,6 +2,7 @@ package net.jaekl.cfb;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
@@ -9,12 +10,14 @@ import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.OutputStreamWriter;
 import java.io.PrintWriter;
+import java.io.StringWriter;
 import java.nio.charset.Charset;
 import java.sql.Connection;
 import java.sql.SQLException;
 import java.util.Locale;
 
 import net.jaekl.cfb.analyze.Analysis;
+import net.jaekl.cfb.analyze.FBMsgFileNotFoundException;
 import net.jaekl.cfb.analyze.MessageMap;
 import net.jaekl.cfb.db.CfbSchema;
 import net.jaekl.cfb.db.Column;
@@ -25,6 +28,7 @@ import net.jaekl.cfb.db.Table;
 import net.jaekl.cfb.db.TypeMismatchException;
 import net.jaekl.cfb.db.driver.DbDriverMock;
 import net.jaekl.cfb.util.Command;
+import net.jaekl.cfb.util.EnvMock;
 import net.jaekl.cfb.xml.MessagesXmlData;
 
 import org.junit.Before;
@@ -133,4 +137,67 @@ public class CFBTest {
                assertEquals(PROJECT_NAME, row.getValue(1));
                assertEquals(VERSION, row.getValue(2));
        }
+       
+       @Test
+       public void testTrans()
+       {
+               Object[][] data = {
+                               { "hello", new Object[] {}, "[hello]" },
+                               { "hello", new Object[] {"world"}, "[hello][world]"}    
+                       };
+               
+               for (Object[] datum : data) {
+                       String key = (String)datum[0];
+                       Object[] params = (Object[])datum[1];
+                       String expected = (String)datum[2];
+                       String actual = m_cfb.trans(key, params);
+                       assertEquals(expected, actual);
+               }
+       }
+       
+       @Test
+       public void testReportException_FBMsgFileNotFoundException() throws IOException
+       {
+               String[][] data = {
+                               { 
+                                       "/home/fred/findbugs3.0.1", "messages.xml", 
+                                       "[cannot.load.fbmsg.file][messages.xml]\n[findbugs.home.is.set.to][FINDBUGS_HOME][/home/fred/findbugs3.0.1]\n"
+                               },
+                               { 
+                                       null, "messages.xml", 
+                                       "[cannot.load.fbmsg.file][messages.xml]\n[findbugs.home.is.not.set][FINDBUGS_HOME]\n"
+                               },
+                               { 
+                                       null, null, "[cannot.load.fbmsg.file][null]\n[findbugs.home.is.not.set][FINDBUGS_HOME]\n" 
+                               }
+               };
+               EnvMock envMock = EnvMock.mock_putInstance();
+               
+               for (String[] datum : data) 
+               {
+                       String fbHome = datum[0];
+                       String filename = datum[1];
+                       String expected = datum[2];
+                       
+                       try (
+                                       StringWriter sw = new StringWriter();
+                                       PrintWriter pw = new PrintWriter(sw);
+                               )
+                       {
+                               envMock.mock_putEnv(CFB.FINDBUGS_HOME, fbHome);
+                               FBMsgFileNotFoundException exc = new FBMsgFileNotFoundException(filename);
+                               m_cfb.reportException(pw, exc);
+                               
+                               pw.close();
+                               sw.close();
+                               
+                               String actual = sw.toString();
+                               boolean pass = actual.endsWith(expected);
+                               if (!pass) {
+                                       System.out.println("Expected:\n" + expected + "\nActual:\n" + actual);
+                               }
+                               assertTrue(pass);
+                       }
+               }
+       }
 }