ILIAS  trunk Revision v11.0_alpha-1753-gb21ca8c4367
All Data Structures Namespaces Files Functions Variables Enumerations Enumerator Modules Pages
PCParagraphTest.php
Go to the documentation of this file.
1 <?php
2 
20 
25 {
26  //
27  // test legacy static methods
28  //
29 
30 
34  public function test_input2xmlEmpty(): void
35  {
36  $res = ilPCParagraph::_input2xml("", "en", true, false);
37  $this->assertEquals(
38  "",
39  $res
40  );
41  }
42 
46  public function test_input2xmlValidXml(): void
47  {
48  $cases = [
49  '',
50  'xx',
51  'xx [str]xx[/str] xx',
52  'xx [iln cat="106"] xx',
53  'xx [/iln] xx',
54  ];
55 
56  foreach ($cases as $case) {
57  $text = ilPCParagraph::_input2xml($case, "en", true, false);
58  $use_internal_errors = libxml_use_internal_errors(true);
59  $sxe = simplexml_load_string("<?xml version='1.0'?><dummy>" . $text . "</dummy>");
60  libxml_use_internal_errors($use_internal_errors);
61  $res = true;
62  if ($sxe === false) {
63  $res = $text;
64  }
65  $this->assertEquals(
66  true,
67  $res
68  );
69  }
70  }
71 
75  public function test_input2xmlResult(): void
76  {
77  $cases = [
78  ''
79  => '',
80  'xx'
81  => 'xx',
82 
83  // text mark-up
84  'xx [str]xx[/str] xx'
85  => 'xx <Strong>xx</Strong> xx',
86  'xx [com]xx[/com] xx'
87  => 'xx <Comment>xx</Comment> xx',
88  'xx [emp]xx[/emp] xx'
89  => 'xx <Emph>xx</Emph> xx',
90  'xx [fn]xx[/fn] xx'
91  => 'xx <Footnote>xx</Footnote> xx',
92  'xx [code]xx[/code] xx'
93  => 'xx <Code>xx</Code> xx',
94  'xx [acc]xx[/acc] xx'
95  => 'xx <Accent>xx</Accent> xx',
96  'xx [imp]xx[/imp] xx'
97  => 'xx <Important>xx</Important> xx',
98  'xx [kw]xx[/kw] xx'
99  => 'xx <Keyw>xx</Keyw> xx',
100  'xx [sub]xx[/sub] xx'
101  => 'xx <Sub>xx</Sub> xx',
102  'xx [sup]xx[/sup] xx'
103  => 'xx <Sup>xx</Sup> xx',
104  'xx [quot]xx[/quot] xx'
105  => 'xx <Quotation>xx</Quotation> xx',
106 
107  // internal links
108  'xx [iln cat="106"] xx [/iln] xx'
109  => 'xx <IntLink Target="il__obj_106" Type="RepositoryItem"> xx </IntLink> xx',
110  'xx [iln page="106"] xx [/iln] xx'
111  => 'xx <IntLink Target="il__pg_106" Type="PageObject"> xx </IntLink> xx',
112  'xx [iln page="106"] xx xx'
113  => 'xx xx xx',
114  'xx xx [/iln] xx'
115  => 'xx xx [/iln] xx',
116  'xx [iln chap="106"] xx [/iln] xx'
117  => 'xx <IntLink Target="il__st_106" Type="StructureObject"> xx </IntLink> xx',
118  'xx [iln inst="123" page="106"] xx [/iln] xx'
119  => 'xx <IntLink Target="il_123_pg_106" Type="PageObject"> xx </IntLink> xx',
120  'xx [iln page="106" target="FAQ"] xx [/iln] xx'
121  => 'xx <IntLink Target="il__pg_106" Type="PageObject" TargetFrame="FAQ"> xx </IntLink> xx',
122  'xx [iln page="106" target="New" anchor="test"] xx [/iln] xx'
123  => 'xx <IntLink Target="il__pg_106" Type="PageObject" TargetFrame="New" Anchor="test"> xx </IntLink> xx',
124  'xx [iln term="106"] xx [/iln] xx'
125  => 'xx <IntLink Target="il__git_106" Type="GlossaryItem" TargetFrame="Glossary"> xx </IntLink> xx',
126  'xx [iln term="106" target="New"] xx [/iln] xx'
127  => 'xx <IntLink Target="il__git_106" Type="GlossaryItem" TargetFrame="New"> xx </IntLink> xx',
128  'xx [iln wpage="106"] xx [/iln] xx'
129  => 'xx <IntLink Target="il__wpage_106" Type="WikiPage"> xx </IntLink> xx',
130  'xx [iln wpage="106" anchor="test"] xx [/iln] xx'
131  => 'xx <IntLink Target="il__wpage_106" Type="WikiPage" Anchor="test"> xx </IntLink> xx',
132  'xx [iln ppage="106"] xx [/iln] xx'
133  => 'xx <IntLink Target="il__ppage_106" Type="PortfolioPage"> xx </IntLink> xx',
134  'xx [iln media="545"/] xx '
135  => 'xx <IntLink Target="il__mob_545" Type="MediaObject"/> xx',
136  'xx [iln media="108" target="New"] xx [/iln] xx'
137  => 'xx <IntLink Target="il__mob_108" Type="MediaObject" TargetFrame="New"> xx </IntLink> xx',
138  'xx [iln media="108" target="Media"] xx [/iln] xx'
139  => 'xx <IntLink Target="il__mob_108" Type="MediaObject" TargetFrame="Media"> xx </IntLink> xx',
140  'xx [iln dfile="546"] xx [/iln] xx'
141  => 'xx <IntLink Target="il__dfile_546" Type="File"> xx </IntLink> xx',
142 
143  // returns
144  'xx' . chr(13) . chr(10) . 'yy'
145  => 'xx<br />yy',
146  'xx' . chr(13) . 'yy'
147  => 'xx<br />yy',
148  'xx' . chr(10) . 'yy'
149  => 'xx<br />yy',
150 
151  // lists
152  '<ul class="ilc_list_u_BulletedList"><li class="ilc_list_item_StandardListItem">aa</li><li class="ilc_list_item_StandardListItem">bb</li><li class="ilc_list_item_StandardListItem">cc</li></ul>'
153  => '&lt;ul class="ilc_list_u_BulletedList"&gt;&lt;li class="ilc_list_item_StandardListItem"&gt;aa&lt;/li&gt;&lt;li class="ilc_list_item_StandardListItem"&gt;bb&lt;/li&gt;&lt;li class="ilc_list_item_StandardListItem"&gt;cc&lt;/li&gt;&lt;/ul&gt;',
154 
155  // external links
156  'xx [xln url="http://"][/xln] xxxx'
157  => 'xx xxxx',
158  'xx [xln url="http://ilias.de"]www[/xln] xxxx'
159  => 'xx <ExtLink Href="http://ilias.de">www</ExtLink> xxxx',
160  'xx [xln url="http://ilias.php?x=1&y=2"]www[/xln] xxxx'
161  => 'xx <ExtLink Href="http://ilias.php?x=1&y=2">www</ExtLink> xxxx',
162  'xx [xln url="http://ilias.de/my+document.pdf"]doc[/xln] xxxx'
163  => 'xx <ExtLink Href="http://ilias.de/my+document.pdf">doc</ExtLink> xxxx',
164  'xx [xln url="http://ilias.de/my(document.pdf"]doc[/xln] xxxx'
165  => 'xx <ExtLink Href="http://ilias.de/my(document.pdf">doc</ExtLink> xxxx',
166  'xx [xln url="http://ilias.de/my)document.pdf"]doc[/xln] xxxx'
167  => 'xx <ExtLink Href="http://ilias.de/my)document.pdf">doc</ExtLink> xxxx',
168  'xx [xln url="http://ilias.de/my$document.pdf"]doc[/xln] xxxx'
169  => 'xx <ExtLink Href="http://ilias.de/my$document.pdf">doc</ExtLink> xxxx',
170  'xx [xln url="http://ilias.de/my*document.pdf"]doc[/xln] xxxx'
171  => 'xx <ExtLink Href="http://ilias.de/my*document.pdf">doc</ExtLink> xxxx',
172 
173  // anchor
174  'xx [anc name="test"]test[/anc] xxxx'
175  => 'xx <Anchor Name="test">test</Anchor> xxxx',
176 
177  // marked
178  'xx [marked class="test"]test[/marked] xxxx'
179  => 'xx <Marked Class="test">test</Marked> xxxx',
180 
181  // non-break space
182  "xx \n \xa0 xxxx"
183  => "xx <br /> \xa0 xxxx",
184 
185  'xx [xln url="http://ilias.de/my+document.pdf\xa0"]doc[/xln] xxxx'
186  => 'xx [error: xln url="http://ilias.de/my+document.pdf\xa0"]doc</ExtLink> xxxx',
187 
188  /*'xx [iln cat="106"] xx'
189  => 'xx [iln cat="106"] xx',
190  'xx [/iln] xx'
191  => 'xx [/iln] xx'*/
192  ];
193 
194  foreach ($cases as $in => $expected) {
195  $out = ilPCParagraph::_input2xml($in, "en", true, false);
196  $this->assertEquals(
197  $expected,
198  $out
199  );
200  }
201  }
202 
206  public function testHandleAjaxContentPost(): void
207  {
208  $cases = [
209  '&lt;ul class="ilc_list_u_BulletedList"&gt;&lt;li class="ilc_list_item_StandardListItem"&gt;aa&lt;/li&gt;&lt;li class="ilc_list_item_StandardListItem"&gt;bb&lt;/li&gt;&lt;li class="ilc_list_item_StandardListItem"&gt;cc&lt;/li&gt;&lt;/ul&gt;'
210  => '<SimpleBulletList Class="BulletedList"><SimpleListItem Class="StandardListItem">aa</SimpleListItem><SimpleListItem Class="StandardListItem">bb</SimpleListItem><SimpleListItem Class="StandardListItem">cc</SimpleListItem></SimpleBulletList>',
211  '&lt;ul class="ilc_list_u_BulletedList"&gt;&lt;li class="ilc_list_item_StandardListItem"/&gt;&lt;/ul&gt;'
212  => '<SimpleBulletList Class="BulletedList"><SimpleListItem Class="StandardListItem"></SimpleListItem></SimpleBulletList>'
213  ];
214 
215  foreach ($cases as $in => $expected) {
217  $this->assertEquals(
218  $expected,
219  $out
220  );
221  }
222  }
223 
227  public function testHandleAjaxContentSpans(): void
228  {
229  $cases = [
230  // Standard, Strong
231  '<div id="1:1234" class="ilc_text_block_Standard">xxx<span class="ilc_text_inline_Strong">xxx</span>xxx</div>'
232  => [
233  "text" => 'xxx[str]xxx[/str]xxx',
234  "id" => '1:1234',
235  "class" => 'Standard'
236  ],
237  // Mnemonic, Emphatic
238  '<div id="1:1235" class="ilc_text_block_Mnemonic">xxx<span class="ilc_text_inline_Emph">xxx</span>xxx</div>'
239  => [
240  "text" => 'xxx[emp]xxx[/emp]xxx',
241  "id" => '1:1235',
242  "class" => 'Mnemonic'
243  ],
244  // Headline1, Important
245  '<div id="1:1236" class="ilc_text_block_Headline1">xxx<span class="ilc_text_inline_Important">xxx</span>xxx</div>'
246  => [
247  "text" => 'xxx[imp]xxx[/imp]xxx',
248  "id" => '1:1236',
249  "class" => 'Headline1'
250  ],
251  // Standard, Sup
252  '<div id="1:1237" class="ilc_text_block_Standard">xxx a<sup class="ilc_sup_Sup">b*c</sup> xxx</div>'
253  => [
254  "text" => 'xxx a[sup]b*c[/sup] xxx',
255  "id" => '1:1237',
256  "class" => 'Standard'
257  ],
258  // Standard, Sub
259  '<div id="1:1238" class="ilc_text_block_Standard">xxx a<sub class="ilc_sub_Sub">2</sub> xxx</div>'
260  => [
261  "text" => 'xxx a[sub]2[/sub] xxx',
262  "id" => '1:1238',
263  "class" => 'Standard'
264  ],
265  // Standard, Sup (without class, e.g. coming from word)
266  '<div id="1:1237" class="ilc_text_block_Standard">xxx a<sup>b*c</sup> xxx</div>'
267  => [
268  "text" => 'xxx a[sup]b*c[/sup] xxx',
269  "id" => '1:1237',
270  "class" => 'Standard'
271  ],
272  // Standard, Sub (without class, e.g. coming from word)
273  '<div id="1:1238" class="ilc_text_block_Standard">xxx a<sub>2</sub> xxx</div>'
274  => [
275  "text" => 'xxx a[sub]2[/sub] xxx',
276  "id" => '1:1238',
277  "class" => 'Standard'
278  ],
279  // Headline2, Comment
280  '<div id="1:1239" class="ilc_text_block_Headline2">xxx <span class="ilc_text_inline_Comment">xxx</span> xxx</div>'
281  => [
282  "text" => 'xxx [com]xxx[/com] xxx',
283  "id" => '1:1239',
284  "class" => 'Headline2'
285  ],
286  // Headline3, Comment
287  '<div id="1:1240" class="ilc_text_block_Headline3">xxx <span class="ilc_text_inline_Quotation">xxx</span> xxx</div>'
288  => [
289  "text" => 'xxx [quot]xxx[/quot] xxx',
290  "id" => '1:1240',
291  "class" => 'Headline3'
292  ],
293  // Book, Accent
294  '<div id="1:1241" class="ilc_text_block_Book">xxx <span class="ilc_text_inline_Accent">xxx</span> xxx</div>'
295  => [
296  "text" => 'xxx [acc]xxx[/acc] xxx',
297  "id" => '1:1241',
298  "class" => 'Book'
299  ],
300  // Numbers, Code
301  '<div id="1:1242" class="ilc_text_block_Numbers">xxx <code>xxx</code> xxx</div>'
302  => [
303  "text" => 'xxx [code]xxx[/code] xxx',
304  "id" => '1:1242',
305  "class" => 'Numbers'
306  ],
307  // Verse, Mnemonic
308  '<div id="1:1243" class="ilc_text_block_Verse">xxx <span class="ilc_text_inline_Mnemonic">xxx</span> xxx</div>'
309  => [
310  "text" => 'xxx [marked class="Mnemonic"]xxx[/marked] xxx',
311  "id" => '1:1243',
312  "class" => 'Verse'
313  ],
314  // List, Attention
315  '<div id="1:1244" class="ilc_text_block_List">xxx <span class="ilc_text_inline_Attention">xxx</span> xxx</div>'
316  => [
317  "text" => 'xxx [marked class="Attention"]xxx[/marked] xxx',
318  "id" => '1:1244',
319  "class" => 'List'
320  ],
321  ];
322 
323  foreach ($cases as $in => $expected) {
325  $this->assertEquals(
326  $expected["text"],
327  $out["text"]
328  );
329  $this->assertEquals(
330  $expected["id"],
331  $out["id"]
332  );
333  $this->assertEquals(
334  $expected["class"],
335  $out["class"]
336  );
337  }
338  }
339 
343  public function testHandleAjaxContentLists(): void
344  {
345  $cases = [
346  // List, Bullet
347  '<div id="1:1234" class="ilc_text_block_List"><ul class="ilc_list_u_BulletedList"><li class="ilc_list_item_StandardListItem">one</li><li class="ilc_list_item_StandardListItem">two</li><li class="ilc_list_item_StandardListItem">three</li></ul></div>'
348  => [
349  "text" => '<ul class="ilc_list_u_BulletedList"><li class="ilc_list_item_StandardListItem">one</li><li class="ilc_list_item_StandardListItem">two</li><li class="ilc_list_item_StandardListItem">three</li></ul>',
350  "id" => '1:1234',
351  "class" => 'List'
352  ],
353  // List, Numberd
354  '<div id="1:1235" class="ilc_text_block_List"><ol class="ilc_list_o_NumberedList"><li class="ilc_list_item_StandardListItem">one</li><li class="ilc_list_item_StandardListItem">two</li><li class="ilc_list_item_StandardListItem">three</li></ol></div>'
355  => [
356  "text" => '<ol class="ilc_list_o_NumberedList"><li class="ilc_list_item_StandardListItem">one</li><li class="ilc_list_item_StandardListItem">two</li><li class="ilc_list_item_StandardListItem">three</li></ol>',
357  "id" => '1:1235',
358  "class" => 'List'
359  ],
360  ];
361 
362  foreach ($cases as $in => $expected) {
364  $this->assertEquals(
365  $expected["text"],
366  $out["text"]
367  );
368  $this->assertEquals(
369  $expected["id"],
370  $out["id"]
371  );
372  $this->assertEquals(
373  $expected["class"],
374  $out["class"]
375  );
376  }
377  }
378 
379  //
380  // test basic dom creation
381  //
382 
383  public function testConstruction(): void
384  {
385  $page = $this->getEmptyPageWithDom();
386  $pc = new ilPCParagraph($page);
387  $this->assertEquals(
388  ilPCParagraph::class,
389  get_class($pc)
390  );
391  }
392 
393  public function testCreate(): void
394  {
395  $page = $this->getEmptyPageWithDom();
396  $pc = new ilPCParagraph($page);
397  $pc->create($page, "pg");
398  $this->assertXmlEquals(
399  '<PageObject HierId="pg"><PageContent><Paragraph Language=""></Paragraph></PageContent></PageObject>',
400  $page->getXMLFromDom()
401  );
402  }
403 
404  //
405  // test setTest using legacy (saveJS) way
406  //
407 
408 
409  public function testLegacyHtml2Text(): void
410  {
411  $page = $this->getEmptyPageWithDom();
412  $pc = new ilPCParagraph($page);
413  $pc->create($page, "pg");
414 
415  $cases = [
416  ''
417  => '',
418  'Some text'
419  => 'Some text',
420  'test &amp; the &lt; and the &gt; and the \ also'
421  => 'test &amp;amp; the &amp;lt; and the &amp;gt; and the \ also',
422  'xxx <span class="ilc_text_inline_Strong">xxx</span> xxx'
423  => 'xxx <Strong>xxx</Strong> xxx',
424  ];
425 
426  foreach ($cases as $html => $expected) {
427  $html = '<div id="1:1234" class="ilc_text_block_Standard">' . $html . '</div>';
428  $xml = $this->legacyHtmlToXml($html);
429  $pc->setText($xml, false);
430 
431  $expected = '<PageObject HierId="pg"><PageContent><Paragraph Language="">' . $expected . '</Paragraph></PageContent></PageObject>';
432 
433  $this->assertEquals(
434  $xml,
435  $pc->getText()
436  );
437 
438  $this->assertXmlEquals(
439  $expected,
440  $page->getXMLFromDom()
441  );
442  }
443  }
444 
445  public function testCharacteristic(): void
446  {
447  $page = $this->getEmptyPageWithDom();
448  $pc = new ilPCParagraph($page);
449  $pc->create($page, "pg");
450  $pc->setLanguage("en");
451  $pc->setCharacteristic("MyChar");
452 
453  $this->assertEquals(
454  "MyChar",
455  $pc->getCharacteristic()
456  );
457  $page->stripHierIDs();
458 
459  $expected = <<<EOT
460 <PageObject><PageContent><Paragraph Language="en" Characteristic="MyChar"></Paragraph></PageContent></PageObject>
461 EOT;
462  $this->assertXmlEquals(
463  $expected,
464  $page->getXMLFromDom()
465  );
466  }
467 
468  public function testSubCharacteristic(): void
469  {
470  $page = $this->getEmptyPageWithDom();
471  $pc = new ilPCParagraph($page);
472  $pc->create($page, "pg");
473  $pc->setLanguage("en");
474  $pc->setSubCharacteristic("MySubChar");
475 
476  $this->assertEquals(
477  "MySubChar",
478  $pc->getSubCharacteristic()
479  );
480  $page->stripHierIDs();
481 
482  $expected = <<<EOT
483 <PageObject><PageContent><Paragraph Language="en" SubCharacteristic="MySubChar"></Paragraph></PageContent></PageObject>
484 EOT;
485  $this->assertXmlEquals(
486  $expected,
487  $page->getXMLFromDom()
488  );
489  }
490 
491  public function testAutoIndent(): void
492  {
493  $page = $this->getEmptyPageWithDom();
494  $pc = new ilPCParagraph($page);
495  $pc->create($page, "pg");
496  $pc->setLanguage("en");
497  $pc->setAutoIndent("1");
498 
499  $this->assertEquals(
500  "1",
501  $pc->getAutoIndent()
502  );
503  $page->stripHierIDs();
504 
505  $expected = <<<EOT
506 <PageObject><PageContent><Paragraph Language="en" AutoIndent="1"></Paragraph></PageContent></PageObject>
507 EOT;
508  $this->assertXmlEquals(
509  $expected,
510  $page->getXMLFromDom()
511  );
512  }
513 
514  public function testDownloadTitle(): void
515  {
516  $page = $this->getEmptyPageWithDom();
517  $pc = new ilPCParagraph($page);
518  $pc->create($page, "pg");
519  $pc->setLanguage("en");
520  $pc->setDownloadTitle("title.txt");
521 
522  $this->assertEquals(
523  "title.txt",
524  $pc->getDownloadTitle()
525  );
526  $page->stripHierIDs();
527 
528  $expected = <<<EOT
529 <PageObject><PageContent><Paragraph Language="en" DownloadTitle="title.txt"></Paragraph></PageContent></PageObject>
530 EOT;
531  $this->assertXmlEquals(
532  $expected,
533  $page->getXMLFromDom()
534  );
535  }
536 
537  public function testShowLineNumbers(): void
538  {
539  $page = $this->getEmptyPageWithDom();
540  $pc = new ilPCParagraph($page);
541  $pc->create($page, "pg");
542  $pc->setLanguage("en");
543  $pc->setShowLineNumbers("y");
544 
545  $this->assertEquals(
546  "y",
547  $pc->getShowLineNumbers()
548  );
549  $page->stripHierIDs();
550 
551  $expected = <<<EOT
552 <PageObject><PageContent><Paragraph Language="en" ShowLineNumbers="y"></Paragraph></PageContent></PageObject>
553 EOT;
554  $this->assertXmlEquals(
555  $expected,
556  $page->getXMLFromDom()
557  );
558  }
559 
560  public function testLanguage(): void
561  {
562  $page = $this->getEmptyPageWithDom();
563  $pc = new ilPCParagraph($page);
564  $pc->create($page, "pg");
565  $pc->setLanguage("en");
566 
567  $this->assertEquals(
568  "en",
569  $pc->getLanguage()
570  );
571  $page->stripHierIDs();
572 
573  $expected = <<<EOT
574 <PageObject><PageContent><Paragraph Language="en"></Paragraph></PageContent></PageObject>
575 EOT;
576  $this->assertXmlEquals(
577  $expected,
578  $page->getXMLFromDom()
579  );
580  }
581 }
$res
Definition: ltiservices.php:66
static handleAjaxContent(string $a_content)
Handle ajax content.
test_input2xmlEmpty()
Test _input2xml (empty)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
legacyHtmlToXml(string $content)
test_input2xmlResult()
Test _input2xml.
static handleAjaxContentPost(string $text)
Post input2xml handling of ajax content.
testHandleAjaxContentSpans()
Test HTML to BB transformation, spans.
static _input2xml(string $a_text, string $a_lang, bool $a_wysiwyg=false, bool $a_handle_lists=true)
Converts user input to xml User input comes as bb code information, e.g.
$out
Definition: buildRTE.php:24
testHandleAjaxContentLists()
Test HTML to BB transformation, lists (are not transformed in this first step)
test_input2xmlValidXml()
Test _input2xml for validity.
testHandleAjaxContentPost()
Test handleAjaxContentPost.
assertXmlEquals(string $expected_xml_as_string, string $html_xml_string)