From b63085e94e634a65d6b4b03fe1caa0c96886521d Mon Sep 17 00:00:00 2001 From: Martin Thoma Date: Sat, 27 Aug 2022 13:16:24 +0200 Subject: [PATCH] TST: Remove files after tests ran (#1286) * 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 --- tests/bench.py | 12 ++---- tests/test_basic_features.py | 54 -------------------------- tests/test_generic.py | 16 +++++--- tests/test_workflows.py | 75 ++++++++++++++++++++++++++---------- tests/test_writer.py | 8 +++- 5 files changed, 76 insertions(+), 89 deletions(-) delete mode 100644 tests/test_basic_features.py diff --git a/tests/bench.py b/tests/bench.py index 28329494b..248e9c9d0 100644 --- a/tests/bench.py +++ b/tests/bench.py @@ -1,4 +1,3 @@ -import os from pathlib import Path import PyPDF2 @@ -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" @@ -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) ] == [ @@ -105,9 +104,6 @@ def merge(): "True", ] - # Clean up - os.remove(tmp_path) - def test_merge(benchmark): """ diff --git a/tests/test_basic_features.py b/tests/test_basic_features.py deleted file mode 100644 index bdc65d074..000000000 --- a/tests/test_basic_features.py +++ /dev/null @@ -1,54 +0,0 @@ -import os -from pathlib import Path - -from PyPDF2 import PdfReader, PdfWriter - -TESTS_ROOT = Path(__file__).parent.resolve() -PROJECT_ROOT = TESTS_ROOT.parent -RESOURCE_ROOT = PROJECT_ROOT / "resources" - - -def test_basic_features(): - 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 - tmp_path = "PyPDF2-output.pdf" - with open(tmp_path, "wb") as output_stream: - writer.write(output_stream) - - # cleanup - os.remove(tmp_path) diff --git a/tests/test_generic.py b/tests/test_generic.py index 6a82df22c..5cb1ae5d1 100644 --- a/tests/test_generic.py +++ b/tests/test_generic.py @@ -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") diff --git a/tests/test_workflows.py b/tests/test_workflows.py index 672ba90b3..0a1c124b4 100644 --- a/tests/test_workflows.py +++ b/tests/test_workflows.py @@ -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) @@ -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( @@ -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( @@ -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( @@ -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"), @@ -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" diff --git a/tests/test_writer.py b/tests/test_writer.py index d83db2002..9c8f0dae3 100644 --- a/tests/test_writer.py +++ b/tests/test_writer.py @@ -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"), @@ -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(): """