88 lines
2.8 KiB
Python
88 lines
2.8 KiB
Python
import contextlib
|
|
import os
|
|
import sys
|
|
|
|
from fastapi.testclient import TestClient
|
|
|
|
# Add both the root directory and the gateway directory to PYTHONPATH
|
|
sys.path.insert(0, os.path.abspath("."))
|
|
sys.path.insert(0, os.path.abspath(".."))
|
|
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), "../..")))
|
|
|
|
with contextlib.suppress(ImportError):
|
|
from app.main import app
|
|
|
|
client = TestClient(app)
|
|
|
|
|
|
def get_doc_id(filename: str) -> str:
|
|
# First ensure the document is loaded
|
|
filepath = os.path.abspath(f"../corpus/fonts/{filename}")
|
|
with open(filepath, "rb") as f:
|
|
resp = client.post("/documents", files={"file": (filename, f, "application/pdf")})
|
|
assert resp.status_code == 201, f"Failed to load {filename}: {resp.json()}"
|
|
return resp.json()["id"]
|
|
|
|
|
|
def test_is_vertical_regression():
|
|
# 1. Verify Identity-V fonts are detected correctly
|
|
doc_id = get_doc_id("vertical_text.pdf")
|
|
resp = client.get(f"/documents/{doc_id}/fonts")
|
|
assert resp.status_code == 200
|
|
fonts = resp.json()
|
|
assert len(fonts) > 0
|
|
font = fonts[0]
|
|
assert font["isVertical"] is True
|
|
assert font["encoding"] == "Identity-V"
|
|
|
|
# 2. Verify horizontal fonts are not falsely detected as vertical
|
|
doc_id_h = get_doc_id("utf-8.pdf")
|
|
resp_h = client.get(f"/documents/{doc_id_h}/fonts")
|
|
fonts_h = resp_h.json()
|
|
assert len(fonts_h) > 0
|
|
for f in fonts_h:
|
|
assert f["isVertical"] is False
|
|
|
|
|
|
def test_internal_font_id_regression():
|
|
# Verify subset fonts do not duplicate subset prefixes
|
|
doc_id = get_doc_id("text_font.pdf")
|
|
resp = client.get(f"/documents/{doc_id}/fonts")
|
|
assert resp.status_code == 200
|
|
fonts = resp.json()
|
|
assert len(fonts) > 0
|
|
for font in fonts:
|
|
if font.get("isSubset"):
|
|
assert font["subsetTag"] in font["fontName"]
|
|
assert not font["internalFontId"].startswith(
|
|
font["subsetTag"] + "_" + font["subsetTag"]
|
|
)
|
|
|
|
|
|
def test_cid_collection_regression():
|
|
# Verify Adobe collections
|
|
doc_id = get_doc_id("vertical_text.pdf")
|
|
resp = client.get(f"/documents/{doc_id}/fonts")
|
|
fonts = resp.json()
|
|
assert len(fonts) > 0
|
|
for font in fonts:
|
|
if font.get("cidSystemInfo") and font.get("cidSystemInfo") != "None":
|
|
assert "Adobe-" in font["cidSystemInfo"]
|
|
|
|
|
|
def test_utf8_corpus_regression():
|
|
doc_id = get_doc_id("utf-8.pdf")
|
|
resp = client.get(f"/documents/{doc_id}/pages/0/text")
|
|
assert resp.status_code == 200
|
|
data = resp.json()
|
|
assert len(data["glyphs"]) > 0
|
|
assert len(data["text"]) > 0
|
|
|
|
|
|
def test_font_size_regression():
|
|
doc_id = get_doc_id("utf-8.pdf")
|
|
resp = client.get(f"/documents/{doc_id}/pages/0/text")
|
|
data = resp.json()
|
|
sizes = set(g["fontSize"] for g in data["glyphs"])
|
|
assert len(sizes) >= 2 # utf-8.pdf should have multiple font sizes
|