concept TestScript { S scriptName, comments; bool active; long lastRun; bool testedOK; S botLinePattern1, userLine1; S botLinePattern2, userLine2; S botLinePattern3, userLine3; S botLinePattern4, userLine4; S botLinePattern5, userLine5; S botLinePattern6, userLine6; S botLinePattern7, userLine7; S botLinePattern8, userLine8; int highestIndex() { ret 8; } S botLinePattern(int i) { ret trim(getString(this, "botLinePattern" + i)); } S userLine(int i) { ret trim(getString(this, "userLine" + i)); } } sclass TestScripting { sO html(S uri, SS params, AuthedDialogID auth) null { S uri2 = appendSlash(uri); bool requestAuthed = auth != null; if (startsWith(uri2, "/testscripts/")) { if (!requestAuthed) ret serveAuthForm(params.get('uri)); ret serveTestScriptingAdmin(uri, params); } } sO serveTestScriptingAdmin(S uri, SS params) { S nav = p(ahref(rawBotLink(dbBotID), "Main admin") + " | " + ahref(baseLink + "/testscripts", "Test scripts admin")); if (ewic(uri, "/run-test")) { long id = parseLong(params.get("id")); TestScript script = getConcept TestScript(id); if (script == null) ret "Script " + id + " not found"; S output = hijackPrint_tee_pcall(() -> runTestScript(script)); S title = "Test results for script: " + script.scriptName; ret hhtml(hhead_title(title) + hbody( hsansserif() + nav + h1(title) + hsourcecode(output))); } HCRUD_Concepts<TestScript> data = new HCRUD_Concepts<>(TestScript); HCRUD crud = new(rawLink("testscripts"), data) { S frame(S title, S contents) { ret hhtml(hhead_title_htmldecode(title) + hbody( hsansserif() + hcss_responstable() /*+ loadJQuery() + hscript_reloadOnHistoryNav()*/ + nav + h1(title) + contents)); } S renderValue(S field, O value) { if (eq(field, "lastRun")) ret renderHowLongAgo(toLong(value)); ret super.renderValue(field, value); } }; crud.renderCmds = item -> crud.renderCmds_base(item) + " | " + ahref(rawLink("testscripts/run-test" + hquery(id := item.get("id"))), "run test"); crud.cmdsLeft = true; crud.tableClass = "responstable"; crud.uneditableFields = litset("lastRun", "testedOK"); ret subBot_serveHTMLNoCache(crud.renderPage(params)); } svoid runTestScript(TestScript script) { try { temp WebBotTester tester = new(programID()); tester.params.put("testMode", "1"); tester.start(); int i = 0; for (int idx = 1; idx <= script.highestIndex(); idx++) { S pat = script.botLinePattern(idx); if (nempty(pat)) { print("Bot line pattern: " + pat); tester.waitForMessages(i+1); WebChatBotMsg msg = get(tester.msgs, i); try { assertTrueVerbose(i + ": " + pat + "/" + msg.msgText, mmo2_match(pat, msg.msgText)); assertTrue("fromBot", !msg.fromUser); } on fail { print(msgs := tester.msgs); } ++i; } S userLine = script.userLine(idx); if (nempty(userLine)) { print("Sending line: " + userLine); tester.sendMsg(userLine); ++i; } } print("Script OK: " + script.scriptName); cset(script, testedOK := true); } catch print e { cset(script, testedOK := false); } cset(script, lastRun := now()); } }
download show line numbers debug dex old transpilations
Travelled to 6 computer(s): bhatertpkbcr, mqqgnosmbjvj, pyentgdyhuwx, pzhvpgtvlbxg, vouqrxazstgt, xrpafgyirdlv
No comments. add comment
Snippet ID: | #1028656 |
Snippet name: | Test Scripting for web bots [Include] |
Eternal ID of this version: | #1028656/30 |
Text MD5: | 03531171ae66732ab17691cf7ac9b4fd |
Author: | stefan |
Category: | javax / web chat bots |
Type: | JavaX fragment (include) |
Public (visible to everyone): | Yes |
Archived (hidden from active list): | No |
Created/modified: | 2020-07-02 18:23:51 |
Source code size: | 3687 bytes / 116 lines |
Pitched / IR pitched: | No / No |
Views / Downloads: | 210 / 496 |
Version history: | 29 change(s) |
Referenced in: | #1028422 - BookBetter Chat Bot |