162 lines
4.4 KiB
Python
162 lines
4.4 KiB
Python
|
from pdfminer.ccitt import CCITTG4Parser, CCITTFaxDecoder
|
||
|
|
||
|
|
||
|
class TestCCITTG4Parser:
|
||
|
def get_parser(self, bits):
|
||
|
parser = CCITTG4Parser(len(bits))
|
||
|
parser._curline = [int(c) for c in bits]
|
||
|
parser._reset_line()
|
||
|
return parser
|
||
|
|
||
|
def test_b1(self):
|
||
|
parser = self.get_parser("00000")
|
||
|
parser._do_vertical(0)
|
||
|
assert parser._curpos == 0
|
||
|
return
|
||
|
|
||
|
def test_b2(self):
|
||
|
parser = self.get_parser("10000")
|
||
|
parser._do_vertical(-1)
|
||
|
assert parser._curpos == 0
|
||
|
return
|
||
|
|
||
|
def test_b3(self):
|
||
|
parser = self.get_parser("000111")
|
||
|
parser._do_pass()
|
||
|
assert parser._curpos == 3
|
||
|
assert parser._get_bits() == "111"
|
||
|
return
|
||
|
|
||
|
def test_b4(self):
|
||
|
parser = self.get_parser("00000")
|
||
|
parser._do_vertical(+2)
|
||
|
assert parser._curpos == 2
|
||
|
assert parser._get_bits() == "11"
|
||
|
return
|
||
|
|
||
|
def test_b5(self):
|
||
|
parser = self.get_parser("11111111100")
|
||
|
parser._do_horizontal(0, 3)
|
||
|
assert parser._curpos == 3
|
||
|
parser._do_vertical(1)
|
||
|
assert parser._curpos == 10
|
||
|
assert parser._get_bits() == "0001111111"
|
||
|
return
|
||
|
|
||
|
def test_e1(self):
|
||
|
parser = self.get_parser("10000")
|
||
|
parser._do_vertical(0)
|
||
|
assert parser._curpos == 1
|
||
|
parser._do_vertical(0)
|
||
|
assert parser._curpos == 5
|
||
|
assert parser._get_bits() == "10000"
|
||
|
return
|
||
|
|
||
|
def test_e2(self):
|
||
|
parser = self.get_parser("10011")
|
||
|
parser._do_vertical(0)
|
||
|
assert parser._curpos == 1
|
||
|
parser._do_vertical(2)
|
||
|
assert parser._curpos == 5
|
||
|
assert parser._get_bits() == "10000"
|
||
|
return
|
||
|
|
||
|
def test_e3(self):
|
||
|
parser = self.get_parser("011111")
|
||
|
parser._color = 0
|
||
|
parser._do_vertical(0)
|
||
|
assert parser._color == 1
|
||
|
assert parser._curpos == 1
|
||
|
parser._do_vertical(-2)
|
||
|
assert parser._color == 0
|
||
|
assert parser._curpos == 4
|
||
|
parser._do_vertical(0)
|
||
|
assert parser._curpos == 6
|
||
|
assert parser._get_bits() == "011100"
|
||
|
return
|
||
|
|
||
|
def test_e4(self):
|
||
|
parser = self.get_parser("10000")
|
||
|
parser._do_vertical(0)
|
||
|
assert parser._curpos == 1
|
||
|
parser._do_vertical(-2)
|
||
|
assert parser._curpos == 3
|
||
|
parser._do_vertical(0)
|
||
|
assert parser._curpos == 5
|
||
|
assert parser._get_bits() == "10011"
|
||
|
return
|
||
|
|
||
|
def test_e5(self):
|
||
|
parser = self.get_parser("011000")
|
||
|
parser._color = 0
|
||
|
parser._do_vertical(0)
|
||
|
assert parser._curpos == 1
|
||
|
parser._do_vertical(3)
|
||
|
assert parser._curpos == 6
|
||
|
assert parser._get_bits() == "011111"
|
||
|
return
|
||
|
|
||
|
def test_e6(self):
|
||
|
parser = self.get_parser("11001")
|
||
|
parser._do_pass()
|
||
|
assert parser._curpos == 4
|
||
|
parser._do_vertical(0)
|
||
|
assert parser._curpos == 5
|
||
|
assert parser._get_bits() == "11111"
|
||
|
return
|
||
|
|
||
|
def test_e7(self):
|
||
|
parser = self.get_parser("0000000000")
|
||
|
parser._curpos = 2
|
||
|
parser._color = 1
|
||
|
parser._do_horizontal(2, 6)
|
||
|
assert parser._curpos == 10
|
||
|
assert parser._get_bits() == "1111000000"
|
||
|
return
|
||
|
|
||
|
def test_e8(self):
|
||
|
parser = self.get_parser("001100000")
|
||
|
parser._curpos = 1
|
||
|
parser._color = 0
|
||
|
parser._do_vertical(0)
|
||
|
assert parser._curpos == 2
|
||
|
parser._do_horizontal(7, 0)
|
||
|
assert parser._curpos == 9
|
||
|
assert parser._get_bits() == "101111111"
|
||
|
return
|
||
|
|
||
|
def test_m1(self):
|
||
|
parser = self.get_parser("10101")
|
||
|
parser._do_pass()
|
||
|
assert parser._curpos == 2
|
||
|
parser._do_pass()
|
||
|
assert parser._curpos == 4
|
||
|
assert parser._get_bits() == "1111"
|
||
|
return
|
||
|
|
||
|
def test_m2(self):
|
||
|
parser = self.get_parser("101011")
|
||
|
parser._do_vertical(-1)
|
||
|
parser._do_vertical(-1)
|
||
|
parser._do_vertical(1)
|
||
|
parser._do_horizontal(1, 1)
|
||
|
assert parser._get_bits() == "011101"
|
||
|
return
|
||
|
|
||
|
def test_m3(self):
|
||
|
parser = self.get_parser("10111011")
|
||
|
parser._do_vertical(-1)
|
||
|
parser._do_pass()
|
||
|
parser._do_vertical(1)
|
||
|
parser._do_vertical(1)
|
||
|
assert parser._get_bits() == "00000001"
|
||
|
return
|
||
|
|
||
|
|
||
|
class TestCCITTFaxDecoder:
|
||
|
def test_b1(self):
|
||
|
decoder = CCITTFaxDecoder(5)
|
||
|
decoder.output_line(0, b"0")
|
||
|
assert decoder.close() == b"\x80"
|
||
|
return
|