Пример #1
0
def test_pdf_repr():
    assert bytes(IndirectReference(1, 2)) == b"1 2 R"
    assert bytes(IndirectObjectDef(*IndirectReference(1, 2))) == b"1 2 obj"
    assert bytes(PdfName(b"Name#Hash")) == b"/Name#23Hash"
    assert bytes(PdfName("Name#Hash")) == b"/Name#23Hash"
    assert bytes(PdfDict({b"Name":
                          IndirectReference(1, 2)})) == b"<<\n/Name 1 2 R\n>>"
    assert bytes(PdfDict({"Name":
                          IndirectReference(1, 2)})) == b"<<\n/Name 1 2 R\n>>"
    assert pdf_repr(IndirectReference(1, 2)) == b"1 2 R"
    assert pdf_repr(IndirectObjectDef(*IndirectReference(1, 2))) == b"1 2 obj"
    assert pdf_repr(PdfName(b"Name#Hash")) == b"/Name#23Hash"
    assert pdf_repr(PdfName("Name#Hash")) == b"/Name#23Hash"
    assert (pdf_repr(PdfDict({b"Name": IndirectReference(1, 2)
                              })) == b"<<\n/Name 1 2 R\n>>")
    assert (pdf_repr(PdfDict({"Name": IndirectReference(1, 2)
                              })) == b"<<\n/Name 1 2 R\n>>")
    assert pdf_repr(123) == b"123"
    assert pdf_repr(True) == b"true"
    assert pdf_repr(False) == b"false"
    assert pdf_repr(None) == b"null"
    assert pdf_repr(b"a)/b\\(c") == rb"(a\)/b\\\(c)"
    assert pdf_repr([123, True, {
        "a": PdfName(b"b")
    }]) == b"[ 123 true <<\n/a /b\n>> ]"
    assert pdf_repr(PdfBinary(b"\x90\x1F\xA0")) == b"<901FA0>"
Пример #2
0
 def test_pdf_repr(self):
     self.assertEqual(bytes(IndirectReference(1, 2)), b"1 2 R")
     self.assertEqual(bytes(IndirectObjectDef(*IndirectReference(1, 2))),
                      b"1 2 obj")
     self.assertEqual(bytes(PdfName(b"Name#Hash")), b"/Name#23Hash")
     self.assertEqual(bytes(PdfName("Name#Hash")), b"/Name#23Hash")
     self.assertEqual(bytes(PdfDict({b"Name": IndirectReference(1, 2)})),
                      b"<<\n/Name 1 2 R\n>>")
     self.assertEqual(bytes(PdfDict({"Name": IndirectReference(1, 2)})),
                      b"<<\n/Name 1 2 R\n>>")
     self.assertEqual(pdf_repr(IndirectReference(1, 2)), b"1 2 R")
     self.assertEqual(pdf_repr(IndirectObjectDef(*IndirectReference(1, 2))),
                      b"1 2 obj")
     self.assertEqual(pdf_repr(PdfName(b"Name#Hash")), b"/Name#23Hash")
     self.assertEqual(pdf_repr(PdfName("Name#Hash")), b"/Name#23Hash")
     self.assertEqual(pdf_repr(PdfDict({b"Name": IndirectReference(1, 2)})),
                      b"<<\n/Name 1 2 R\n>>")
     self.assertEqual(pdf_repr(PdfDict({"Name": IndirectReference(1, 2)})),
                      b"<<\n/Name 1 2 R\n>>")
     self.assertEqual(pdf_repr(123), b"123")
     self.assertEqual(pdf_repr(True), b"true")
     self.assertEqual(pdf_repr(False), b"false")
     self.assertEqual(pdf_repr(None), b"null")
     self.assertEqual(pdf_repr(b"a)/b\\(c"), br"(a\)/b\\\(c)")
     self.assertEqual(pdf_repr([123, True, {
         "a": PdfName(b"b")
     }]), b"[ 123 true <<\n/a /b\n>> ]")
     self.assertEqual(pdf_repr(PdfBinary(b"\x90\x1F\xA0")), b"<901FA0>")
