1+ import sys
2+
13import pytest
24from pdfminer .layout import LTTextBoxHorizontal
35
6+ from casparser import read_cas_pdf
47from casparser .exceptions import CASParseError
58
69from .base import BaseTestClass
710
11+ try :
12+ import builtins
13+ except ImportError :
14+ import __builtin__ as builtins
15+
16+ realimport = builtins .__import__
17+
18+
19+ def mockimport (name , * args ):
20+ """Force ImportError on fitz and/or mupdf import and make casparser fallback to pdfminer"""
21+ if name in ("fitz" , "mupdf" ):
22+ raise ImportError
23+ return realimport (name , * args )
24+
25+
26+ @pytest .fixture (scope = "class" )
27+ def monkeyclass ():
28+ with pytest .MonkeyPatch .context () as mp :
29+ yield mp
830
31+
32+ @pytest .fixture (scope = "class" )
33+ def use_pdfminer (monkeyclass ):
34+ if "fitz" in sys .modules :
35+ del sys .modules ["fitz" ]
36+ monkeyclass .setattr (builtins , "__import__" , mockimport )
37+ yield
38+ monkeyclass .setattr (builtins , "__import__" , realimport )
39+
40+
41+ @pytest .mark .usefixtures ("use_pdfminer" )
942class TestPDFMiner (BaseTestClass ):
1043 """Test pdfminer parser."""
1144
1245 @classmethod
1346 def setup_class (cls ):
1447 BaseTestClass .setup_class ()
15- cls .mode = "pdfminer"
1648
1749 def test_bad_investor_info (self ):
1850 from casparser .parsers .pdfminer import parse_investor_info
@@ -22,3 +54,8 @@ def test_bad_investor_info(self):
2254 box .get_text ()
2355 parse_investor_info ([], 0 , 0 )
2456 assert "Unable to parse investor data" in str (exc_info )
57+
58+ def test_invalid_file_type (self ):
59+ with pytest .raises (CASParseError ) as exc_info :
60+ read_cas_pdf (1 , "" , force_pdfminer = True )
61+ assert "Invalid input" in str (exc_info )
0 commit comments