"""S21: Verify condition parsing fix and constraint field filter""" import sys, os, re sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..')) P=0;F=0 def ck(v,m=""): global P,F; (P:=P+1) if v else (F:=F+1, print(f" FAIL {m}")) from cobol_testgen.cond import parse_single_condition print("=== Issue 1: NOT operator swallowed into field name ===") tests = [ ('WS-FILE-OUT-STATUS NOT = "00"', ('WS-FILE-OUT-STATUS', '<>', '00')), ('WS-COUNT NOT > 5', ('WS-COUNT', '<=', '5')), ('WS-VAL NOT < 10', ('WS-VAL', '>=', '10')), ('AMOUNT = 100', ('AMOUNT', '=', '100')), ('WS-FLAG NOT = "Y"', ('WS-FLAG', '<>', 'Y')), ] for text, expected in tests: result = parse_single_condition(text, None) ok = result == expected ck(ok, f"parse_single_condition({text!r})\n expected {expected}\n got {result}") if ok: print(f" OK: {text!r} → {result}") else: print(f" {text!r}") print(f" expected: {expected}") print(f" got: {result}") print("\n=== Issue 2: Bare NOT field reference ===") tests2 = [ ('NOT WS-EOF', ('WS-EOF', '<>', 'Y')), ('WS-EOF', ('WS-EOF', '=', 'Y')), ] for text, expected in tests2: result = parse_single_condition(text, None) ok = result == expected ck(ok, f"parse_single_condition({text!r})\n expected {expected}\n got {result}") if ok: print(f" OK: {text!r} → {result}") else: print(f" {text!r} -> {result} (expected {expected})") print("\n=== Issue 2: 88-level resolution ===") fields88 = [ {'name': 'WS-EOF-Y', 'is_88': True, 'parent': 'WS-EOF', 'value': 'Y'}, {'name': 'STATUS-OK', 'is_88': True, 'parent': 'WS-STATUS', 'value': '00'}, ] tests3 = [ ('WS-EOF-Y', ('WS-EOF', '=', 'Y')), ('NOT WS-EOF-Y', ('WS-EOF', '<>', 'Y')), ('STATUS-OK', ('WS-STATUS', '=', '00')), ('NOT STATUS-OK', ('WS-STATUS', '<>', '00')), ] for text, expected in tests3: result = parse_single_condition(text, fields88) ok = result == expected ck(ok, f"parse({text!r})\n expected {expected}\n got {result}") if ok: print(f" OK: {text!r} → {result}") else: print(f" {text!r} -> {result} (expected {expected})") print(f"\n{'='*40}") print(f"S21: {P} PASS / {F} FAIL") if F > 0: sys.exit(1)