Skip to content

Commit 6ee4337

Browse files
bundoleeclaude
andcommitted
test: add unit tests for --hybrid-mode and --hybrid-ocr options
Add 16 tests covering CLI option parsing and HybridConfig behavior: - CLIOptionsTest: 10 tests for option parsing and validation - HybridDocumentProcessorTest: 6 tests for mode/ocr config methods Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1 parent cd8a2c6 commit 6ee4337

2 files changed

Lines changed: 152 additions & 0 deletions

File tree

java/opendataloader-pdf-cli/src/test/java/org/opendataloader/pdf/cli/CLIOptionsTest.java

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -357,4 +357,102 @@ void testCreateConfig_withWhitespaceImageDir() throws ParseException {
357357

358358
assertNull(config.getImageDir()); // whitespace-only treated as null (use default)
359359
}
360+
361+
// ===== Hybrid Mode Option Tests =====
362+
363+
@Test
364+
void testDefineOptions_containsHybridModeOption() {
365+
assertTrue(options.hasOption("hybrid-mode"));
366+
}
367+
368+
@Test
369+
void testDefineOptions_containsHybridOcrOption() {
370+
assertTrue(options.hasOption("hybrid-ocr"));
371+
}
372+
373+
@Test
374+
void testCreateConfig_withHybridModeAuto() throws ParseException {
375+
String[] args = {"--hybrid", "docling", "--hybrid-mode", "auto", testPdf.getAbsolutePath()};
376+
CommandLine cmd = parser.parse(options, args);
377+
378+
Config config = CLIOptions.createConfigFromCommandLine(cmd);
379+
380+
assertEquals("auto", config.getHybridConfig().getMode());
381+
assertFalse(config.getHybridConfig().isFullMode());
382+
}
383+
384+
@Test
385+
void testCreateConfig_withHybridModeFull() throws ParseException {
386+
String[] args = {"--hybrid", "docling", "--hybrid-mode", "full", testPdf.getAbsolutePath()};
387+
CommandLine cmd = parser.parse(options, args);
388+
389+
Config config = CLIOptions.createConfigFromCommandLine(cmd);
390+
391+
assertEquals("full", config.getHybridConfig().getMode());
392+
assertTrue(config.getHybridConfig().isFullMode());
393+
}
394+
395+
@Test
396+
void testCreateConfig_withInvalidHybridMode() throws ParseException {
397+
String[] args = {"--hybrid-mode", "invalid", testPdf.getAbsolutePath()};
398+
CommandLine cmd = parser.parse(options, args);
399+
400+
assertThrows(IllegalArgumentException.class, () -> {
401+
CLIOptions.createConfigFromCommandLine(cmd);
402+
});
403+
}
404+
405+
@Test
406+
void testCreateConfig_withHybridOcrAuto() throws ParseException {
407+
String[] args = {"--hybrid", "docling", "--hybrid-ocr", "auto", testPdf.getAbsolutePath()};
408+
CommandLine cmd = parser.parse(options, args);
409+
410+
Config config = CLIOptions.createConfigFromCommandLine(cmd);
411+
412+
assertEquals("auto", config.getHybridConfig().getOcrMode());
413+
assertFalse(config.getHybridConfig().isForceOcr());
414+
}
415+
416+
@Test
417+
void testCreateConfig_withHybridOcrForce() throws ParseException {
418+
String[] args = {"--hybrid", "docling", "--hybrid-ocr", "force", testPdf.getAbsolutePath()};
419+
CommandLine cmd = parser.parse(options, args);
420+
421+
Config config = CLIOptions.createConfigFromCommandLine(cmd);
422+
423+
assertEquals("force", config.getHybridConfig().getOcrMode());
424+
assertTrue(config.getHybridConfig().isForceOcr());
425+
}
426+
427+
@Test
428+
void testCreateConfig_withInvalidHybridOcr() throws ParseException {
429+
String[] args = {"--hybrid-ocr", "invalid", testPdf.getAbsolutePath()};
430+
CommandLine cmd = parser.parse(options, args);
431+
432+
assertThrows(IllegalArgumentException.class, () -> {
433+
CLIOptions.createConfigFromCommandLine(cmd);
434+
});
435+
}
436+
437+
@Test
438+
void testCreateConfig_defaultHybridModeAndOcr() throws ParseException {
439+
String[] args = {"--hybrid", "docling", testPdf.getAbsolutePath()};
440+
CommandLine cmd = parser.parse(options, args);
441+
442+
Config config = CLIOptions.createConfigFromCommandLine(cmd);
443+
444+
assertEquals("auto", config.getHybridConfig().getMode());
445+
assertEquals("auto", config.getHybridConfig().getOcrMode());
446+
}
447+
448+
@Test
449+
void testCreateConfig_withDoclingBackend() throws ParseException {
450+
String[] args = {"--hybrid", "docling", testPdf.getAbsolutePath()};
451+
CommandLine cmd = parser.parse(options, args);
452+
453+
Config config = CLIOptions.createConfigFromCommandLine(cmd);
454+
455+
assertEquals("docling", config.getHybrid());
456+
assertTrue(config.isHybridEnabled());
457+
}
360458
}

