3 * @version $Id: utf8_bad.test.php,v 1.6 2006/02/26 13:39:37 harryf Exp $
8 //--------------------------------------------------------------------
14 require_once(dirname(__FILE__).'/../config.php');
15 require_once UTF8 . '/utils/bad.php';
17 //--------------------------------------------------------------------
22 class test_utf8_bad_find extends UnitTestCase {
24 function test_utf8_bad_find() {
25 $this->UnitTestCase('utf8_bad_find()');
28 function testValidUtf8() {
29 $str = 'Iñtërnâtiônàlizætiøn';
30 $this->assertFalse(utf8_bad_find($str));
33 function testValidUtf8Ascii() {
35 $this->assertFalse(utf8_bad_find($str));
38 function testInvalidUtf8() {
39 $str = "Iñtërnâtiôn\xe9àlizætiøn";
40 $this->assertEqual(utf8_bad_find($str),15);
43 function testInvalidUtf8Ascii() {
44 $str = "this is an invalid char '\xe9' here";
45 $this->assertEqual(utf8_bad_find($str),25);
48 function testInvalidUtf8Start() {
49 $str = "\xe9Iñtërnâtiônàlizætiøn";
50 $this->assertEqual(utf8_bad_find($str),0);
53 function testInvalidUtf8End() {
54 $str = "Iñtërnâtiônàlizætiøn\xe9";
55 $this->assertEqual(utf8_bad_find($str),27);
58 function testValidTwoOctetId() {
60 $this->assertFalse(utf8_bad_find($str));
63 function testInvalidTwoOctetSequence() {
64 $str = "Iñtërnâtiônàlizætiøn \xc3\x28 Iñtërnâtiônàlizætiøn";
65 $this->assertEqual(utf8_bad_find($str),28);
68 function testInvalidIdBetweenTwoAndThree() {
69 $str = "Iñtërnâtiônàlizætiøn\xa0\xa1Iñtërnâtiônàlizætiøn";
70 $this->assertEqual(utf8_bad_find($str),27);
74 function testValidThreeOctetId() {
75 $str = "Iñtërnâtiônàlizætiøn\xe2\x82\xa1Iñtërnâtiônàlizætiøn";
76 $this->assertFalse(utf8_bad_find($str));
80 function testInvalidThreeOctetSequenceSecond() {
81 $str = "Iñtërnâtiônàlizætiøn\xe2\x28\xa1Iñtërnâtiônàlizætiøn";
82 $this->assertEqual(utf8_bad_find($str),27);
85 function testInvalidThreeOctetSequenceThird() {
86 $str = "Iñtërnâtiônàlizætiøn\xe2\x82\x28Iñtërnâtiônàlizætiøn";
87 $this->assertEqual(utf8_bad_find($str),27);
90 function testValidFourOctetId() {
91 $str = "Iñtërnâtiônàlizætiøn\xf0\x90\x8c\xbcIñtërnâtiônàlizætiøn";
92 $this->assertFalse(utf8_bad_find($str));
95 function testInvalidFourOctetSequence() {
96 $str = "Iñtërnâtiônàlizætiøn\xf0\x28\x8c\xbcIñtërnâtiônàlizætiøn";
97 $this->assertEqual(utf8_bad_find($str),27);
100 function testInvalidFiveOctetSequence() {
101 $str = "Iñtërnâtiônàlizætiøn\xf8\xa1\xa1\xa1\xa1Iñtërnâtiônàlizætiøn";
102 $this->assertEqual(utf8_bad_find($str),27);
105 function testInvalidSixOctetSequence() {
106 $str = "Iñtërnâtiônàlizætiøn\xfc\xa1\xa1\xa1\xa1\xa1Iñtërnâtiônàlizætiøn";
107 $this->assertEqual(utf8_bad_find($str),27);
113 //--------------------------------------------------------------------
118 class test_utf8_bad_findall extends UnitTestCase {
120 function test_utf8_bad_findall() {
121 $this->UnitTestCase('test_utf8_bad_findall()');
124 function testValidUtf8() {
125 $str = 'Iñtërnâtiônàlizætiøn';
126 $this->assertFalse(utf8_bad_findall($str));
129 function testValidUtf8Ascii() {
131 $this->assertFalse(utf8_bad_findall($str));
134 function testInvalidUtf8() {
135 $str = "Iñtërnâtiôn\xe9àlizætiøn";
137 $this->assertEqual(utf8_bad_findall($str),$test);
140 function testInvalidUtf8Ascii() {
141 $str = "this is an invalid char '\xe9' here";
143 $this->assertEqual(utf8_bad_findall($str),$test);
146 function testInvalidUtf8Multiple() {
147 $str = "\xe9Iñtërnâtiôn\xe9àlizætiøn\xe9";
148 $test = array(0,16,29);
149 $this->assertEqual(utf8_bad_findall($str),$test);
152 function testValidTwoOctetId() {
153 $str = "abc\xc3\xb1";
154 $this->assertFalse(utf8_bad_findall($str));
157 function testInvalidTwoOctetSequence() {
158 $str = "Iñtërnâtiônàlizætiøn \xc3\x28 Iñtërnâtiônàlizætiøn";
159 $this->assertEqual(utf8_bad_findall($str),array(28));
162 function testInvalidIdBetweenTwoAndThree() {
163 $str = "Iñtërnâtiônàlizætiøn\xa0\xa1Iñtërnâtiônàlizætiøn";
164 $this->assertEqual(utf8_bad_findall($str),array(27,28));
167 function testValidThreeOctetId() {
168 $str = "Iñtërnâtiônàlizætiøn\xe2\x82\xa1Iñtërnâtiônàlizætiøn";
169 $this->assertFalse(utf8_bad_findall($str));
172 function testInvalidThreeOctetSequenceSecond() {
173 $str = "Iñtërnâtiônàlizætiøn\xe2\x28\xa1Iñtërnâtiônàlizætiøn";
174 $this->assertEqual(utf8_bad_findall($str),array(27,29));
177 function testInvalidThreeOctetSequenceThird() {
178 $str = "Iñtërnâtiônàlizætiøn\xe2\x82\x28Iñtërnâtiônàlizætiøn";
179 $this->assertEqual(utf8_bad_find($str),27);
182 function testValidFourOctetId() {
183 $str = "Iñtërnâtiônàlizætiøn\xf0\x90\x8c\xbcIñtërnâtiônàlizætiøn";
184 $this->assertFalse(utf8_bad_findall($str));
187 function testInvalidFourOctetSequence() {
188 $str = "Iñtërnâtiônàlizætiøn\xf0\x28\x8c\xbcIñtërnâtiônàlizætiøn";
189 $this->assertEqual(utf8_bad_findall($str),array(27,29,30));
192 function testInvalidFiveOctetSequence() {
193 $str = "Iñtërnâtiônàlizætiøn\xf8\xa1\xa1\xa1\xa1Iñtërnâtiônàlizætiøn";
194 $this->assertEqual(utf8_bad_findall($str),range(27,31));
197 function testInvalidSixOctetSequence() {
198 $str = "Iñtërnâtiônàlizætiøn\xfc\xa1\xa1\xa1\xa1\xa1Iñtërnâtiônàlizætiøn";
199 $this->assertEqual(utf8_bad_findall($str),range(27,32));
205 //--------------------------------------------------------------------
210 class test_utf8_bad_strip extends UnitTestCase {
212 function test_utf8_bad_strip() {
213 $this->UnitTestCase('test_utf8_bad_strip()');
216 function testValidUtf8() {
217 $str = 'Iñtërnâtiônàlizætiøn';
218 $this->assertEqual(utf8_bad_strip($str),$str);
221 function testValidUtf8Ascii() {
223 $this->assertEqual(utf8_bad_strip($str),$str);
226 function testInvalidUtf8() {
227 $str = "Iñtërnâtiôn\xe9àlizætiøn";
228 $this->assertEqual(utf8_bad_strip($str),'Iñtërnâtiônàlizætiøn');
231 function testInvalidUtf8Ascii() {
232 $str = "this is an invalid char '\xe9' here";
233 $this->assertEqual(utf8_bad_strip($str),"this is an invalid char '' here");
236 function testInvalidUtf8Multiple() {
237 $str = "\xe9Iñtërnâtiôn\xe9àlizætiøn\xe9";
238 $this->assertEqual(utf8_bad_strip($str),'Iñtërnâtiônàlizætiøn');
241 function testValidTwoOctetId() {
242 $str = "abc\xc3\xb1";
243 $this->assertEqual(utf8_bad_strip($str),$str);
246 function testInvalidTwoOctetSequence() {
247 $str = "Iñtërnâtiônàlizætiøn \xc3\x28 Iñtërnâtiônàlizætiøn";
248 $stripped = "Iñtërnâtiônàlizætiøn \x28 Iñtërnâtiônàlizætiøn";
249 $this->assertEqual(utf8_bad_strip($str),$stripped);
252 function testInvalidIdBetweenTwoAndThree() {
253 $str = "Iñtërnâtiônàlizætiøn\xa0\xa1Iñtërnâtiônàlizætiøn";
254 $stripped = "IñtërnâtiônàlizætiønIñtërnâtiônàlizætiøn";
255 $this->assertEqual(utf8_bad_strip($str),$stripped);
258 function testValidThreeOctetId() {
259 $str = "Iñtërnâtiônàlizætiøn\xe2\x82\xa1Iñtërnâtiônàlizætiøn";
260 $this->assertEqual(utf8_bad_strip($str),$str);
263 function testInvalidThreeOctetSequenceSecond() {
264 $str = "Iñtërnâtiônàlizætiøn\xe2\x28\xa1Iñtërnâtiônàlizætiøn";
265 $stripped = "Iñtërnâtiônàlizætiøn(Iñtërnâtiônàlizætiøn";
266 $this->assertEqual(utf8_bad_strip($str),$stripped);
269 function testInvalidThreeOctetSequenceThird() {
270 $str = "Iñtërnâtiônàlizætiøn\xe2\x82\x28Iñtërnâtiônàlizætiøn";
271 $stripped = "Iñtërnâtiônàlizætiøn(Iñtërnâtiônàlizætiøn";
272 $this->assertEqual(utf8_bad_strip($str),$stripped);
275 function testValidFourOctetId() {
276 $str = "Iñtërnâtiônàlizætiøn\xf0\x90\x8c\xbcIñtërnâtiônàlizætiøn";
277 $this->assertEqual(utf8_bad_strip($str),$str);
280 function testInvalidFourOctetSequence() {
281 $str = "Iñtërnâtiônàlizætiøn\xf0\x28\x8c\xbcIñtërnâtiônàlizætiøn";
282 $stripped = "Iñtërnâtiônàlizætiøn(Iñtërnâtiônàlizætiøn";
283 $this->assertEqual(utf8_bad_strip($str),$stripped);
286 function testInvalidFiveOctetSequence() {
287 $str = "Iñtërnâtiônàlizætiøn\xf8\xa1\xa1\xa1\xa1Iñtërnâtiônàlizætiøn";
288 $stripped = "IñtërnâtiônàlizætiønIñtërnâtiônàlizætiøn";
289 $this->assertEqual(utf8_bad_strip($str),$stripped);
292 function testInvalidSixOctetSequence() {
293 $str = "Iñtërnâtiônàlizætiøn\xfc\xa1\xa1\xa1\xa1\xa1Iñtërnâtiônàlizætiøn";
294 $stripped = "IñtërnâtiônàlizætiønIñtërnâtiônàlizætiøn";
295 $this->assertEqual(utf8_bad_strip($str),$stripped);
300 //--------------------------------------------------------------------
305 class test_utf8_bad_replace extends UnitTestCase {
307 function test_utf8_bad_replace() {
308 $this->UnitTestCase('test_utf8_bad_replace()');
311 function testValidUtf8() {
312 $str = 'Iñtërnâtiônàlizætiøn';
313 $this->assertEqual(utf8_bad_replace($str),$str);
316 function testValidUtf8Ascii() {
318 $this->assertEqual(utf8_bad_replace($str),$str);
321 function testInvalidUtf8() {
322 $str = "Iñtërnâtiôn\xe9àlizætiøn";
323 $this->assertEqual(utf8_bad_replace($str),'Iñtërnâtiôn?àlizætiøn');
326 function testInvalidUtf8WithX() {
327 $str = "Iñtërnâtiôn\xe9àlizætiøn";
328 $this->assertEqual(utf8_bad_replace($str,'X'),'IñtërnâtiônXàlizætiøn');
331 function testInvalidUtf8Ascii() {
332 $str = "this is an invalid char '\xe9' here";
333 $this->assertEqual(utf8_bad_replace($str),"this is an invalid char '?' here");
336 function testInvalidUtf8Multiple() {
337 $str = "\xe9Iñtërnâtiôn\xe9àlizætiøn\xe9";
338 $this->assertEqual(utf8_bad_replace($str),'?Iñtërnâtiôn?àlizætiøn?');
341 function testValidTwoOctetId() {
342 $str = "abc\xc3\xb1";
343 $this->assertEqual(utf8_bad_replace($str),$str);
346 function testInvalidTwoOctetSequence() {
347 $str = "Iñtërnâtiônàlizætiøn \xc3\x28 Iñtërnâtiônàlizætiøn";
348 $replaced= "Iñtërnâtiônàlizætiøn ?( Iñtërnâtiônàlizætiøn";
349 $this->assertEqual(utf8_bad_replace($str),$replaced);
352 function testInvalidIdBetweenTwoAndThree() {
353 $str = "Iñtërnâtiônàlizætiøn\xa0\xa1Iñtërnâtiônàlizætiøn";
354 $replaced= "Iñtërnâtiônàlizætiøn??Iñtërnâtiônàlizætiøn";
355 $this->assertEqual(utf8_bad_replace($str),$replaced);
358 function testValidThreeOctetId() {
359 $str = "Iñtërnâtiônàlizætiøn\xe2\x82\xa1Iñtërnâtiônàlizætiøn";
360 $this->assertEqual(utf8_bad_replace($str),$str);
363 function testInvalidThreeOctetSequenceSecond() {
364 $str = "Iñtërnâtiônàlizætiøn\xe2\x28\xa1Iñtërnâtiônàlizætiøn";
365 $replaced= "Iñtërnâtiônàlizætiøn?(?Iñtërnâtiônàlizætiøn";
366 $this->assertEqual(utf8_bad_replace($str),$replaced);
369 function testInvalidThreeOctetSequenceThird() {
370 $str = "Iñtërnâtiônàlizætiøn\xe2\x82\x28Iñtërnâtiônàlizætiøn";
371 $replaced= "Iñtërnâtiônàlizætiøn??(Iñtërnâtiônàlizætiøn";
372 $this->assertEqual(utf8_bad_replace($str),$replaced);
375 function testValidFourOctetId() {
376 $str = "Iñtërnâtiônàlizætiøn\xf0\x90\x8c\xbcIñtërnâtiônàlizætiøn";
377 $this->assertEqual(utf8_bad_replace($str),$str);
380 function testInvalidFourOctetSequence() {
381 $str = "Iñtërnâtiônàlizætiøn\xf0\x28\x8c\xbcIñtërnâtiônàlizætiøn";
382 $replaced= "Iñtërnâtiônàlizætiøn?(??Iñtërnâtiônàlizætiøn";
383 $this->assertEqual(utf8_bad_replace($str),$replaced);
386 function testInvalidFiveOctetSequence() {
387 $str = "Iñtërnâtiônàlizætiøn\xf8\xa1\xa1\xa1\xa1Iñtërnâtiônàlizætiøn";
388 $replaced= "Iñtërnâtiônàlizætiøn?????Iñtërnâtiônàlizætiøn";
389 $this->assertEqual(utf8_bad_replace($str),$replaced);
392 function testInvalidSixOctetSequence() {
393 $str = "Iñtërnâtiônàlizætiøn\xfc\xa1\xa1\xa1\xa1\xa1Iñtërnâtiônàlizætiøn";
394 $replaced= "Iñtërnâtiônàlizætiøn??????Iñtërnâtiônàlizætiøn";
395 $this->assertEqual(utf8_bad_replace($str),$replaced);
400 //--------------------------------------------------------------------
405 class test_utf8_bad_identify extends UnitTestCase {
407 function test_utf8_bad_identify() {
408 $this->UnitTestCase('utf8_bad_identify()');
411 function testValidUtf8() {
412 $str = 'Iñtërnâtiônàlizætiøn';
413 $this->assertFalse(utf8_bad_identify($str,$i));
414 $this->assertNull($i);
417 function testValidUtf8Ascii() {
419 $this->assertFalse(utf8_bad_identify($str,$i));
420 $this->assertNull($i);
423 function testInvalidUtf8() {
424 $str = "Iñtërnâtiôn\xe9àlizætiøn";
425 $this->assertEqual(utf8_bad_identify($str,$i),UTF8_BAD_SEQINCOMPLETE);
426 $this->assertEqual($i,15);
429 function testInvalidUtf8Ascii() {
430 $str = "this is an invalid char '\xe9' here";
431 $this->assertEqual(utf8_bad_identify($str,$i),UTF8_BAD_SEQINCOMPLETE);
432 $this->assertEqual($i,25);
435 function testInvalidUtf8Start() {
436 $str = "\xe9Iñtërnâtiônàlizætiøn";
437 $this->assertEqual(utf8_bad_identify($str,$i),UTF8_BAD_SEQINCOMPLETE);
438 $this->assertEqual($i,0);
441 function testInvalidUtf8End() {
442 $str = "Iñtërnâtiônàlizætiøn\xe9";
443 $this->assertEqual(utf8_bad_identify($str,$i),UTF8_BAD_SEQINCOMPLETE);
444 $this->assertEqual($i,27);
447 function testValidTwoOctetId() {
448 $str = "abc\xc3\xb1";
449 $this->assertFalse(utf8_bad_identify($str,$i));
450 $this->assertNull($i);
453 function testInvalidTwoOctetSequence() {
454 $str = "Iñtërnâtiônàlizætiøn \xc3\x28 Iñtërnâtiônàlizætiøn";
455 $this->assertEqual(utf8_bad_identify($str,$i),UTF8_BAD_SEQINCOMPLETE);
456 $this->assertEqual($i,28);
459 function testInvalidIdBetweenTwoAndThree() {
460 $str = "Iñtërnâtiônàlizætiøn\xa0\xa1Iñtërnâtiônàlizætiøn";
461 $this->assertEqual(utf8_bad_identify($str,$i),UTF8_BAD_SEQID);
462 $this->assertEqual($i,27);
466 function testValidThreeOctetId() {
467 $str = "Iñtërnâtiônàlizætiøn\xe2\x82\xa1Iñtërnâtiônàlizætiøn";
468 $this->assertFalse(utf8_bad_identify($str,$i));
469 $this->assertNull($i);
473 function testInvalidThreeOctetSequenceSecond() {
474 $str = "Iñtërnâtiônàlizætiøn\xe2\x28\xa1Iñtërnâtiônàlizætiøn";
475 $this->assertEqual(utf8_bad_identify($str,$i),UTF8_BAD_SEQINCOMPLETE);
476 $this->assertEqual($i,27);
479 function testInvalidThreeOctetSequenceThird() {
480 $str = "Iñtërnâtiônàlizætiøn\xe2\x82\x28Iñtërnâtiônàlizætiøn";
481 $this->assertEqual(utf8_bad_identify($str,$i),UTF8_BAD_SEQINCOMPLETE);
482 $this->assertEqual($i,28);
485 function testValidFourOctetId() {
486 $str = "Iñtërnâtiônàlizætiøn\xf0\x90\x8c\xbcIñtërnâtiônàlizætiøn";
487 $this->assertFalse(utf8_bad_identify($str,$i));
488 $this->assertNull($i);
491 function testInvalidFourOctetSequence() {
492 $str = "Iñtërnâtiônàlizætiøn\xf0\x28\x8c\xbcIñtërnâtiônàlizætiøn";
493 $this->assertEqual(utf8_bad_identify($str,$i),UTF8_BAD_SEQINCOMPLETE);
494 $this->assertEqual($i,27);
497 function testInvalidFiveOctetSequence() {
498 $str = "Iñtërnâtiônàlizætiøn\xf8\xa1\xa1\xa1\xa1Iñtërnâtiônàlizætiøn";
499 $this->assertEqual(utf8_bad_identify($str,$i),UTF8_BAD_5OCTET);
500 $this->assertEqual($i,27);
503 function testInvalidSixOctetSequence() {
504 $str = "Iñtërnâtiônàlizætiøn\xfc\xa1\xa1\xa1\xa1\xa1Iñtërnâtiônàlizætiøn";
505 $this->assertEqual(utf8_bad_identify($str,$i),UTF8_BAD_6OCTET);
506 $this->assertEqual($i,27);
512 //--------------------------------------------------------------------
517 if (!defined('TEST_RUNNING')) {
518 define('TEST_RUNNING', true);
519 $test = &new GroupTest('utf8_bad');
520 $test->addTestCase(new test_utf8_bad_find());
521 $test->addTestCase(new test_utf8_bad_findall());
522 $test->addTestCase(new test_utf8_bad_strip());
523 $test->addTestCase(new test_utf8_bad_replace());
524 $test->addTestCase(new test_utf8_bad_identify());
525 $reporter = & getTestReporter();
526 $test->run($reporter);