feat(cli): add --black-box to cobol_testgen and wire black-box run
This commit is contained in:
@@ -30,11 +30,13 @@ from .pipeline_bridge import build_branch_tree_fallback
|
|||||||
from .design_mcdc import enum_paths as mcdc_enum_paths, _filter_stop
|
from .design_mcdc import enum_paths as mcdc_enum_paths, _filter_stop
|
||||||
from .design import enum_paths, generate_records, get_term_type, extend_abend_programs, make_base_record
|
from .design import enum_paths, generate_records, get_term_type, extend_abend_programs, make_base_record
|
||||||
from .output import output_json, output_input_files
|
from .output import output_json, output_input_files
|
||||||
|
from .blackbox import load_black_box_groups
|
||||||
from .coverage import run_coverage, generate_coverage_index, collect_decision_points, mark_coverage
|
from .coverage import run_coverage, generate_coverage_index, collect_decision_points, mark_coverage
|
||||||
from japanese_data import generate_fullwidth_text, generate_halfwidth_katakana, generate_wareki_date
|
from japanese_data import generate_fullwidth_text, generate_halfwidth_katakana, generate_wareki_date
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from .runner import run_and_compare, run_all, GroupInfo, GroupResult
|
from .runner import (run_and_compare, run_all, GroupInfo, GroupResult,
|
||||||
|
run_external_groups, _write_java_test_report)
|
||||||
_HAVE_RUNNER = True
|
_HAVE_RUNNER = True
|
||||||
except ImportError:
|
except ImportError:
|
||||||
_HAVE_RUNNER = False
|
_HAVE_RUNNER = False
|
||||||
@@ -1408,6 +1410,30 @@ def main():
|
|||||||
if not _HAVE_RUNNER:
|
if not _HAVE_RUNNER:
|
||||||
logger.warning("--gcov: runner.py not found. Compile/run will be skipped. "
|
logger.warning("--gcov: runner.py not found. Compile/run will be skipped. "
|
||||||
"Use --gcov without runner only generates test data + static coverage.")
|
"Use --gcov without runner only generates test data + static coverage.")
|
||||||
|
|
||||||
|
do_black_box = False
|
||||||
|
black_box_arg = None
|
||||||
|
i = 0
|
||||||
|
while i < len(args):
|
||||||
|
a = args[i]
|
||||||
|
if a == '--no-black-box':
|
||||||
|
do_black_box = False
|
||||||
|
args.pop(i)
|
||||||
|
continue
|
||||||
|
if a == '--black-box':
|
||||||
|
do_black_box = True
|
||||||
|
if i + 1 < len(args) and not args[i + 1].startswith('--'):
|
||||||
|
black_box_arg = args[i + 1]
|
||||||
|
args.pop(i + 1)
|
||||||
|
args.pop(i)
|
||||||
|
continue
|
||||||
|
if a.startswith('--black-box='):
|
||||||
|
do_black_box = True
|
||||||
|
black_box_arg = a.split('=', 1)[1]
|
||||||
|
args.pop(i)
|
||||||
|
continue
|
||||||
|
i += 1
|
||||||
|
|
||||||
i = 0
|
i = 0
|
||||||
while i < len(args):
|
while i < len(args):
|
||||||
if args[i] == '--temp-dir':
|
if args[i] == '--temp-dir':
|
||||||
@@ -1840,6 +1866,8 @@ def main():
|
|||||||
logger.info(f" Skip 数据集: {skip_outpath}(全部输入 FD 空文件: {', '.join(skip_input_assigns)})")
|
logger.info(f" Skip 数据集: {skip_outpath}(全部输入 FD 空文件: {', '.join(skip_input_assigns)})")
|
||||||
|
|
||||||
gcov_data = None
|
gcov_data = None
|
||||||
|
group_results = []
|
||||||
|
white_java_reports = []
|
||||||
if gcov_mode and proc_div and _HAVE_GCOV and _HAVE_RUNNER:
|
if gcov_mode and proc_div and _HAVE_GCOV and _HAVE_RUNNER:
|
||||||
_temp = temp_dir or str(prog_outdir / '.gcov_cache')
|
_temp = temp_dir or str(prog_outdir / '.gcov_cache')
|
||||||
source_dir = str(filepath.parent)
|
source_dir = str(filepath.parent)
|
||||||
@@ -1858,7 +1886,7 @@ def main():
|
|||||||
exp.update(eo[fd_name])
|
exp.update(eo[fd_name])
|
||||||
expected_records[i] = exp
|
expected_records[i] = exp
|
||||||
|
|
||||||
group_results, gcov_data = run_all(
|
group_results, gcov_data, white_java_reports = run_all(
|
||||||
filepath.stem, str(prog_outdir), _temp,
|
filepath.stem, str(prog_outdir), _temp,
|
||||||
fields_dict, fd_fields, select_info, open_dir,
|
fields_dict, fd_fields, select_info, open_dir,
|
||||||
term_types, records, expected_records=expected_records,
|
term_types, records, expected_records=expected_records,
|
||||||
@@ -1866,6 +1894,7 @@ def main():
|
|||||||
multi_write_fds=multi_write_fds,
|
multi_write_fds=multi_write_fds,
|
||||||
skip_records=skip_records,
|
skip_records=skip_records,
|
||||||
skip_term_types=skip_term_types,
|
skip_term_types=skip_term_types,
|
||||||
|
write_report=not do_black_box,
|
||||||
)
|
)
|
||||||
|
|
||||||
passed = sum(1 for r in group_results if r.passed)
|
passed = sum(1 for r in group_results if r.passed)
|
||||||
@@ -1879,6 +1908,27 @@ def main():
|
|||||||
logger.warning(f" [{r.name}] {d.field}: "
|
logger.warning(f" [{r.name}] {d.field}: "
|
||||||
f"期望={d.expected!r}, 实际={d.actual!r}")
|
f"期望={d.expected!r}, 实际={d.actual!r}")
|
||||||
|
|
||||||
|
if do_black_box and proc_div and _HAVE_RUNNER:
|
||||||
|
bb_dir = Path(black_box_arg) if black_box_arg else prog_outdir
|
||||||
|
bb_groups = load_black_box_groups(bb_dir, fd_fields, select_info, fields_dict)
|
||||||
|
if not bb_groups:
|
||||||
|
logger.warning(f" --black-box: 未在 {bb_dir} 找到可用黑盒数据,跳过")
|
||||||
|
else:
|
||||||
|
_bb_temp = temp_dir or str(prog_outdir / '.gcov_cache')
|
||||||
|
bb_results, bb_java_reports = run_external_groups(
|
||||||
|
filepath.stem, str(prog_outdir), _bb_temp,
|
||||||
|
fields_dict, fd_fields, select_info, open_dir,
|
||||||
|
roles, field_to_fd, bb_groups,
|
||||||
|
source_dir=str(filepath.parent),
|
||||||
|
data_fields=fields_dict,
|
||||||
|
multi_write_fds=multi_write_fds,
|
||||||
|
)
|
||||||
|
all_results = list(group_results) + list(bb_results)
|
||||||
|
all_reports = list(white_java_reports) + list(bb_java_reports)
|
||||||
|
if all_reports:
|
||||||
|
_write_java_test_report(str(prog_outdir), filepath.stem,
|
||||||
|
all_results, all_reports)
|
||||||
|
|
||||||
if do_run and proc_div and _HAVE_RUNNER:
|
if do_run and proc_div and _HAVE_RUNNER:
|
||||||
run_and_compare(
|
run_and_compare(
|
||||||
filepath.stem, str(prog_outdir), fields_dict,
|
filepath.stem, str(prog_outdir), fields_dict,
|
||||||
|
|||||||
@@ -831,7 +831,7 @@ def run_all(program_name: str, outdir: str, temp_dir: str,
|
|||||||
"""完整编排:编译 → 准备目录 → 逐组执行 → 出力保存。
|
"""完整编排:编译 → 准备目录 → 逐组执行 → 出力保存。
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
(results_list, merged_gcov_data)
|
(results_list, merged_gcov_data, java_reports)
|
||||||
merged_gcov_data is None when no gcov runs.
|
merged_gcov_data is None when no gcov runs.
|
||||||
"""
|
"""
|
||||||
source_dir = source_dir or str(Path(outdir).parent)
|
source_dir = source_dir or str(Path(outdir).parent)
|
||||||
|
|||||||
Reference in New Issue
Block a user