]> granicus.if.org Git - php/commitdiff
Add test suite for ARMSCII-8 encoding
authorAlex Dowad <alexinbeijing@gmail.com>
Sun, 18 Oct 2020 15:51:59 +0000 (17:51 +0200)
committerAlex Dowad <alexinbeijing@gmail.com>
Mon, 2 Nov 2020 19:31:06 +0000 (21:31 +0200)
ext/mbstring/tests/armscii8_encoding.phpt [new file with mode: 0644]
ext/mbstring/tests/data/ARMSCII-8.txt [new file with mode: 0644]

diff --git a/ext/mbstring/tests/armscii8_encoding.phpt b/ext/mbstring/tests/armscii8_encoding.phpt
new file mode 100644 (file)
index 0000000..b7e653d
--- /dev/null
@@ -0,0 +1,33 @@
+--TEST--
+Exhaustive test of verification and conversion of ARMSCII-8 text
+--SKIPIF--
+<?php
+extension_loaded('mbstring') or die('skip mbstring not available');
+if (getenv("SKIP_SLOW_TESTS")) die("skip slow test");
+?>
+--FILE--
+<?php
+include('encoding_tests.inc');
+srand(111); // Make results consistent
+mb_substitute_character(0x25); // '%'
+
+readConversionTable(__DIR__ . '/data/ARMSCII-8.txt', $toUnicode, $fromUnicode);
+$irreversible = ["\x28", "\x29", "\x2C", "\x2D", "\x2E"];
+
+findInvalidChars($toUnicode, $invalid, $truncated);
+testAllValidChars($toUnicode, 'ARMSCII-8', 'UTF-16BE', false);
+foreach ($irreversible as $char)
+  unset($toUnicode[$char]);
+testAllValidChars($toUnicode, 'ARMSCII-8', 'UTF-16BE');
+testAllInvalidChars($invalid, $toUnicode, 'ARMSCII-8', 'UTF-16BE', "\x00%");
+testTruncatedChars($truncated, 'ARMSCII-8', 'UTF-16BE', "\x00%");
+echo "Tested ARMSCII-8 -> UTF-16BE\n";
+
+findInvalidChars($fromUnicode, $invalid, $truncated, map(range(0,0xFF), 2));
+testAllInvalidChars($invalid, $fromUnicode, 'UTF-16BE', 'ARMSCII-8', '%');
+testTruncatedChars($truncated, 'UTF-16BE', 'ARMSCII-8', '%');
+echo "Tested UTF-16BE -> ARMSCII-8\n";
+?>
+--EXPECT--
+Tested ARMSCII-8 -> UTF-16BE
+Tested UTF-16BE -> ARMSCII-8
diff --git a/ext/mbstring/tests/data/ARMSCII-8.txt b/ext/mbstring/tests/data/ARMSCII-8.txt
new file mode 100644 (file)
index 0000000..1854fdd
--- /dev/null
@@ -0,0 +1,255 @@
+# Derived from armscii-8(7) man page
+0x0    0x0
+0x1    0x1
+0x2    0x2
+0x3    0x3
+0x4    0x4
+0x5    0x5
+0x6    0x6
+0x7    0x7
+0x8    0x8
+0x9    0x9
+0xA    0xA
+0xB    0xB
+0xC    0xC
+0xD    0xD
+0xE    0xE
+0xF    0xF
+0x10   0x10
+0x11   0x11
+0x12   0x12
+0x13   0x13
+0x14   0x14
+0x15   0x15
+0x16   0x16
+0x17   0x17
+0x18   0x18
+0x19   0x19
+0x1A   0x1A
+0x1B   0x1B
+0x1C   0x1C
+0x1D   0x1D
+0x1E   0x1E
+0x1F   0x1F
+0x20   0x20
+0x21   0x21
+0x22   0x22
+0x23   0x23
+0x24   0x24
+0x25   0x25
+0x26   0x26
+0x27   0x27
+0x28   0x28
+0x29   0x29
+0x2A   0x2A
+0x2B   0x2B
+0x2C   0x2C
+0x2D   0x2D
+0x2E   0x2E
+0x2F   0x2F
+0x30   0x30
+0x31   0x31
+0x32   0x32
+0x33   0x33
+0x34   0x34
+0x35   0x35
+0x36   0x36
+0x37   0x37
+0x38   0x38
+0x39   0x39
+0x3A   0x3A
+0x3B   0x3B
+0x3C   0x3C
+0x3D   0x3D
+0x3E   0x3E
+0x3F   0x3F
+0x40   0x40
+0x41   0x41
+0x42   0x42
+0x43   0x43
+0x44   0x44
+0x45   0x45
+0x46   0x46
+0x47   0x47
+0x48   0x48
+0x49   0x49
+0x4A   0x4A
+0x4B   0x4B
+0x4C   0x4C
+0x4D   0x4D
+0x4E   0x4E
+0x4F   0x4F
+0x50   0x50
+0x51   0x51
+0x52   0x52
+0x53   0x53
+0x54   0x54
+0x55   0x55
+0x56   0x56
+0x57   0x57
+0x58   0x58
+0x59   0x59
+0x5A   0x5A
+0x5B   0x5B
+0x5C   0x5C
+0x5D   0x5D
+0x5E   0x5E
+0x5F   0x5F
+0x60   0x60
+0x61   0x61
+0x62   0x62
+0x63   0x63
+0x64   0x64
+0x65   0x65
+0x66   0x66
+0x67   0x67
+0x68   0x68
+0x69   0x69
+0x6A   0x6A
+0x6B   0x6B
+0x6C   0x6C
+0x6D   0x6D
+0x6E   0x6E
+0x6F   0x6F
+0x70   0x70
+0x71   0x71
+0x72   0x72
+0x73   0x73
+0x74   0x74
+0x75   0x75
+0x76   0x76
+0x77   0x77
+0x78   0x78
+0x79   0x79
+0x7A   0x7A
+0x7B   0x7B
+0x7C   0x7C
+0x7D   0x7D
+0x7E   0x7E
+0x7F   0x7F
+0x80   0x80
+0x81   0x81
+0x82   0x82
+0x83   0x83
+0x84   0x84
+0x85   0x85
+0x86   0x86
+0x87   0x87
+0x88   0x88
+0x89   0x89
+0x8A   0x8A
+0x8B   0x8B
+0x8C   0x8C
+0x8D   0x8D
+0x8E   0x8E
+0x8F   0x8F
+0x90   0x90
+0x91   0x91
+0x92   0x92
+0x93   0x93
+0x94   0x94
+0x95   0x95
+0x96   0x96
+0x97   0x97
+0x98   0x98
+0x99   0x99
+0x9A   0x9A
+0x9B   0x9B
+0x9C   0x9C
+0x9D   0x9D
+0x9E   0x9E
+0x9F   0x9F
+0xA0   0x00A0 # NO-BREAK SPACE
+0xA2   0x0587 # SMALL LIGATURE ECH YIWN
+0xA3   0x0589 # ARMENIAN FULL STOP
+0xA4   0x0029 # RIGHT PARENTHESIS
+0xA5   0x0028 # LEFT PARENTHESIS
+0xA6   0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+0xA7   0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+0xA8   0x2014 # EM DASH
+0xA9   0x002E # FULL STOP
+0xAA   0x055D # ARMENIAN COMMA
+0xAB   0x002C # COMMA
+0xAC   0x002D # HYPHEN-MINUS
+0xAD   0x058A # ARMENIAN HYPHEN
+0xAE   0x2026 # HORIZONTAL ELLIPSIS
+0xAF   0x055C # ARMENIAN EXCLAMATION MARK
+0xB0   0x055B # ARMENIAN EMPHASIS MARK
+0xB1   0x055E # ARMENIAN QUESTION MARK
+0xB2   0x0531
+0xB3   0x0561
+0xB4   0x0532
+0xB5   0x0562
+0xB6   0x0533
+0xB7   0x0563
+0xB8   0x0534
+0xB9   0x0564
+0xBA   0x0535
+0xBB   0x0565
+0xBC   0x0536
+0xBD   0x0566
+0xBE   0x0537
+0xBF   0x0567
+0xC0   0x0538
+0xC1   0x0568
+0xC2   0x0539
+0xC3   0x0569
+0xC4   0x053A
+0xC5   0x056A
+0xC6   0x053B
+0xC7   0x056B
+0xC8   0x053C
+0xC9   0x056C
+0xCA   0x053D
+0xCB   0x056D
+0xCC   0x053E
+0xCD   0x056E
+0xCE   0x053F
+0xCF   0x056F
+0xD0   0x0540
+0xD1   0x0570
+0xD2   0x0541
+0xD3   0x0571
+0xD4   0x0542
+0xD5   0x0572
+0xD6   0x0543
+0xD7   0x0573
+0xD8   0x0544
+0xD9   0x0574
+0xDA   0x0545
+0xDB   0x0575
+0xDC   0x0546
+0xDD   0x0576
+0xDE   0x0547
+0xDF   0x0577
+0xE0   0x0548
+0xE1   0x0578
+0xE2   0x0549
+0xE3   0x0579
+0xE4   0x054A
+0xE5   0x057A
+0xE6   0x054B
+0xE7   0x057B
+0xE8   0x054C
+0xE9   0x057C
+0xEA   0x054D
+0xEB   0x057D
+0xEC   0x054E
+0xED   0x057E
+0xEE   0x054F
+0xEF   0x057F
+0xF0   0x0550
+0xF1   0x0580
+0xF2   0x0551
+0xF3   0x0581
+0xF4   0x0552
+0xF5   0x0582
+0xF6   0x0553
+0xF7   0x0583
+0xF8   0x0554
+0xF9   0x0584
+0xFA   0x0555
+0xFB   0x0585
+0xFC   0x0556
+0xFD   0x0586
+0xFE   0x055A