PageRenderTime 37ms CodeModel.GetById 13ms RepoModel.GetById 0ms app.codeStats 0ms

/lib/test/core/WikiParser/OutputLinkTest.php

https://gitlab.com/ElvisAns/tiki
PHP | 280 lines | 215 code | 48 blank | 17 comment | 1 complexity | d2a26a874d3912b2c17adb6ad6f17941 MD5 | raw file
  1. <?php
  2. // (c) Copyright by authors of the Tiki Wiki CMS Groupware Project
  3. //
  4. // All Rights Reserved. See copyright.txt for details and a complete list of authors.
  5. // Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details.
  6. // $Id$
  7. class WikiParser_OutputLinkTest extends TikiTestCase
  8. {
  9. private $info;
  10. protected function setUp(): void
  11. {
  12. $this->info = [];
  13. }
  14. public function testCreateLink()
  15. {
  16. // ((Test)) on missing page
  17. $link = new WikiParser_OutputLink();
  18. $link->setIdentifier('Test');
  19. $this->assertLinkIs('<a href="tiki-editpage.php?page=Test" title="Create page: Test" class="wiki wikinew text-danger tips">Test</a>', $link->getHtml());
  20. }
  21. public function testCreateLinkWithLanguage()
  22. {
  23. // ((Test)) on missing page, with multilingual specified
  24. $link = new WikiParser_OutputLink();
  25. $link->setIdentifier('Test');
  26. $link->setLanguage('fr');
  27. $this->assertLinkIs('<a href="tiki-editpage.php?page=Test&lang=fr" title="Create page: Test" class="wiki wikinew text-danger tips">Test</a>', $link->getHtml());
  28. }
  29. public function testCreateLinkWithDescription()
  30. {
  31. // ((Test|Hello World))
  32. $link = new WikiParser_OutputLink();
  33. $link->setIdentifier('Test');
  34. $link->setDescription('Hello World');
  35. $this->assertLinkIs('<a href="tiki-editpage.php?page=Test" title="Create page: Test" class="wiki wikinew text-danger tips">Hello World</a>', $link->getHtml());
  36. }
  37. public function testCreateLinkWithRelationType()
  38. {
  39. // (real(Test))
  40. $link = new WikiParser_OutputLink();
  41. $link->setIdentifier('Test');
  42. $link->setQualifier('real');
  43. $this->assertLinkIs('<a href="tiki-editpage.php?page=Test" title="Create page: Test" class="wiki wikinew text-danger tips real">Test</a>', $link->getHtml());
  44. }
  45. public function testCreateLinkWithVeryBigName()
  46. {
  47. // If page name exceeds 158 characters, it must be trimmed.
  48. // Link will be to trimmed page while displayed text will be full name
  49. $link = new WikiParser_OutputLink();
  50. $link->setIdentifier('TestWithAVeryBigNameThatExceedsTheColumnSizeOfTheDatabaseTestWithAVeryBigNameThatExceedsTheColumnSizeOfTheDatabaseTestWithAVeryBigNameThatExceedsTheColumnSizeOfTheDatabaseTestWithAVeryBigNameThatExceedsTheColumnSizeOfTheDatabase');
  51. $this->assertLinkIs('<a href="tiki-editpage.php?page=TestWithAVeryBigNameThatExceedsTheColumnSizeOfTheDatabaseTestWithAVeryBigNameThatExceedsTheColumnSizeOfTheDatabaseTestWithAVeryBigNameThatExceedsTheColumnSize" title="Create page: TestWithAVeryBigNameThatExceedsTheColumnSizeOfTheDatabaseTestWithAVeryBigNameThatExceedsTheColumnSizeOfTheDatabaseTestWithAVeryBigNameThatExceedsTheColumnSize" class="wiki wikinew text-danger tips">TestWithAVeryBigNameThatExceedsTheColumnSizeOfTheDatabaseTestWithAVeryBigNameThatExceedsTheColumnSizeOfTheDatabaseTestWithAVeryBigNameThatExceedsTheColumnSizeOfTheDatabaseTestWithAVeryBigNameThatExceedsTheColumnSizeOfTheDatabase</a>', $link->getHtml());
  52. }
  53. public function testCreateExistingLinkWithVeryBigName()
  54. {
  55. // If page name exceeds 158 characters, it must be trimmed.
  56. // Link will be to trimmed page while displayed text will be full name
  57. $this->info['TestWithAVeryBigNameThatExceedsTheColumnSizeOfTheDatabaseTestWithAVeryBigNameThatExceedsTheColumnSizeOfTheDatabaseTestWithAVeryBigNameThatExceedsTheColumnSize'] = [
  58. 'pageName' => 'TestWithAVeryBigNameThatExceedsTheColumnSizeOfTheDatabaseTestWithAVeryBigNameThatExceedsTheColumnSizeOfTheDatabaseTestWithAVeryBigNameThatExceedsTheColumnSize',
  59. 'description' => 'Testing',
  60. 'lastModif' => 1234567890,
  61. ];
  62. $link = new WikiParser_OutputLink();
  63. $link->setIdentifier('TestWithAVeryBigNameThatExceedsTheColumnSizeOfTheDatabaseTestWithAVeryBigNameThatExceedsTheColumnSizeOfTheDatabaseTestWithAVeryBigNameThatExceedsTheColumnSizeTHISMUSTBETRIMMED');
  64. $link->setWikiLookup([$this, 'getPageInfo']);
  65. $link->setWikiLinkBuilder([$this, 'getWikiLink']);
  66. $this->assertLinkIs('<a href="TestWithAVeryBigNameThatExceedsTheColumnSizeOfTheDatabaseTestWithAVeryBigNameThatExceedsTheColumnSizeOfTheDatabaseTestWithAVeryBigNameThatExceedsTheColumnSize" title="Testing" class="wiki wiki_page">TestWithAVeryBigNameThatExceedsTheColumnSizeOfTheDatabaseTestWithAVeryBigNameThatExceedsTheColumnSizeOfTheDatabaseTestWithAVeryBigNameThatExceedsTheColumnSizeTHISMUSTBETRIMMED</a>', $link->getHtml());
  67. }
  68. public function testPageDoesExist()
  69. {
  70. $this->info['Test'] = [
  71. 'pageName' => 'Test',
  72. 'description' => 'Testing',
  73. 'lastModif' => 1234567890,
  74. ];
  75. $link = new WikiParser_OutputLink();
  76. $link->setIdentifier('Test');
  77. $link->setWikiLookup([$this, 'getPageInfo']);
  78. $link->setWikiLinkBuilder([$this, 'getWikiLink']);
  79. $this->assertLinkIs('<a href="Test" title="Testing" class="wiki wiki_page">Test</a>', $link->getHtml());
  80. }
  81. public function testInfoFunctionProvidesAlias()
  82. {
  83. $this->info['Test'] = [
  84. 'pageName' => 'Test1.2',
  85. 'description' => 'Testing',
  86. 'lastModif' => 1234567890,
  87. ];
  88. $link = new WikiParser_OutputLink();
  89. $link->setIdentifier('Test');
  90. $link->setWikiLookup([$this, 'getPageInfo']);
  91. $link->setWikiLinkBuilder([$this, 'getWikiLink']);
  92. $this->assertLinkIs('<a href="Test1.2" title="Testing" class="wiki wiki_page">Test</a>', $link->getHtml());
  93. }
  94. public function testExistsWithRelType()
  95. {
  96. $this->info['Test'] = [
  97. 'pageName' => 'Test',
  98. 'description' => 'Testing',
  99. 'lastModif' => 1234567890,
  100. ];
  101. $link = new WikiParser_OutputLink();
  102. $link->setIdentifier('Test');
  103. $link->setQualifier('abc');
  104. $link->setWikiLookup([$this, 'getPageInfo']);
  105. $link->setWikiLinkBuilder([$this, 'getWikiLink']);
  106. $this->assertLinkIs('<a href="Test" title="Testing" class="wiki wiki_page abc">Test</a>', $link->getHtml());
  107. }
  108. public function testUndefinedExternalLink()
  109. {
  110. $link = new WikiParser_OutputLink();
  111. $link->setIdentifier('out:Test');
  112. $link->setWikiLookup([$this, 'getPageInfo']);
  113. $link->setWikiLinkBuilder([$this, 'getWikiLink']);
  114. $this->assertLinkIs('<a href="tiki-editpage.php?page=out%3ATest" title="Create page: out:Test" class="wiki wikinew text-danger tips">out:Test</a>', $link->getHtml());
  115. }
  116. public function testWithDefinedExternal()
  117. {
  118. $link = new WikiParser_OutputLink();
  119. $link->setIdentifier('out:Test');
  120. $link->setExternals(
  121. [
  122. 'out' => 'http://example.com/$page',
  123. 'other' => 'http://www.example.com/$page',
  124. ]
  125. );
  126. $this->assertLinkIs('<a href="http://example.com/Test" class="wiki ext_page out">Test</a>', $link->getHtml());
  127. }
  128. public function testWithDefinedExternalAndDescription()
  129. {
  130. $link = new WikiParser_OutputLink();
  131. $link->setIdentifier('out:Test');
  132. $link->setDescription('ABC');
  133. $link->setExternals(
  134. [
  135. 'out' => 'http://example.com/$page',
  136. 'other' => 'http://www.example.com/$page',
  137. ]
  138. );
  139. $this->assertLinkIs('<a href="http://example.com/Test" class="wiki ext_page out">ABC</a>', $link->getHtml());
  140. }
  141. public function testHandlePlural()
  142. {
  143. $this->info['Policies'] = false;
  144. $this->info['Policy'] = [
  145. 'pageName' => 'Policy',
  146. 'description' => 'Some Page',
  147. 'lastModif' => 1234567890,
  148. ];
  149. $link = new WikiParser_OutputLink();
  150. $link->setIdentifier('Policies');
  151. $link->setWikiLookup([$this, 'getPageInfo']);
  152. $link->setWikiLinkBuilder([$this, 'getWikiLink']);
  153. $link->setHandlePlurals(true);
  154. $this->assertLinkIs('<a href="Policy" title="Some Page" class="wiki wiki_page">Policies</a>', $link->getHtml());
  155. }
  156. public function testRenderCreateLinkWithNamespace()
  157. {
  158. // ((Test)) within a page in HelloWorld namespace
  159. $link = new WikiParser_OutputLink();
  160. $link->setNamespace('HelloWorld', '_');
  161. $link->setIdentifier('Test');
  162. $this->assertLinkIs('<a href="tiki-editpage.php?page=HelloWorld_Test" title="Create page: HelloWorld_Test" class="wiki wikinew text-danger tips">Test</a>', $link->getHtml());
  163. }
  164. public function testRenderLinkWithinSameNamespace()
  165. {
  166. $this->info['HelloWorld_Test'] = [
  167. 'pageName' => 'HelloWorld_Test',
  168. 'prettyName' => 'HelloWorld / Test',
  169. 'namespace' => 'HelloWorld',
  170. 'namespace_parts' => ['HelloWorld'],
  171. 'baseName' => 'Test',
  172. 'description' => '',
  173. 'lastModif' => 1234567890,
  174. ];
  175. // ((Test)) within a page in HelloWorld namespace
  176. $link = new WikiParser_OutputLink();
  177. $link->setWikiLookup([$this, 'getPageInfo']);
  178. $link->setNamespace('HelloWorld', '_');
  179. $link->setIdentifier('Test');
  180. $this->assertLinkIs('<a href="HelloWorld_Test" title="HelloWorld / Test" class="wiki wiki_page">Test</a>', $link->getHtml());
  181. }
  182. public function testRenderFromDifferentNamespace()
  183. {
  184. $this->info['HelloWorld_Test'] = [
  185. 'pageName' => 'HelloWorld_Test',
  186. 'prettyName' => 'HelloWorld / Test',
  187. 'namespace' => 'HelloWorld',
  188. 'namespace_parts' => ['HelloWorld'],
  189. 'baseName' => 'Test',
  190. 'description' => '',
  191. 'lastModif' => 1234567890,
  192. ];
  193. // ((Test)) within a page in HelloWorld namespace
  194. $link = new WikiParser_OutputLink();
  195. $link->setWikiLookup([$this, 'getPageInfo']);
  196. $link->setNamespace('Foobar', '_');
  197. $link->setIdentifier('HelloWorld_Test');
  198. $this->assertLinkIs('<a href="HelloWorld_Test" title="HelloWorld / Test" class="wiki wiki_page"><span class="namespace first last">HelloWorld</span>Test</a>', $link->getHtml());
  199. }
  200. public function testRenderFromDifferentNamespaceWithMultipleParts()
  201. {
  202. $this->info['Abc_Def_HelloWorld_Test'] = [
  203. 'pageName' => 'Abc_Def_HelloWorld_Test',
  204. 'prettyName' => 'Abc / Def / HelloWorld / Test',
  205. 'namespace' => 'Abc_Def_HelloWorld',
  206. 'namespace_parts' => ['Abc', 'Def', 'HelloWorld'],
  207. 'baseName' => 'Test',
  208. 'description' => '',
  209. 'lastModif' => 1234567890,
  210. ];
  211. // ((Test)) within a page in HelloWorld namespace
  212. $link = new WikiParser_OutputLink();
  213. $link->setWikiLookup([$this, 'getPageInfo']);
  214. $link->setNamespace('Foobar', '_');
  215. $link->setIdentifier('Abc_Def_HelloWorld_Test');
  216. $this->assertLinkIs('<a href="Abc_Def_HelloWorld_Test" title="Abc / Def / HelloWorld / Test" class="wiki wiki_page"><span class="namespace first">Abc</span><span class="namespace">Def</span><span class="namespace last">HelloWorld</span>Test</a>', $link->getHtml());
  217. }
  218. public function getPageInfo($page)
  219. {
  220. if (isset($this->info[$page])) {
  221. return $this->info[$page];
  222. }
  223. }
  224. public function getWikiLink($page)
  225. {
  226. return $page;
  227. }
  228. private function assertLinkIs($expect, $content)
  229. {
  230. $this->assertEquals($expect, $content);
  231. }
  232. }