"""Canonical-name parity: every one of the 514 indicators must report the same
``Indicator::name()`` the Rust core defines — the identical string every other
binding returns. Names are recorded in ``testdata/golden/names.json`` (keyed by
the Rust canonical); the construction recipe (native class + ctor args) is the
shared ``node_manifest.json``. The core name may differ from the registered
class name (e.g. ``ChaikinMoneyFlow`` -> ``"CMF"``), which is exactly what this
pins across languages.
"""
import json
import os

import pytest
import wickra as ta

HERE = os.path.dirname(__file__)
GOLDEN = os.path.normpath(os.path.join(HERE, "..", "..", "..", "testdata", "golden"))

with open(os.path.join(GOLDEN, "node_manifest.json")) as _mf:
    MANIFEST = json.load(_mf)
with open(os.path.join(GOLDEN, "names.json")) as _nf:
    NAMES = json.load(_nf)


@pytest.mark.parametrize("spec", MANIFEST, ids=[m["canonical"] for m in MANIFEST])
def test_name_matches_core(spec):
    cls = getattr(ta, spec["native"])
    ind = cls(*spec["ctor"])
    assert ind.name() == NAMES[spec["canonical"]]
