Merge "Chinese Conversion Table Update 2017-6"
[lhc/web/wiklou.git] / tests / phpunit / includes / libs / MWMessagePackTest.php
1 <?php
2 /**
3 * PHP Unit tests for MWMessagePack
4 * @covers MWMessagePack
5 */
6 class MWMessagePackTest extends PHPUnit_Framework_TestCase {
7
8 use MediaWikiCoversValidator;
9
10 /**
11 * Provides test cases for MWMessagePackTest::testMessagePack
12 *
13 * Returns an array of test cases. Each case is an array of (type, value,
14 * expected encoding as hex string). The expected values were generated
15 * using <https://github.com/msgpack/msgpack-php>, which includes a
16 * serialization function.
17 */
18 public static function providePacks() {
19 $tests = [
20 [ 'nil', null, 'c0' ],
21 [ 'bool', true, 'c3' ],
22 [ 'bool', false, 'c2' ],
23 [ 'positive fixnum', 0, '00' ],
24 [ 'positive fixnum', 1, '01' ],
25 [ 'positive fixnum', 5, '05' ],
26 [ 'positive fixnum', 35, '23' ],
27 [ 'uint 8', 128, 'cc80' ],
28 [ 'uint 16', 1000, 'cd03e8' ],
29 [ 'uint 32', 100000, 'ce000186a0' ],
30 [ 'negative fixnum', -1, 'ff' ],
31 [ 'negative fixnum', -2, 'fe' ],
32 [ 'int 8', -128, 'd080' ],
33 [ 'int 8', -35, 'd0dd' ],
34 [ 'int 16', -1000, 'd1fc18' ],
35 [ 'int 32', -100000, 'd2fffe7960' ],
36 [ 'double', 0.1, 'cb3fb999999999999a' ],
37 [ 'double', 1.1, 'cb3ff199999999999a' ],
38 [ 'double', 123.456, 'cb405edd2f1a9fbe77' ],
39 [ 'fix raw', '', 'a0' ],
40 [ 'fix raw', 'foobar', 'a6666f6f626172' ],
41 [
42 'raw 16',
43 'Lorem ipsum dolor sit amet amet.',
44 'da00204c6f72656d20697073756d20646f6c6f722073697420616d657420616d65742e'
45 ],
46 [
47 'fix array',
48 [ 'abc', 'def', 'ghi' ],
49 '93a3616263a3646566a3676869'
50 ],
51 [
52 'fix map',
53 [ 'one' => 1, 'two' => 2 ],
54 '82a36f6e6501a374776f02'
55 ],
56 ];
57
58 if ( PHP_INT_SIZE > 4 ) {
59 $tests[] = [ 'uint 64', 10000000000, 'cf00000002540be400' ];
60 $tests[] = [ 'int 64', -10000000000, 'd3fffffffdabf41c00' ];
61 $tests[] = [ 'int 64', -223372036854775807, 'd3fce66c50e2840001' ];
62 $tests[] = [ 'int 64', -9223372036854775807, 'd38000000000000001' ];
63 }
64
65 return $tests;
66 }
67
68 /**
69 * Verify that values are serialized correctly.
70 * @covers MWMessagePack::pack
71 * @dataProvider providePacks
72 */
73 public function testPack( $type, $value, $expected ) {
74 $actual = bin2hex( MWMessagePack::pack( $value ) );
75 $this->assertEquals( $expected, $actual, $type );
76 }
77 }