from lxml import etree
from pathlib import Path
import pytest


_KNOWN_PATHLESS = {
  "NotoSansSymbols-Regular-Subsetted.ttf",
  "NotoColorEmoji.ttf",
  "NotoColorEmojiFlags.ttf",
  "NotoSansSymbols-Regular-Subsetted2.ttf",
}


def _repo_root() -> Path:
  root = (Path(__file__).parent / "..").absolute()
  if not (root / "LICENSE").is_file():
    raise IOError(f"{root} does not contain LICENSE")
  return root


def _noto_4_android_file() -> Path:
  xml_file = _repo_root() / "android-connection" / "noto-fonts-4-android.xml"
  if not xml_file.is_file():
    raise IOError(f"No file {xml_file}")
  return xml_file


def _font_file(font_el) -> str:
  return ("".join(font_el.itertext())).strip()


def test_fonts_have_path():
  root = etree.parse(str(_noto_4_android_file()))
  bad = []
  for font in root.iter("font"):
    font_file = _font_file(font)
    if font_file in _KNOWN_PATHLESS:
      assert "path" not in font.attrib, f"{font_file} not expected to have path. Correct _KNOWN_PATHLESS if you just added path"
      continue

    if not font.attrib.get("path", ""):
      bad.append(font_file)
  assert not bad, "Missing path attribute: " + ", ".join(bad)


def test_font_paths_are_valid():
  root = etree.parse(str(_noto_4_android_file()))
  bad = []
  for font in root.xpath("//font[@path]"):
    path = font.attrib["path"]
    file = _font_file(font)
    if not (_repo_root() / path / file).is_file():
      bad.append("/".join((path, file)))
  assert not bad, "No such file: " + ", ".join(bad)
