[ Index ]

PHP Cross Reference of DokuWiki

title

Body

[close]

/_test/tests/inc/ -> pageutils_clean_id.test.php (source)

   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  }