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