diff --git a/test/unit_tests/coordinate_transformer_test.py b/test/unit_tests/coordinate_transformer_test.py index 4be5be1..549ac4a 100644 --- a/test/unit_tests/coordinate_transformer_test.py +++ b/test/unit_tests/coordinate_transformer_test.py @@ -23,7 +23,21 @@ def coordinate_test_fpdf(): return pdf +@pytest.fixture(params=["top_left", "bottom_left", "bottom_right", "top_right"]) +def corner(request): + return request.param + + def get_fpdf_coordinates(corner): + """Origin top left, y1 <= y2; all coords on page are positive + (0,0)--+--(2,0)--+ + |////| |////| + +--(1,1) +--(3,1) + + (0,2)--+ (2,2)--+ + |////| |////| + +--(1,3) +--(3,3) + """ metadata = base_position_metadata() if corner == "top_left": @@ -32,22 +46,32 @@ def get_fpdf_coordinates(corner): elif corner == "bottom_left": metadata.update({Info.X1: 0, Info.Y1: 200, Info.X2: 100, Info.Y2: 300}) + elif corner == "bottom_right": + metadata.update({Info.X1: 200, Info.Y1: 200, Info.X2: 300, Info.Y2: 300}) + + elif corner == "top_right": + metadata.update({Info.X1: 200, Info.Y1: 0, Info.X2: 300, Info.Y2: 100}) + + else: + raise ValueError(f"No coordinates specified for corner {corner}.") + return metadata def get_fitz_coordinates(corner): - metadata = base_position_metadata() - - if corner == "top_left": - metadata.update({Info.X1: 0, Info.Y1: 0, Info.X2: 100, Info.Y2: 100}) - - elif corner == "bottom_left": - metadata.update({Info.X1: 0, Info.Y1: 200, Info.X2: 100, Info.Y2: 300}) - - return metadata + return get_fpdf_coordinates(corner) def get_pdfnet_coordinates(corner): + """Origin bottom left, y1 <= y2; all coords on page are positive + +---(1,3) +--(3,3) + |////| |////| + (0,2)--+ (2,2)--+ + + +--(1,1) +--(3,1) + |////| |////| + (0,0)--+ (2,0)--+ + """ metadata = base_position_metadata() if corner == "top_left": @@ -56,6 +80,15 @@ def get_pdfnet_coordinates(corner): elif corner == "bottom_left": metadata.update({Info.X1: 0, Info.Y1: 0, Info.X2: 100, Info.Y2: 100}) + elif corner == "bottom_right": + metadata.update({Info.X1: 200, Info.Y1: 0, Info.X2: 300, Info.Y2: 100}) + + elif corner == "top_right": + metadata.update({Info.X1: 200, Info.Y1: 200, Info.X2: 300, Info.Y2: 300}) + + else: + raise ValueError(f"No coordinates specified for corner {corner}.") + return metadata @@ -112,7 +145,6 @@ def coordinate_test_page_image(coordinate_test_pdf): return pdf2image.convert_from_bytes(coordinate_test_pdf)[0] -@pytest.mark.parametrize("corner", ["top_left", "bottom_left"]) @pytest.mark.parametrize("coordinate_system", ["fpdf"]) def test_fpdf_coordinate_transformer(position_metadata_in_given_system, position_metadata_in_reference_system): """We use FPDF's coordinate system as the reference system (arbitrarily). Hence, FPDFCoordinateTransformer @@ -128,7 +160,6 @@ def test_fpdf_coordinate_transformer(position_metadata_in_given_system, position ) -@pytest.mark.parametrize("corner", ["top_left", "bottom_left"]) @pytest.mark.parametrize("coordinate_system", ["fitz"]) def test_fitz_coordinate_transformer(position_metadata_in_given_system, position_metadata_in_reference_system): """How I inferred the transformation: @@ -147,7 +178,6 @@ def test_fitz_coordinate_transformer(position_metadata_in_given_system, position ) -@pytest.mark.parametrize("corner", ["top_left", "bottom_left"]) @pytest.mark.parametrize("coordinate_system", ["pdfnet"]) def test_pdfnet_coordinate_transformer(position_metadata_in_given_system, position_metadata_in_reference_system): """How I inferred the transformation: