mirror of https://github.com/kdl-org/kdl.git
50 lines
1.8 KiB
Python
50 lines
1.8 KiB
Python
from __future__ import annotations
|
|
|
|
import os
|
|
import sys
|
|
import typing
|
|
|
|
def findTestFiles(path) -> typing.Generator[str, None, None]:
|
|
for root, _, filenames in os.walk(path):
|
|
for filename in filenames:
|
|
yield os.path.join(root, filename)
|
|
|
|
# strip the leading folder name, so they can be directly compared
|
|
inputFiles = set(x[len("input")+1:] for x in findTestFiles("input"))
|
|
validFiles = set(x[len("expected_kdl")+1:] for x in findTestFiles("expected_kdl"))
|
|
|
|
invalidFiles = inputFiles - validFiles
|
|
orphanedFiles = validFiles - inputFiles
|
|
|
|
SUCCESS = True
|
|
|
|
# Check for any expected_kdl files without a corresponding input file.
|
|
if orphanedFiles:
|
|
SUCCESS = False
|
|
print("ERROR: There are outputs in /expected_kdl without corresponding tests in /input:\n" + "\n".join([" "+x for x in orphanedFiles]))
|
|
|
|
# Check for any input files lacking an expected_kdl file
|
|
# (aka inputs expected to generate a parse error)
|
|
# that don't have a _fail suffix.
|
|
misnamedFiles: list[str] = []
|
|
for filepath in invalidFiles:
|
|
basepath, ext = os.path.splitext(filepath)
|
|
if not basepath.endswith("_fail"):
|
|
misnamedFiles.append(filepath)
|
|
if misnamedFiles:
|
|
SUCCESS = False
|
|
print("ERROR: There are tests in /input without corresponding outputs in /expected_kdl, but they don't have a _fail suffix:\n" + "\n".join([" "+x for x in misnamedFiles]))
|
|
|
|
# Check for any expected_kdl files that don't end in a newline.
|
|
noNewlineFiles: list[str] = []
|
|
for filepath in validFiles:
|
|
with open("expected_kdl/" + filepath, "r", encoding="utf-8") as fh:
|
|
text = fh.read()
|
|
if not text.endswith("\n"):
|
|
noNewlineFiles.append(filepath)
|
|
if noNewlineFiles:
|
|
SUCCESS = False
|
|
print("ERROR: There are outputs in /expected_kdl that don't end with a newline:\n" + "\n".join([" "+x for x in noNewlineFiles]))
|
|
|
|
if not SUCCESS:
|
|
sys.exit(1) |