{"version":3,"sources":["jsdelivr-header.js","/npm/@cogsmith/zest@0.0.29/lib.js"],"names":[],"mappings":"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","file":"/npm/@cogsmith/zest@0.0.29/lib.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/@cogsmith/zest@0.0.29/lib.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","//process.on('uncaughtException', function (err) { console.log(\"\\n\"); console.log(err); console.log(\"\\n\"); process.exit(1); }); // throw(Error('ERROR'));\n//process.on('unhandledRejection', function (err) { console.log(\"\\n\"); console.log(err); console.log(\"\\n\"); process.exit(1); }); // throw(Error('ERROR'));\n\n//\n\nconst XT = require('@cogsmith/xt').Init();\nconst LOG = XT.LOG;\n\n//\n\nconst NODE = {};\nNODE.fs = require('fs');\nNODE.http = require('http');\nNODE.path = require('path'); const nodepath = NODE.path;\n\nconst LIBS = {};\nLIBS.mocha = require('mocha'); const mocha = LIBS.mocha;\nLIBS.chalk = require('chalk'); const chalk = LIBS.chalk;\nLIBS.glob = require('glob'); const glob = LIBS.glob;\nLIBS.supertest = require('supertest'); const web = LIBS.supertest('');\nLIBS.chai = require('chai'); const should = LIBS.chai.should();\nLIBS.blessed = require('blessed'); const blessed = LIBS.blessed;\nLIBS.blessedx = require('blessed-contrib'); const blessedx = LIBS.blessedx;\n\n//\n\n/*\nconst {\n    EVENT_RUN_BEGIN,\n    EVENT_RUN_END,\n    EVENT_TEST_FAIL,\n    EVENT_TEST_PASS,\n    EVENT_SUITE_BEGIN,\n    EVENT_SUITE_END,\n    EVENT_TEST_PENDING\n} = LIBS.mocha.Runner.constants;\n*/\n\n//\n\nconst Zest = {};\n\nZest.DB = { Tests: {} }; //, TestsList: [] };\n\nZest.GetTests = () => { return XT.Object.List(Zest.DB.Tests); };\n\nZest.Test = function () {\n    let self = this;\n    let id = false;\n    let test = {};\n\n    if (arguments.length == 0 || arguments.length > 2) { return; }\n    if (arguments.length == 1) {\n        let dat = arguments[0];\n        id = Object.keys(dat)[0];\n        test = dat[id];\n    }\n    if (arguments.length == 2) {\n        id = arguments[0];\n        let dat = arguments[1];\n        if (typeof dat == 'function') { test.FX = dat; }\n        if (typeof dat == 'object') {\n            if (dat.Web || dat.FX) { test = dat; }\n            if (!dat.Web) { dat.Web = {}; }\n            if (dat.URL) {\n                dat.Web.URL = dat.URL; delete dat.URL;\n                if (dat.Input) { dat.Web.Input = dat.Input; delete dat.Input; }\n                if (dat.Output) { dat.Web.Output = dat.Output; delete dat.Output; }\n            }\n            test = dat;\n        }\n    }\n\n    test.ID = id;\n    Zest.DB.Tests[id] = test;\n\n    describe(test.ID, function () {\n        describe('Init Tests', function () {\n            if (test.Web && test.Web.URL) {\n                it('Fetch Data', async function () {\n                    res = await web.post(test.Web.URL).send(test.Web.Input).expect(200);\n                })\n            }\n        })\n\n        describe('Data Validation', function () {\n            if (test.Web && test.Web.Output) {\n                it(test.ID, async function () {\n                    res.body.should.eql(test.Web.Output);\n                });\n            }\n        })\n\n        describe('Test Cases', function () {\n            if (test.FX) {\n                it(test.ID + ' FX', async function () {\n                    await test.FX.apply(test, [res]);\n                });\n            }\n        })\n    })\n}\n\nZest.IsPortOpen = (port) => new Promise((resolve, reject) => {\n    let server = NODE.http.createServer((req, res) => { res.writeHead(200); res.end('HI'); });\n    server.on('error', () => { resolve(false); server.close(); });\n    server.on('listening', () => { resolve(true); server.close(); });\n    server.listen(port, '127.0.0.1');\n})\n\nZest.WaitForPort = (port) => new Promise(async (resolve, reject) => {\n    let timer = setInterval(async () => {\n        if (await App.IsPortOpen(port)) { clearInterval(timer); resolve(); }\n    }, 10);\n})\n\nZest.UI = {};\n\nZest.UI.Render = function () { Zest.UI.Screen.render(); }\n\nZest.InitUI = function () {\n    LOG.WARN('InitUI');\n    const screen = blessed.screen({ debug: true, dockBorders: true });\n    // screen.key(['q', 'C-c'], function (ch, key) { process.exit(0); });\n    screen.key(['q', 'C-c'], function (ch, key) { screen.destroy(); });\n    let style = { selected: { fg: 'white', bg: 'red' } };\n    //let items = ['[ ALL TESTS ]', 'test/supertest.js', 'test/zest.js'];\n    let list = Zest.TestList.map(z => { z = z.replace(process.cwd().replace(/\\\\/g, '/'), ''); return z.substr(1); });\n    let items = ['[ ALL TESTS ]', ...list];\n    Zest.Layout = new blessedx.grid({ hideBorders: true, rows: 10, cols: 10, screen: screen });\n    const grid = Zest.Layout;\n    const head = grid.set(0, 0, 2, 4, blessed.list, { interactive: true, keys: true, style, items });\n    const foot = grid.set(2, 0, 8, 4, blessed.box, { content: '' });\n    const body = grid.set(0, 4, 10, 6, blessed.box, { style: { bg: '#111111' }, content: '' });\n    head.focus();\n    head.on('select', (z, i) => {\n        if (Zest.TestRunning) { return; }\n        foot.content = z.content + \"\\n\";\n        let test = i; if (i > 0) { test = z.content; };\n        Zest.UI.Head.focus();\n        Zest.DoTest(test);\n        Zest.UI.Head.focus();\n    });\n    screen.render();\n\n    Zest.UI.Screen = screen;\n    Zest.UI.Head = head;\n    Zest.UI.Foot = foot;\n    Zest.UI.Body = body;\n}\n\n\nXT.Buffer = function (id) {\n    if (!id) { id = 0; }\n    console.log(id);\n    let buf = XT.Buffer.DB[id];\n    if (buf) { buf = buf.substr(0, buf.lenth - 2); }\n    return buf;\n}\n\nXT.Buffer.DB = {};\nXT.Buffer.Get = function (id) { return XT.Buffer(id); }\nXT.Buffer.Reset = function (id) { XT.Buffer.DB[id] = ''; };\nXT.Buffer.Append = function (id, dat) {\n    if (!dat) { dat = id; id = 0; };\n    if (!XT.Buffer.DB[id]) { XT.Buffer.DB[id] = ''; }\n    XT.Buffer.DB[id] += dat;\n}\n\nXT.Stream = {};\n\nXT.Stream.Restore = function (s) {\n    s.write = s.writebind;\n    //delete s.writebind;\n}\n\nXT.Stream.SaveAndMute = function (s) {\n    XT.Buffer.Reset(s);\n    s.writebind = s.write.bind(s);\n    s.write = function (dat, enc, nxt) {\n        XT.Buffer.Append(dat);\n        //return s.writebind.apply(this, arguments);\n    }\n}\n\nXT.Stream.SaveAndPipe = function (s) {\n    XT.Buffer.Reset();\n    s.writebind = s.write.bind(s);\n    s.write = function (dat, enc, nxt) {\n        XT.Buffer.Append(dat);\n        return s.writebind.apply(this, arguments);\n    }\n}\n\nZest.TestList = [];\nZest.GetTestList = function (arglist) {\n    let list = [];\n    for (let t of arglist) {\n        if (NODE.fs.existsSync(t)) {\n            let dir = process.cwd();\n            let js = dir + '/' + t;\n            if (!NODE.fs.existsSync(js)) { js = t; }\n            if (!NODE.fs.existsSync(js)) { continue; }\n            if (NODE.fs.lstatSync(js).isDirectory()) {\n                for (let f of glob.sync(js + '/**/*.js')) { list.push(f); }\n            } else {\n                list.push(js);\n            }\n        }\n    }\n    return list;\n}\n\nZest.TestRunning = false;\nZest.DoTest = function (testlist) {\n    if (Zest.TestRunning) { return; }; Zest.TestRunning = true;\n    if (testlist == 0 || testlist == '0') { testlist = Zest.TestList; }\n    //if (testlist == 0 || testlist == '0') { testlist = Zest.GetTestList([process.cwd() + '/' + 'test']); }\n    if (!Array.isArray(testlist)) { testlist = [testlist]; }\n    if (NODE.fs.lstatSync(testlist[0]).isDirectory()) { testlist = Zest.GetTestList(testlist); }\n\n    //XT.Stream.SaveAndMute(process.stdout);\n    //process.stdout.write = function () { };\n\n    let mocha = new LIBS.mocha({ reporter: 'spec', ui: 'bdd', timeout: 10000 });\n    mocha.reporter(require('./reporters/full'));\n\n    //console.error(require.cache);\n\n    for (let js of testlist) {\n        if (js[0] != '.' && js[0] != '/' && !js.includes(':')) { js = './' + js; }\n        //console.log(require.resolve(js.replace('.js', '')));\n        try {\n            let module = nodepath.join(process.cwd(), js.replace('.js', ''));\n            delete require.cache[require.resolve(module)];\n        } catch (ex) { console.error(ex); }\n        mocha.addFile(js);\n    }\n\n    //mocha.addFile('test/test1.js');\n    let runner = mocha.run(function (fails) {\n        //console.log({ RUN: { FAILS: fails, ARGS: arguments } });\n\n        if (Zest.App.Args.ui) {\n            //console.error(runner);\n            //XT.Stream.Restore(process.stdout);\n            //Zest.UI.Body.content = XT.Buffer();\n            Zest.UI.Foot.content = runner.SUMMARY;\n            Zest.UI.Body.content = runner.LOGOUT;\n            Zest.UI.Render();\n        } else {\n            console.log(runner.SUMMARY);\n            console.log(runner.LOGOUT);\n        }\n\n        mocha.unloadFiles();\n    });\n\n    Zest.UI.Head.focus();\n    setTimeout(() => { Zest.TestRunning = false; Zest.UI.Head.focus(); }, 250);\n}\n\n\nZest.AppMain = async function (App) {\n    Zest.App = App;\n\n    //console.clear();\n\n    //console.log('AppArgs', App.Args);\n\n    //console.clear();\n    //LOG.WARN('Z');\n    //LOG.WARN('ARGS', App.Args);\n\n    //\n\n    if (!App.Args.test) { App.Args.test = []; } else if (!Array.isArray(App.Args.test)) { App.Args.test = [App.Args.test]; }\n    if (App.Args._.length > 2) { App.Args.test = App.Args.test.concat(App.Args._.slice(2)); }\n    if (App.Args.test.length == 0) { App.Args.test = ['test']; }\n\n    Zest.TestList = Zest.GetTestList(App.Args.test);\n\n    if (App.Args.ui) { Zest.InitUI(); } else { Zest.DoTest(App.Args.test); }\n\n    //Zest.DoTest();\n    //setTimeout(Zest.DoTest, 2500);\n\n    if (0 && App.Args.loop) {\n        if (App.Args.waitport) { await Zest.WaitForPort(App.Args.waitport); }\n        setTimeout(Zest.AppMain, 1000);\n    }\n}\n\n//\n\nmodule.exports = Zest;\n"]}