const assert = require("node:assert/strict") const fs = require("node:fs") const path = require("node:path") const vm = require("node:vm") const { test } = require("node:test") const { transformSync } = require("esbuild") const source = fs.readFileSync(path.join(__dirname, "../client/src/common/cdlEventHandler.ts"), "utf8") const compiled = transformSync(source, { loader: "ts", format: "cjs" }).code const context = { module: { exports: {} } } vm.runInNewContext(compiled, context) const { cdlEventHandlerAtLine, createCdlEventHandlerSnippet } = context.module.exports test("TOGGLE Off adds the defined globals to the event handler", () => { const cdl = `EVENT GDM_header { PARAM product_status { TYPE o OPTIONS "Serie", "Prototyp" } PARAM stm_param_mpf_name { TYPE s TOGGLE Off } PARAM stm_param_wks_path { TYPE s TOGGLE Off } }` const snippet = createCdlEventHandlerSnippet(cdlEventHandlerAtLine(cdl, 0)) assert.match(snippet, /global mom_stm_param_mpf_name_defined/) assert.match(snippet, /global mom_stm_param_wks_path_defined/) assert.match(snippet, /global mom_product_status\n/) assert.doesNotMatch(snippet, /mom_product_status_defined/) }) test("toggle detection ignores comments, strings, other events, and TOGGLE On", () => { const cdl = `EVENT first { PARAM plain { TYPE s UI_LABEL "TOGGLE Off { ignored }" } PARAM enabled { TOGGLE On } PARAM commented { TYPE s # TOGGLE Off } PARAM mom_disabled { TOGGLE off } } EVENT second { PARAM other { TOGGLE Off } }` const snippet = createCdlEventHandlerSnippet(cdlEventHandlerAtLine(cdl, 0)) assert.match(snippet, /global mom_disabled_defined/) assert.equal((snippet.match(/_defined/g) ?? []).length, 1) assert.doesNotMatch(snippet, /mom_mom_|mom_other/) })