binhonglee/GlobeTrotte

View on GitHub
build_defs/npm/ava.build_defs

Summary

Maintainability
Test Coverage
subinclude("//build_defs/npm")

def ava_dir(
  name:str,
  srcs:list=[],
  deps:list=[],
  visibility:list=[],
):
  return build_rule(
    name = name,
    srcs = srcs,
    cmd = "zip -r " + name + ".ava_dir ./",
    outs = [name + ".ava_dir"],
    deps = deps,
    test_only = True,
    visibility = visibility
  )

def ava_tests(
  name:str,
  srcs:list,
  nyc:bool=True,
  ava_dirs:list=[],
  deps:list=[],
  visibility:list=[],
  vue_components:bool=False,
):
  rules = []
 
  for src in srcs:
    on_test = ava_test(
      name = name + "_" + src[:-8],
      src = src,
      nyc = nyc,
      ava_dirs = ava_dirs,
      deps = deps,
      visibility = visibility,
      vue_component = vue_components,
    )
    rules += [on_test]

  return build_rule(
    name = name,
    srcs = srcs,
    deps = rules,
    test_only = True,
    visibility = visibility,
    requires = ["npm-test"],
  )

def ava_test(
  name:str,
  src:str,
  ava_dirs:list=[],
  nyc:bool=True,
  deps:list=[],
  visibility:list=[],
  vue_component:bool=False,
):
  if vue_component and _assert_boolean(CONFIG.DISABLE_VUE_COMPONENT_TESTS):
    return build_rule(
      name = name,
      data = [src] + ava_dirs + deps,
      test_cmd = "echo 'Skipped...'",
      test = True,
      test_only = True,
      no_test_output = True,
      visibility = visibility,
    )

  use_nyc = "nyc --silent " if nyc else ""
  test_cmd = _set_node_modules()
  for ava_dir in ava_dirs:
    ava_dir_name = ava_dir.split(":")
    if len(name) < 2:
      temp = ava_dir.split("/")
      ava_dir_name = temp[len(temp) - 1]
    else:
      ava_dir_name = ava_dir_name[1]
    test_cmd += " && unzip -o " + ava_dir_name + ".ava_dir"

  if CONFIG.CORE_FILES != "":
    deps += [CONFIG.CORE_FILES]

  return build_rule(
    name = name,
    data = [src] + ava_dirs + deps,
    test_cmd = " && ".join([
      test_cmd,
      " ".join([
        "$TOOL " + use_nyc + "ava",
        "--",
        "--serial",
        "--concurrency=1",
        "$PKG_DIR/" + src,
        "|",
        "tee",
        ">($TOOL tap-xunit > test.results)",
      ]),
      "mkdir -p " + name,
      "pnpx nyc report --reporter cobertura",
      "mv coverage/cobertura-coverage.xml test.coverage",
      "mv .nyc_output " + name + "/.nyc_output",
    ]),
    test_outputs = [name + "/.nyc_output"],
    test = True,
    test_only = True,
    visibility = visibility,
    test_tools = [CONFIG.NPX_TOOL],
    labels = ['ava'],
    requires = ["npm-test"],
  )

CONFIG.setdefault("DISABLE_VUE_COMPONENT_TESTS", False)