diff --git a/src/test/java/de/ids_mannheim/korap/TestIndexer.java b/src/test/java/de/ids_mannheim/korap/TestIndexer.java
index ec26670..7b568ae 100644
--- a/src/test/java/de/ids_mannheim/korap/TestIndexer.java
+++ b/src/test/java/de/ids_mannheim/korap/TestIndexer.java
@@ -235,6 +235,64 @@
         assertTrue(outputStream.toString().contains("Added or updated 6 files"));
     }
 
+    @Test
+    public void testProgressOption () throws IOException {
+        java.io.PrintStream originalErr = System.err;
+        ByteArrayOutputStream errStream = new ByteArrayOutputStream();
+        System.setErr(new java.io.PrintStream(errStream));
+        try {
+            Indexer.main(new String[] { "-c", "src/test/resources/krill.properties",
+                    "-i", "src/test/resources/bzk",
+                    "-o", getTestOutputPath("test-progress-index"),
+                    "--progress"});
+        }
+        finally {
+            System.err.flush();
+            System.setErr(originalErr);
+        }
+
+        String progressOutput = errStream.toString();
+        // Expect progress bar renders with bracketed bar, percentage, count, and ETA
+        assertTrue(progressOutput.contains("[==="));
+        assertTrue(progressOutput.contains("100.0%"));
+        assertTrue(progressOutput.contains("1/1"));
+        assertTrue(progressOutput.contains("ETA"));
+    }
+
+    @Test
+    public void testCountTargetFiles () throws Exception {
+        long nullCount = Indexer.countTargetFiles(null);
+        assertEquals(0L, nullCount);
+
+        long dirCount = Indexer.countTargetFiles(new String[] { "src/test/resources/bzk" });
+        assertEquals(1L, dirCount);
+
+        long zipCount = Indexer.countTargetFiles(new String[] { "src/test/resources/rei/rei_sample_krill.zip" });
+        assertEquals(3L, zipCount);
+
+        long tarCount = Indexer.countTargetFiles(new String[] { "src/test/resources/rei/rei_sample_krill.tar" });
+        assertEquals(3L, tarCount);
+
+        long tgzCount = Indexer.countTargetFiles(new String[] { "src/test/resources/rei/rei_sample_krill.tar.gz" });
+        assertEquals(3L, tgzCount);
+
+        long mixedZipTar = Indexer.countTargetFiles(new String[] {
+                "src/test/resources/rei/rei_sample_krill.zip",
+                "src/test/resources/rei/rei_sample_krill.tar" });
+        assertEquals(6L, mixedZipTar);
+
+        long mixedDirZip = Indexer.countTargetFiles(new String[] {
+                "src/test/resources/bzk",
+                "src/test/resources/rei/rei_sample_krill.zip" });
+        assertEquals(4L, mixedDirZip);
+
+        long mixedContentZip = Indexer.countTargetFiles(new String[] { "src/test/resources/rei/mixed_test.zip" });
+        assertEquals(2L, mixedContentZip);
+
+        long invalidZip = Indexer.countTargetFiles(new String[] { "src/test/resources/nonexistent.zip" });
+        assertEquals(0L, invalidZip);
+    }
+
     @Before
     public void setOutputStream () {
         System.setOut(new PrintStream(outputStream));
