39 lines
1.8 KiB
Python
39 lines
1.8 KiB
Python
"""Run synthetic regressions against actual frozen listener/UI code from the EXE."""
|
|
from pathlib import Path
|
|
import importlib.abc
|
|
import importlib.util
|
|
import runpy
|
|
import json
|
|
import sys
|
|
|
|
from PyInstaller.archive.readers import CArchiveReader
|
|
|
|
folder = Path(__file__).resolve().parent
|
|
root = Path(r'C:\wechat_rpa')
|
|
exe = root / 'dist/ZhenAI-WeCom-Assistant-v1.4.28/ZhenAI-WeCom-Assistant-v1.4.28.exe'
|
|
pyz = CArchiveReader(str(exe)).open_embedded_archive('PYZ.pyz')
|
|
plan=json.loads((folder/'contact-recovery-release-plan.json').read_text(encoding='utf-8-sig'))
|
|
assert plan.get('finalized') is True and plan.get('version')=='1.4.28'
|
|
assert {'review_assistant_contacts','review_assistant','review_state','reply_session_policy','protocol_engine','wechat_bot','reply_database','wxwork_db','voice_messages','voice_transcription','wechat_gui_qt','app_version','contact_reply_guard','contact_relation'} <= set(plan['frozenModules'])
|
|
assert plan['windowsTestModules'], 'Choose explicit frozen regression modules'
|
|
modules=set(plan['frozenModules']) | {'gui_runtime','wechat_bot','review_policy','protocol_engine'}
|
|
|
|
|
|
class FrozenListenerCode(importlib.abc.MetaPathFinder, importlib.abc.Loader):
|
|
def find_spec(self, fullname, path=None, target=None):
|
|
if fullname in modules:
|
|
return importlib.util.spec_from_loader(fullname, self, origin=str(exe))
|
|
|
|
def create_module(self, spec):
|
|
return None
|
|
|
|
def exec_module(self, module):
|
|
module.__file__ = str(root / (module.__name__ + '.py'))
|
|
exec(pyz.extract(module.__name__), module.__dict__)
|
|
|
|
|
|
sys.meta_path.insert(0, FrozenListenerCode())
|
|
runner = folder / 'run_isolated_contact_recovery.py'
|
|
sys.argv = [str(runner), str(root), str(folder / 'frozen-contact-recovery-tests.json'), *plan['windowsTestModules']]
|
|
runpy.run_path(str(runner), run_name='__main__')
|