Пример #3
0
def test_parsing():
    assert PdfParser.interpret_name(b"Name#23Hash") == b"Name#Hash"
    assert PdfParser.interpret_name(b"Name#23Hash",
                                    as_text=True) == "Name#Hash"
    assert PdfParser.get_value(b"1 2 R ", 0) == (IndirectReference(1, 2), 5)
    assert PdfParser.get_value(b"true[", 0) == (True, 4)
    assert PdfParser.get_value(b"false%", 0) == (False, 5)
    assert PdfParser.get_value(b"null<", 0) == (None, 4)
    assert PdfParser.get_value(b"%cmt\n %cmt\n 123\n", 0) == (123, 15)
    assert PdfParser.get_value(b"<901FA3>", 0) == (b"\x90\x1F\xA3", 8)
    assert PdfParser.get_value(b"asd < 9 0 1 f A > qwe",
                               3) == (b"\x90\x1F\xA0", 17)
    assert PdfParser.get_value(b"(asd)", 0) == (b"asd", 5)
    assert PdfParser.get_value(b"(asd(qwe)zxc)zzz(aaa)",
                               0) == (b"asd(qwe)zxc", 13)
    assert PdfParser.get_value(b"(Two \\\nwords.)", 0) == (b"Two words.", 14)
    assert PdfParser.get_value(b"(Two\nlines.)", 0) == (b"Two\nlines.", 12)
    assert PdfParser.get_value(b"(Two\r\nlines.)", 0) == (b"Two\nlines.", 13)
    assert PdfParser.get_value(b"(Two\\nlines.)", 0) == (b"Two\nlines.", 13)
    assert PdfParser.get_value(b"(One\\(paren).", 0) == (b"One(paren", 12)
    assert PdfParser.get_value(b"(One\\)paren).", 0) == (b"One)paren", 12)
    assert PdfParser.get_value(b"(\\0053)", 0) == (b"\x053", 7)
    assert PdfParser.get_value(b"(\\053)", 0) == (b"\x2B", 6)
    assert PdfParser.get_value(b"(\\53)", 0) == (b"\x2B", 5)
    assert PdfParser.get_value(b"(\\53a)", 0) == (b"\x2Ba", 6)
    assert PdfParser.get_value(b"(\\1111)", 0) == (b"\x491", 7)
    assert PdfParser.get_value(b" 123 (", 0) == (123, 4)
    assert round(abs(PdfParser.get_value(b" 123.4 %", 0)[0] - 123.4), 7) == 0
    assert PdfParser.get_value(b" 123.4 %", 0)[1] == 6
    with pytest.raises(PdfFormatError):
        PdfParser.get_value(b"]", 0)
    d = PdfParser.get_value(b"<</Name (value) /N /V>>", 0)[0]
    assert isinstance(d, PdfDict)
    assert len(d) == 2
    assert d.Name == "value"
    assert d[b"Name"] == b"value"
    assert d.N == PdfName("V")
    a = PdfParser.get_value(b"[/Name (value) /N /V]", 0)[0]
    assert isinstance(a, list)
    assert len(a) == 4
    assert a[0] == PdfName("Name")
    s = PdfParser.get_value(
        b"<</Name (value) /Length 5>>\nstream\nabcde\nendstream<<...", 0)[0]
    assert isinstance(s, PdfStream)
    assert s.dictionary.Name == "value"
    assert s.decode() == b"abcde"
    for name in ["CreationDate", "ModDate"]:
        for date, value in {
                b"20180729214124": "20180729214124",
                b"D:20180729214124": "20180729214124",
                b"D:2018072921": "20180729210000",
                b"D:20180729214124Z": "20180729214124",
                b"D:20180729214124+08'00'": "20180729134124",
                b"D:20180729214124-05'00'": "20180730024124",
        }.items():
            d = PdfParser.get_value(
                b"<</" + name.encode() + b" (" + date + b")>>", 0)[0]
            assert time.strftime("%Y%m%d%H%M%S", getattr(d, name)) == value