java/opendataloader-pdf-core/src/test/java/org/opendataloader/pdf/processors/HybridDocumentProcessorTest.java

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -304,4 +304,58 @@ public void testHybridRequestWithHtmlOnly() {
304304
Assertions.assertFalse(request.wantsMarkdown());
305305
Assertions.assertTrue(request.wantsHtml());
306306
}
307+
308+
// ===== HybridConfig Mode Tests =====
309+
310+
@Test
311+
public void testHybridConfigModeDefaults() {
312+
HybridConfig config = new HybridConfig();
313+
314+
Assertions.assertEquals(HybridConfig.MODE_AUTO, config.getMode());
315+
Assertions.assertFalse(config.isFullMode());
316+
}
317+
318+
@Test
319+
public void testHybridConfigModeFullMode() {
320+
HybridConfig config = new HybridConfig();
321+
config.setMode(HybridConfig.MODE_FULL);
322+
323+
Assertions.assertEquals(HybridConfig.MODE_FULL, config.getMode());
324+
Assertions.assertTrue(config.isFullMode());
325+
}
326+
327+
@Test
328+
public void testHybridConfigOcrDefaults() {
329+
HybridConfig config = new HybridConfig();
330+
331+
Assertions.assertEquals(HybridConfig.OCR_AUTO, config.getOcrMode());
332+
Assertions.assertFalse(config.isForceOcr());
333+
}
334+
335+
@Test
336+
public void testHybridConfigOcrForce() {
337+
HybridConfig config = new HybridConfig();
338+
config.setOcrMode(HybridConfig.OCR_FORCE);
339+
340+
Assertions.assertEquals(HybridConfig.OCR_FORCE, config.getOcrMode());
341+
Assertions.assertTrue(config.isForceOcr());
342+
}
343+
344+
@Test
345+
public void testDoclingBackendEnabled() {
346+
Config config = new Config();
347+
config.setHybrid("docling");
348+
349+
Assertions.assertTrue(config.isHybridEnabled());
350+
Assertions.assertEquals("docling", config.getHybrid());
351+
}
352+
353+
@Test
354+
public void testDoclingEffectiveUrl() {
355+
HybridConfig config = new HybridConfig();
356+
357+
// docling uses same URL as docling-fast
358+
Assertions.assertEquals(HybridConfig.DOCLING_FAST_DEFAULT_URL, config.getEffectiveUrl("docling"));
359+
Assertions.assertEquals(HybridConfig.DOCLING_FAST_DEFAULT_URL, config.getEffectiveUrl("docling-fast"));
360+
}
307361
}

0 commit comments

Comments
 (0)