Files
workinf_Blender_Wasm/my-tools/test_wbv2_runtime_contract.py
mes123456 f3e21c6b98
Some checks failed
M6 deployable RC / quick (push) Has been cancelled
M6 deployable RC / chromium (push) Has been cancelled
M6 deployable RC / release (push) Has been cancelled
chore: checkpoint web Blender migration source, tools and docs
Accumulated uncommitted work: GHOST Web backend, WebGL/GPU web layer,
web workflow engine and protocol, tooling, docs and task records.
Large generated evidence, user-testing archives, build snapshots and
imported test assets remain untracked.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-11-10 11:18:01 +08:00

73 lines
3.5 KiB
Python

import contextlib
import io
import threading
import time
import unittest
from wbv2_runtime_contract import bind_runtime_publication
import test_wbv2_task_dispatch as fixtures
class RuntimeContractTests(unittest.TestCase):
def test_ui_verification_tracks_shared_viewport_and_binding_code(self):
result = bind_runtime_publication({
"dependencies": ["web/app/src/app/App.tsx"],
"checks": [{"id": "browser", "argv": ["node", "test.mjs"],
"cwd": ".", "kinds": ["chromium"]}],
})
self.assertIn("web/app/src/three-adapter/viewport.ts", result["dependencies"])
self.assertIn("my-tools/wbv2_runtime_contract.py", result["dependencies"])
def test_backend_browser_verification_keeps_its_existing_scope(self):
result = bind_runtime_publication({
"dependencies": ["web/protocol/web-engine.ts"],
"checks": [{"id": "browser", "argv": ["node", "test.mjs"],
"cwd": ".", "kinds": ["chromium"]}],
})
self.assertNotIn("web/app/src/three-adapter/viewport.ts", result["dependencies"])
def test_new_work_is_selected_before_stale_verified_work(self):
from wbv2_local_planner import LocalPlanner
fixture = fixtures.AutoDispatchTests()
fixture.setUp()
try:
jobs = fixture.jobs(2)
fixture.runner.state["jobs"][jobs[0]["id"]] = {"state": "verified", "receipt": "missing.json", "receiptSha256": "0" * 64}
LocalPlanner(fixture.root, fixture.runner.directory).refresh(fixture.context, jobs, set())
self.assertEqual(jobs[1]["id"], fixture.runner.choose_job(jobs)["id"])
finally:
fixture.doCleanups()
def test_known_webengine_build_includes_runtime_publication(self):
result = {"checks": [{"id": "build", "kinds": ["source_build"], "argv": ["cmake", "--build", "build_web_blender6", "--target", "web_engine"], "cwd": "."}], "dependencies": [], "artifacts": []}
bind_runtime_publication(result)
self.assertEqual(["python3", "my-tools/build_local_webengine.py"], result["checks"][0]["argv"])
self.assertIn("tools/web/sync-web-engine-runtime.mjs", result["dependencies"])
self.assertIn("web/app/public/wasm-module-manifest.json", result["artifacts"])
def test_other_build_targets_keep_their_contract(self):
argv = ["cmake", "--build", "build_blender_native", "--target", "blender"]
result = {"checks": [{"id": "build", "kinds": ["source_build"], "argv": argv, "cwd": "."}], "dependencies": [], "artifacts": []}
bind_runtime_publication(result)
self.assertEqual(argv, result["checks"][0]["argv"])
self.assertEqual([], result["dependencies"])
def test_unchanged_wait_does_not_return_to_preflight_on_poll_deadline(self):
fixture = fixtures.AutoDispatchTests()
fixture.setUp()
try:
jobs = fixture.jobs(1)
fixture.policy["localPollSeconds"] = 0.01
stop = threading.Timer(0.4, lambda: setattr(fixture.runner, "stop_requested", True))
stop.start()
try:
start = time.monotonic()
with contextlib.redirect_stdout(io.StringIO()):
fixture.runner.wait_for_local_work(fixture.context, jobs)
self.assertGreater(time.monotonic() - start, 0.35)
self.assertTrue(fixture.runner.stop_requested)
finally:
stop.join()
finally:
fixture.doCleanups()