Add deps and engine test specs, bootstrap engine to Python
New test specs (test-deps.sx: 33 tests, test-engine.sx: 37 tests) covering component dependency analysis and engine pure functions. All 6 spec modules now have formal SX tests: eval (81), parser (39), router (18), render (23), deps (33), engine (37) = 231 total. - Add engine as spec module in bootstrap_py.py (alongside deps) - Add primitive aliases (trim, replace, parse_int, upper) for engine functions - Fix parse-int to match JS parseInt semantics (strip trailing non-digits) - Regenerate sx_ref.py with --spec-modules deps,engine - Update all three test runners (run.js, run.py, sx-test-runner.js) - Add Dependencies and Engine nav items and testing page entries - Wire deps-source/engine-source through testing overview UI Node.js: 231/231 pass. Python: 226/231 (5 pre-existing parser/router gaps). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -141,6 +141,8 @@ SPECS = {
|
||||
"parser": {"file": "test-parser.sx", "needs": ["sx-parse"]},
|
||||
"router": {"file": "test-router.sx", "needs": []},
|
||||
"render": {"file": "test-render.sx", "needs": ["render-html"]},
|
||||
"deps": {"file": "test-deps.sx", "needs": []},
|
||||
"engine": {"file": "test-engine.sx", "needs": []},
|
||||
}
|
||||
|
||||
REF_DIR = os.path.join(_HERE, "..", "ref")
|
||||
@@ -269,6 +271,62 @@ def _load_router_from_bootstrap(env):
|
||||
eval_file("router.sx", env)
|
||||
|
||||
|
||||
def _load_deps_from_bootstrap(env):
|
||||
"""Load deps functions from the bootstrapped sx_ref.py."""
|
||||
try:
|
||||
from shared.sx.ref.sx_ref import (
|
||||
scan_refs,
|
||||
scan_components_from_source,
|
||||
transitive_deps,
|
||||
compute_all_deps,
|
||||
components_needed,
|
||||
page_component_bundle,
|
||||
page_css_classes,
|
||||
scan_io_refs,
|
||||
transitive_io_refs,
|
||||
compute_all_io_refs,
|
||||
component_pure_p,
|
||||
)
|
||||
env["scan-refs"] = scan_refs
|
||||
env["scan-components-from-source"] = scan_components_from_source
|
||||
env["transitive-deps"] = transitive_deps
|
||||
env["compute-all-deps"] = compute_all_deps
|
||||
env["components-needed"] = components_needed
|
||||
env["page-component-bundle"] = page_component_bundle
|
||||
env["page-css-classes"] = page_css_classes
|
||||
env["scan-io-refs"] = scan_io_refs
|
||||
env["transitive-io-refs"] = transitive_io_refs
|
||||
env["compute-all-io-refs"] = compute_all_io_refs
|
||||
env["component-pure?"] = component_pure_p
|
||||
env["test-env"] = lambda: env
|
||||
except ImportError:
|
||||
eval_file("deps.sx", env)
|
||||
env["test-env"] = lambda: env
|
||||
|
||||
|
||||
def _load_engine_from_bootstrap(env):
|
||||
"""Load engine pure functions from the bootstrapped sx_ref.py."""
|
||||
try:
|
||||
from shared.sx.ref.sx_ref import (
|
||||
parse_time,
|
||||
parse_trigger_spec,
|
||||
default_trigger,
|
||||
parse_swap_spec,
|
||||
parse_retry_spec,
|
||||
next_retry_ms,
|
||||
filter_params,
|
||||
)
|
||||
env["parse-time"] = parse_time
|
||||
env["parse-trigger-spec"] = parse_trigger_spec
|
||||
env["default-trigger"] = default_trigger
|
||||
env["parse-swap-spec"] = parse_swap_spec
|
||||
env["parse-retry-spec"] = parse_retry_spec
|
||||
env["next-retry-ms"] = next_retry_ms
|
||||
env["filter-params"] = filter_params
|
||||
except ImportError:
|
||||
eval_file("engine.sx", env)
|
||||
|
||||
|
||||
def main():
|
||||
global passed, failed, test_num
|
||||
|
||||
@@ -306,6 +364,10 @@ def main():
|
||||
# Load prerequisite spec modules
|
||||
if spec_name == "router":
|
||||
_load_router_from_bootstrap(env)
|
||||
if spec_name == "deps":
|
||||
_load_deps_from_bootstrap(env)
|
||||
if spec_name == "engine":
|
||||
_load_engine_from_bootstrap(env)
|
||||
|
||||
print(f"# --- {spec_name} ---")
|
||||
eval_file(spec["file"], env)
|
||||
|
||||
Reference in New Issue
Block a user