Skip to content

Commit

Permalink
TST: Remove files after tests ran (#1286)
Browse files Browse the repository at this point in the history
* Move test_basic_features.py into test_workflows.py
* Use the tmp_path fixture in cases where we're not interested to manually
  check the resulting PDF file
  • Loading branch information
MartinThoma authored Aug 27, 2022
1 parent 84460f5 commit b63085e
Show file tree
Hide file tree
Showing 5 changed files with 76 additions and 89 deletions.
12 changes: 4 additions & 8 deletions tests/bench.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import os
from pathlib import Path

import PyPDF2
Expand Down Expand Up @@ -50,7 +49,7 @@ def test_page_operations(benchmark):
benchmark(page_ops, "libreoffice-writer-password.pdf", "openpassword")


def merge():
def merge(tmp_path):
pdf_path = RESOURCE_ROOT / "crazyones.pdf"
outline = RESOURCE_ROOT / "pdflatex-outline.pdf"
pdf_forms = RESOURCE_ROOT / "pdflatex-forms.pdf"
Expand Down Expand Up @@ -83,12 +82,12 @@ def merge():
merger.set_page_layout("/SinglePage")
merger.set_page_mode("/UseThumbs")

tmp_path = "dont_commit_merged.pdf"
merger.write(tmp_path)
write_path = tmp_path / "dont_commit_merged.pdf"
merger.write(write_path)
merger.close()

# Check if outline is correct
reader = PyPDF2.PdfReader(tmp_path)
reader = PyPDF2.PdfReader(write_path)
assert [
el.title for el in reader._get_outline() if isinstance(el, Destination)
] == [
Expand All @@ -105,9 +104,6 @@ def merge():
"True",
]

# Clean up
os.remove(tmp_path)


def test_merge(benchmark):
"""
Expand Down
54 changes: 0 additions & 54 deletions tests/test_basic_features.py

This file was deleted.

16 changes: 11 additions & 5 deletions tests/test_generic.py
Original file line number Diff line number Diff line change
Expand Up @@ -579,17 +579,23 @@ def test_name_object_read_from_stream_unicode_error(): # L588
page.extract_text()


def test_bool_repr():
def test_bool_repr(tmp_path):
url = "https://corpora.tika.apache.org/base/docs/govdocs1/932/932449.pdf"
name = "tika-932449.pdf"

reader = PdfReader(BytesIO(get_pdf_from_url(url, name=name)))
with open("tmp-fields-report.txt", "w") as fp:
write_path = tmp_path / "tmp-fields-report.txt"
with open(write_path, "w") as fp:
fields = reader.get_fields(fileobj=fp)
assert fields

# cleanup
os.remove("tmp-fields-report.txt")
assert list(fields.keys()) == ["USGPOSignature"]
with open(write_path) as fp:
data = fp.read()
assert data.startswith(
"Field Name: USGPOSignature\nField Type: Signature\nField Flags: 1\n"
"Value: {'/Type': '/Sig', '/Filter': '/Adobe.PPKLite', "
"'/SubFilter':"
)


@patch("PyPDF2._reader.logger_warning")
Expand Down
75 changes: 54 additions & 21 deletions tests/test_workflows.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,49 @@
sys.path.append(str(PROJECT_ROOT))


def test_basic_features(tmp_path):
pdf_path = RESOURCE_ROOT / "crazyones.pdf"
reader = PdfReader(pdf_path)
writer = PdfWriter()

assert len(reader.pages) == 1

# add page 1 from input1 to output document, unchanged
writer.add_page(reader.pages[0])

# add page 2 from input1, but rotated clockwise 90 degrees
writer.add_page(reader.pages[0].rotate(90))

# add page 3 from input1, but first add a watermark from another PDF:
page3 = reader.pages[0]
watermark_pdf = pdf_path
watermark = PdfReader(watermark_pdf)
page3.merge_page(watermark.pages[0])
writer.add_page(page3)

# add page 4 from input1, but crop it to half size:
page4 = reader.pages[0]
page4.mediabox.upper_right = (
page4.mediabox.right / 2,
page4.mediabox.top / 2,
)
writer.add_page(page4)

# add some Javascript to launch the print window on opening this PDF.
# the password dialog may prevent the print dialog from being shown,
# comment the the encription lines, if that's the case, to try this out
writer.add_js("this.print({bUI:true,bSilent:false,bShrinkToFit:true});")

# encrypt your new PDF and add a password
password = "secret"
writer.encrypt(password)

# finally, write "output" to PyPDF2-output.pdf
write_path = tmp_path / "PyPDF2-output.pdf"
with open(write_path, "wb") as output_stream:
writer.write(output_stream)


def test_dropdown_items():
inputfile = RESOURCE_ROOT / "libreoffice-form.pdf"
reader = PdfReader(inputfile)
Expand Down Expand Up @@ -321,7 +364,7 @@ def test_overlay(base_path, overlay_path):
writer.write(fp)

# Cleanup
os.remove("dont_commit_overlay.pdf")
os.remove("dont_commit_overlay.pdf") # remove for manual inspection


@pytest.mark.parametrize(
Expand All @@ -333,16 +376,13 @@ def test_overlay(base_path, overlay_path):
)
],
)
def test_merge_with_warning(url, name):
def test_merge_with_warning(tmp_path, url, name):
data = BytesIO(get_pdf_from_url(url, name=name))
reader = PdfReader(data)
merger = PdfMerger()
merger.append(reader)
# This could actually be a performance bottleneck:
merger.write("tmp.merged.pdf")

# Cleanup
os.remove("tmp.merged.pdf")
merger.write(tmp_path / "tmp.merged.pdf")


@pytest.mark.parametrize(
Expand All @@ -354,15 +394,12 @@ def test_merge_with_warning(url, name):
)
],
)
def test_merge(url, name):
def test_merge(tmp_path, url, name):
data = BytesIO(get_pdf_from_url(url, name=name))
reader = PdfReader(data)
merger = PdfMerger()
merger.append(reader)
merger.write("tmp.merged.pdf")

# Cleanup
os.remove("tmp.merged.pdf")
merger.write(tmp_path / "tmp.merged.pdf")


@pytest.mark.parametrize(
Expand Down Expand Up @@ -474,18 +511,16 @@ def test_compress(url, name):
),
],
)
def test_get_fields_warns(caplog, url, name):
def test_get_fields_warns(tmp_path, caplog, url, name):
data = BytesIO(get_pdf_from_url(url, name=name))
reader = PdfReader(data)
with open("tmp.txt", "w") as fp:
write_path = tmp_path / "tmp.txt"
with open(write_path, "w") as fp:
retrieved_fields = reader.get_fields(fileobj=fp)

assert retrieved_fields == {}
assert normalize_warnings(caplog.text) == ["Object 2 0 not defined."]

# Cleanup
os.remove("tmp.txt")


@pytest.mark.parametrize(
("url", "name"),
Expand All @@ -496,17 +531,15 @@ def test_get_fields_warns(caplog, url, name):
),
],
)
def test_get_fields_no_warning(url, name):
def test_get_fields_no_warning(tmp_path, url, name):
data = BytesIO(get_pdf_from_url(url, name=name))
reader = PdfReader(data)
with open("tmp.txt", "w") as fp:
write_path = tmp_path / "tmp.txt"
with open(write_path, "w") as fp:
retrieved_fields = reader.get_fields(fileobj=fp)

assert len(retrieved_fields) == 10

# Cleanup
os.remove("tmp.txt")


def test_scale_rectangle_indirect_object():
url = "https://corpora.tika.apache.org/base/docs/govdocs1/999/999944.pdf"
Expand Down
8 changes: 7 additions & 1 deletion tests/test_writer.py
Original file line number Diff line number Diff line change
Expand Up @@ -384,6 +384,8 @@ def test_fill_form():
with open(tmp_filename, "wb") as output_stream:
writer.write(output_stream)

os.remove(tmp_filename) # cleanup


@pytest.mark.parametrize(
("use_128bit", "user_pwd", "owner_pwd"),
Expand Down Expand Up @@ -595,14 +597,18 @@ def test_io_streams():


def test_regression_issue670():
tmp_file = "dont_commit_issue670.pdf"
filepath = RESOURCE_ROOT / "crazyones.pdf"
reader = PdfReader(filepath, strict=False)
for _ in range(2):
writer = PdfWriter()
writer.add_page(reader.pages[0])
with open("dont_commit_issue670.pdf", "wb") as f_pdf:
with open(tmp_file, "wb") as f_pdf:
writer.write(f_pdf)

# cleanup
os.remove(tmp_file)


def test_issue301():
"""
Expand Down

0 comments on commit b63085e

Please sign in to comment.