@@ -29,6 +29,66 @@ await act.Should().ThrowAsync<FileNotFoundException>()
2929 processRunner . StartInfos [ 0 ] . Arguments . Should ( ) . Contain ( "input.png" ) ;
3030 }
3131
32+ [ Theory ]
33+ [ InlineData ( "out.log" , "out.txt" ) ]
34+ [ InlineData ( "out" , "out.txt" ) ]
35+ [ InlineData ( "foo.bar.log" , "foo.bar.txt" ) ]
36+ [ InlineData ( "out.TXT" , "out.txt" ) ]
37+ [ InlineData ( "out." , "out.txt" ) ]
38+ public async Task ExtractTextFromImageAsync_DerivesActualTxtPathFromBase ( string inputName , string expectedName )
39+ {
40+ var tempDir = Path . GetTempPath ( ) ;
41+ var inputPath = Path . Combine ( tempDir , inputName ) ;
42+ var expectedPath = Path . Combine ( tempDir , expectedName ) ;
43+ var checkedPaths = new List < string > ( ) ;
44+ var processRunner = new FakeProcessRunner ( ) ;
45+ var environment = new FakeSystemEnvironment
46+ {
47+ FileExistsImpl = path =>
48+ {
49+ checkedPaths . Add ( path ) ;
50+ return false ;
51+ }
52+ } ;
53+ var engine = new TesseractOcrProvider ( environment , processRunner ) ;
54+
55+ var act = ( ) => engine . ExtractTextFromImageAsync (
56+ "input.png" ,
57+ inputPath ,
58+ new OcrOptions { TesseractPath = "/bin/echo" } ) ;
59+
60+ await act . Should ( ) . ThrowAsync < FileNotFoundException > ( )
61+ . Where ( e => e . FileName == expectedPath )
62+ . ConfigureAwait ( true ) ;
63+
64+ checkedPaths . Should ( ) . ContainSingle ( ) . Which . Should ( ) . Be ( expectedPath ) ;
65+ }
66+
67+ [ Fact ]
68+ public async Task ExtractTextFromImageAsync_WithNonTxtInputPath_ReadsFromDerivedTxtPath ( )
69+ {
70+ var actualTxtPath = Path . Combine ( Path . GetTempPath ( ) , $ "createpdf-test-{ Guid . NewGuid ( ) : N} .txt") ;
71+ var nonTxtInputPath = Path . ChangeExtension ( actualTxtPath , ".log" ) ;
72+ await File . WriteAllTextAsync ( actualTxtPath , "Hello\n World" ) . ConfigureAwait ( true ) ;
73+ try
74+ {
75+ var processRunner = new FakeProcessRunner ( ) ;
76+ var environment = new FakeSystemEnvironment { FileExistsImpl = File . Exists } ;
77+ var engine = new TesseractOcrProvider ( environment , processRunner ) ;
78+
79+ var result = await engine . ExtractTextFromImageAsync (
80+ "input.png" ,
81+ nonTxtInputPath ,
82+ new OcrOptions { TesseractPath = "/bin/echo" } ) . ConfigureAwait ( true ) ;
83+
84+ result . Should ( ) . Be ( "Hello World" ) ;
85+ }
86+ finally
87+ {
88+ if ( File . Exists ( actualTxtPath ) ) File . Delete ( actualTxtPath ) ;
89+ }
90+ }
91+
3292 [ Fact ]
3393 public void GetPdfRasterizerExecutable_UsesExplicitConverterPath ( )
3494 {
0 commit comments