#!/bin/sh
# Import the installed module with every supported Python 3 interpreter and
# parse the sample METADATA.pb files shipped in the upstream source tree.
set -eu

cd "$AUTOPKGTEST_TMP"
SRC="${AUTOPKGTEST_SOURCE:-$(dirname "$0")/../..}"
cp "$SRC"/resources/testdata/*-metadata.pb .

for py in $(py3versions -s); do
    echo "=== $py"
    "$py" - <<'PYEOF'
import glob
import re
import google.protobuf
import gfmetadata
from gfmetadata import (AxisProto, DesignerInfoProto, FamilyProto,
                        KnowledgeProto, LanguageProto, text_format)

print("gfmetadata from", gfmetadata.__file__)
print("protobuf runtime", google.protobuf.__version__)

names = []
for path in sorted(glob.glob("*-metadata.pb")):
    with open(path, encoding="utf-8") as fh:
        text = fh.read()
    # Like upstream's Rust read_family(): drop the undocumented "position"
    # sub-messages that some METADATA.pb files in google/fonts carry.
    text = re.sub(r"(?m)position\s+\{[^}]*\}", "", text)
    family = text_format.Parse(text, FamilyProto())
    assert family.name and family.fonts, path
    # round-trip through text format
    again = text_format.Parse(text_format.MessageToString(family), FamilyProto())
    assert again == family, path
    names.append((family.name, len(family.fonts), [a.tag for a in family.axes]))
print(names)
assert len(names) == 3, names

axis = text_format.Parse('tag: "wght"\nmin_value: 100\ndefault_value: 400\nmax_value: 900\n', AxisProto())
assert axis.tag == "wght" and axis.max_value == 900
designer = text_format.Parse('designer: "Someone"\nlink: "https://example.org"\n', DesignerInfoProto())
assert designer.designer == "Someone"
lang = text_format.Parse('id: "en_Latn"\nlanguage: "en"\nscript: "Latn"\nname: "English"\n', LanguageProto())
assert lang.script == "Latn"
assert KnowledgeProto.DESCRIPTOR.full_name
print("OK")
PYEOF
done
