import json import unittest from html import escape from pathlib import Path import stache IGNORED = ['delimiters.json', '~inheritance.json', '~partials.json'] def generate_test(test, filename): class TestCase(unittest.TestCase): def runTest(self): nodes = stache.parse(test['template'], '') html = stache.render(nodes, test['data'], escape) self.assertEqual(html, test['expected']) def __str__(self): return f'{filename} - {test["name"]}' def shortDescription(self): return test['desc'] return TestCase() def load_tests(loader, standard_tests, pattern): suite = unittest.TestSuite() for path in Path('spec/specs/').iterdir(): if path.suffix == '.json' and path.name not in IGNORED: with open(path) as fh: data = json.load(fh) suite.addTest(unittest.TestSuite( generate_test(test, path.name) for test in data['tests'] )) return suite