[ Index ] |
PHP Cross Reference of DokuWiki |
[Summary view] [Print] [Text view]
1 <?php 2 3 class init_clean_id_test extends DokuWikiTest 4 { 5 6 /** @inheritDoc */ 7 function teardown() : void 8 { 9 global $cache_cleanid; 10 $cache_cleanid = array(); 11 } 12 13 /** 14 * DataProvider 15 * 16 * @return Generator|array 17 * @see testCleanId 18 */ 19 public function provideTestData() 20 { 21 // input, expected, optional options array 22 $tests = [ 23 ['page', 'page'], 24 ['pa_ge', 'pa_ge'], 25 ['pa%ge', 'pa_ge'], 26 ['pa#ge', 'pa_ge'], 27 ['pàge', 'page'], 28 ['pagĖ', 'page'], 29 ['pa$%^*#ge', 'pa_ge'], 30 ['*page*', 'page'], 31 ['ښ', 'ښ'], 32 ['päge', 'paege'], 33 ['foo bar', 'foo_bar'], 34 ['PÄGÖ', 'paegoe'], 35 ['Faß', 'fass'], 36 ['ښ侧化并곦 β', 'ښ侧化并곦_β'], 37 ['page:page', 'page:page'], 38 ['page;page', 'page:page'], 39 ['page:page 1.2', 'page:page_1.2'], 40 ['page._#!', 'page'], 41 ['._#!page', 'page'], 42 ['page._#!page', 'page._page'], 43 ['ns._#!:page', 'ns:page'], 44 ['ns:._#!page', 'ns:page'], 45 ['ns._#!ns:page', 'ns._ns:page'], 46 ['ns_:page', 'ns:page'], 47 ['page...page', 'page...page'], 48 ['page---page', 'page---page'], 49 ['page___page', 'page_page'], 50 ['page_-.page', 'page_-.page'], 51 [':page', 'page'], 52 [':ns:page', 'ns:page'], 53 ['page:', 'page'], 54 ['ns:page:', 'ns:page'], 55 ['Łł', 'll'], 56 57 // use-slash handling 58 ['page/page', 'page_page', ['useslash' => 0]], 59 ['page/page', 'page:page', ['useslash' => 1]], 60 61 // different sep-char 62 ['pa-ge', 'pa-ge', ['sepchar' => '-']], 63 ['pa%ge', 'pa-ge', ['sepchar' => '-']], 64 65 // no deaccenting 66 ['pàge', 'pàge', ['deaccent' => 0]], 67 ['pagĖ', 'pagė', ['deaccent' => 0]], 68 ['pagĒēĔĕĖėĘęĚě', 'pagēēĕĕėėęęěě', ['deaccent' => 0]], 69 ['ښ', 'ښ', ['deaccent' => 0]], 70 ['ښ侧化并곦ঝഈ', 'ښ侧化并곦ঝഈ', ['deaccent' => 0]], 71 72 // romanize 73 ['pàge', 'page', ['deaccent' => 2]], 74 ['pagĖ', 'page', ['deaccent' => 2]], 75 ['pagĒēĔĕĖėĘęĚě', 'pageeeeeeeeee', ['deaccent' => 2]], 76 ['ښ', 'ښ', ['deaccent' => 2]], 77 ['ښ侧化并곦ঝഈ', 'ښ侧化并곦ঝഈ', ['deaccent' => 2]], 78 79 // deaccent and force ascii 80 ['pàge', 'page', ['deaccent' => 1, 'ascii' => true]], 81 ['pagĖ', 'page', ['deaccent' => 1, 'ascii' => true]], 82 ['pagĒēĔĕĖėĘęĚě', 'pageeeeeeeeee', ['deaccent' => 1, 'ascii' => true]], 83 ['ښ', '', ['deaccent' => 1, 'ascii' => true]], 84 ['ښ侧化并곦ঝഈ', '', ['deaccent' => 1, 'ascii' => true]], 85 86 // romanize and force ascii 87 ['pàge', 'page', ['deaccent' => 2, 'ascii' => true]], 88 ['pagĖ', 'page', ['deaccent' => 2, 'ascii' => true]], 89 ['pagĒēĔĕĖėĘęĚě', 'pageeeeeeeeee', ['deaccent' => 2, 'ascii' => true]], 90 ['ښ', '', ['deaccent' => 2, 'ascii' => true]], 91 ['ښ侧化并곦ঝഈ', '', ['deaccent' => 2, 'ascii' => true]], 92 ]; 93 94 foreach ($tests as $test) { 95 // defaults 96 $sepchar = isset($test[2]['sepchar']) ? $test[2]['sepchar'] : '_'; 97 $deaccent = isset($test[2]['deaccent']) ? $test[2]['deaccent'] : 1; 98 $ascii = isset($test[2]['ascii']) ? $test[2]['ascii'] : false; 99 100 // unless set, test both useslash settings 101 if (isset($test[2]['useslash'])) { 102 yield([$test[0], $test[1], $ascii, $sepchar, $deaccent, $test[2]['useslash']]); 103 } else { 104 yield([$test[0], $test[1], $ascii, $sepchar, $deaccent, 0]); 105 yield([$test[0], $test[1], $ascii, $sepchar, $deaccent, 1]); 106 } 107 } 108 } 109 110 /** 111 * @dataProvider provideTestData 112 * @param string $input 113 * @param string $expected 114 * @param bool $ascii 115 * @param string $sepchar 116 * @param int $deaccent 117 * @param int $useslash 118 */ 119 function testCleanId($input, $expected, $ascii, $sepchar, $deaccent, $useslash) 120 { 121 // set dokuwiki defaults 122 global $conf; 123 $conf['sepchar'] = $sepchar; 124 $conf['deaccent'] = $deaccent; 125 $conf['useslash'] = $useslash; 126 127 $result = cleanID($input, $ascii); 128 $this->assertEquals($expected, $result); 129 } 130 131 132 133 function test_caching_ascii() 134 { 135 global $conf; 136 $conf['deaccent'] = 0; 137 $this->assertEquals('pàge', cleanID('pàge', false)); 138 $this->assertEquals('page', cleanID('pàge', true)); 139 140 $this->assertEquals('page', cleanID('pagĖ', true)); 141 $this->assertEquals('pagė', cleanID('pagĖ', false)); 142 } 143 144 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body