#!/usr/bin/env python import glob import os.path from parameterized import parameterized import re import tempfile import unittest import warnings from description import parse_description, DescriptionParsingError class TestParseDescription(unittest.TestCase): config = { 'aryion': 'UserAryion', 'furaffinity': 'UserFuraffinity', 'inkbunny': 'UserInkbunny', 'sofurry': 'UserSoFurry', 'weasyl': 'UserWeasyl', } define_options = {'test_parse_description'} def setUp(self): self.tmpdir = tempfile.TemporaryDirectory(ignore_cleanup_errors=True) warnings.simplefilter('ignore', ResourceWarning) def tearDown(self): self.tmpdir.cleanup() warnings.simplefilter('default', ResourceWarning) @parameterized.expand([ (re.match(r'.*(input_\d+)\.txt', v)[1], v) for v in sorted(glob.iglob('./test/description/input_*.txt')) ]) def test_parse_success(self, name, test_description): with tempfile.TemporaryDirectory(ignore_cleanup_errors=True) as tmpdir: parse_description(test_description, self.config, tmpdir, define_options=self.define_options) for expected_output_file in glob.iglob(f'./test/description/output_{name[6:]}/*'): received_output_file = os.path.join(tmpdir, os.path.split(expected_output_file)[1]) self.assertTrue(os.path.exists(received_output_file)) self.assertTrue(os.path.isfile(received_output_file)) with open(received_output_file, 'r') as f: received_description = f.read() with open(expected_output_file, 'r') as f: expected_description = f.read() self.assertEqual(received_description, expected_description) @parameterized.expand([ (re.match(r'.*(error_.+)\.txt', v)[1], v) for v in sorted(glob.iglob('./test/description/error_*.txt')) ]) def test_parse_errors(self, _, test_description): self.assertRaises(DescriptionParsingError, lambda: parse_description(test_description, self.config, self.tmpdir.name, define_options=self.define_options)) self.assertListEqual(glob.glob(os.path.join(self.tmpdir.name, '*')), []) if __name__ == '__main__': unittest.main()