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.
Files changed (185) hide show
  1. package/dist/docs/assets/main.js +56 -52
  2. package/dist/docs/assets/style.css +23 -0
  3. package/dist/window/faces-development.js +2961 -3011
  4. package/dist/window/faces-development.js.br +0 -0
  5. package/dist/window/faces-development.js.gz +0 -0
  6. package/dist/window/faces-development.js.map +1 -1
  7. package/dist/window/faces.js +1 -1
  8. package/dist/window/faces.js.LICENSE.txt +0 -2
  9. package/dist/window/faces.js.br +0 -0
  10. package/dist/window/faces.js.gz +0 -0
  11. package/dist/window/faces.js.map +1 -1
  12. package/dist/window/jsf-development.js +2966 -3016
  13. package/dist/window/jsf-development.js.br +0 -0
  14. package/dist/window/jsf-development.js.gz +0 -0
  15. package/dist/window/jsf-development.js.map +1 -1
  16. package/dist/window/jsf.js +1 -1
  17. package/dist/window/jsf.js.LICENSE.txt +0 -2
  18. package/dist/window/jsf.js.br +0 -0
  19. package/dist/window/jsf.js.gz +0 -0
  20. package/dist/window/jsf.js.map +1 -1
  21. package/package.json +16 -16
  22. package/src/main/test.xml +23 -0
  23. package/src/main/typescript/@types/definitions/index.d.ts +12 -7
  24. package/src/main/typescript/api/_api.ts +4 -3
  25. package/src/main/typescript/impl/AjaxImpl.ts +125 -41
  26. package/src/main/typescript/impl/core/Const.ts +52 -41
  27. package/src/main/typescript/impl/util/Assertions.ts +16 -8
  28. package/src/main/typescript/impl/util/ExtDomQuery.ts +12 -4
  29. package/src/main/typescript/impl/util/FileUtils.ts +66 -0
  30. package/src/main/typescript/impl/util/HiddenInputBuilder.ts +89 -0
  31. package/src/main/typescript/impl/util/Lang.ts +9 -11
  32. package/src/main/typescript/impl/xhrCore/ErrorData.ts +15 -10
  33. package/src/main/typescript/impl/xhrCore/EventData.ts +2 -2
  34. package/src/main/typescript/impl/xhrCore/IResponseProcessor.ts +15 -1
  35. package/src/main/typescript/impl/xhrCore/RequestDataResolver.ts +69 -24
  36. package/src/main/typescript/impl/xhrCore/ResonseDataResolver.ts +4 -4
  37. package/src/main/typescript/impl/xhrCore/Response.ts +55 -38
  38. package/src/main/typescript/impl/xhrCore/ResponseProcessor.ts +173 -98
  39. package/src/main/typescript/impl/xhrCore/XhrFormData.ts +91 -168
  40. package/src/main/typescript/impl/xhrCore/XhrRequest.ts +39 -23
  41. package/src/main/typescript/myfaces/OamSubmit.ts +29 -13
  42. package/src/main/typescript/test/frameworkBase/_ext/monadish/DomQueryTest.spec.ts +1 -1
  43. package/src/main/typescript/test/frameworkBase/_ext/shared/StandardInits.ts +73 -1
  44. package/src/main/typescript/test/frameworkBase/_ext/shared/XmlResponses.ts +40 -1
  45. package/src/main/typescript/test/impl/ImplTest.spec.ts +3 -3
  46. package/src/main/typescript/test/impl/ImplTest_23.spec.ts +3 -3
  47. package/src/main/typescript/test/xhrCore/EventTests.spec.ts +1 -1
  48. package/src/main/typescript/test/xhrCore/FileUploadTest.spec.ts +5 -2
  49. package/src/main/typescript/test/xhrCore/NamespacesRequestTest.spec.ts +203 -0
  50. package/src/main/typescript/test/xhrCore/OamSubmitTest.spec.ts +177 -0
  51. package/src/main/typescript/test/xhrCore/RequestParamsTest.spec.ts +158 -17
  52. package/src/main/typescript/test/xhrCore/RequestTest.spec.ts +70 -3
  53. package/src/main/typescript/test/xhrCore/RequestTest_23.spec.ts +39 -3
  54. package/src/main/typescript/test/xhrCore/ResponseTest.spec.ts +372 -34
  55. package/src/main/typescript/test/xhrCore/ResponseTest23.spec.ts +43 -9
  56. package/src/main/typescript/test/xhrCore/XhrFormDataTest.spec.ts +67 -49
  57. package/src/main/typescript/test.xml +6 -0
  58. package/src/main/typescript/tsconfig.json +2 -2
  59. package/src/test/resources/jsf-development.js +1 -1
  60. package/src/tmp/test.html +12 -88
  61. package/target/api/_api.js +16 -29
  62. package/target/api/_api.js.map +1 -1
  63. package/target/api/faces.js +4 -4
  64. package/target/api/faces.js.map +1 -1
  65. package/target/api/jsf.js +9 -9
  66. package/target/api/jsf.js.map +1 -1
  67. package/target/classes/com/example/jsfs_js_ts/DecoratedFacesJS.class +0 -0
  68. package/target/classes/com/example/jsfs_js_ts/DecoratingResourceHandlerWrapper.class +0 -0
  69. package/target/classes/com/example/jsfs_js_ts/FacesJSMapFileResourceWrapper.class +0 -0
  70. package/target/classes/com/example/jsfs_js_ts/FacesJSMappingDecorator.class +0 -0
  71. package/target/impl/AjaxImpl.js +155 -89
  72. package/target/impl/AjaxImpl.js.map +1 -1
  73. package/target/impl/PushImpl.js +45 -48
  74. package/target/impl/PushImpl.js.map +1 -1
  75. package/target/impl/core/Const.js +52 -40
  76. package/target/impl/core/Const.js.map +1 -1
  77. package/target/impl/core/Context.js +10 -0
  78. package/target/impl/core/Context.js.map +1 -0
  79. package/target/impl/core/ImplTypes.js +9 -14
  80. package/target/impl/core/ImplTypes.js.map +1 -1
  81. package/target/impl/i18n/Messages.js +3 -4
  82. package/target/impl/i18n/Messages.js.map +1 -1
  83. package/target/impl/util/Assertions.js +20 -24
  84. package/target/impl/util/Assertions.js.map +1 -1
  85. package/target/impl/util/AsyncQueue.js +28 -36
  86. package/target/impl/util/AsyncQueue.js.map +1 -1
  87. package/target/impl/util/ExtDomQuery.js +153 -221
  88. package/target/impl/util/ExtDomQuery.js.map +1 -1
  89. package/target/impl/util/FileUtils.js +64 -0
  90. package/target/impl/util/FileUtils.js.map +1 -0
  91. package/target/impl/util/HiddenElementBuilder.js +7 -0
  92. package/target/impl/util/HiddenElementBuilder.js.map +1 -0
  93. package/target/impl/util/HiddenInputBuilder.js +79 -0
  94. package/target/impl/util/HiddenInputBuilder.js.map +1 -0
  95. package/target/impl/util/Lang.js +23 -32
  96. package/target/impl/util/Lang.js.map +1 -1
  97. package/target/impl/util/URLCodec.js +77 -0
  98. package/target/impl/util/URLCodec.js.map +1 -0
  99. package/target/impl/xhrCore/ErrorData.js +41 -64
  100. package/target/impl/xhrCore/ErrorData.js.map +1 -1
  101. package/target/impl/xhrCore/EventData.js +10 -13
  102. package/target/impl/xhrCore/EventData.js.map +1 -1
  103. package/target/impl/xhrCore/RequestContext.js +11 -0
  104. package/target/impl/xhrCore/RequestContext.js.map +1 -0
  105. package/target/impl/xhrCore/RequestDataResolver.js +71 -27
  106. package/target/impl/xhrCore/RequestDataResolver.js.map +1 -1
  107. package/target/impl/xhrCore/ResonseDataResolver.js +16 -16
  108. package/target/impl/xhrCore/ResonseDataResolver.js.map +1 -1
  109. package/target/impl/xhrCore/Response.js +43 -28
  110. package/target/impl/xhrCore/Response.js.map +1 -1
  111. package/target/impl/xhrCore/ResponseProcessor.js +217 -162
  112. package/target/impl/xhrCore/ResponseProcessor.js.map +1 -1
  113. package/target/impl/xhrCore/XhrFormData.js +92 -208
  114. package/target/impl/xhrCore/XhrFormData.js.map +1 -1
  115. package/target/impl/xhrCore/XhrRequest.js +104 -104
  116. package/target/impl/xhrCore/XhrRequest.js.map +1 -1
  117. package/target/myfaces/OamSubmit.js +33 -24
  118. package/target/myfaces/OamSubmit.js.map +1 -1
  119. package/target/test/frameworkBase/LangTest.spec.js +46 -32
  120. package/target/test/frameworkBase/LangTest.spec.js.map +1 -1
  121. package/target/test/frameworkBase/_ext/monadish/DomQueryTest.spec.js +238 -228
  122. package/target/test/frameworkBase/_ext/monadish/DomQueryTest.spec.js.map +1 -1
  123. package/target/test/frameworkBase/_ext/monadish/LangTest.spec.js +45 -31
  124. package/target/test/frameworkBase/_ext/monadish/LangTest.spec.js.map +1 -1
  125. package/target/test/frameworkBase/_ext/monadish/MappingProbes.js +24 -33
  126. package/target/test/frameworkBase/_ext/monadish/MappingProbes.js.map +1 -1
  127. package/target/test/frameworkBase/_ext/monadish/MappingTest.spec.js +8 -8
  128. package/target/test/frameworkBase/_ext/monadish/MappingTest.spec.js.map +1 -1
  129. package/target/test/frameworkBase/_ext/monadish/MonadTest.spec.js +31 -31
  130. package/target/test/frameworkBase/_ext/monadish/MonadTest.spec.js.map +1 -1
  131. package/target/test/frameworkBase/_ext/monadish/StreamTest.spec.js +50 -48
  132. package/target/test/frameworkBase/_ext/monadish/StreamTest.spec.js.map +1 -1
  133. package/target/test/frameworkBase/_ext/shared/StandardInits.js +310 -132
  134. package/target/test/frameworkBase/_ext/shared/StandardInits.js.map +1 -1
  135. package/target/test/frameworkBase/_ext/shared/XmlResponses.js +235 -22
  136. package/target/test/frameworkBase/_ext/shared/XmlResponses.js.map +1 -1
  137. package/target/test/impl/ImplTest.spec.js +32 -59
  138. package/target/test/impl/ImplTest.spec.js.map +1 -1
  139. package/target/test/impl/ImplTest_23.spec.js +32 -59
  140. package/target/test/impl/ImplTest_23.spec.js.map +1 -1
  141. package/target/test/impl/SeparatorCharsTest.spec.js +17 -17
  142. package/target/test/impl/SeparatorCharsTest.spec.js.map +1 -1
  143. package/target/test/myfaces/OamSubmit.spec.js +25 -25
  144. package/target/test/myfaces/OamSubmit.spec.js.map +1 -1
  145. package/target/test/queue/AsynchronousProbe.js +23 -29
  146. package/target/test/queue/AsynchronousProbe.js.map +1 -1
  147. package/target/test/queue/AsynchronousQueueTest.spec.js +39 -70
  148. package/target/test/queue/AsynchronousQueueTest.spec.js.map +1 -1
  149. package/target/test/xhrCore/EventTests.spec.js +43 -74
  150. package/target/test/xhrCore/EventTests.spec.js.map +1 -1
  151. package/target/test/xhrCore/FakeWebsocket.js +14 -16
  152. package/target/test/xhrCore/FakeWebsocket.js.map +1 -1
  153. package/target/test/xhrCore/FileUploadTest.spec.js +48 -78
  154. package/target/test/xhrCore/FileUploadTest.spec.js.map +1 -1
  155. package/target/test/xhrCore/NamespacesRequestTest.spec.js +204 -0
  156. package/target/test/xhrCore/NamespacesRequestTest.spec.js.map +1 -0
  157. package/target/test/xhrCore/OamSubmitTest.spec.js +180 -0
  158. package/target/test/xhrCore/OamSubmitTest.spec.js.map +1 -0
  159. package/target/test/xhrCore/RequestParamsTest.spec.js +174 -73
  160. package/target/test/xhrCore/RequestParamsTest.spec.js.map +1 -1
  161. package/target/test/xhrCore/RequestTest.spec.js +173 -149
  162. package/target/test/xhrCore/RequestTest.spec.js.map +1 -1
  163. package/target/test/xhrCore/RequestTest_23.spec.js +127 -142
  164. package/target/test/xhrCore/RequestTest_23.spec.js.map +1 -1
  165. package/target/test/xhrCore/ResponseTest.spec.js +415 -100
  166. package/target/test/xhrCore/ResponseTest.spec.js.map +1 -1
  167. package/target/test/xhrCore/ResponseTest23.spec.js +152 -91
  168. package/target/test/xhrCore/ResponseTest23.spec.js.map +1 -1
  169. package/target/test/xhrCore/ShadowDomTest.spec.js +30 -61
  170. package/target/test/xhrCore/ShadowDomTest.spec.js.map +1 -1
  171. package/target/test/xhrCore/WebsocketTest.js +60 -93
  172. package/target/test/xhrCore/WebsocketTest.js.map +1 -1
  173. package/target/test/xhrCore/XhrFormDataTest.spec.js +79 -30
  174. package/target/test/xhrCore/XhrFormDataTest.spec.js.map +1 -1
  175. package/target/test-classes/.gz +0 -0
  176. package/target/test-classes/com/example/jsfs_js_ts/JsfsJsTsApplicationTests.class +0 -0
  177. package/target/test-classes/fileuploadtest.html +24 -0
  178. package/target/test-classes/jsf-development.js +3559 -0
  179. package/target/test-classes/jsf-development.js.br +0 -0
  180. package/target/test-classes/jsf-development.js.gz +0 -0
  181. package/target/test-classes/jsf-development.js.map +1 -0
  182. package/target/test-classes/jsf.js +3 -0
  183. package/target/test-classes/jsf.js.br +0 -0
  184. package/target/test-classes/jsf.js.gz +0 -0
  185. 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 {XhrFormData} from "../../impl/xhrCore/XhrFormData";
23
- import { expect } from "chai";
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 = new XhrFormData(requestBody);
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 = new XhrFormData(requestBody);
134
+ let formData = getFormData(requestBody);
98
135
 
99
- expect(decodeURIComponent(formData.getIf("jakarta.faces.ViewState").value) == probe).to.be.true;
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 = new XhrFormData(requestBody);
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 = new XhrFormData(requestBody);
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(!!error.status).to.eq(true);
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(!!error.status).to.eq(true);
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