Update conversion tests and test files
[fanfix.git] / src / be / nikiroo / fanfix / test / ConversionTest.java
index 54d08858fa3b087cdae553f4523518a7fb089592..4fe1653d4a81f08965dc8e5f4b54b5b0fb7c4e83 100644 (file)
@@ -6,7 +6,10 @@ import java.io.FilenameFilter;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipInputStream;
 
@@ -24,10 +27,20 @@ class ConversionTest extends TestLauncher {
        private File testFile;
        private File expectedDir;
        private File resultDir;
+       private List<BasicOutput.OutputType> realTypes;
+       private Map<String, List<String>> skipCompare;
 
        public ConversionTest(String[] args) {
                super("Conversion", args);
 
+               // Special mode SYSOUT is not a file type (System.out)
+               realTypes = new ArrayList<BasicOutput.OutputType>();
+               for (BasicOutput.OutputType type : BasicOutput.OutputType.values()) {
+                       if (!BasicOutput.OutputType.SYSOUT.equals(type)) {
+                               realTypes.add(type);
+                       }
+               }
+
                addTest(new TestCase("Read the test file") {
                        @Override
                        public void test() throws Exception {
@@ -48,11 +61,8 @@ class ConversionTest extends TestLauncher {
                        }
                });
 
-               for (BasicOutput.OutputType type : BasicOutput.OutputType.values()) {
-                       // NOT for special mode SYSOUT
-                       if (!BasicOutput.OutputType.SYSOUT.equals(type)) {
-                               addTest(getTestFor(type));
-                       }
+               for (BasicOutput.OutputType type : realTypes) {
+                       addTest(getTestFor(type));
                }
        }
 
@@ -63,6 +73,15 @@ class ConversionTest extends TestLauncher {
                resultDir = new File("test/result/");
 
                tempFiles = new TempFiles("Fanfix-ConversionTest");
+
+               skipCompare = new HashMap<String, List<String>>();
+               skipCompare.put("epb.ncx",
+                               Arrays.asList("         <meta name=\"dtb:uid\" content="));
+               skipCompare.put("epb.opf", Arrays.asList("      <dc:subject>",
+                               "      <dc:identifier id=\"BookId\" opf:scheme=\"URI\">"));
+               skipCompare.put(".info",
+                               Arrays.asList("CREATION_DATE=", "SUBJECT=", "URL=", "UUID="));
+               skipCompare.put("URL", Arrays.asList("file:/"));
        }
 
        @Override
@@ -79,23 +98,21 @@ class ConversionTest extends TestLauncher {
                                                + type.getDefaultExtension(false));
 
                                // Check conversion:
-                               compareFiles(this, expectedDir, resultDir, type, null);
-
-                               // Cross-checks:
+                               compareFiles(this, expectedDir, resultDir, type, "Generate "
+                                               + type);
 
                                // LATEX not supported as input
-                               if (!BasicOutput.OutputType.LATEX.equals(type)) {
-                                       for (BasicOutput.OutputType crossType : BasicOutput.OutputType
-                                                       .values()) {
-                                               // NOT for special mode SYSOUT
-                                               if (!BasicOutput.OutputType.SYSOUT.equals(crossType)) {
-                                                       File crossDir = tempFiles
-                                                                       .createTempDir("cross-result");
-                                                       generate(this, target, crossDir, crossType);
-                                                       compareFiles(this, crossDir, resultDir, crossType,
-                                                                       crossType);
-                                               }
-                                       }
+                               if (BasicOutput.OutputType.LATEX.equals(type)) {
+                                       return;
+                               }
+
+                               // Cross-checks:
+                               for (BasicOutput.OutputType crossType : realTypes) {
+                                       File crossDir = tempFiles.createTempDir("cross-result");
+                                       generate(this, target, crossDir, crossType);
+                                       compareFiles(this, resultDir, crossDir, crossType,
+                                                       "Cross compare " + crossType + " generated from "
+                                                                       + type);
                                }
                        }
                };
@@ -150,15 +167,15 @@ class ConversionTest extends TestLauncher {
        }
 
        private void compareFiles(TestCase testCase, File expectedDir,
-                       File resultDir, final BasicOutput.OutputType typeToCompare,
-                       final BasicOutput.OutputType sourceType) throws Exception {
-
+                       File resultDir, final BasicOutput.OutputType limitTiFiles,
+                       final String errMess) throws Exception {
                FilenameFilter filter = null;
-               if (typeToCompare != null) {
+               if (limitTiFiles != null) {
                        filter = new FilenameFilter() {
                                @Override
                                public boolean accept(File dir, String name) {
-                                       return name.startsWith(typeToCompare.toString());
+                                       return name.toLowerCase().startsWith(
+                                                       limitTiFiles.toString().toLowerCase());
                                }
                        };
                }
@@ -168,22 +185,20 @@ class ConversionTest extends TestLauncher {
                List<String> expectedFiles = Arrays.asList(expectedDir.list(filter));
                expectedFiles.sort(null);
 
-               testCase.assertEquals("The resulting file names are not expected",
-                               expectedFiles, resultFiles);
+               testCase.assertEquals(errMess, expectedFiles, resultFiles);
 
                for (int i = 0; i < resultFiles.size(); i++) {
                        File expected = new File(expectedDir, expectedFiles.get(i));
                        File result = new File(resultDir, resultFiles.get(i));
 
-                       testCase.assertEquals(
-                                       "Type mismatch: expected a "
-                                                       + (expected.isDirectory() ? "directory" : "file")
-                                                       + ", received a "
-                                                       + (result.isDirectory() ? "directory" : "file"),
+                       testCase.assertEquals(errMess + ": type mismatch: expected a "
+                                       + (expected.isDirectory() ? "directory" : "file")
+                                       + ", received a "
+                                       + (result.isDirectory() ? "directory" : "file"),
                                        expected.isDirectory(), result.isDirectory());
 
                        if (expected.isDirectory()) {
-                               compareFiles(testCase, expected, result, null, sourceType);
+                               compareFiles(testCase, expected, result, null, errMess);
                                continue;
                        }
 
@@ -195,7 +210,7 @@ class ConversionTest extends TestLauncher {
                                                + "[zip-content]");
                                unzip(expected, tmpExpected);
                                unzip(result, tmpResult);
-                               compareFiles(testCase, tmpExpected, tmpResult, null, sourceType);
+                               compareFiles(testCase, tmpExpected, tmpResult, null, errMess);
                        } else {
                                List<String> expectedLines = Arrays.asList(IOUtils
                                                .readSmallFile(expected).split("\n"));
@@ -213,13 +228,14 @@ class ConversionTest extends TestLauncher {
                                        String resultLine = resultLines.get(j);
 
                                        boolean skip = false;
-                                       for (String skipStart : new String[] { "CREATION_DATE=",
-                                                       "SUBJECT=", "URL=", "UUID=" }) {
-                                               if (name.endsWith(".info")
-                                                               && expectedLine.startsWith(skipStart)
-                                                               && resultLine.startsWith(skipStart)) {
-                                                       // TODO: check the format?
-                                                       skip = true;
+                                       for (Entry<String, List<String>> skipThose : skipCompare
+                                                       .entrySet()) {
+                                               for (String skipStart : skipThose.getValue()) {
+                                                       if (name.endsWith(skipThose.getKey())
+                                                                       && expectedLine.startsWith(skipStart)
+                                                                       && resultLine.startsWith(skipStart)) {
+                                                               skip = true;
+                                                       }
                                                }
                                        }
 
@@ -227,14 +243,15 @@ class ConversionTest extends TestLauncher {
                                                continue;
                                        }
 
-                                       testCase.assertEquals("Line " + (j + 1) + " (" + sourceType
-                                                       + ") is not the same in file " + name,
-                                                       expectedLine, resultLine);
+                                       testCase.assertEquals(errMess + ": line " + (j + 1)
+                                                       + " is not the same in file " + name, expectedLine,
+                                                       resultLine);
                                }
                        }
                }
        }
 
+       // TODO: remove and use IOUtils when updated
        private static void unzip(File zipFile, File targetDirectory)
                        throws IOException {
                if (targetDirectory.exists() && targetDirectory.isFile()) {