xref: /dokuwiki/_test/tests/inc/utf8_correctidx.test.php (revision 8cbc5ee84fe788597ede5266255a74af6da47555)
1f8369d7dSTobias Sarnowski<?php
2f8369d7dSTobias Sarnowski// use no mbstring help here
3f8369d7dSTobias Sarnowskiif(!defined('UTF8_NOMBSTRING')) define('UTF8_NOMBSTRING',1);
4f8369d7dSTobias Sarnowski
5f8369d7dSTobias Sarnowskiclass utf8_correctidx_test extends DokuWikiTest {
6f8369d7dSTobias Sarnowski
7f8369d7dSTobias Sarnowski
8f8369d7dSTobias Sarnowski    function test_singlebyte(){
9f8369d7dSTobias Sarnowski        // we test multiple cases here - format: in, offset, length, out
10f8369d7dSTobias Sarnowski        $tests   = array();
11f8369d7dSTobias Sarnowski
12f8369d7dSTobias Sarnowski        // single byte, should return current index
13f8369d7dSTobias Sarnowski        $tests[] = array('aaживπά우리をあöä',0,false,0);
14f8369d7dSTobias Sarnowski        $tests[] = array('aaживπά우리をあöä',1,false,1);
15f8369d7dSTobias Sarnowski        $tests[] = array('aaживπά우리をあöä',1,true,1);
16f8369d7dSTobias Sarnowski
17f8369d7dSTobias Sarnowski        foreach($tests as $test){
18*8cbc5ee8SAndreas Gohr            $this->assertEquals(\dokuwiki\Utf8\Clean::correctIdx($test[0],$test[1],$test[2]),$test[3]);
19f8369d7dSTobias Sarnowski        }
20f8369d7dSTobias Sarnowski    }
21f8369d7dSTobias Sarnowski
22f8369d7dSTobias Sarnowski    function test_twobyte(){
23f8369d7dSTobias Sarnowski        // we test multiple cases here - format: in, offset, length, out
24f8369d7dSTobias Sarnowski        $tests   = array();
25f8369d7dSTobias Sarnowski
26f8369d7dSTobias Sarnowski        // two byte, should move to boundary, expect even number
27f8369d7dSTobias Sarnowski        $tests[] = array('aaживπά우리をあöä',2,false,2);
28f8369d7dSTobias Sarnowski        $tests[] = array('aaживπά우리をあöä',3,false,2);
29f8369d7dSTobias Sarnowski        $tests[] = array('aaживπά우리をあöä',4,false,4);
30f8369d7dSTobias Sarnowski
31f8369d7dSTobias Sarnowski        $tests[] = array('aaживπά우리をあöä',2,true,2);
32f8369d7dSTobias Sarnowski        $tests[] = array('aaживπά우리をあöä',3,true,4);
33f8369d7dSTobias Sarnowski        $tests[] = array('aaживπά우리をあöä',4,true,4);
34f8369d7dSTobias Sarnowski
35f8369d7dSTobias Sarnowski        foreach($tests as $test){
36*8cbc5ee8SAndreas Gohr            $this->assertEquals(\dokuwiki\Utf8\Clean::correctIdx($test[0],$test[1],$test[2]),$test[3]);
37f8369d7dSTobias Sarnowski        }
38f8369d7dSTobias Sarnowski    }
39f8369d7dSTobias Sarnowski
40f8369d7dSTobias Sarnowski    function test_threebyte(){
41f8369d7dSTobias Sarnowski        // we test multiple cases here - format: in, offset, length, out
42f8369d7dSTobias Sarnowski        $tests   = array();
43f8369d7dSTobias Sarnowski
44f8369d7dSTobias Sarnowski        // three byte, should move to boundary 10 or 13
45f8369d7dSTobias Sarnowski        $tests[] = array('aaживπά우리をあöä',10,false,10);
46f8369d7dSTobias Sarnowski        $tests[] = array('aaживπά우리をあöä',11,false,10);
47f8369d7dSTobias Sarnowski        $tests[] = array('aaживπά우리をあöä',12,false,10);
48f8369d7dSTobias Sarnowski        $tests[] = array('aaживπά우리をあöä',13,false,13);
49f8369d7dSTobias Sarnowski
50f8369d7dSTobias Sarnowski        $tests[] = array('aaживπά우리をあöä',10,true,10);
51f8369d7dSTobias Sarnowski        $tests[] = array('aaживπά우리をあöä',11,true,13);
52f8369d7dSTobias Sarnowski        $tests[] = array('aaживπά우리をあöä',12,true,13);
53f8369d7dSTobias Sarnowski        $tests[] = array('aaживπά우리をあöä',13,true,13);
54f8369d7dSTobias Sarnowski
55f8369d7dSTobias Sarnowski        foreach($tests as $test){
56*8cbc5ee8SAndreas Gohr            $this->assertEquals(\dokuwiki\Utf8\Clean::correctIdx($test[0],$test[1],$test[2]),$test[3]);
57f8369d7dSTobias Sarnowski        }
58f8369d7dSTobias Sarnowski    }
59f8369d7dSTobias Sarnowski
60f8369d7dSTobias Sarnowski    function test_bounds(){
61f8369d7dSTobias Sarnowski        // we test multiple cases here - format: in, offset, length, out
62f8369d7dSTobias Sarnowski        $tests   = array();
63f8369d7dSTobias Sarnowski
64f8369d7dSTobias Sarnowski        // bounds checking
65f8369d7dSTobias Sarnowski        $tests[] = array('aaживπά우리をあöä',-2,false,0);
66f8369d7dSTobias Sarnowski        $tests[] = array('aaживπά우리をあöä',128,false,29);
67f8369d7dSTobias Sarnowski
68f8369d7dSTobias Sarnowski        $tests[] = array('aaживπά우리をあöä',-2,true,0);
69f8369d7dSTobias Sarnowski        $tests[] = array('aaживπά우리をあöä',128,true,29);
70f8369d7dSTobias Sarnowski
71f8369d7dSTobias Sarnowski        foreach($tests as $test){
72*8cbc5ee8SAndreas Gohr            $this->assertEquals(\dokuwiki\Utf8\Clean::correctIdx($test[0],$test[1],$test[2]),$test[3]);
73f8369d7dSTobias Sarnowski        }
74f8369d7dSTobias Sarnowski    }
75f8369d7dSTobias Sarnowski
76f8369d7dSTobias Sarnowski}
77f8369d7dSTobias Sarnowski//Setup VIM: ex: et ts=4 :
78