UNPKG

jsf.js_next_gen

Version:

A next generation typescript reimplementation of jsf.js

556 lines (555 loc) 36.6 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); /*! Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to you under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ const sinon = __importStar(require("sinon")); const AjaxImpl_1 = require("../../impl/AjaxImpl"); const StandardInits_1 = require("../frameworkBase/_ext/shared/StandardInits"); var protocolPage = StandardInits_1.StandardInits.protocolPage; const mona_dish_1 = require("mona-dish"); const chai_1 = require("chai"); var HTML_PREFIX_EMBEDDED_BODY = StandardInits_1.StandardInits.HTML_PREFIX_EMBEDDED_BODY; const mocha_1 = require("mocha"); const FileUtils_1 = require("../../impl/util/FileUtils"); const ExtDomQuery_1 = require("../../impl/util/ExtDomQuery"); /** * merges a list of key value entries into a target config * @param target the target receiving the key value entries * @param keyValueEntries a list of key value entries divided by = * @param paramsMapper a key value remapper */ function mergeKeyValueEntries(target, keyValueEntries, paramsMapper = (key, value) => [key, value]) { function fixKeyWithoutVal(keyVal) { var _a, _b; return keyVal.length < 3 ? [(_a = keyVal === null || keyVal === void 0 ? void 0 : keyVal[0]) !== null && _a !== void 0 ? _a : [], (_b = keyVal === null || keyVal === void 0 ? void 0 : keyVal[1]) !== null && _b !== void 0 ? _b : []] : keyVal; } let toMerge = new ExtDomQuery_1.ExtConfig({}); keyValueEntries //special case of having keys without values .map(keyVal => fixKeyWithoutVal(keyVal)) .map(keyVal => paramsMapper(keyVal[0], keyVal[1])) .forEach(keyVal => { var _a, _b; let value = (_b = (_a = keyVal === null || keyVal === void 0 ? void 0 : keyVal.splice(1)) === null || _a === void 0 ? void 0 : _a.join("")) !== null && _b !== void 0 ? _b : ""; if (toMerge.getIfPresent(keyVal[0]).isPresent()) { toMerge.append(keyVal[0]).value = value; } else { toMerge.assign(keyVal[0]).value = value; } }); target.shallowMerge(toMerge); } function getFormData(requestBody) { let ret = new mona_dish_1.Config({}); mergeKeyValueEntries(ret, (0, FileUtils_1.decodeEncodedValues)(requestBody)); return ret; } describe("test for proper request param patterns identical to the old implementation", function () { const UPDATE_INSERT_2 = { "op": "updateinsert2", "jakarta.faces.partial.event": "click", "jakarta.faces.source": "cmd_update_insert2", "jakarta.faces.partial.ajax": "true", "jakarta.faces.partial.execute": "cmd_update_insert2", "form1": "form1", "jakarta.faces.ViewState": "blubbblubblubb", "cmd_update_insert2": "update insert second protocol path" }; /** * matches two maps for absolute identicality */ let matches = (item1, item2) => { if (Object.keys(item1).length != Object.keys(item2).length) { return false; } for (let key in item1) { if ((!(key in item2)) || item1[key] != item2[key]) { return false; } } return true; }; beforeEach(function () { return __awaiter(this, void 0, void 0, function* () { let waitForResult = protocolPage(); return waitForResult.then((close) => { this.xhr = sinon.useFakeXMLHttpRequest(); this.requests = []; this.xhr.onCreate = (xhr) => { this.requests.push(xhr); }; global.XMLHttpRequest = this.xhr; window.XMLHttpRequest = this.xhr; this.jsfAjaxResponse = sinon.stub(global.faces.ajax, "response"); this.closeIt = () => { global.XMLHttpRequest = window.XMLHttpRequest = this.xhr.restore(); this.jsfAjaxResponse.restore(); AjaxImpl_1.Implementation.reset(); close(); }; }); }); }); afterEach(function () { this.closeIt(); }); (0, mocha_1.it)("must pass updateinsert2 with proper parameters", function () { mona_dish_1.DQ.byId("cmd_update_insert2").click(); let requestBody = this.requests[0].requestBody; let formData = getFormData(requestBody); (0, chai_1.expect)(matches(formData.value, UPDATE_INSERT_2)).to.be.true; }); (0, mocha_1.it)("must handle base64 encoded strings properly as request data", function () { let probe = "YWFhYWFhc1Rlc3RpdCDDpGtvNDU5NjczMDA9PSsrNDU5MGV3b3UkJiUmLyQmJQ=="; mona_dish_1.DQ.byId("jakarta.faces.ViewState").inputValue.value = probe; mona_dish_1.DQ.byId("cmd_update_insert2").click(); let requestBody = this.requests[0].requestBody; //We check if the base64 encoded string matches the original let formData = getFormData(requestBody); (0, chai_1.expect)(formData.getIf("jakarta.faces.ViewState").value == probe).to.be.true; }); (0, mocha_1.it)("must handle empty parameters properly", function () { let probe = ""; mona_dish_1.DQ.byId("jakarta.faces.ViewState").inputValue.value = probe; mona_dish_1.DQ.byId("cmd_update_insert2").click(); let requestBody = this.requests[0].requestBody; //We check if the base64 encoded string matches the original let formData = getFormData(requestBody); (0, chai_1.expect)(decodeURIComponent(formData.getIf("jakarta.faces.ViewState").value) == probe).to.be.true; }); //KssbpZfCe+0lwDhgMRQ44wRFkaM1o1lbMMUO3lini5YhXWm6 (0, mocha_1.it)("must handle base64 special cases properly (+ in encoding)", function () { let probe = "KssbpZfCe+0lwDhgMRQ44wRFkaM1o1lbMMUO3lini5YhXWm6"; mona_dish_1.DQ.byId("jakarta.faces.ViewState").inputValue.value = probe; mona_dish_1.DQ.byId("cmd_update_insert2").click(); let requestBody = this.requests[0].requestBody; //We check if the base64 encoded string matches the original let formData = getFormData(requestBody); (0, chai_1.expect)(decodeURIComponent(formData.getIf("jakarta.faces.ViewState").value) == probe).to.be.true; }); (0, mocha_1.it)("must handle prefixed inputs properly (prefixes must be present) faces4", function (done) { window.document.body.innerHTML = HTML_PREFIX_EMBEDDED_BODY; global["debug_inp"] = true; //we now run the tests here try { let event = { isTrusted: true, type: 'change', target: document.getElementById("page:input::field"), currentTarget: document.getElementById("page:input::field") }; faces.ajax.request(document.getElementById("page:input"), event, { render: "page:output", execute: "page:input", params: { "booga2.xxx": "yyy", "javax.faces.behavior.event": "change", "booga": "bla" }, }); } catch (err) { console.error(err); (0, chai_1.expect)(false).to.eq(true); } const requestBody = this.requests[0].requestBody; //We check if the base64 encoded string matches the original (0, chai_1.expect)(requestBody.indexOf("javax.faces.behavior.event")).to.not.eq(-1); (0, chai_1.expect)(requestBody.indexOf("javax.faces.behavior.event=change")).to.not.eq(-1); (0, chai_1.expect)(requestBody.indexOf("page%3Ainput=input_value")).to.not.eq(-1); done(); }); /** * This test is based on Tobago 6 (Jakarte EE 9). */ (0, mocha_1.it)("must handle ':' in IDs properly", function (done) { window.document.body.innerHTML = ` <tobago-page locale="en" class="container-fluid" id="page" focus-on-error="true" wait-overlay-delay-full="1000" wait-overlay-delay-ajax="1000"> <form action="/content/010-input/10-in/In.xhtml?jfwid=q6qbeuqed" id="page::form" method="post" accept-charset="UTF-8" data-tobago-context-path=""> <input type="hidden" name="jakarta.faces.source" id="jakarta.faces.source" disabled="disabled"> <tobago-focus id="page::lastFocusId"> <input type="hidden" name="page::lastFocusId" id="page::lastFocusId::field"> </tobago-focus> <input type="hidden" name="org.apache.myfaces.tobago.webapp.Secret" id="org.apache.myfaces.tobago.webapp.Secret" value="secretValue"> <tobago-in id="page:input" class="tobago-auto-spacing"> <input type="text" name="page:input" id="page:input::field" class="form-control" value="Bob"> <tobago-behavior event="change" client-id="page:input" field-id="page:input::field" execute="page:input" render="page:output"></tobago-behavior> </tobago-in> <tobago-out id="page:output" class="tobago-auto-spacing"> <span class="form-control-plaintext"></span> </tobago-out> <div class="tobago-page-menuStore"> </div> <span id="page::faces-state-container"> <input type="hidden" name="jakarta.faces.ViewState" id="j_id__v_0:jakarta.faces.ViewState:1" value="viewStateValue" autocomplete="off"> <input type="hidden" name="jakarta.faces.RenderKitId" value="tobago"> <input type="hidden" id="j_id__v_0:jakarta.faces.ClientWindow:1" name="jakarta.faces.ClientWindow" value="clientWindowValue"> </span> </form> </tobago-page> `; //we now run the tests here try { let event = { isTrusted: true, type: 'change', target: document.getElementById("page:input::field"), currentTarget: document.getElementById("page:input::field") }; global.debug2 = true; faces.ajax.request(document.getElementById("page:input"), event, { "jakarta.faces.behavior.event": 'change', execute: "page:input", render: "page:output" }); } catch (err) { console.error(err); (0, chai_1.expect)(false).to.eq(true); } const requestBody = this.requests[0].requestBody; (0, chai_1.expect)(requestBody.indexOf("org.apache.myfaces.tobago.webapp.Secret=secretValue")).to.not.eq(-1); (0, chai_1.expect)(requestBody.indexOf("page%3Ainput=Bob")).to.not.eq(-1); (0, chai_1.expect)(requestBody.indexOf("jakarta.faces.ViewState=viewStateValue")).to.not.eq(-1); (0, chai_1.expect)(requestBody.indexOf("jakarta.faces.RenderKitId=tobago")).to.not.eq(-1); (0, chai_1.expect)(requestBody.indexOf("jakarta.faces.ClientWindow=clientWindowValue")).to.not.eq(-1); (0, chai_1.expect)(requestBody.indexOf("jakarta.faces.behavior.event=change")).to.not.eq(-1); (0, chai_1.expect)(requestBody.indexOf("jakarta.faces.partial.event=change")).to.not.eq(-1); (0, chai_1.expect)(requestBody.indexOf("jakarta.faces.source=page%3Ainput")).to.not.eq(-1); (0, chai_1.expect)(requestBody.indexOf("jakarta.faces.partial.ajax=true")).to.not.eq(-1); (0, chai_1.expect)(requestBody.indexOf("page%3A%3Aform=page%3A%3Aform")).to.not.eq(-1); (0, chai_1.expect)(requestBody.indexOf("jakarta.faces.partial.execute=page%3Ainput")).to.not.eq(-1); (0, chai_1.expect)(requestBody.indexOf("jakarta.faces.partial.render=page%3Aoutput")).to.not.eq(-1); done(); }); /** * This test is based on Tobago 6.0.0 (Jakarte EE 10). */ (0, mocha_1.it)("tobago tree select", function (done) { window.document.body.innerHTML = ` <tobago-page locale='de' class='container-fluid' id='page' focus-on-error='true' wait-overlay-delay-full='1000' wait-overlay-delay-ajax='1000'> <form action='/content/090-tree/01-select/Tree_Select.xhtml' id='page::form' method='post' accept-charset='UTF-8' data-tobago-context-path=''> <input type='hidden' name='jakarta.faces.source' id='jakarta.faces.source' disabled='disabled'> <tobago-focus id='page::lastFocusId'> <input type='hidden' name='page::lastFocusId' id='page::lastFocusId::field'> </tobago-focus> <input type='hidden' name='org.apache.myfaces.tobago.webapp.Secret' id='org.apache.myfaces.tobago.webapp.Secret' value='secretValue'> <div class='tobago-page-menuStore'> </div> <div class='tobago-page-toastStore'> </div> <span id='page::faces-state-container'><input type='hidden' name='jakarta.faces.ViewState' id='j_id__v_0:jakarta.faces.ViewState:1' value='viewStateValue' autocomplete='off'><input type='hidden' name='jakarta.faces.RenderKitId' value='tobago'><input type='hidden' id='j_id__v_0:jakarta.faces.ClientWindow:1' name='jakarta.faces.ClientWindow' value='clientWindowValue'></span> <tobago-tree id='page:categoriesTree' data-tobago-selectable='multi' selectable='multi'> <tobago-tree-node id='page:categoriesTree:0:j_id_3' class='tobago-folder tobago-expanded' expandable='expandable' index='0' data-tobago-level='0'> <span id='page:categoriesTree:0:j_id_4' class='tobago-toggle'><i class='bi-dash-square' data-tobago-open='bi-dash-square' data-tobago-closed='bi-plus-square'></i></span> <tobago-tree-select class='form-check-inline form-check'> <input class='form-check-input' type='checkbox' name='page:categoriesTree:0:select' value='page:categoriesTree:0:select' id='page:categoriesTree:0:select'> <label class='form-check-label' for='page:categoriesTree:0:select'>Category</label> <tobago-behavior event='change' client-id='page:categoriesTree:0:select' execute='page:categoriesTree:0:select page:categoriesTree' render='page:selectedNodesOutput page:categoriesTree'></tobago-behavior> </tobago-tree-select> </tobago-tree-node> <tobago-tree-node id='page:categoriesTree:1:j_id_3' index='1' data-tobago-tree-parent='page:categoriesTree:0:j_id_3' parent='page:categoriesTree:0:j_id_3' data-tobago-level='1'> <span id='page:categoriesTree:1:j_id_4' class='tobago-toggle invisible'><i class='bi-square invisible'></i></span> <tobago-tree-select class='form-check-inline form-check'> <input class='form-check-input' type='checkbox' name='page:categoriesTree:1:select' value='page:categoriesTree:1:select' id='page:categoriesTree:1:select'> <label class='form-check-label' for='page:categoriesTree:1:select'>Sports</label> <tobago-behavior event='change' client-id='page:categoriesTree:1:select' execute='page:categoriesTree:1:select page:categoriesTree' render='page:selectedNodesOutput page:categoriesTree'></tobago-behavior> </tobago-tree-select> </tobago-tree-node> <tobago-tree-node id='page:categoriesTree:2:j_id_3' index='2' data-tobago-tree-parent='page:categoriesTree:0:j_id_3' parent='page:categoriesTree:0:j_id_3' data-tobago-level='1'> <span id='page:categoriesTree:2:j_id_4' class='tobago-toggle invisible'><i class='bi-square invisible'></i></span> <tobago-tree-select class='form-check-inline form-check'> <input class='form-check-input' type='checkbox' name='page:categoriesTree:2:select' value='page:categoriesTree:2:select' id='page:categoriesTree:2:select'> <label class='form-check-label' for='page:categoriesTree:2:select'>Movies</label> <tobago-behavior event='change' client-id='page:categoriesTree:2:select' execute='page:categoriesTree:2:select page:categoriesTree' render='page:selectedNodesOutput page:categoriesTree'></tobago-behavior> </tobago-tree-select> </tobago-tree-node> <tobago-tree-node id='page:categoriesTree:3:j_id_3' class='tobago-selected tobago-folder tobago-expanded' selected='selected' expandable='expandable' index='3' data-tobago-tree-parent='page:categoriesTree:0:j_id_3' parent='page:categoriesTree:0:j_id_3' data-tobago-level='1'> <span id='page:categoriesTree:3:j_id_4' class='tobago-toggle'><i class='bi-dash-square' data-tobago-open='bi-dash-square' data-tobago-closed='bi-plus-square'></i></span> <tobago-tree-select class='form-check-inline form-check'> <input class='form-check-input' type='checkbox' name='page:categoriesTree:3:select' value='page:categoriesTree:3:select' id='page:categoriesTree:3:select' checked='checked'> <label class='form-check-label' for='page:categoriesTree:3:select'>Music</label> <tobago-behavior event='change' client-id='page:categoriesTree:3:select' execute='page:categoriesTree:3:select page:categoriesTree' render='page:selectedNodesOutput page:categoriesTree'></tobago-behavior> </tobago-tree-select> </tobago-tree-node> <tobago-tree-node id='page:categoriesTree:4:j_id_3' index='4' data-tobago-tree-parent='page:categoriesTree:3:j_id_3' parent='page:categoriesTree:3:j_id_3' data-tobago-level='2'> <span id='page:categoriesTree:4:j_id_4' class='tobago-toggle invisible'><i class='bi-square invisible'></i></span> <tobago-tree-select class='form-check-inline form-check'> <input class='form-check-input' type='checkbox' name='page:categoriesTree:4:select' value='page:categoriesTree:4:select' id='page:categoriesTree:4:select'> <label class='form-check-label' for='page:categoriesTree:4:select'>Classic</label> <tobago-behavior event='change' client-id='page:categoriesTree:4:select' execute='page:categoriesTree:4:select page:categoriesTree' render='page:selectedNodesOutput page:categoriesTree'></tobago-behavior> </tobago-tree-select> </tobago-tree-node> <tobago-tree-node id='page:categoriesTree:5:j_id_3' index='5' data-tobago-tree-parent='page:categoriesTree:3:j_id_3' parent='page:categoriesTree:3:j_id_3' data-tobago-level='2'> <span id='page:categoriesTree:5:j_id_4' class='tobago-toggle invisible'><i class='bi-square invisible'></i></span> <tobago-tree-select class='form-check-inline form-check'> <input class='form-check-input' type='checkbox' name='page:categoriesTree:5:select' value='page:categoriesTree:5:select' id='page:categoriesTree:5:select'> <label class='form-check-label' for='page:categoriesTree:5:select'>Pop</label> <tobago-behavior event='change' client-id='page:categoriesTree:5:select' execute='page:categoriesTree:5:select page:categoriesTree' render='page:selectedNodesOutput page:categoriesTree'></tobago-behavior> </tobago-tree-select> </tobago-tree-node> <tobago-tree-node id='page:categoriesTree:6:j_id_3' class='tobago-folder' expandable='expandable' index='6' data-tobago-tree-parent='page:categoriesTree:3:j_id_3' parent='page:categoriesTree:3:j_id_3' data-tobago-level='2'> <span id='page:categoriesTree:6:j_id_4' class='tobago-toggle'><i class='bi-plus-square' data-tobago-open='bi-dash-square' data-tobago-closed='bi-plus-square'></i></span> <tobago-tree-select class='form-check-inline form-check'> <input class='form-check-input' type='checkbox' name='page:categoriesTree:6:select' value='page:categoriesTree:6:select' id='page:categoriesTree:6:select'> <label class='form-check-label' for='page:categoriesTree:6:select'>World</label> <tobago-behavior event='change' client-id='page:categoriesTree:6:select' execute='page:categoriesTree:6:select page:categoriesTree' render='page:selectedNodesOutput page:categoriesTree'></tobago-behavior> </tobago-tree-select> </tobago-tree-node> <tobago-tree-node id='page:categoriesTree:7:j_id_3' index='7' data-tobago-tree-parent='page:categoriesTree:0:j_id_3' parent='page:categoriesTree:0:j_id_3' data-tobago-level='1'> <span id='page:categoriesTree:7:j_id_4' class='tobago-toggle invisible'><i class='bi-square invisible'></i></span> <tobago-tree-select class='form-check-inline form-check'> <input class='form-check-input' type='checkbox' name='page:categoriesTree:7:select' value='page:categoriesTree:7:select' id='page:categoriesTree:7:select'> <label class='form-check-label' for='page:categoriesTree:7:select'>Games</label> <tobago-behavior event='change' client-id='page:categoriesTree:7:select' execute='page:categoriesTree:7:select page:categoriesTree' render='page:selectedNodesOutput page:categoriesTree'></tobago-behavior> </tobago-tree-select> </tobago-tree-node> <tobago-tree-node id='page:categoriesTree:8:j_id_3' class='tobago-folder tobago-expanded' expandable='expandable' index='8' data-tobago-tree-parent='page:categoriesTree:0:j_id_3' parent='page:categoriesTree:0:j_id_3' data-tobago-level='1'> <span id='page:categoriesTree:8:j_id_4' class='tobago-toggle'><i class='bi-dash-square' data-tobago-open='bi-dash-square' data-tobago-closed='bi-plus-square'></i></span> <tobago-tree-select class='form-check-inline form-check'> <input class='form-check-input' type='checkbox' name='page:categoriesTree:8:select' value='page:categoriesTree:8:select' id='page:categoriesTree:8:select'> <label class='form-check-label' for='page:categoriesTree:8:select'>Science</label> <tobago-behavior event='change' client-id='page:categoriesTree:8:select' execute='page:categoriesTree:8:select page:categoriesTree' render='page:selectedNodesOutput page:categoriesTree'></tobago-behavior> </tobago-tree-select> </tobago-tree-node> <tobago-tree-node id='page:categoriesTree:9:j_id_3' class='tobago-folder' expandable='expandable' index='9' data-tobago-tree-parent='page:categoriesTree:8:j_id_3' parent='page:categoriesTree:8:j_id_3' data-tobago-level='2'> <span id='page:categoriesTree:9:j_id_4' class='tobago-toggle'><i class='bi-plus-square' data-tobago-open='bi-dash-square' data-tobago-closed='bi-plus-square'></i></span> <tobago-tree-select class='form-check-inline form-check'> <input class='form-check-input' type='checkbox' name='page:categoriesTree:9:select' value='page:categoriesTree:9:select' id='page:categoriesTree:9:select'> <label class='form-check-label' for='page:categoriesTree:9:select'>Mathematics</label> <tobago-behavior event='change' client-id='page:categoriesTree:9:select' execute='page:categoriesTree:9:select page:categoriesTree' render='page:selectedNodesOutput page:categoriesTree'></tobago-behavior> </tobago-tree-select> </tobago-tree-node> <tobago-tree-node id='page:categoriesTree:10:j_id_3' index='10' data-tobago-tree-parent='page:categoriesTree:8:j_id_3' parent='page:categoriesTree:8:j_id_3' data-tobago-level='2'> <span id='page:categoriesTree:10:j_id_4' class='tobago-toggle invisible'><i class='bi-square invisible'></i></span> <tobago-tree-select class='form-check-inline form-check'> <input class='form-check-input' type='checkbox' name='page:categoriesTree:10:select' value='page:categoriesTree:10:select' id='page:categoriesTree:10:select'> <label class='form-check-label' for='page:categoriesTree:10:select'>Geography</label> <tobago-behavior event='change' client-id='page:categoriesTree:10:select' execute='page:categoriesTree:10:select page:categoriesTree' render='page:selectedNodesOutput page:categoriesTree'></tobago-behavior> </tobago-tree-select> </tobago-tree-node> <tobago-tree-node id='page:categoriesTree:11:j_id_3' class='tobago-folder' expandable='expandable' index='11' data-tobago-tree-parent='page:categoriesTree:8:j_id_3' parent='page:categoriesTree:8:j_id_3' data-tobago-level='2'> <span id='page:categoriesTree:11:j_id_4' class='tobago-toggle'><i class='bi-plus-square' data-tobago-open='bi-dash-square' data-tobago-closed='bi-plus-square'></i></span> <tobago-tree-select class='form-check-inline form-check'> <input class='form-check-input' type='checkbox' name='page:categoriesTree:11:select' value='page:categoriesTree:11:select' id='page:categoriesTree:11:select'> <label class='form-check-label' for='page:categoriesTree:11:select'>Astronomy</label> <tobago-behavior event='change' client-id='page:categoriesTree:11:select' execute='page:categoriesTree:11:select page:categoriesTree' render='page:selectedNodesOutput page:categoriesTree'></tobago-behavior> </tobago-tree-select> </tobago-tree-node> <input type='hidden' name='page:categoriesTree::selected' id='page:categoriesTree::selected' class='tobago-selected' value='[3]'> <input type='hidden' name='page:categoriesTree::expanded' id='page:categoriesTree::expanded' class='tobago-expanded' value='[0,3,8]'> <tobago-scroll> <input id='page:categoriesTree::scrollPosition' name='page:categoriesTree::scrollPosition' type='hidden' value='[0,0]' data-tobago-scroll-position='true'> </tobago-scroll> </tobago-tree> <tobago-out id='page:selectedNodesOutput' class='tobago-label-container tobago-auto-spacing'><label for='page:selectedNodesOutput' class='col-form-label'>Selected Nodes</label><span class='form-control-plaintext'>Music</span></tobago-out> </form> <noscript> <div class='tobago-page-noscript'>Diese Seite benötigt JavaScript, allerdings ist JavaScript in Ihrem Browser derzeit deaktiviert. Um JavaScript zu aktivieren, lesen Sie ggf. die Anleitung Ihres Browsers. </div> </noscript> </tobago-page> `; //we now run the tests here try { document.querySelector("input[name='page:categoriesTree:3:select']").checked = false; let event = { isTrusted: true, type: 'change', target: document.getElementById("page:categoriesTree:3:select"), currentTarget: document.getElementById("page:categoriesTree:3:select") }; global.debug2 = true; faces.ajax.request(document.getElementById("page:categoriesTree:3:select"), event, { "jakarta.faces.behavior.event": "change", execute: 'page:categoriesTree:3:select page:categoriesTree', render: 'page:selectedNodesOutput page:categoriesTree' }); } catch (err) { console.error(err); (0, chai_1.expect)(false).to.eq(true); } const requestBody = this.requests[0].requestBody; let arsArr = requestBody.split("&"); let resultsMap = {}; for (let val of arsArr) { let keyVal = val.split("="); if (resultsMap[keyVal[0]]) { console.log("duplicated key '" + keyVal[0] + "'"); (0, chai_1.expect)(resultsMap[keyVal[0]]).not.to.exist; } resultsMap[keyVal[0]] = keyVal[1]; } (0, chai_1.expect)(resultsMap[encodeURIComponent("page::lastFocusId")]).to.exist; (0, chai_1.expect)(resultsMap["org.apache.myfaces.tobago.webapp.Secret"]).to.eq("secretValue"); (0, chai_1.expect)(resultsMap["jakarta.faces.ViewState"]).to.eq("viewStateValue"); (0, chai_1.expect)(resultsMap["jakarta.faces.RenderKitId"]).to.eq("tobago"); (0, chai_1.expect)(resultsMap["jakarta.faces.ClientWindow"]).to.eq("clientWindowValue"); (0, chai_1.expect)(resultsMap[encodeURIComponent("page:categoriesTree::selected")]).to.eq(encodeURIComponent("[3]")); (0, chai_1.expect)(resultsMap[encodeURIComponent("page:categoriesTree::expanded")]).to.eq(encodeURIComponent("[0,3,8]")); (0, chai_1.expect)(resultsMap[encodeURIComponent("page:categoriesTree::scrollPosition")]).to.eq(encodeURIComponent("[0,0]")); (0, chai_1.expect)(resultsMap["jakarta.faces.behavior.event"]).to.eq("change"); (0, chai_1.expect)(resultsMap["jakarta.faces.partial.event"]).to.eq("change"); (0, chai_1.expect)(resultsMap["jakarta.faces.source"]).to.eq(encodeURIComponent("page:categoriesTree:3:select")); (0, chai_1.expect)(resultsMap["jakarta.faces.partial.ajax"]).to.eq("true"); (0, chai_1.expect)(resultsMap[encodeURIComponent("page::form")]).to.eq(encodeURIComponent("page::form")); (0, chai_1.expect)(resultsMap["jakarta.faces.partial.execute"]).to.eq(encodeURIComponent("page:categoriesTree:3:select page:categoriesTree")); (0, chai_1.expect)(resultsMap["jakarta.faces.partial.render"]).to.eq(encodeURIComponent("page:selectedNodesOutput page:categoriesTree")); (0, chai_1.expect)(resultsMap[encodeURIComponent("page:categoriesTree:3:select")]).not.to.exist; done(); }); /** * This test is based on Tobago 6.0.0 (Jakarte EE 10). */ (0, mocha_1.it)("tobago selectManyShuttle", function (done) { window.document.body.innerHTML = ` <tobago-page locale="de" class="container-fluid" id="page" focus-on-error="true" wait-overlay-delay-full="1000" wait-overlay-delay-ajax="1000"> <form action="/content/030-select/70-selectManyShuttle/Shuttle.xhtml" id="page::form" method="post" accept-charset="UTF-8" data-tobago-context-path=""> <input type="hidden" name="jakarta.faces.source" id="jakarta.faces.source" disabled="disabled"> <tobago-focus id="page::lastFocusId"> <input type="hidden" name="page::lastFocusId" id="page::lastFocusId::field"> </tobago-focus> <input type="hidden" name="org.apache.myfaces.tobago.webapp.Secret" id="org.apache.myfaces.tobago.webapp.Secret" value="secretValue"> <div class="tobago-page-menuStore"> </div> <div class="tobago-page-toastStore"> </div> <span id="page::faces-state-container"><input type="hidden" name="jakarta.faces.ViewState" id="j_id__v_0:jakarta.faces.ViewState:1" value="viewStateValue" autocomplete="off"><input type="hidden" name="jakarta.faces.RenderKitId" value="tobago"><input type="hidden" id="j_id__v_0:jakarta.faces.ClientWindow:1" name="jakarta.faces.ClientWindow" value="clientWindowValue"></span> <tobago-select-many-shuttle id="page:ajaxExample" class="tobago-auto-spacing"> <div class="tobago-body"> <div class="tobago-unselected-container"> <select id="page:ajaxExample::unselected" class="tobago-unselected form-select" multiple="multiple" size="4"> <option value="Proxima Centauri">Proxima Centauri </option> <option value="Alpha Centauri">Alpha Centauri </option> <option value="Wolf 359">Wolf 359 </option></select> </div> <div class="tobago-controls"> <div class="btn-group-vertical"> <button type="button" class="btn btn-secondary" id="page:ajaxExample::addAll"><i class="bi-chevron-double-right"></i></button> <button type="button" class="btn btn-secondary" id="page:ajaxExample::add"><i class="bi-chevron-right"></i></button> <button type="button" class="btn btn-secondary" id="page:ajaxExample::remove"><i class="bi-chevron-left"></i></button> <button type="button" class="btn btn-secondary" id="page:ajaxExample::removeAll"><i class="bi-chevron-double-left"></i></button> </div> </div> <div class="tobago-selected-container"> <select id="page:ajaxExample::selected" class="tobago-selected form-select" multiple="multiple" size="4"> <option value="Sirius">Sirius </option></select> </div> <select class="d-none" id="page:ajaxExample::hidden" name="page:ajaxExample" multiple="multiple"> <option value="Proxima Centauri">Proxima Centauri </option> <option value="Alpha Centauri">Alpha Centauri </option> <option value="Wolf 359">Wolf 359 </option> <option value="Sirius" selected="selected">Sirius </option></select> </div> <tobago-behavior event="change" client-id="page:ajaxExample" execute="page:ajaxExample" render="page:outputStars"></tobago-behavior> </tobago-select-many-shuttle> <tobago-out id="page:outputStars" class="tobago-label-container tobago-auto-spacing"><label for="page:outputStars" class="col-form-label">Selected Stars</label><span class="form-control-plaintext">[Sirius]</span></tobago-out> </form> </tobago-page> `; //we now run the tests here try { let siriusOption = document.querySelector(".tobago-selected option"); document.querySelector(".tobago-unselected").add(siriusOption); document.getElementById("page:ajaxExample::hidden") .querySelector("option[value='Sirius']").selected = false; let event = { isTrusted: true, type: 'change', target: document.getElementById("page:ajaxExample"), currentTarget: document.getElementById("page:ajaxExample") }; global.debug2 = true; faces.ajax.request(document.getElementById("page:ajaxExample"), event, { "jakarta.faces.behavior.event": "change", execute: 'page:ajaxExample', render: 'page:outputStars' }); } catch (err) { console.error(err); (0, chai_1.expect)(false).to.eq(true); } const requestBody = this.requests[0].requestBody; let arsArr = requestBody.split("&"); let resultsMap = {}; for (let val of arsArr) { let keyVal = val.split("="); if (resultsMap[keyVal[0]]) { console.log("duplicated key '" + keyVal[0] + "'"); (0, chai_1.expect)(resultsMap[keyVal[0]]).not.to.exist; } resultsMap[keyVal[0]] = keyVal[1]; } (0, chai_1.expect)(resultsMap[encodeURIComponent("page::lastFocusId")]).to.exist; (0, chai_1.expect)(resultsMap["org.apache.myfaces.tobago.webapp.Secret"]).to.eq("secretValue"); (0, chai_1.expect)(resultsMap["jakarta.faces.ViewState"]).to.eq("viewStateValue"); (0, chai_1.expect)(resultsMap["jakarta.faces.RenderKitId"]).to.eq("tobago"); (0, chai_1.expect)(resultsMap["jakarta.faces.ClientWindow"]).to.eq("clientWindowValue"); (0, chai_1.expect)(resultsMap["jakarta.faces.behavior.event"]).to.eq("change"); (0, chai_1.expect)(resultsMap["jakarta.faces.partial.event"]).to.eq("change"); (0, chai_1.expect)(resultsMap["jakarta.faces.source"]).to.eq(encodeURIComponent("page:ajaxExample")); (0, chai_1.expect)(resultsMap["jakarta.faces.partial.ajax"]).to.eq("true"); (0, chai_1.expect)(resultsMap[encodeURIComponent("page::form")]).to.eq(encodeURIComponent("page::form")); (0, chai_1.expect)(resultsMap["jakarta.faces.partial.execute"]).to.eq(encodeURIComponent("page:ajaxExample")); (0, chai_1.expect)(resultsMap["jakarta.faces.partial.render"]).to.eq(encodeURIComponent("page:outputStars")); (0, chai_1.expect)(resultsMap[encodeURIComponent("page:ajaxExample")]).not.to.exist; done(); }); }); //# sourceMappingURL=RequestParamsTest.spec.js.map