Пример #4
0
 def test_parsing(self):
     self.assertEqual(PdfParser.interpret_name(b"Name#23Hash"),
                      b"Name#Hash")
     self.assertEqual(
         PdfParser.interpret_name(b"Name#23Hash", as_text=True),
         "Name#Hash")
     self.assertEqual(PdfParser.get_value(b"1 2 R ", 0),
                      (IndirectReference(1, 2), 5))
     self.assertEqual(PdfParser.get_value(b"true[", 0), (True, 4))
     self.assertEqual(PdfParser.get_value(b"false%", 0), (False, 5))
     self.assertEqual(PdfParser.get_value(b"null<", 0), (None, 4))
     self.assertEqual(PdfParser.get_value(b"%cmt\n %cmt\n 123\n", 0),
                      (123, 15))
     self.assertEqual(PdfParser.get_value(b"<901FA3>", 0),
                      (b"\x90\x1F\xA3", 8))
     self.assertEqual(PdfParser.get_value(b"asd < 9 0 1 f A > qwe", 3),
                      (b"\x90\x1F\xA0", 17))
     self.assertEqual(PdfParser.get_value(b"(asd)", 0), (b"asd", 5))
     self.assertEqual(PdfParser.get_value(b"(asd(qwe)zxc)zzz(aaa)", 0),
                      (b"asd(qwe)zxc", 13))
     self.assertEqual(PdfParser.get_value(b"(Two \\\nwords.)", 0),
                      (b"Two words.", 14))
     self.assertEqual(PdfParser.get_value(b"(Two\nlines.)", 0),
                      (b"Two\nlines.", 12))
     self.assertEqual(PdfParser.get_value(b"(Two\r\nlines.)", 0),
                      (b"Two\nlines.", 13))
     self.assertEqual(PdfParser.get_value(b"(Two\\nlines.)", 0),
                      (b"Two\nlines.", 13))
     self.assertEqual(PdfParser.get_value(b"(One\\(paren).", 0),
                      (b"One(paren", 12))
     self.assertEqual(PdfParser.get_value(b"(One\\)paren).", 0),
                      (b"One)paren", 12))
     self.assertEqual(PdfParser.get_value(b"(\\0053)", 0), (b"\x053", 7))
     self.assertEqual(PdfParser.get_value(b"(\\053)", 0), (b"\x2B", 6))
     self.assertEqual(PdfParser.get_value(b"(\\53)", 0), (b"\x2B", 5))
     self.assertEqual(PdfParser.get_value(b"(\\53a)", 0), (b"\x2Ba", 6))
     self.assertEqual(PdfParser.get_value(b"(\\1111)", 0), (b"\x491", 7))
     self.assertEqual(PdfParser.get_value(b" 123 (", 0), (123, 4))
     self.assertAlmostEqual(PdfParser.get_value(b" 123.4 %", 0)[0], 123.4)
     self.assertEqual(PdfParser.get_value(b" 123.4 %", 0)[1], 6)
     self.assertRaises(PdfFormatError, PdfParser.get_value, b"]", 0)
     d = PdfParser.get_value(b"<</Name (value) /N /V>>", 0)[0]
     self.assertIsInstance(d, PdfDict)
     self.assertEqual(len(d), 2)
     self.assertEqual(d.Name, "value")
     self.assertEqual(d[b"Name"], b"value")
     self.assertEqual(d.N, PdfName("V"))
     a = PdfParser.get_value(b"[/Name (value) /N /V]", 0)[0]
     self.assertIsInstance(a, list)
     self.assertEqual(len(a), 4)
     self.assertEqual(a[0], PdfName("Name"))
     s = PdfParser.get_value(
         b"<</Name (value) /Length 5>>\nstream\nabcde\nendstream<<...",
         0)[0]
     self.assertIsInstance(s, PdfStream)
     self.assertEqual(s.dictionary.Name, "value")
     self.assertEqual(s.decode(), b"abcde")
Пример #5
0
 def test_indirect_refs(self):
     self.assertEqual(IndirectReference(1, 2), IndirectReference(1, 2))
     self.assertNotEqual(IndirectReference(1, 2), IndirectReference(1, 3))
     self.assertNotEqual(IndirectReference(1, 2), IndirectObjectDef(1, 2))
     self.assertNotEqual(IndirectReference(1, 2), (1, 2))
     self.assertEqual(IndirectObjectDef(1, 2), IndirectObjectDef(1, 2))
     self.assertNotEqual(IndirectObjectDef(1, 2), IndirectObjectDef(1, 3))
     self.assertNotEqual(IndirectObjectDef(1, 2), IndirectReference(1, 2))
     self.assertNotEqual(IndirectObjectDef(1, 2), (1, 2))
Пример #6
0
def test_indirect_refs():
    assert IndirectReference(1, 2) == IndirectReference(1, 2)
    assert IndirectReference(1, 2) != IndirectReference(1, 3)
    assert IndirectReference(1, 2) != IndirectObjectDef(1, 2)
    assert IndirectReference(1, 2) != (1, 2)
    assert IndirectObjectDef(1, 2) == IndirectObjectDef(1, 2)
    assert IndirectObjectDef(1, 2) != IndirectObjectDef(1, 3)
    assert IndirectObjectDef(1, 2) != IndirectReference(1, 2)
    assert IndirectObjectDef(1, 2) != (1, 2)
