45 lines
2.0 KiB
Python
45 lines
2.0 KiB
Python
"""Execute the actual opt-in Load body; no native engine or GUI is launched."""
|
|
from policy_harness import ROOT, body, run
|
|
source=ROOT/'addons/core/Scripts/GameLib/ERR/ERR_DiagnosticNoSplash.c'
|
|
load=body(source,'override void Load()').replace('override void','void').replace('System.','System::').replace('super.Load()', 'Base::Load()')
|
|
run('''#include <cassert>
|
|
#include <string>
|
|
using string=std::string;
|
|
struct System {
|
|
static bool noSplash, explicitScenario;
|
|
static string project;
|
|
static bool IsCLIParam(const char*) { return noSplash; }
|
|
static bool GetCLIParam(const char*, string& value) {value=project;return explicitScenario;}
|
|
};
|
|
bool System::noSplash=false; bool System::explicitScenario=false; string System::project;
|
|
int diagnostics=0;
|
|
void Print(const char*) {diagnostics++;}
|
|
struct Base {
|
|
int nativeLoads=0, s_iSplashShown=0;
|
|
void Load(){nativeLoads++;s_iSplashShown++;}
|
|
};
|
|
struct Subject:Base {
|
|
bool m_ERRDiagnosticSplashSkipped=false;
|
|
''' + load + '''
|
|
};
|
|
int main(){
|
|
for(bool flag:{false,true}) for(bool explicitRequest:{false,true})
|
|
for(const string& project:{string("core"),string("chat"),string(""),string("other")}) {
|
|
System::noSplash=flag;System::explicitScenario=explicitRequest;System::project=project;
|
|
diagnostics=0;Subject instance;
|
|
instance.Load();instance.Load();instance.Load();
|
|
bool selected=flag && explicitRequest && (project=="core" || project=="chat");
|
|
assert(instance.nativeLoads==(selected ? 0 : 3));
|
|
assert(instance.s_iSplashShown==(selected ? 1 : 3));
|
|
assert(diagnostics==(selected ? 1 : 0));
|
|
assert(instance.m_ERRDiagnosticSplashSkipped==selected);
|
|
}
|
|
// Recreated splash instance on addon reload remains independently bounded.
|
|
System::noSplash=true;System::explicitScenario=true;System::project="core";
|
|
Subject first,reloaded;diagnostics=0;
|
|
first.Load();reloaded.Load();reloaded.Load();
|
|
assert(first.s_iSplashShown==1 && reloaded.s_iSplashShown==1 && diagnostics==2);
|
|
}
|
|
''')
|
|
print('PASS: actual noSplash Load body requires both explicit diagnostic and noSplash, preserves vanilla otherwise, and handles repeated Load/reload')
|