using System.Runtime.CompilerServices; namespace Elsa.Dsl.ElsaScript.IntegrationTests; /// /// Turns Jint's host-contract verifiers on for this test assembly. /// /// /// /// The verifiers catch a host answering one of Jint's extension points in a way that contradicts another — /// contradictions the engine cannot afford to re-check on its hot paths and therefore trusts, so a violation is /// otherwise silent. The one Elsa is exposed to today is the object-converter type declaration: registering a /// converter with AddObjectConverter(converter, handledTypes) promises the engine that the converter /// produces values only for those types, and in exchange the compiled interop lanes are kept for every member /// that cannot produce one. A case added to a converter's own TryConvert switch and not added to its /// registration is then silently skipped on exactly those members, which nothing else would report. /// /// /// The shipped Jint package is a Release build, where the checks are compiled behind a runtime flag read once at /// type initialization: with the switch off the JIT folds the guards away entirely, so this costs a production /// host nothing and there is no Debug build to obtain. It has to be set before the first use of any Jint type, /// which is what the module initializer is for. Duplicated per scripting test assembly on purpose — putting it /// in the shared Elsa.Testing.Shared.Integration package would flip a process-wide switch for every /// external consumer of that package as well. /// /// internal static class JintHostContractVerification { [ModuleInitializer] internal static void Enable() => AppContext.SetSwitch("Jint.EnableHostContractVerification", true); }