Пример #7
0
 def test_parsing(self):
     self.assertEqual(PdfParser.interpret_name(b"Name#23Hash"),
                      b"Name#Hash")
     self.assertEqual(
         PdfParser.interpret_name(b"Name#23Hash", as_text=True),
         "Name#Hash")
     self.assertEqual(PdfParser.get_value(b"1 2 R ", 0),
                      (IndirectReference(1, 2), 5))
     self.assertEqual(PdfParser.get_value(b"true[", 0), (True, 4))
     self.assertEqual(PdfParser.get_value(b"false%", 0), (False, 5))
     self.assertEqual(PdfParser.get_value(b"null<", 0), (None, 4))
     self.assertEqual(PdfParser.get_value(b"%cmt\n %cmt\n 123\n", 0),
                      (123, 15))
     self.assertEqual(PdfParser.get_value(b"<901FA3>", 0),
                      (b"\x90\x1F\xA3", 8))
     self.assertEqual(PdfParser.get_value(b"asd < 9 0 1 f A > qwe", 3),
                      (b"\x90\x1F\xA0", 17))
     self.assertEqual(PdfParser.get_value(b"(asd)", 0), (b"asd", 5))
     self.assertEqual(PdfParser.get_value(b"(asd(qwe)zxc)zzz(aaa)", 0),
                      (b"asd(qwe)zxc", 13))
     self.assertEqual(PdfParser.get_value(b"(Two \\\nwords.)", 0),
                      (b"Two words.", 14))
     self.assertEqual(PdfParser.get_value(b"(Two\nlines.)", 0),
                      (b"Two\nlines.", 12))
     self.assertEqual(PdfParser.get_value(b"(Two\r\nlines.)", 0),
                      (b"Two\nlines.", 13))
     self.assertEqual(PdfParser.get_value(b"(Two\\nlines.)", 0),
                      (b"Two\nlines.", 13))
     self.assertEqual(PdfParser.get_value(b"(One\\(paren).", 0),
                      (b"One(paren", 12))
     self.assertEqual(PdfParser.get_value(b"(One\\)paren).", 0),
                      (b"One)paren", 12))
     self.assertEqual(PdfParser.get_value(b"(\\0053)", 0), (b"\x053", 7))
     self.assertEqual(PdfParser.get_value(b"(\\053)", 0), (b"\x2B", 6))
     self.assertEqual(PdfParser.get_value(b"(\\53)", 0), (b"\x2B", 5))
     self.assertEqual(PdfParser.get_value(b"(\\53a)", 0), (b"\x2Ba", 6))
     self.assertEqual(PdfParser.get_value(b"(\\1111)", 0), (b"\x491", 7))
     self.assertEqual(PdfParser.get_value(b" 123 (", 0), (123, 4))
     self.assertAlmostEqual(PdfParser.get_value(b" 123.4 %", 0)[0], 123.4)
     self.assertEqual(PdfParser.get_value(b" 123.4 %", 0)[1], 6)
     self.assertRaises(PdfFormatError, PdfParser.get_value, b"]", 0)
     d = PdfParser.get_value(b"<</Name (value) /N /V>>", 0)[0]
     self.assertIsInstance(d, PdfDict)
     self.assertEqual(len(d), 2)
     self.assertEqual(d.Name, "value")
     self.assertEqual(d[b"Name"], b"value")
     self.assertEqual(d.N, PdfName("V"))
     a = PdfParser.get_value(b"[/Name (value) /N /V]", 0)[0]
     self.assertIsInstance(a, list)
     self.assertEqual(len(a), 4)
     self.assertEqual(a[0], PdfName("Name"))
     s = PdfParser.get_value(
         b"<</Name (value) /Length 5>>\nstream\nabcde\nendstream<<...",
         0)[0]
     self.assertIsInstance(s, PdfStream)
     self.assertEqual(s.dictionary.Name, "value")
     self.assertEqual(s.decode(), b"abcde")
     for name in ["CreationDate", "ModDate"]:
         for date, value in {
                 b"20180729214124": "20180729214124",
                 b"D:20180729214124": "20180729214124",
                 b"D:2018072921": "20180729210000",
                 b"D:20180729214124Z": "20180729214124",
                 b"D:20180729214124+08'00'": "20180729134124",
                 b"D:20180729214124-05'00'": "20180730024124"
         }.items():
             d = PdfParser.get_value(
                 b"<</" + name.encode() + b" (" + date + b")>>", 0)[0]
             self.assertEqual(
                 time.strftime("%Y%m%d%H%M%S", getattr(d, name)), value)