Build Capital Quest for CoCo 3 with maps and emulator tests
This commit is contained in:
commit
9f7d6f4786
44 files changed
+6238
No files matched your search
@@ -0,0 +1,41 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Run real guest-input regression tests via an exported public VCC Plus grant.
|
||||
Usage: python3 tests/playtest.py PRIVATE_GRANT --evidence /tmp/quiz-evidence
|
||||
Requires C Assistant's Use Project Makefile and Allow Disposable Playtests.
|
||||
"""
|
||||
import argparse,json,os,runpy,sys,time,uuid
|
||||
from pathlib import Path
|
||||
ROOT=Path(__file__).resolve().parents[1]
|
||||
sys.path.insert(0,str(ROOT/'tools'))
|
||||
from vcc_mcp import VCC
|
||||
p=argparse.ArgumentParser(description=__doc__)
|
||||
p.add_argument('grant',type=Path);p.add_argument('--evidence',required=True,type=Path)
|
||||
a=p.parse_args();out=a.evidence.resolve()
|
||||
if out.is_relative_to(ROOT):p.error('Keep evidence outside the watched checkout until the run completes.')
|
||||
out.mkdir(parents=True,exist_ok=True)
|
||||
os.environ.update(VCC_GRANT=str(a.grant.resolve()),CAPITAL_TEST_EVIDENCE=str(out),CAPITAL_TEST_STATE=str(out/'session.json'))
|
||||
v=VCC(a.grant)
|
||||
c=v.call('get_capabilities');assert c.get('owned_playtests'),c
|
||||
b=v.call('build_project',dict(project_id=c['project_id'],revision=c['revision'],action='disk',configuration='Test',request_id=str(uuid.uuid4())))
|
||||
assert 'build_id' in b,b
|
||||
for _ in range(150):
|
||||
receipt=v.call('get_build',dict(build_id=b['build_id']))
|
||||
if receipt.get('status')!='building':break
|
||||
time.sleep(.2)
|
||||
assert receipt.get('status')=='succeeded',receipt
|
||||
(out/'build-receipt.json').write_text(json.dumps(receipt,indent=2))
|
||||
r=v.call('start_playtest',dict(project_id=c['project_id'],revision=c['revision'],artifact_id=receipt['artifact_id'],request_id=str(uuid.uuid4())))
|
||||
assert 'run_id' in r,r
|
||||
state=dict(cap=c,build=b,artifact=receipt,run=r)
|
||||
(out/'session.json').write_text(json.dumps(state))
|
||||
v.call('playtest_input',dict(run_id=r['run_id'],request_id=str(uuid.uuid4()),steps=[dict(keys=[],fields=600)]))
|
||||
v.close()
|
||||
support=runpy.run_path(str(Path(__file__).with_name('playtest_support.py')))
|
||||
support['capture'](r['run_id'],'title');support['v'].close()
|
||||
runpy.run_path(str(Path(__file__).with_name('playtest_mc.py')),run_name='__main__')
|
||||
runpy.run_path(str(Path(__file__).with_name('playtest_typed.py')),run_name='__main__')
|
||||
state=json.loads((out/'session.json').read_text());v=VCC(a.grant)
|
||||
for r in (state['run'],state['typed_run']):
|
||||
result=v.call('stop_playtest',dict(run_id=r['run_id'],request_id=str(uuid.uuid4())))
|
||||
(out/('retained-'+r['run_id']+'.json')).write_text(json.dumps(result,indent=2))
|
||||
v.close();print('PASS: complete multiple-choice and typed regression suite. Evidence:',out)
|
||||
Reference in new issue
Block a user