Skip to content

Commit b04871b

Browse files
authored
Update Fortran test generator to handle arbitrary test case nesting and add TOML metadata support (#194)
1 parent 4c084c2 commit b04871b

File tree

1 file changed

+16
-16
lines changed

1 file changed

+16
-16
lines changed

bin/create_fortran_test.py

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,9 @@
4242
import json
4343
import argparse
4444
import os
45+
import pathlib
4546
import re
47+
import toml
4648

4749

4850
def fix_and_quote_fortran_multiline(txt):
@@ -99,28 +101,20 @@ def write_testcase(c, TEST_NUMBER):
99101

100102
def flatten_test_cases(j):
101103
# unpack nested cases
102-
nested_cases = j['cases']
103-
flattened_cases = []
104-
while len(nested_cases) > 0:
105-
cases = nested_cases.pop()
106-
if 'cases' in cases:
107-
nested_cases.append(cases['cases'])
108-
else:
109-
if isinstance(cases, list):
110-
flattened_cases.extend(cases)
111-
else:
112-
flattened_cases.append(cases)
113-
114-
return flattened_cases
104+
if 'cases' in j:
105+
for i in j['cases']:
106+
yield from flatten_test_cases(i)
107+
else:
108+
yield j
115109

116110

117111
def create_single_test(j):
118112
"""Walk through the json cases and recursively write the test cases"""
119113

120-
flattened_cases = flatten_test_cases(j)
114+
flattened_cases = list(flatten_test_cases(j))
121115

122116
si = []
123-
for i, c in enumerate(flattened_cases):
117+
for i, c in enumerate(flattened_cases, start=1):
124118
si.extend(write_testcase(c, i))
125119
return si
126120

@@ -206,8 +200,14 @@ def add_meta_and_doc_file(test_file_name, json_name):
206200
write_instructions(desc_file_lines, instruction_file)
207201

208202
meta_yaml = os.path.join(os.path.dirname(json_name), 'metadata.yml')
203+
meta_toml = os.path.join(os.path.dirname(json_name), 'metadata.toml')
204+
if os.path.exists(meta_toml):
205+
config_dict = toml.loads(pathlib.Path(meta_toml).read_text())
206+
elif os.path.exists(meta_yaml):
207+
config_dict = get_meta_info(meta_yaml)
208+
else:
209+
raise ValueError("Unable to find metadata file (yml or toml)")
209210
local_config_json = os.path.join(meta_dir, 'config.json')
210-
config_dict = get_meta_info(meta_yaml)
211211
write_config_json(exercise_name, config_dict, local_config_json)
212212

213213
return None

0 commit comments

Comments
 (0)