jsf.js_next_gen 4.0.0-RC.3 → 4.0.0-RC.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/docs/assets/main.js +56 -52
- package/dist/docs/assets/style.css +23 -0
- package/dist/window/faces-development.js +2961 -3011
- package/dist/window/faces-development.js.br +0 -0
- package/dist/window/faces-development.js.gz +0 -0
- package/dist/window/faces-development.js.map +1 -1
- package/dist/window/faces.js +1 -1
- package/dist/window/faces.js.LICENSE.txt +0 -2
- package/dist/window/faces.js.br +0 -0
- package/dist/window/faces.js.gz +0 -0
- package/dist/window/faces.js.map +1 -1
- package/dist/window/jsf-development.js +2966 -3016
- package/dist/window/jsf-development.js.br +0 -0
- package/dist/window/jsf-development.js.gz +0 -0
- package/dist/window/jsf-development.js.map +1 -1
- package/dist/window/jsf.js +1 -1
- package/dist/window/jsf.js.LICENSE.txt +0 -2
- package/dist/window/jsf.js.br +0 -0
- package/dist/window/jsf.js.gz +0 -0
- package/dist/window/jsf.js.map +1 -1
- package/package.json +16 -16
- package/src/main/test.xml +23 -0
- package/src/main/typescript/@types/definitions/index.d.ts +12 -7
- package/src/main/typescript/api/_api.ts +4 -3
- package/src/main/typescript/impl/AjaxImpl.ts +125 -41
- package/src/main/typescript/impl/core/Const.ts +52 -41
- package/src/main/typescript/impl/util/Assertions.ts +16 -8
- package/src/main/typescript/impl/util/ExtDomQuery.ts +12 -4
- package/src/main/typescript/impl/util/FileUtils.ts +66 -0
- package/src/main/typescript/impl/util/HiddenInputBuilder.ts +89 -0
- package/src/main/typescript/impl/util/Lang.ts +9 -11
- package/src/main/typescript/impl/xhrCore/ErrorData.ts +15 -10
- package/src/main/typescript/impl/xhrCore/EventData.ts +2 -2
- package/src/main/typescript/impl/xhrCore/IResponseProcessor.ts +15 -1
- package/src/main/typescript/impl/xhrCore/RequestDataResolver.ts +69 -24
- package/src/main/typescript/impl/xhrCore/ResonseDataResolver.ts +4 -4
- package/src/main/typescript/impl/xhrCore/Response.ts +55 -38
- package/src/main/typescript/impl/xhrCore/ResponseProcessor.ts +173 -98
- package/src/main/typescript/impl/xhrCore/XhrFormData.ts +91 -168
- package/src/main/typescript/impl/xhrCore/XhrRequest.ts +39 -23
- package/src/main/typescript/myfaces/OamSubmit.ts +29 -13
- package/src/main/typescript/test/frameworkBase/_ext/monadish/DomQueryTest.spec.ts +1 -1
- package/src/main/typescript/test/frameworkBase/_ext/shared/StandardInits.ts +73 -1
- package/src/main/typescript/test/frameworkBase/_ext/shared/XmlResponses.ts +40 -1
- package/src/main/typescript/test/impl/ImplTest.spec.ts +3 -3
- package/src/main/typescript/test/impl/ImplTest_23.spec.ts +3 -3
- package/src/main/typescript/test/xhrCore/EventTests.spec.ts +1 -1
- package/src/main/typescript/test/xhrCore/FileUploadTest.spec.ts +5 -2
- package/src/main/typescript/test/xhrCore/NamespacesRequestTest.spec.ts +203 -0
- package/src/main/typescript/test/xhrCore/OamSubmitTest.spec.ts +177 -0
- package/src/main/typescript/test/xhrCore/RequestParamsTest.spec.ts +158 -17
- package/src/main/typescript/test/xhrCore/RequestTest.spec.ts +70 -3
- package/src/main/typescript/test/xhrCore/RequestTest_23.spec.ts +39 -3
- package/src/main/typescript/test/xhrCore/ResponseTest.spec.ts +372 -34
- package/src/main/typescript/test/xhrCore/ResponseTest23.spec.ts +43 -9
- package/src/main/typescript/test/xhrCore/XhrFormDataTest.spec.ts +67 -49
- package/src/main/typescript/test.xml +6 -0
- package/src/main/typescript/tsconfig.json +2 -2
- package/src/test/resources/jsf-development.js +1 -1
- package/src/tmp/test.html +12 -88
- package/target/api/_api.js +16 -29
- package/target/api/_api.js.map +1 -1
- package/target/api/faces.js +4 -4
- package/target/api/faces.js.map +1 -1
- package/target/api/jsf.js +9 -9
- package/target/api/jsf.js.map +1 -1
- package/target/classes/com/example/jsfs_js_ts/DecoratedFacesJS.class +0 -0
- package/target/classes/com/example/jsfs_js_ts/DecoratingResourceHandlerWrapper.class +0 -0
- package/target/classes/com/example/jsfs_js_ts/FacesJSMapFileResourceWrapper.class +0 -0
- package/target/classes/com/example/jsfs_js_ts/FacesJSMappingDecorator.class +0 -0
- package/target/impl/AjaxImpl.js +155 -89
- package/target/impl/AjaxImpl.js.map +1 -1
- package/target/impl/PushImpl.js +45 -48
- package/target/impl/PushImpl.js.map +1 -1
- package/target/impl/core/Const.js +52 -40
- package/target/impl/core/Const.js.map +1 -1
- package/target/impl/core/Context.js +10 -0
- package/target/impl/core/Context.js.map +1 -0
- package/target/impl/core/ImplTypes.js +9 -14
- package/target/impl/core/ImplTypes.js.map +1 -1
- package/target/impl/i18n/Messages.js +3 -4
- package/target/impl/i18n/Messages.js.map +1 -1
- package/target/impl/util/Assertions.js +20 -24
- package/target/impl/util/Assertions.js.map +1 -1
- package/target/impl/util/AsyncQueue.js +28 -36
- package/target/impl/util/AsyncQueue.js.map +1 -1
- package/target/impl/util/ExtDomQuery.js +153 -221
- package/target/impl/util/ExtDomQuery.js.map +1 -1
- package/target/impl/util/FileUtils.js +64 -0
- package/target/impl/util/FileUtils.js.map +1 -0
- package/target/impl/util/HiddenElementBuilder.js +7 -0
- package/target/impl/util/HiddenElementBuilder.js.map +1 -0
- package/target/impl/util/HiddenInputBuilder.js +79 -0
- package/target/impl/util/HiddenInputBuilder.js.map +1 -0
- package/target/impl/util/Lang.js +23 -32
- package/target/impl/util/Lang.js.map +1 -1
- package/target/impl/util/URLCodec.js +77 -0
- package/target/impl/util/URLCodec.js.map +1 -0
- package/target/impl/xhrCore/ErrorData.js +41 -64
- package/target/impl/xhrCore/ErrorData.js.map +1 -1
- package/target/impl/xhrCore/EventData.js +10 -13
- package/target/impl/xhrCore/EventData.js.map +1 -1
- package/target/impl/xhrCore/RequestContext.js +11 -0
- package/target/impl/xhrCore/RequestContext.js.map +1 -0
- package/target/impl/xhrCore/RequestDataResolver.js +71 -27
- package/target/impl/xhrCore/RequestDataResolver.js.map +1 -1
- package/target/impl/xhrCore/ResonseDataResolver.js +16 -16
- package/target/impl/xhrCore/ResonseDataResolver.js.map +1 -1
- package/target/impl/xhrCore/Response.js +43 -28
- package/target/impl/xhrCore/Response.js.map +1 -1
- package/target/impl/xhrCore/ResponseProcessor.js +217 -162
- package/target/impl/xhrCore/ResponseProcessor.js.map +1 -1
- package/target/impl/xhrCore/XhrFormData.js +92 -208
- package/target/impl/xhrCore/XhrFormData.js.map +1 -1
- package/target/impl/xhrCore/XhrRequest.js +104 -104
- package/target/impl/xhrCore/XhrRequest.js.map +1 -1
- package/target/myfaces/OamSubmit.js +33 -24
- package/target/myfaces/OamSubmit.js.map +1 -1
- package/target/test/frameworkBase/LangTest.spec.js +46 -32
- package/target/test/frameworkBase/LangTest.spec.js.map +1 -1
- package/target/test/frameworkBase/_ext/monadish/DomQueryTest.spec.js +238 -228
- package/target/test/frameworkBase/_ext/monadish/DomQueryTest.spec.js.map +1 -1
- package/target/test/frameworkBase/_ext/monadish/LangTest.spec.js +45 -31
- package/target/test/frameworkBase/_ext/monadish/LangTest.spec.js.map +1 -1
- package/target/test/frameworkBase/_ext/monadish/MappingProbes.js +24 -33
- package/target/test/frameworkBase/_ext/monadish/MappingProbes.js.map +1 -1
- package/target/test/frameworkBase/_ext/monadish/MappingTest.spec.js +8 -8
- package/target/test/frameworkBase/_ext/monadish/MappingTest.spec.js.map +1 -1
- package/target/test/frameworkBase/_ext/monadish/MonadTest.spec.js +31 -31
- package/target/test/frameworkBase/_ext/monadish/MonadTest.spec.js.map +1 -1
- package/target/test/frameworkBase/_ext/monadish/StreamTest.spec.js +50 -48
- package/target/test/frameworkBase/_ext/monadish/StreamTest.spec.js.map +1 -1
- package/target/test/frameworkBase/_ext/shared/StandardInits.js +310 -132
- package/target/test/frameworkBase/_ext/shared/StandardInits.js.map +1 -1
- package/target/test/frameworkBase/_ext/shared/XmlResponses.js +235 -22
- package/target/test/frameworkBase/_ext/shared/XmlResponses.js.map +1 -1
- package/target/test/impl/ImplTest.spec.js +32 -59
- package/target/test/impl/ImplTest.spec.js.map +1 -1
- package/target/test/impl/ImplTest_23.spec.js +32 -59
- package/target/test/impl/ImplTest_23.spec.js.map +1 -1
- package/target/test/impl/SeparatorCharsTest.spec.js +17 -17
- package/target/test/impl/SeparatorCharsTest.spec.js.map +1 -1
- package/target/test/myfaces/OamSubmit.spec.js +25 -25
- package/target/test/myfaces/OamSubmit.spec.js.map +1 -1
- package/target/test/queue/AsynchronousProbe.js +23 -29
- package/target/test/queue/AsynchronousProbe.js.map +1 -1
- package/target/test/queue/AsynchronousQueueTest.spec.js +39 -70
- package/target/test/queue/AsynchronousQueueTest.spec.js.map +1 -1
- package/target/test/xhrCore/EventTests.spec.js +43 -74
- package/target/test/xhrCore/EventTests.spec.js.map +1 -1
- package/target/test/xhrCore/FakeWebsocket.js +14 -16
- package/target/test/xhrCore/FakeWebsocket.js.map +1 -1
- package/target/test/xhrCore/FileUploadTest.spec.js +48 -78
- package/target/test/xhrCore/FileUploadTest.spec.js.map +1 -1
- package/target/test/xhrCore/NamespacesRequestTest.spec.js +204 -0
- package/target/test/xhrCore/NamespacesRequestTest.spec.js.map +1 -0
- package/target/test/xhrCore/OamSubmitTest.spec.js +180 -0
- package/target/test/xhrCore/OamSubmitTest.spec.js.map +1 -0
- package/target/test/xhrCore/RequestParamsTest.spec.js +174 -73
- package/target/test/xhrCore/RequestParamsTest.spec.js.map +1 -1
- package/target/test/xhrCore/RequestTest.spec.js +173 -149
- package/target/test/xhrCore/RequestTest.spec.js.map +1 -1
- package/target/test/xhrCore/RequestTest_23.spec.js +127 -142
- package/target/test/xhrCore/RequestTest_23.spec.js.map +1 -1
- package/target/test/xhrCore/ResponseTest.spec.js +415 -100
- package/target/test/xhrCore/ResponseTest.spec.js.map +1 -1
- package/target/test/xhrCore/ResponseTest23.spec.js +152 -91
- package/target/test/xhrCore/ResponseTest23.spec.js.map +1 -1
- package/target/test/xhrCore/ShadowDomTest.spec.js +30 -61
- package/target/test/xhrCore/ShadowDomTest.spec.js.map +1 -1
- package/target/test/xhrCore/WebsocketTest.js +60 -93
- package/target/test/xhrCore/WebsocketTest.js.map +1 -1
- package/target/test/xhrCore/XhrFormDataTest.spec.js +79 -30
- package/target/test/xhrCore/XhrFormDataTest.spec.js.map +1 -1
- package/target/test-classes/.gz +0 -0
- package/target/test-classes/com/example/jsfs_js_ts/JsfsJsTsApplicationTests.class +0 -0
- package/target/test-classes/fileuploadtest.html +24 -0
- package/target/test-classes/jsf-development.js +3559 -0
- package/target/test-classes/jsf-development.js.br +0 -0
- package/target/test-classes/jsf-development.js.gz +0 -0
- package/target/test-classes/jsf-development.js.map +1 -0
- package/target/test-classes/jsf.js +3 -0
- package/target/test-classes/jsf.js.br +0 -0
- package/target/test-classes/jsf.js.gz +0 -0
- package/tmp.xml +36 -0
|
@@ -18,9 +18,47 @@ import {Implementation} from "../../impl/AjaxImpl";
|
|
|
18
18
|
import {StandardInits} from "../frameworkBase/_ext/shared/StandardInits";
|
|
19
19
|
|
|
20
20
|
import protocolPage = StandardInits.protocolPage;
|
|
21
|
-
import {DQ} from "mona-dish";
|
|
22
|
-
import {
|
|
23
|
-
import
|
|
21
|
+
import {Config, DQ, Stream} from "mona-dish";
|
|
22
|
+
import {expect} from "chai";
|
|
23
|
+
import HTML_PREFIX_EMBEDDED_BODY = StandardInits.HTML_PREFIX_EMBEDDED_BODY;
|
|
24
|
+
import {it} from "mocha";
|
|
25
|
+
import {decodeEncodedValues} from "../../impl/util/FileUtils";
|
|
26
|
+
import {ExtConfig} from "../../impl/util/ExtDomQuery";
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* merges a list of key value entries into a target config
|
|
30
|
+
* @param target the target receiving the key value entries
|
|
31
|
+
* @param keyValueEntries a list of key value entries divided by =
|
|
32
|
+
* @param paramsMapper a key value remapper
|
|
33
|
+
*/
|
|
34
|
+
function mergeKeyValueEntries(target: Config, keyValueEntries: Stream<string[]>, paramsMapper = (key, value) => [key, value]) {
|
|
35
|
+
|
|
36
|
+
function fixKeyWithoutVal(keyVal: string[]) {
|
|
37
|
+
return keyVal.length < 3 ? [keyVal?.[0] ?? [], keyVal?.[1] ?? []] : keyVal;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
let toMerge = new ExtConfig({});
|
|
41
|
+
keyValueEntries
|
|
42
|
+
//special case of having keys without values
|
|
43
|
+
.map(keyVal => fixKeyWithoutVal(keyVal))
|
|
44
|
+
.map(keyVal => paramsMapper(keyVal[0] as string, keyVal[1]))
|
|
45
|
+
.each(keyVal => {
|
|
46
|
+
let value = keyVal?.splice(1)?.join("") ?? "";
|
|
47
|
+
if(toMerge.getIfPresent(keyVal[0]).isPresent()) {
|
|
48
|
+
toMerge.append(keyVal[0] as string).value = value;
|
|
49
|
+
} else {
|
|
50
|
+
toMerge.assign(keyVal[0] as string).value = value;
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
target.shallowMerge(toMerge);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
function getFormData(requestBody: string): Config {
|
|
58
|
+
let ret = new Config({});
|
|
59
|
+
mergeKeyValueEntries(ret, decodeEncodedValues(requestBody));
|
|
60
|
+
return ret;
|
|
61
|
+
}
|
|
24
62
|
|
|
25
63
|
describe("test for proper request param patterns identical to the old implementation", function () {
|
|
26
64
|
const UPDATE_INSERT_2 = {
|
|
@@ -35,12 +73,12 @@ describe("test for proper request param patterns identical to the old implementa
|
|
|
35
73
|
/**
|
|
36
74
|
* matches two maps for absolute identicality
|
|
37
75
|
*/
|
|
38
|
-
let matches = (item1: {[key: string]: any}, item2: {[key: string]: any}): boolean => {
|
|
39
|
-
if(Object.keys(item1).length != Object.keys(item2).length) {
|
|
76
|
+
let matches = (item1: { [key: string]: any }, item2: { [key: string]: any }): boolean => {
|
|
77
|
+
if (Object.keys(item1).length != Object.keys(item2).length) {
|
|
40
78
|
return false;
|
|
41
79
|
}
|
|
42
|
-
for(let key in item1) {
|
|
43
|
-
if((!(key in item2)) || item1[key] != item2[key]) {
|
|
80
|
+
for (let key in item1) {
|
|
81
|
+
if ((!(key in item2)) || item1[key] != item2[key]) {
|
|
44
82
|
return false;
|
|
45
83
|
}
|
|
46
84
|
}
|
|
@@ -77,50 +115,153 @@ describe("test for proper request param patterns identical to the old implementa
|
|
|
77
115
|
this.closeIt();
|
|
78
116
|
});
|
|
79
117
|
|
|
80
|
-
it("must pass updateinsert2 with proper parameters", function() {
|
|
118
|
+
it("must pass updateinsert2 with proper parameters", function () {
|
|
81
119
|
DQ.byId("cmd_update_insert2").click();
|
|
82
120
|
|
|
83
121
|
let requestBody = this.requests[0].requestBody;
|
|
84
|
-
let formData =
|
|
122
|
+
let formData = getFormData(requestBody);
|
|
85
123
|
|
|
86
124
|
expect(matches(formData.value, UPDATE_INSERT_2)).to.be.true;
|
|
87
|
-
|
|
88
125
|
});
|
|
89
126
|
|
|
90
127
|
|
|
91
|
-
it("must handle base64 encoded strings properly as request data", function() {
|
|
128
|
+
it("must handle base64 encoded strings properly as request data", function () {
|
|
92
129
|
let probe = "YWFhYWFhc1Rlc3RpdCDDpGtvNDU5NjczMDA9PSsrNDU5MGV3b3UkJiUmLyQmJQ==";
|
|
93
130
|
DQ.byId("jakarta.faces.ViewState").inputValue.value = probe;
|
|
94
131
|
DQ.byId("cmd_update_insert2").click();
|
|
95
132
|
let requestBody = this.requests[0].requestBody;
|
|
96
133
|
//We check if the base64 encoded string matches the original
|
|
97
|
-
let formData =
|
|
134
|
+
let formData = getFormData(requestBody);
|
|
98
135
|
|
|
99
|
-
expect(
|
|
136
|
+
expect(formData.getIf("jakarta.faces.ViewState").value == probe).to.be.true;
|
|
100
137
|
});
|
|
101
138
|
|
|
102
139
|
|
|
103
|
-
it("must handle empty parameters properly", function() {
|
|
140
|
+
it("must handle empty parameters properly", function () {
|
|
104
141
|
let probe = "";
|
|
105
142
|
DQ.byId("jakarta.faces.ViewState").inputValue.value = probe;
|
|
106
143
|
DQ.byId("cmd_update_insert2").click();
|
|
107
144
|
let requestBody = this.requests[0].requestBody;
|
|
108
145
|
//We check if the base64 encoded string matches the original
|
|
109
|
-
let formData =
|
|
146
|
+
let formData = getFormData(requestBody);
|
|
110
147
|
|
|
111
148
|
expect(decodeURIComponent(formData.getIf("jakarta.faces.ViewState").value) == probe).to.be.true;
|
|
112
149
|
});
|
|
113
150
|
|
|
114
151
|
//KssbpZfCe+0lwDhgMRQ44wRFkaM1o1lbMMUO3lini5YhXWm6
|
|
115
152
|
|
|
116
|
-
it("must handle base64 special cases properly (+ in encoding)", function() {
|
|
153
|
+
it("must handle base64 special cases properly (+ in encoding)", function () {
|
|
117
154
|
let probe = "KssbpZfCe+0lwDhgMRQ44wRFkaM1o1lbMMUO3lini5YhXWm6";
|
|
118
155
|
DQ.byId("jakarta.faces.ViewState").inputValue.value = probe;
|
|
119
156
|
DQ.byId("cmd_update_insert2").click();
|
|
120
157
|
let requestBody = this.requests[0].requestBody;
|
|
121
158
|
//We check if the base64 encoded string matches the original
|
|
122
|
-
let formData =
|
|
159
|
+
let formData = getFormData(requestBody);
|
|
123
160
|
|
|
124
161
|
expect(decodeURIComponent(formData.getIf("jakarta.faces.ViewState").value) == probe).to.be.true;
|
|
125
162
|
});
|
|
163
|
+
|
|
164
|
+
it("must handle prefixed inputs properly (prefixes must be present) faces4", function (done) {
|
|
165
|
+
window.document.body.innerHTML = HTML_PREFIX_EMBEDDED_BODY;
|
|
166
|
+
|
|
167
|
+
global["debug_inp"] = true;
|
|
168
|
+
//we now run the tests here
|
|
169
|
+
try {
|
|
170
|
+
|
|
171
|
+
let event = {
|
|
172
|
+
isTrusted: true,
|
|
173
|
+
type: 'change',
|
|
174
|
+
target: document.getElementById("page:input::field"),
|
|
175
|
+
currentTarget: document.getElementById("page:input::field")
|
|
176
|
+
};
|
|
177
|
+
faces.ajax.request(document.getElementById("page:input"), event as any, {
|
|
178
|
+
render: "page:output",
|
|
179
|
+
execute: "page:input",
|
|
180
|
+
params: {
|
|
181
|
+
"booga2.xxx": "yyy",
|
|
182
|
+
"javax.faces.behavior.event": "change",
|
|
183
|
+
"booga": "bla"
|
|
184
|
+
},
|
|
185
|
+
});
|
|
186
|
+
} catch (err) {
|
|
187
|
+
console.error(err);
|
|
188
|
+
expect(false).to.eq(true);
|
|
189
|
+
}
|
|
190
|
+
const requestBody = this.requests[0].requestBody;
|
|
191
|
+
//We check if the base64 encoded string matches the original
|
|
192
|
+
expect(requestBody.indexOf("javax.faces.behavior.event")).to.not.eq(-1);
|
|
193
|
+
expect(requestBody.indexOf("javax.faces.behavior.event=change")).to.not.eq(-1);
|
|
194
|
+
expect(requestBody.indexOf("page%3Ainput=input_value")).to.not.eq(-1);
|
|
195
|
+
done();
|
|
196
|
+
});
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* This test is based on Tobago 6 (Jakarte EE 9).
|
|
203
|
+
*/
|
|
204
|
+
it("must handle ':' in IDs properly", function (done) {
|
|
205
|
+
window.document.body.innerHTML = `
|
|
206
|
+
|
|
207
|
+
<tobago-page locale="en" class="container-fluid" id="page" focus-on-error="true" wait-overlay-delay-full="1000" wait-overlay-delay-ajax="1000">
|
|
208
|
+
<form action="/content/010-input/10-in/In.xhtml?jfwid=q6qbeuqed" id="page::form" method="post" accept-charset="UTF-8" data-tobago-context-path="">
|
|
209
|
+
<input type="hidden" name="jakarta.faces.source" id="jakarta.faces.source" disabled="disabled">
|
|
210
|
+
<tobago-focus id="page::lastFocusId">
|
|
211
|
+
<input type="hidden" name="page::lastFocusId" id="page::lastFocusId::field">
|
|
212
|
+
</tobago-focus>
|
|
213
|
+
<input type="hidden" name="org.apache.myfaces.tobago.webapp.Secret" id="org.apache.myfaces.tobago.webapp.Secret" value="secretValue">
|
|
214
|
+
<tobago-in id="page:input" class="tobago-auto-spacing">
|
|
215
|
+
<input type="text" name="page:input" id="page:input::field" class="form-control" value="Bob">
|
|
216
|
+
<tobago-behavior event="change" client-id="page:input" field-id="page:input::field" execute="page:input" render="page:output"></tobago-behavior>
|
|
217
|
+
</tobago-in>
|
|
218
|
+
<tobago-out id="page:output" class="tobago-auto-spacing">
|
|
219
|
+
<span class="form-control-plaintext"></span>
|
|
220
|
+
</tobago-out>
|
|
221
|
+
<div class="tobago-page-menuStore">
|
|
222
|
+
</div>
|
|
223
|
+
<span id="page::faces-state-container">
|
|
224
|
+
<input type="hidden" name="jakarta.faces.ViewState" id="j_id__v_0:jakarta.faces.ViewState:1" value="viewStateValue" autocomplete="off">
|
|
225
|
+
<input type="hidden" name="jakarta.faces.RenderKitId" value="tobago">
|
|
226
|
+
<input type="hidden" id="j_id__v_0:jakarta.faces.ClientWindow:1" name="jakarta.faces.ClientWindow" value="clientWindowValue">
|
|
227
|
+
</span>
|
|
228
|
+
</form>
|
|
229
|
+
</tobago-page>
|
|
230
|
+
`;
|
|
231
|
+
|
|
232
|
+
//we now run the tests here
|
|
233
|
+
try {
|
|
234
|
+
|
|
235
|
+
let event = {
|
|
236
|
+
isTrusted: true,
|
|
237
|
+
type: 'change',
|
|
238
|
+
target: document.getElementById("page:input::field"),
|
|
239
|
+
currentTarget: document.getElementById("page:input::field")
|
|
240
|
+
};
|
|
241
|
+
global.debug2 = true;
|
|
242
|
+
faces.ajax.request(document.getElementById("page:input"), event as any, {
|
|
243
|
+
"jakarta.faces.behavior.event": 'change',
|
|
244
|
+
execute: "page:input",
|
|
245
|
+
render: "page:output"
|
|
246
|
+
});
|
|
247
|
+
} catch (err) {
|
|
248
|
+
console.error(err);
|
|
249
|
+
expect(false).to.eq(true);
|
|
250
|
+
}
|
|
251
|
+
const requestBody = this.requests[0].requestBody;
|
|
252
|
+
expect(requestBody.indexOf("org.apache.myfaces.tobago.webapp.Secret=secretValue")).to.not.eq(-1);
|
|
253
|
+
expect(requestBody.indexOf("page%3Ainput=Bob")).to.not.eq(-1);
|
|
254
|
+
expect(requestBody.indexOf("jakarta.faces.ViewState=viewStateValue")).to.not.eq(-1);
|
|
255
|
+
expect(requestBody.indexOf("jakarta.faces.RenderKitId=tobago")).to.not.eq(-1);
|
|
256
|
+
expect(requestBody.indexOf("jakarta.faces.ClientWindow=clientWindowValue")).to.not.eq(-1);
|
|
257
|
+
expect(requestBody.indexOf("jakarta.faces.behavior.event=change")).to.not.eq(-1);
|
|
258
|
+
expect(requestBody.indexOf("jakarta.faces.partial.event=change")).to.not.eq(-1);
|
|
259
|
+
expect(requestBody.indexOf("jakarta.faces.source=page%3Ainput")).to.not.eq(-1);
|
|
260
|
+
expect(requestBody.indexOf("jakarta.faces.partial.ajax=true")).to.not.eq(-1);
|
|
261
|
+
expect(requestBody.indexOf("page%3A%3Aform=page%3A%3Aform")).to.not.eq(-1);
|
|
262
|
+
expect(requestBody.indexOf("jakarta.faces.partial.execute=page%3Ainput")).to.not.eq(-1);
|
|
263
|
+
expect(requestBody.indexOf("jakarta.faces.partial.render=page%3Aoutput")).to.not.eq(-1);
|
|
264
|
+
done();
|
|
265
|
+
});
|
|
266
|
+
|
|
126
267
|
});
|
|
@@ -20,7 +20,7 @@ import {expect} from "chai";
|
|
|
20
20
|
import {StandardInits} from "../frameworkBase/_ext/shared/StandardInits";
|
|
21
21
|
import {DomQuery} from "mona-dish";
|
|
22
22
|
import {
|
|
23
|
-
COMPLETE,
|
|
23
|
+
COMPLETE, EMPTY_STR,
|
|
24
24
|
P_AJAX,
|
|
25
25
|
P_EXECUTE,
|
|
26
26
|
P_PARTIAL_SOURCE,
|
|
@@ -464,9 +464,9 @@ describe('Tests after core when it hits response', function () {
|
|
|
464
464
|
},
|
|
465
465
|
onerror: (error: any) => {
|
|
466
466
|
expect(error.type).to.eq("error");
|
|
467
|
-
expect(
|
|
467
|
+
expect(error.status).to.eq(EMPTY_STR);
|
|
468
468
|
expect(!!error.message).to.eq(true);
|
|
469
|
-
expect(!!error.source).to.eq(true);
|
|
469
|
+
expect(!!error.source?.id).to.eq(true);
|
|
470
470
|
expect(!!error.responseCode).to.eq(true);
|
|
471
471
|
expect(!!error.responseText).to.eq(true);
|
|
472
472
|
expect(!error.responseXML).to.eq(true);
|
|
@@ -491,5 +491,72 @@ describe('Tests after core when it hits response', function () {
|
|
|
491
491
|
}
|
|
492
492
|
|
|
493
493
|
});
|
|
494
|
+
|
|
495
|
+
// We can cover this TCK issue in a simple code unit test, the case is simple enough
|
|
496
|
+
it("must throw an error on invalid delays (MYFACES-4499, TCK_ISSUE320IT )", (done) => {
|
|
497
|
+
|
|
498
|
+
let element = DomQuery.byId("input_2").getAsElem(0).value;
|
|
499
|
+
try {
|
|
500
|
+
faces.ajax.request(element, null, {
|
|
501
|
+
execute: "input_1",
|
|
502
|
+
render: "@form",
|
|
503
|
+
delay: NaN,
|
|
504
|
+
params: {
|
|
505
|
+
pass1: "pass1",
|
|
506
|
+
pass2: "pass2",
|
|
507
|
+
}
|
|
508
|
+
});
|
|
509
|
+
} catch (e) {
|
|
510
|
+
expect(e.message.indexOf("NaN") > 0).to.eq(true, "Invalid NaN in message");
|
|
511
|
+
done();
|
|
512
|
+
return;
|
|
513
|
+
}
|
|
514
|
+
done("Expecting a client error to be thrown")
|
|
515
|
+
});
|
|
516
|
+
|
|
517
|
+
it("must throw an error on invalid delays (MYFACES-4499, TCK_ISSUE320IT ) - 2", (done) => {
|
|
518
|
+
|
|
519
|
+
let element = DomQuery.byId("input_2").getAsElem(0).value;
|
|
520
|
+
try {
|
|
521
|
+
faces.ajax.request(element, null, {
|
|
522
|
+
execute: "input_1",
|
|
523
|
+
render: "@form",
|
|
524
|
+
delay: -1,
|
|
525
|
+
params: {
|
|
526
|
+
pass1: "pass1",
|
|
527
|
+
pass2: "pass2",
|
|
528
|
+
}
|
|
529
|
+
});
|
|
530
|
+
} catch (e) {
|
|
531
|
+
expect(e.message.indexOf("-1") > 0).to
|
|
532
|
+
.eq(true, "Invalid integer value in message");
|
|
533
|
+
done();
|
|
534
|
+
return;
|
|
535
|
+
}
|
|
536
|
+
done("Expecting a client error to be thrown")
|
|
537
|
+
});
|
|
538
|
+
it("must throw an error on invalid delays (MYFACES-4499, TCK_ISSUE320IT ) - 3", (done) => {
|
|
539
|
+
|
|
540
|
+
let element = DomQuery.byId("input_2").getAsElem(0).value;
|
|
541
|
+
try {
|
|
542
|
+
faces.ajax.request(element, null, {
|
|
543
|
+
execute: "input_1",
|
|
544
|
+
render: "@form",
|
|
545
|
+
delay: "booga",
|
|
546
|
+
params: {
|
|
547
|
+
pass1: "pass1",
|
|
548
|
+
pass2: "pass2",
|
|
549
|
+
}
|
|
550
|
+
});
|
|
551
|
+
} catch (e) {
|
|
552
|
+
expect(e.message.indexOf("booga") > 0).to.be
|
|
553
|
+
.eq(true, "Invalid string value in message");
|
|
554
|
+
done();
|
|
555
|
+
return;
|
|
556
|
+
}
|
|
557
|
+
done("Expecting a client error to be thrown")
|
|
558
|
+
});
|
|
559
|
+
|
|
560
|
+
|
|
494
561
|
});
|
|
495
562
|
|
|
@@ -24,7 +24,7 @@ import {expect} from "chai";
|
|
|
24
24
|
import {StandardInits} from "../frameworkBase/_ext/shared/StandardInits";
|
|
25
25
|
import {DomQuery} from "mona-dish";
|
|
26
26
|
import {
|
|
27
|
-
COMPLETE,
|
|
27
|
+
COMPLETE, EMPTY_STR,
|
|
28
28
|
SUCCESS
|
|
29
29
|
} from "../../impl/core/Const";
|
|
30
30
|
;
|
|
@@ -65,6 +65,7 @@ let {
|
|
|
65
65
|
|
|
66
66
|
import STD_XML = StandardInits.STD_XML;
|
|
67
67
|
import defaultMyFaces23 = StandardInits.defaultMyFaces23;
|
|
68
|
+
import HTML_PREFIX_EMBEDDED_BODY = StandardInits.HTML_PREFIX_EMBEDDED_BODY;
|
|
68
69
|
|
|
69
70
|
declare var jsf: any;
|
|
70
71
|
declare var Implementation: any;
|
|
@@ -333,9 +334,9 @@ describe('Tests after core when it hits response', function () {
|
|
|
333
334
|
pass2: "pass2",
|
|
334
335
|
onerror: (error: any) => {
|
|
335
336
|
expect(error.type).to.eq("error");
|
|
336
|
-
expect(
|
|
337
|
+
expect(error.status).to.eq(EMPTY_STR);
|
|
337
338
|
expect(!!error.message).to.eq(true);
|
|
338
|
-
expect(!!error.source).to.eq(true);
|
|
339
|
+
expect(!!error.source.id).to.eq(true);
|
|
339
340
|
expect(!!error.responseCode).to.eq(true);
|
|
340
341
|
expect(!!error.responseText).to.eq(true);
|
|
341
342
|
expect(!error.responseXML).to.eq(true);
|
|
@@ -360,5 +361,40 @@ describe('Tests after core when it hits response', function () {
|
|
|
360
361
|
}
|
|
361
362
|
|
|
362
363
|
});
|
|
364
|
+
|
|
365
|
+
it("must handle prefixed inputs properly (prefixes must be present)", function (done) {
|
|
366
|
+
window.document.body.innerHTML = HTML_PREFIX_EMBEDDED_BODY;
|
|
367
|
+
|
|
368
|
+
//we now run the tests here
|
|
369
|
+
try {
|
|
370
|
+
|
|
371
|
+
let event = {
|
|
372
|
+
isTrusted: true,
|
|
373
|
+
type: 'change',
|
|
374
|
+
target: document.getElementById("page:input::field"),
|
|
375
|
+
currentTarget: document.getElementById("page:input::field")
|
|
376
|
+
};
|
|
377
|
+
jsf.ajax.request(document.getElementById("page:input"), event as any, {
|
|
378
|
+
render: "page:output",
|
|
379
|
+
execute: "page:input",
|
|
380
|
+
params: {
|
|
381
|
+
"booga2.xxx": "yyy",
|
|
382
|
+
"javax.faces.behavior.event": "change",
|
|
383
|
+
"booga": "bla"
|
|
384
|
+
},
|
|
385
|
+
});
|
|
386
|
+
} catch (err) {
|
|
387
|
+
console.error(err);
|
|
388
|
+
expect(false).to.eq(true);
|
|
389
|
+
}
|
|
390
|
+
const requestBody = this.requests[0].requestBody;
|
|
391
|
+
//We check if the base64 encoded string matches the original
|
|
392
|
+
expect(requestBody.indexOf("javax.faces.behavior.event")).to.not.eq(-1);
|
|
393
|
+
expect(requestBody.indexOf("javax.faces.behavior.event=change")).to.not.eq(-1);
|
|
394
|
+
expect(requestBody.indexOf("page%3Ainput=input_value")).to.not.eq(-1);
|
|
395
|
+
done();
|
|
396
|
+
});
|
|
397
|
+
|
|
398
|
+
|
|
363
399
|
});
|
|
364
400
|
|