# Licensed under a 3-clause BSD style license - see LICENSE.rst

import pytest

from astropy.io.votable import ucd


def test_none():
    assert ucd.check_ucd(None)


examples = {
    "phys.temperature": [("ivoa", "phys.temperature")],
    "pos.eq.ra;meta.main": [("ivoa", "pos.eq.ra"), ("ivoa", "meta.main")],
    "meta.id;src": [("ivoa", "meta.id"), ("ivoa", "src")],
    "phot.flux;em.radio;arith.ratio": [
        ("ivoa", "phot.flux"),
        ("ivoa", "em.radio"),
        ("ivoa", "arith.ratio"),
    ],
    "PHot.Flux;EM.Radio;ivoa:arith.Ratio": [
        ("ivoa", "phot.flux"),
        ("ivoa", "em.radio"),
        ("ivoa", "arith.ratio"),
    ],
    "pos.galactic.lat": [("ivoa", "pos.galactic.lat")],
    "meta.code;phot.mag": [("ivoa", "meta.code"), ("ivoa", "phot.mag")],
    "stat.error;phot.mag": [("ivoa", "stat.error"), ("ivoa", "phot.mag")],
    "phys.temperature;instr;stat.max": [
        ("ivoa", "phys.temperature"),
        ("ivoa", "instr"),
        ("ivoa", "stat.max"),
    ],
    "stat.error;phot.mag;em.opt.V": [
        ("ivoa", "stat.error"),
        ("ivoa", "phot.mag"),
        ("ivoa", "em.opt.V"),
    ],
    "phot.color;em.opt.B;em.opt.V": [
        ("ivoa", "phot.color"),
        ("ivoa", "em.opt.B"),
        ("ivoa", "em.opt.V"),
    ],
    "stat.error;phot.color;em.opt.B;em.opt.V": [
        ("ivoa", "stat.error"),
        ("ivoa", "phot.color"),
        ("ivoa", "em.opt.B"),
        ("ivoa", "em.opt.V"),
    ],
}


def test_check():
    for s, p in examples.items():
        assert ucd.parse_ucd(s, True, True) == p
        assert ucd.check_ucd(s, True, True)


def test_too_many_colons():
    with pytest.raises(ValueError):
        ucd.parse_ucd("ivoa:stsci:phot", True, True)


def test_invalid_namespace():
    with pytest.raises(ValueError):
        ucd.parse_ucd("_ivoa:phot.mag", True, True)


def test_invalid_word():
    with pytest.raises(ValueError):
        ucd.parse_ucd("-pho")
