    public void moduleA() throws IOException {
        String pathname = "test-src/com/redhat/ceylon/ceylondoc/test/modules/single";
        String testName = "moduleA";
        CeylonDocTool tool = tool(pathname, testName, "a");
        tool.setShowPrivate(false);
        tool.setOmitSource(false);
        tool.makeDoc();
        Module module = new Module();
        module.setName(Arrays.asList("a"));
        module.setVersion("3.1.4");
        File destDir = getOutputDir(tool, module);
        assertDirectoryExists(destDir, ".resources");
        assertFileExists(destDir, ".resources/index.js");
        assertFileExists(destDir, ".resources/icons.png");
        assertFileExists(destDir, "index.html");
        assertFileExists(destDir, "search.html");
        assertFileExists(destDir, "interface_Types.html");
        assertFileNotExists(destDir, "class_PrivateClass.html");
        assertFileExists(destDir, "class_SharedClass.html");
        assertFileExists(destDir, "class_CaseSensitive.html");
        assertFileNotExists(destDir, "class_caseSensitive.html");
        assertFileExists(destDir, "object_caseSensitive.html");
        assertMatchInFile(destDir, "index.html", 
                Pattern.compile("This is a <strong>test</strong> module"));
        assertMatchInFile(destDir, "index.html", 
                Pattern.compile("This is a <strong>test</strong> package"));
        assertMatchInFile(destDir, "class_SharedClass.html", 
                Pattern.compile("<.*? id='sharedAttribute'.*?>"));
        assertNoMatchInFile(destDir, "class_SharedClass.html", 
                Pattern.compile("<.*? id='privateAttribute'.*?>"));
        assertMatchInFile(destDir, "class_SharedClass.html", 
                Pattern.compile("<.*? id='sharedGetter'.*?>"));
        assertNoMatchInFile(destDir, "class_SharedClass.html", 
                Pattern.compile("<.*? id='privateGetter'.*?>"));
        assertMatchInFile(destDir, "class_SharedClass.html", 
                Pattern.compile("<.*? id='sharedMethod'.*?>"));
        assertNoMatchInFile(destDir, "class_SharedClass.html", 
                Pattern.compile("<.*? id='privateMethod'.*?>"));
        assertMatchInFile(destDir, "index.html", 
                Pattern.compile("<div class='by'>By: Tom Bentley</div>"));
        assertMatchInFile(destDir, "interface_Types.html", 
                Pattern.compile("<div class='by'>By: Tom Bentley</div>"));
        assertMatchInFile(destDir, "class_StubClass.html", 
                Pattern.compile("<div class='throws'>Throws:"));        
        assertMatchInFile(destDir, "class_StubClass.html", 
                Pattern.compile("OverflowException<p>if the number is too large to be represented as an integer</p>"));        
        assertMatchInFile(destDir, "class_StubClass.html", 
                Pattern.compile("<a href='class_StubException.html'>StubException</a><p><code>when</code> with <strong>WIKI</strong> syntax</p>"));
        assertFileExists(destDir, "interface_StubClass.StubInnerInterface.html");
        assertFileExists(destDir, "class_StubClass.StubInnerClass.html");
        assertMatchInFile(destDir, "class_StubClass.html", 
                Pattern.compile("Nested Interfaces"));
        assertMatchInFile(destDir, "class_StubClass.html", 
                Pattern.compile("<a href='interface_StubClass.StubInnerInterface.html'>StubInnerInterface</a>"));
        assertMatchInFile(destDir, "class_StubClass.html", 
                Pattern.compile("Nested Classes"));
        assertMatchInFile(destDir, "class_StubClass.html", 
                Pattern.compile("<a href='class_StubClass.StubInnerClass.html'>StubInnerClass</a>"));
        assertMatchInFile(destDir, "interface_StubClass.StubInnerInterface.html", 
                Pattern.compile("Enclosing class: <a href='class_StubClass.html'>StubClass</a>"));
        assertMatchInFile(destDir, "class_StubClass.StubInnerClass.html", 
                Pattern.compile("Enclosing class: <a href='class_StubClass.html'>StubClass</a>"));
        assertMatchInFile(destDir, "class_StubClass.StubInnerClass.html", 
                Pattern.compile("Satisfied Interfaces: <a href='interface_StubClass.StubInnerInterface.html'>StubInnerInterface</a>"));
        assertIcons(destDir);
    }

    public void moduleA() throws IOException {
        String pathname = "test-src/com/redhat/ceylon/ceylondoc/test/modules/single";
        String testName = "moduleA";
        CeylonDocTool tool = tool(pathname, testName, "a");
        tool.setShowPrivate(false);
        tool.setOmitSource(false);
        tool.makeDoc();
        Module module = new Module();
        module.setName(Arrays.asList("a"));
        module.setVersion("3.1.4");
        File destDir = getOutputDir(tool, module);
        assertDirectoryExists(destDir, ".resources");
        assertFileExists(destDir, ".resources/index.js");
        assertFileExists(destDir, ".resources/icons.png");
        assertFileExists(destDir, "index.html");
        assertFileExists(destDir, "search.html");
        assertFileExists(destDir, "interface_Types.html");
        assertFileNotExists(destDir, "class_PrivateClass.html");
        assertFileExists(destDir, "class_SharedClass.html");
        assertFileExists(destDir, "class_CaseSensitive.html");
        assertFileNotExists(destDir, "class_caseSensitive.html");
        assertFileExists(destDir, "object_caseSensitive.html");
        assertMatchInFile(destDir, "index.html", 
                Pattern.compile("This is a <strong>test</strong> module"));
        assertMatchInFile(destDir, "index.html", 
                Pattern.compile("This is a <strong>test</strong> package"));
        assertMatchInFile(destDir, "class_SharedClass.html", 
                Pattern.compile("<.*? id='sharedAttribute'.*?>"));
        assertNoMatchInFile(destDir, "class_SharedClass.html", 
                Pattern.compile("<.*? id='privateAttribute'.*?>"));
        assertMatchInFile(destDir, "class_SharedClass.html", 
                Pattern.compile("<.*? id='sharedGetter'.*?>"));
        assertNoMatchInFile(destDir, "class_SharedClass.html", 
                Pattern.compile("<.*? id='privateGetter'.*?>"));
        assertMatchInFile(destDir, "class_SharedClass.html", 
                Pattern.compile("<.*? id='sharedMethod'.*?>"));
        assertNoMatchInFile(destDir, "class_SharedClass.html", 
                Pattern.compile("<.*? id='privateMethod'.*?>"));
        assertMatchInFile(destDir, "index.html", 
                Pattern.compile("<div class='by'>By: Tom Bentley</div>"));
        assertMatchInFile(destDir, "interface_Types.html", 
                Pattern.compile("<div class='by'>By: Tom Bentley</div>"));
        assertMatchInFile(destDir, "class_StubClass.html", 
                Pattern.compile("<div class='throws'>Throws:"));        
        assertMatchInFile(destDir, "class_StubClass.html", 
                Pattern.compile("OverflowException<p>if the number is too large to be represented as an integer</p>"));        
        assertMatchInFile(destDir, "class_StubClass.html", 
                Pattern.compile("<a href='class_StubException.html'>StubException</a><p><code>when</code> with <strong>WIKI</strong> syntax</p>"));
        assertFileExists(destDir, "interface_StubClass.StubInnerInterface.html");
        assertFileExists(destDir, "class_StubClass.StubInnerClass.html");
        assertMatchInFile(destDir, "class_StubClass.html", 
                Pattern.compile("Nested Interfaces"));
        assertMatchInFile(destDir, "class_StubClass.html", 
                Pattern.compile("<a href='interface_StubClass.StubInnerInterface.html'>StubInnerInterface</a>"));
        assertMatchInFile(destDir, "class_StubClass.html", 
                Pattern.compile("Nested Classes"));
        assertMatchInFile(destDir, "class_StubClass.html", 
                Pattern.compile("<a href='class_StubClass.StubInnerClass.html'>StubInnerClass</a>"));
        assertMatchInFile(destDir, "interface_StubClass.StubInnerInterface.html", 
                Pattern.compile("Enclosing class: <i class='icon-class'></i><a href='class_StubClass.html'>StubClass</a>"));
        assertMatchInFile(destDir, "class_StubClass.StubInnerClass.html", 
                Pattern.compile("Enclosing class: <i class='icon-class'></i><a href='class_StubClass.html'>StubClass</a>"));
        assertMatchInFile(destDir, "class_StubClass.StubInnerClass.html", 
                Pattern.compile("Satisfied Interfaces: <a href='interface_StubClass.StubInnerInterface.html'>StubInnerInterface</a>"));
        assertIcons(destDir);
    }
