blob: bb28f4a7c0f0bf757e091bce2b6a3dd58e537806 [file] [log] [blame]
hebasta75cfca52019-02-19 13:15:27 +01001/**
hebasta87f1b1f2019-07-30 13:03:23 +02002 * Test suite for guided tour
hebasta75cfca52019-02-19 13:15:27 +01003 *
4 * @author Helge Stallkamp
5 */
6
Helged4b39e52025-11-05 13:35:39 +01007define(['tour/tours', 'vc', 'vc/unspecified', 'session', 'match', 'hint', 'hint/foundries/cnx', 'selectMenu', 'loc/dereko'],
8 function(tourClass, vcClass, docClassUnspec, sessionClass, matchClass, hintClass, hintArray, selectMenuClass){
hebasta75cfca52019-02-19 13:15:27 +01009 const loc = KorAP.Locale;
Helged4b39e52025-11-05 13:35:39 +010010 loc.TOUR_Relations = "malt/d";
11
hebasta0c93d8e2019-05-15 12:06:16 +020012 var introKorAP =
Helged4b39e52025-11-05 13:35:39 +010013 "<nav class='navbar'>" +
14 "<a class='logo' href='/'>" +
15 "<h1>" +
16 "<span>KorAP-HeDeV - Korpusanalyseplattform der nächsten Generation</span>" +
17 "<div class='logoaddon' style='right: 0.1rem;'>HeDeV</div>" +
18 "</h1>" +
19 "</a>" +
20
21 "<div class='navbar-group'>" +
22 "<h3 class='nav-link'><a class='link-guided-tour' href='#'>Tour</a></h3>" +
23 "<h3 class='nav-link'><a class='tutorial' id='view-tutorial'>Hilfe</a></h3>" +
24 "</div>" +
25
26 "<div class='burger-icon show'></div>" +
27 "</nav>" +
28
29 "<header>" +
30 "<form autocomplete='off' action='/' id='searchform'>" +
31
32 "<div id='searchbar'>" +
33 "<input autocapitalize='none' autocomplete='off' autocorrect='off' " +
34 "autofocus='autofocus' id='q-field' name='q' " +
35 "placeholder='Finde ...' spellcheck='false' type='search'>" +
36 "<button type='submit' id='qsubmit' title='Los!'><span>Los!</span></button>" +
37 "</div>" +
38
39 "<div id='vc-view'>" +
40 "<div class='vc'>" +
41 "<div class='builder'>" +
42 "<div class='doc unspecified'><span>⋯</span></div>" +
hebastafa118342021-11-02 19:56:01 +010043 "</div>" +
Helged4b39e52025-11-05 13:35:39 +010044
45 "<div class='action button-view button-group'>" +
46 "<span title='Zuklappen' class='button-icon minimize'>" +
47 "<span>Zuklappen</span>" +
48 "</span>" +
49 "</div>" +
50
51 "<div>" +
52 "<div class='panel vcinfo'>" +
53 "<div></div>" +
54 "<div class='action button-panel vcinfo button-group'>" +
55 "<span title='Korpusstatistik' class='statistic'>" +
56 "<span>Korpusstatistik</span>" +
57 "</span>" +
58 "</div>" +
59 "</div>" +
60 "</div>" +
61 "</div>" +
62
63 "in" +
64 "<span id='vc-choose' class='select'><span>allen Korpora</span></span>" +
65 "<input id='cq' name='cq' type='text' style='display: none;'>" +
66
67 "mit" +
68 "<span class='select'>" +
69 "<select id='ql-field' name='ql' style='display: none;'>" +
hebasta0c93d8e2019-05-15 12:06:16 +020070 "<option value='poliqarp'>Poliqarp</option>" +
71 "<option value='cosmas2'>Cosmas II</option>" +
72 "<option value='annis'>Annis QL</option>" +
73 "<option value='cql'>CQL v1.2</option>" +
74 "<option value='fcsql'>FCSQL</option>" +
Helged4b39e52025-11-05 13:35:39 +010075 "</select>" +
76
77 "<span style='display: inline;'>Poliqarp</span>" +
78 "<ul style='outline: none;' tabindex='0' class='menu roll'>" +
79 "<span class='pref'></span>" +
80 "<div class='lengthField'>" +
81 "<span>Poliqarp--</span>" +
82 "<span>Cosmas II--</span>" +
83 "<span>Annis QL--</span>" +
84 "<span>CQL v1.2--</span>" +
85 "<span>FCSQL--</span>" +
86 "</div>" +
87 "<div class='ruler' style='display: none;'>" +
88 "<span></span><div></div>" +
89 "</div>" +
90 "</ul>" +
91 "</span>" +
92
93 "<div class='button right'>" +
94 "<input checked='checked' class='checkbox' id='q-cutoff-field' " +
95 "name='cutoff' type='checkbox' value='1'>" +
96 "<label for='q-cutoff-field' " +
97 "title='Zeige nur die ersten Treffer in beliebiger Reihenfolge'>" +
98 "<span id='glimpse'></span>Glimpse" +
99 "</label>" +
100 "</div>" +
101
102 "<div class='clear'></div>" +
103 "</div>" +
104 "</form>" +
105 "</header>" +
106
107 "<div class='hint mirror' " +
108 "style='height: 0px; left: 238px; top: 36px; width: 1272px; padding-left: 2px; " +
109 "margin-left: 0px; border-left-width: 2px; border-left-style: solid; " +
110 "font-size: 14.6667px; font-family: Noto Sans;'>" +
111 "<span></span>" +
112 "<div id='hint' class=''>" +
113 "<div style='display: none;' class='alert hint'></div>" +
114 "<ul style='outline: none;' tabindex='0' class='menu roll hint'>" +
115 "<span class='pref'></span>" +
116 "<div class='lengthField'>" +
117 "<span>Base Annotation--</span>" +
118 "<span class='desc'>Structure--</span>" +
119 "<span>DeReKo--</span>" +
120 "<span class='desc'>Structure--</span>" +
121 "</div>" +
122 "<div class='ruler' style='display: none;'>" +
123 "<span></span><div></div>" +
124 "</div>" +
125 "</ul>" +
126 "</div>" +
127 "</div>";
128
hebasta94e47cb2019-07-24 22:24:27 +0200129 var preDefinedStat={
130 "documents":12,
131 "tokens":2323,
132 "sentences":343434,
133 "paragraphs":45454545
134 };
135
136
137 KorAP.API.getCorpStat = function(collQu, cb){
138 return cb(preDefinedStat);
139 };
140
Helged4b39e52025-11-05 13:35:39 +0100141
142 var noresultkorap =
Helge0115e7e2025-03-24 16:10:24 +0100143 "<div id='search' class=''>" +
144 "<div class='panel result'><div></div></div></div>" +
145 "<p class='no-results'>Unable to perform the action.</p>" +
146 "</div>";
147
hebasta87f1b1f2019-07-30 13:03:23 +0200148 var resultkorap =
149 "<div id='search'>" +
150 "<ol class='align-left' tabindex='-8'>" +
151 "<li data-corpus-id='WPD' " +
152 "data-doc-id='WWW'" +
153 "data-text-id='03313'" +
154 "data-match-id='p102-103'" +
155 "data-available-info='base/s=spans corenlp/c=spans corenlp/ne=tokens corenlp/p=tokens corenlp/s=spans glemm/l=tokens mate/l=tokens mate/m=tokens mate/p=tokens opennlp/p=tokens opennlp/s=spans tt/l=tokens tt/p=tokens tt/s=spans xip/c=spans malt/d=rels'"+
156 "id='WPD-WWW.03313-p102-103'" +
157 "tabindex='6'>" +
158 "<div class='meta'>WPD/WWW/03313</div>" +
159 "<div class='match-main'>" +
160 "<div class='match-wrap'>" +
161 "<div class='snippet startMore endMore'>" +
162 "<div class='flag'></div>" +
163 "<span class='context-left'>In diesem Beispiel ist zu sehen, dass die beiden Variablen a und b lediglich ihre Werte an" +
164 " die Funktion </span><mark><mark class='class-2 level-1'>Dies </mark><mark class='class-1 level-0'><mark class='class-2 level-1'><mark class='class-3 level-2'>ist</mark>" +
165 " ein</mark> Test</mark></mark><span class='context-right'> übergeben, aber im Gegensatz zu einem Referenzparamter dabei unverändert bleiben.</span></div>" +
166 "</div>"+
167 "<!-- only inject via javascript! -->" +
168 "</div>" +
169 "<p class='ref'><strong>Wertparameter</strong> by Hubi,Zwobot,4; published on 2005-03-28 as WWW.03313 (WPD)</p>" +
170 "<!-- only inject via javascript! -->" +
171 "</li>" +
172 "</div>";
173
174
175
176 var snippet = "<span title=\"cnx/l:meist\">" +
177 " <span title=\"cnx/p:ADV\">" +
178 " <span title=\"cnx/syn:@PREMOD\">" +
179 " <span title=\"mate/l:meist\">" +
180 " <span title=\"mate/l:meist\">" +
181 " <span title=\"mate/p:ADV\">" +
182 " <span title=\"opennlp/p:ADV\">meist</span>" +
183 " </span>" +
184 " </span>" +
185 " </span>" +
186 " </span>" +
187 " </span>" +
188 "</span>" +
189 "<mark>" +
190 "<span title=\"cnx/l:deutlich\">" +
191 " <span title=\"cnx/p:A\">" +
192 " <span title=\"cnx/syn:@PREMOD\">" +
193 " <span title=\"mate/l:deutlich\">" +
194 " <span title=\"mate/m:degree:pos\">" +
195 " <span title=\"mate/p:ADJD\">" +
196 " <span title=\"opennlp/p:ADJD\">deutlich</span>" +
197 " </span>" +
198 " </span>" +
199 " </span>" +
200 " </span>" +
201 " </span>" +
202 "</span>" +
203 "</mark>" +
204 "<span title=\"cnx/l:fähig\">" +
205 " <span title=\"cnx/l:leistung\">" +
206 " <span title=\"cnx/p:A\">" +
207 " <span title=\"cnx/p:ADJA\">" +
208 " <span title=\"cnx/syn:@NH\">" +
209 " <span title=\"mate/l:leistungsfähig\">" +
210 " <span title=\"mate/m:degree:comp\">" +
211 " <span title=\"mate/p:ADJD\">" +
212 " <span title=\"opennlp/p:ADJD\">leistungsfähiger</span>" +
213 " </span>" +
214 " </span>" +
215 " </span>" +
216 " </span>" +
217 " </span>" +
218 " </span>" +
219 " </span>" +
220 "</span>";
221
222 var treeSnippet =
223 "<span class=\"context-left\"></span>" +
224 "<span class=\"match\">" +
225 " <span title=\"xip/c:MC\">" +
226 " <span title=\"xip/c:TOP\">" +
227 " <span title=\"xip/c:PP\">" +
228 " <span title=\"xip/c:PREP\">Mit</span>" +
229 " <span title=\"xip/c:NP\">" +
230 " <span title=\"xip/c:DET\">dieser</span>" +
231 " <span title=\"xip/c:NPA\">" +
232 " <span title=\"xip/c:NOUN\">Methode</span>" +
233 " </span>" +
234 " </span>" +
235 " </span>" +
236 " <span title=\"xip/c:VERB\">ist</span>" +
237 " <mark>" +
238 " <span title=\"xip/c:NP\">" +
239 " <span title=\"xip/c:PRON\">es</span>" +
240 " </span>" +
241 " <span title=\"xip/c:AP\">" +
242 " <span title=\"xip/c:ADV\">nun</span>" +
243 " <span title=\"xip/c:ADJ\">möglich</span>" +
244 " </span>" +
245 " </mark>" +
246 " <span title=\"xip/c:ADV\">z. B.</span>" +
247 " <span title=\"xip/c:NPA\">" +
248 " <span title=\"xip/c:NP\">" +
249 " <span title=\"xip/c:NOUN\">Voice</span>" +
250 " </span>" +
251 " </span>" + "(" +
252 " <span title=\"xip/c:INS\">" +
253 " <span title=\"xip/c:NPA\">" +
254 " <span title=\"xip/c:NP\">" +
255 " <span title=\"xip/c:NOUN\">Sprache</span>" +
256 " </span>" +
257 " </span>" +
258 " </span>" + ")" +
259 " <span title=\"xip/c:VERB\">bevorzugt</span>" +
260 " <span title=\"xip/c:PP\">" +
261 " <span title=\"xip/c:PREP\">in</span>" +
262 " <span title=\"xip/c:NP\">" +
263 " <span title=\"xip/c:PRON\">der</span>" +
264 " </span>" +
265 " <span title=\"xip/c:NPA\">" +
266 " <span title=\"xip/c:NP\">" +
267 " <span title=\"xip/c:NOUN\">Bridge</span>" +
268 " </span>" +
269 " </span>" +
270 " </span>" +
271 " <span title=\"xip/c:INFC\">" +
272 " <span title=\"xip/c:INS\">" +
273 " <span title=\"xip/c:VERB\">weiterzugeben</span>" +
274 " </span>" +
275 " </span>" +
276 " </span>" +
277 " </span>" +
278 "</span>" +
279 "<span class=\"context-right\"></span>";
280
281 KorAP.API.getTextInfo = function (doc, param, cb) {
282 cb(textInfo);
283 };
284
285 // Override getMatchInfo API call
286 KorAP.API.getMatchInfo = function (x, param, cb) {
287 if (param['spans'] === undefined || param['spans'] === false)
288 cb({ "snippet": snippet });
289 else
290 cb({ "snippet": treeSnippet });
291 };
292
293 var textInfo = {
294 "@context":"http:\/\/korap.ids-mannheim.de\/ns\/KoralQuery\/v0.3\/context.jsonld",
295 "document":{
296 "@type":"koral:document",
297 "fields":[
298 {
299 "@type":"koral:field",
300 "key":"editor",
301 "type":"type:store",
302 "value":"wikipedia.org"
303 },
304 {
305 "@type":"koral:field",
306 "key":"textSigle",
307 "type":"type:string",
308 "value":"WPD15\/264\/58336"
309 },
310 {
311 "@type":"koral:field",
312 "key":"author",
313 "type":"type:text",
314 "value":"Sprachpfleger, u.a."
315 },
316 {
317 "@type":"koral:field",
318 "key":"docSigle",
319 "type":"type:string",
320 "value":"WPD15\/264"
321 },
322 {
323 "@type":"koral:field",
324 "key":"textTypeArt",
325 "type":"type:string",
326 "value":"Enzyklopädie-Artikel"
327 },
328 {
329 "@type":"koral:field",
330 "key":"language",
331 "type":"type:string",
332 "value":"de"
333 },
334 {
335 "@type":"koral:field",
336 "key":"docTitle",
337 "type":"type:text",
338 "value":"Wikipedia, Artikel mit Anfangszahl 2, Teil 64"
339 },
340 {
341 "@type":"koral:field",
342 "key":"textType",
343 "type":"type:string",
344 "value":"Enzyklopädie"
345 },
346 {
347 "@type":"koral:field",
348 "key":"availability",
349 "type":"type:string",
350 "value":"CC-BY-SA"
351 },
352 {
353 "@type":"koral:field",
354 "key":"foundries",
355 "type":"type:keywords",
356 "value":[
357 "corenlp",
358 "corenlp\/constituency",
359 "corenlp\/morpho",
360 "corenlp\/sentences",
361 "dereko",
362 "dereko\/structure",
363 "dereko\/structure\/base-sentences-paragraphs-pagebreaks",
364 "opennlp",
365 "opennlp\/morpho",
366 "opennlp\/sentences"
367 ]
368 },
369 {
370 "@type":"koral:field",
371 "key":"creationDate",
372 "type":"type:date",
373 "value":"2015-04-17"
374 },
375 {
376 "@type":"koral:field",
377 "key":"title",
378 "type":"type:text",
379 "value":"22:43 – Das Schicksal hat einen Plan"
380 },
381 {
382 "@type":"koral:field",
383 "key":"pubDate",
384 "type":"type:date",
385 "value":"2015-05-01"
386 },
387 {
388 "@type":"koral:field",
389 "key":"reference",
390 "type":"type:store",
391 "value":"22:43 – Das Schicksal hat einen Plan, In: Wikipedia - URL:http:\/\/de.wikipedia.org\/wiki\/22:43_–_Das_Schicksal_hat_einen_Plan: Wikipedia, 2015"
392 },
393 {
394 "@type":"koral:field",
395 "key":"textClass",
396 "type":"type:keywords",
397 "value":["kultur","film"]
398 },
399 {
400 "@type":"koral:field",
401 "key":"tokenSource",
402 "type":"type:store",
403 "value":"base#tokens"
404 },
405 {
406 "@type":"koral:field",
407 "key":"publisher",
408 "type":"type:store",
409 "value":"Wikipedia"
410 },
411 {
412 "@type":"koral:field",
413 "key":"layerInfos",
414 "type":"type:store",
415 "value":"corenlp\/c=spans corenlp\/p=tokens corenlp\/s=spans dereko\/s=spans opennlp\/p=tokens opennlp\/s=spans"
416 },
417 {
418 "@type":"koral:field",
419 "key":"pubPlace",
420 "type":"type:string",
421 "value":"URL:http:\/\/de.wikipedia.org"
422 },
423 {
424 "@type":"koral:field",
425 "key":"corpusTitle",
426 "type":"type:text",
427 "value":"Wikipedia"
428 },
429 {
430 "@type":"koral:field",
431 "key":"corpusEditor",
432 "type":"type:store",
433 "value":"wikipedia.org"
434 },
435 {
436 "@type":"koral:field",
437 "key":"corpusSigle",
438 "type":"type:string",
439 "value":"WPD15"
440 }
441 ]
442 }
443 };
hebasta75cfca52019-02-19 13:15:27 +0100444 let template = document.createElement('template');
hebasta94e47cb2019-07-24 22:24:27 +0200445 let html = introKorAP.trim(); // Do not return a text node of whitespace as the result
hebasta75cfca52019-02-19 13:15:27 +0100446 template.innerHTML = html;
hebasta94e47cb2019-07-24 22:24:27 +0200447 let intrkorap = template.content;
hebasta75cfca52019-02-19 13:15:27 +0100448
hebasta87f1b1f2019-07-30 13:03:23 +0200449 let resulttemplate = document.createElement('template');
450 let htmlZwei = resultkorap.trim();
451 resulttemplate.innerHTML = resultkorap;
452 var resultkor = resulttemplate.content;
Helge0115e7e2025-03-24 16:10:24 +0100453
454 let noresulttemplate = document.createElement('template');
455 noresultkorap.trim();
456 noresulttemplate.innerHTML = noresultkorap;
457 var noresultkor = noresulttemplate.content;
hebasta87f1b1f2019-07-30 13:03:23 +0200458
459 resultkor.querySelector('#search > ol > li:not(.active)').addEventListener('click', function (e) {
460 if (this._match !== undefined)
461 this._match.open();
462 else {
463 matchClass.create(this).open();
464 }
465 });
466
hebasta94e47cb2019-07-24 22:24:27 +0200467 let vc= vcClass.create().fromJson({
468 '@type' : 'koral:doc',
469 'key' : 'title',
470 'match': 'match:eq',
471 'value' : 'TestTour!',
472 'type' : 'type:string'
473 });
474
475 KorAP.vc = vc;
Helged4b39e52025-11-05 13:35:39 +0100476
hebasta75cfca52019-02-19 13:15:27 +0100477 describe('KorAP.GuidedTour', function(){
hebasta87f1b1f2019-07-30 13:03:23 +0200478
479 afterAll(function () {
480 KorAP.API.getMatchInfo = undefined;
481 var body = document.body;
482 var i = body.children.length - 1;
483 while (i >= 0) {
484 if (body.children[i].nodeType && body.children[i].nodeType === 1) {
485 if (!body.children[i].classList.contains("jasmine_html-reporter")) {
486 body.removeChild(body.children[i]);
487 };
488 };
489 i--;
490 };
491 })
hebastaf95226b2019-09-19 11:37:00 +0200492
493 KorAP.Hint = hintClass.create({inputField: intrkorap.getElementById("q-field")});
494
hebastafa118342021-11-02 19:56:01 +0100495
hebasta75cfca52019-02-19 13:15:27 +0100496 it('IDs and classes, that are needed for the guided tour should be in existence', function(){
hebasta87f1b1f2019-07-30 13:03:23 +0200497 //gTstartSearch
hebasta75cfca52019-02-19 13:15:27 +0100498 expect(intrkorap.querySelector('#searchbar')).not.toBeNull();
499 expect(intrkorap.querySelector('#q-field')).not.toBeNull();
hebasta0c93d8e2019-05-15 12:06:16 +0200500 expect(intrkorap.querySelector('#hint')).not.toBeNull();
501 expect(intrkorap.querySelector('#vc-choose')).not.toBeNull();
hebasta75cfca52019-02-19 13:15:27 +0100502 expect(intrkorap.querySelector('#vc-view')).not.toBeNull();
hebastafa118342021-11-02 19:56:01 +0100503 expect(intrkorap.querySelector('#vc-view * .doc')).not.toBeNull();
hebasta75cfca52019-02-19 13:15:27 +0100504 expect(intrkorap.querySelector('#ql-field').parentNode).not.toBeNull();
hebastabd53f822021-10-26 21:50:06 +0200505 expect(intrkorap.querySelector('#glimpse').parentNode).not.toBeNull();
hebasta75cfca52019-02-19 13:15:27 +0100506 expect(intrkorap.querySelector('#view-tutorial')).not.toBeNull();
hebasta5df796f2019-05-21 15:27:12 +0200507 expect(intrkorap.querySelector('#qsubmit')).not.toBeNull();
hebasta94e47cb2019-07-24 22:24:27 +0200508 let show = document.createElement('div');
hebastad090a512019-07-10 16:36:01 +0200509 show.appendChild(vc.element());
hebasta94e47cb2019-07-24 22:24:27 +0200510 let statbut = show.querySelector('.statistic');
511 expect(statbut).not.toBeNull();
512 statbut.click();
513 expect(show.querySelector('.stattable')).not.toBeNull();
hebastafa118342021-11-02 19:56:01 +0100514 let docUnspec = document.createElement('div');
515 let doc = docClassUnspec.create();
516 docUnspec.append(doc.element());
517 let vcbut = docUnspec.querySelector('.doc > span');
518 vcbut.click();
519 expect(docUnspec.querySelector('.menu.roll')).not.toBeNull();
520
hebasta87f1b1f2019-07-30 13:03:23 +0200521 //IDs and classes, that are needed for the second guided tour(gTshowResults()) should be in existence, too
522 expect(resultkor.querySelector('#search')).not.toBeNull();
523 expect(resultkor.querySelector('#search > ol > li')).not.toBeNull();
524 resultkor.querySelector("#search > ol > li").click();
525 expect(resultkor.querySelector('.action > .metatable')).not.toBeNull();
526 resultkor.querySelector(".metatable").click();
527 expect(resultkor.querySelector('.view.metatable')).not.toBeNull();
528 expect(resultkor.querySelector('.action > .info')).not.toBeNull();
529 resultkor.querySelector(".info").click();
530 expect(resultkor.querySelector('.view.tokentable')).not.toBeNull();
531 expect(resultkor.querySelector('.tree')).not.toBeNull();
hebastafa118342021-11-02 19:56:01 +0100532
hebasta75cfca52019-02-19 13:15:27 +0100533 });
Helged4b39e52025-11-05 13:35:39 +0100534
hebasta75cfca52019-02-19 13:15:27 +0100535 it('Guided Tour should be started and display steps and labels in the right order', function(){
Helged4b39e52025-11-05 13:35:39 +0100536
hebasta94e47cb2019-07-24 22:24:27 +0200537 let vcpanel = intrkorap.getElementById("vc-view");
538 vcpanel.appendChild(vc.element());
hebasta5df796f2019-05-21 15:27:12 +0200539 let searchTour = tourClass.gTstartSearch(intrkorap);
540 searchTour.start();
541 let totalSteps = searchTour.stepCount;
hebasta1e2d98e2019-10-30 15:58:17 +0100542 let welc = document.createElement("DIV");
543 welc.innerHTML = loc.TOUR_welc;
544 expect(document.querySelector(".introjs-tooltiptext").textContent).toEqual(welc.textContent);
hebasta75cfca52019-02-19 13:15:27 +0100545 expect(document.querySelector(".introjs-prevbutton").textContent).toEqual(loc.TOUR_lprev);
546 expect(document.querySelector(".introjs-nextbutton").textContent).toEqual(loc.TOUR_lnext);
hebastaa84c7a92021-10-26 21:12:40 +0200547 expect(document.querySelector(".introjs-skipbutton")).toBeDefined();
hebasta5df796f2019-05-21 15:27:12 +0200548 searchTour.exit();
hebasta75cfca52019-02-19 13:15:27 +0100549
hebastafa118342021-11-02 19:56:01 +0100550 let show = document.createElement('div');
551 show.appendChild(vc.element());
552 let statbut = show.querySelector('.statistic');
553 statbut.click();
554 let corpstat = show.querySelector('.stattable');
555 intrkorap.appendChild(corpstat);
556
hebasta75cfca52019-02-19 13:15:27 +0100557 for(let i = 2; i <= totalSteps; i++){
hebasta5df796f2019-05-21 15:27:12 +0200558 searchTour.goToStepNumber(i);
hebastaf898d7b2021-12-06 14:32:06 +0100559 if(i ==3){
560 //Test for equality. Ignore HTML-Tags, replace down arrow.
561 expect(document.querySelector(".introjs-tooltiptext").textContent).toEqual((searchTour.testIntros[i-1]).replace(/(<([^>]+)>)/ig,"").replace("&darr;","↓"));
562 }
563 else{
564 //Test for equality. Ignore HTML-Tags.
565 expect(document.querySelector(".introjs-tooltiptext").textContent).toEqual((searchTour.testIntros[i-1]).replace(/(<([^>]+)>)/ig,""));
566 }
hebastaf95226b2019-09-19 11:37:00 +0200567 switch(i){
hebastaee7b8a82020-01-20 12:45:04 +0100568 case 4:
hebastafa118342021-11-02 19:56:01 +0100569 expect(intrkorap.querySelector('#hint')).not.toBeNull();
570 expect(KorAP.Hint).not.toBeNull();
571 expect(KorAP.Hint.active().dontHide).toBe(true);
572 expect(KorAP.Hint._active).not.toBeNull();
573 break;
hebastaee7b8a82020-01-20 12:45:04 +0100574 case 5:
hebastafa118342021-11-02 19:56:01 +0100575 expect(KorAP.Hint._active).toBeNull();
576 break;
577 case 6:
578 expect(KorAP._vcKeyMenu.dontHide).toBe(false);
579 break;
580 case 7:
581 expect(KorAP._vcKeyMenu.dontHide).toBe(true);
582 break;
583 case 8:
584 expect(KorAP._vcKeyMenu.dontHide).toBe(false);
Helged4b39e52025-11-05 13:35:39 +0100585
hebastafa118342021-11-02 19:56:01 +0100586 break;
hebastaf95226b2019-09-19 11:37:00 +0200587 case totalSteps:
hebastafa118342021-11-02 19:56:01 +0100588 expect(document.querySelector(".introjs-donebutton").textContent).toEqual(loc.TOUR_ldoneSearch);
589 expect(document.querySelector(".introjs-prevbutton").textContent).toEqual(loc.TOUR_lprev);
590 expect(document.querySelector(".introjs-skipbutton")).toBeDefined();
591 break;
hebastaf95226b2019-09-19 11:37:00 +0200592 }
hebasta5df796f2019-05-21 15:27:12 +0200593 searchTour.exit();
hebastafa118342021-11-02 19:56:01 +0100594 }
Helged4b39e52025-11-05 13:35:39 +0100595
596
hebasta87f1b1f2019-07-30 13:03:23 +0200597 let resultTour = tourClass.gTshowResults(resultkor);
hebasta5df796f2019-05-21 15:27:12 +0200598 KorAP.session = sessionClass.create('KalamarJSDem');
hebastaf95226b2019-09-19 11:37:00 +0200599
hebasta87f1b1f2019-07-30 13:03:23 +0200600 resultTour.start(resultkor);
601 let totalStepsR = resultTour.stepCount;
602 expect(document.querySelector(".introjs-tooltiptext").textContent).toEqual(loc.TOUR_kwic);
hebasta87f1b1f2019-07-30 13:03:23 +0200603 expect(document.querySelector(".introjs-prevbutton").textContent).toEqual(loc.TOUR_lprev);
604 expect(document.querySelector(".introjs-nextbutton").textContent).toEqual(loc.TOUR_lnext);
hebastaa84c7a92021-10-26 21:12:40 +0200605 expect(document.querySelector(".introjs-skipbutton")).toBeDefined();
hebasta5df796f2019-05-21 15:27:12 +0200606 resultTour.exit();
Helged4b39e52025-11-05 13:35:39 +0100607
hebastaf95226b2019-09-19 11:37:00 +0200608 for(let i = 2; i <= totalStepsR; i++){
hebasta87f1b1f2019-07-30 13:03:23 +0200609 resultTour.goToStepNumber(i);
610 expect(document.querySelector(".introjs-tooltiptext").textContent).toEqual(resultTour.testIntros[i-1]);
611 if(i == totalStepsR){
Helged4b39e52025-11-05 13:35:39 +0100612 expect(document.querySelector(".introjs-donebutton").textContent).toEqual(loc.TOUR_ldone);
613 }
hebasta87f1b1f2019-07-30 13:03:23 +0200614 resultTour.exit();
615 }
616 });
Helge0115e7e2025-03-24 16:10:24 +0100617
618 it('Guided Tour should gracefully stop, if no results are retrieved', function(){
619 let resultTour = tourClass.gTshowResults(noresultkor);
620 KorAP.session = sessionClass.create('KalamarJSDem');
621 resultTour.start(noresultkor);
622 expect(document.querySelector(".introjs-donebutton").textContent).toEqual(loc.TOUR_ldone);
623 resultTour.exit();
624 });
625
hebastafa118342021-11-02 19:56:01 +0100626 it('Guided Tour should hide Hint if aborted', function(){
hebastaf95226b2019-09-19 11:37:00 +0200627 let tourAbort = tourClass.gTstartSearch(intrkorap);
628 tourAbort.start();
629 expect(KorAP.Hint._active).toBeNull();
630 expect(document.querySelector(".introjs-skipbutton")).not.toBeNull();
hebastaee7b8a82020-01-20 12:45:04 +0100631 tourAbort.goToStepNumber(4);
hebastaf95226b2019-09-19 11:37:00 +0200632 expect(KorAP.Hint._active).not.toBeNull()
633 expect(KorAP.Hint.active().dontHide).toBe(true);
634 tourAbort.exit();
635 expect(KorAP.Hint._active).toBeNull();
636 });
hebastafa118342021-11-02 19:56:01 +0100637
638 it('Guided Tour should hide vcKeyMenu if aborted', function(){
639 let tourAbort = tourClass.gTstartSearch(intrkorap);
640 tourAbort.start();
641 expect(KorAP._vcKeyMenu.dontHide).toBe(false);
642 tourAbort.goToStepNumber(6);
643 expect(KorAP._vcKeyMenu.dontHide).toBe(false);
644 tourAbort.goToStepNumber(7);
645 expect(KorAP._vcKeyMenu.dontHide).toBe(true);
646 tourAbort.exit();
647 expect(KorAP._vcKeyMenu.dontHide).toBe(false);
648 });
649
650 it('Guided Tour should hide vcKeyMenu in the next step ', function(){
651 let tourNext = tourClass.gTstartSearch(intrkorap);
652 tourNext.start();
653 expect(KorAP._vcKeyMenu.dontHide).toBe(false);
654 tourNext.goToStepNumber(7);
655 expect(KorAP._vcKeyMenu.dontHide).toBe(true);
656 tourNext.goToStepNumber(8);
657 expect(KorAP._vcKeyMenu.dontHide).toBe(false);
658 });
659
660
hebastaf95226b2019-09-19 11:37:00 +0200661
hebasta75cfca52019-02-19 13:15:27 +0100662 });
hebasta87f1b1f2019-07-30 13:03:23 +0200663});