Skip to content

Commit 5023c6b

Browse files
Finished PackStream v1 Packer tests
1 parent d1f1d30 commit 5023c6b

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+193
-40
lines changed

.phpunit.result.cache

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
C:37:"PHPUnit\Runner\DefaultTestResultCache":6445:{a:2:{s:7:"defects";a:29:{s:51:"Bolt\tests\PackStream\v1\PackerTest::testPackString";i:1;s:49:"Bolt\tests\PackStream\v1\PackerTest::testPackNull";i:4;s:67:"Bolt\tests\PackStream\v1\PackerTest::testPackArray with data set #0";i:1;s:69:"Bolt\tests\PackStream\v1\PackerTest::testPackInteger with data set #0";i:4;s:69:"Bolt\tests\PackStream\v1\PackerTest::testPackInteger with data set #1";i:4;s:69:"Bolt\tests\PackStream\v1\PackerTest::testPackInteger with data set #2";i:4;s:69:"Bolt\tests\PackStream\v1\PackerTest::testPackInteger with data set #3";i:4;s:69:"Bolt\tests\PackStream\v1\PackerTest::testPackInteger with data set #4";i:4;s:69:"Bolt\tests\PackStream\v1\PackerTest::testPackInteger with data set #5";i:4;s:68:"Bolt\tests\PackStream\v1\PackerTest::testPackString with data set #0";i:3;s:68:"Bolt\tests\PackStream\v1\PackerTest::testPackString with data set #1";i:3;s:68:"Bolt\tests\PackStream\v1\PackerTest::testPackString with data set #2";i:3;s:68:"Bolt\tests\PackStream\v1\PackerTest::testPackString with data set #3";i:3;s:78:"Bolt\tests\PackStream\v1\PackerTest::testPackInteger with data set "+tiny_int"";i:4;s:78:"Bolt\tests\PackStream\v1\PackerTest::testPackInteger with data set "-tiny_int"";i:4;s:74:"Bolt\tests\PackStream\v1\PackerTest::testPackInteger with data set "int16"";i:4;s:74:"Bolt\tests\PackStream\v1\PackerTest::testPackInteger with data set "int32"";i:4;s:74:"Bolt\tests\PackStream\v1\PackerTest::testPackInteger with data set "int64"";i:4;s:73:"Bolt\tests\PackStream\v1\PackerTest::testPackInteger with data set "int8"";i:4;s:73:"Bolt\tests\PackStream\v1\PackerTest::testPackArray with data set "list16"";i:3;s:73:"Bolt\tests\PackStream\v1\PackerTest::testPackArray with data set "list32"";i:3;s:72:"Bolt\tests\PackStream\v1\PackerTest::testPackArray with data set "list8"";i:3;s:71:"Bolt\tests\PackStream\v1\PackerTest::testPackArray with data set "tiny"";i:3;s:48:"Bolt\tests\PackStream\v1\PackerTest::testPackMap";i:1;s:72:"Bolt\tests\PackStream\v1\PackerTest::testPackArray with data set "map16"";i:3;s:72:"Bolt\tests\PackStream\v1\PackerTest::testPackArray with data set "map32"";i:3;s:71:"Bolt\tests\PackStream\v1\PackerTest::testPackArray with data set "map8"";i:3;s:57:"Bolt\tests\PackStream\v1\PackerTest::testIntegerException";i:3;s:45:"Bolt\tests\PackStream\v1\PackerTest::testPack";i:4;}s:5:"times";a:54:{s:30:"Bolt\tests\BoltTest::testHello";d:0.01;s:29:"Bolt\tests\BoltTest::testPull";d:0.004;s:32:"Bolt\tests\BoltTest::testDiscard";d:0.004;s:29:"Bolt\tests\BoltTest::testNode";d:0.02;s:36:"Bolt\tests\BoltTest::testTransaction";d:0.012;s:30:"Bolt\tests\BoltTest::testError";d:0;s:37:"Bolt\tests\BoltTest::testErrorHandler";d:0;s:52:"Bolt\tests\PackStream\v1\PackerTest::test__construct";d:0.001;s:69:"Bolt\tests\PackStream\v1\PackerTest::testPackInteger with data set #0";d:0;s:69:"Bolt\tests\PackStream\v1\PackerTest::testPackInteger with data set #1";d:0;s:69:"Bolt\tests\PackStream\v1\PackerTest::testPackInteger with data set #2";d:0;s:69:"Bolt\tests\PackStream\v1\PackerTest::testPackInteger with data set #3";d:0;s:69:"Bolt\tests\PackStream\v1\PackerTest::testPackInteger with data set #4";d:0;s:69:"Bolt\tests\PackStream\v1\PackerTest::testPackInteger with data set #5";d:0;s:50:"Bolt\tests\PackStream\v1\PackerTest::testPackFloat";d:0;s:51:"Bolt\tests\PackStream\v1\PackerTest::testPackString";d:0.001;s:68:"Bolt\tests\PackStream\v1\PackerTest::testPackString with data set #0";d:0;s:68:"Bolt\tests\PackStream\v1\PackerTest::testPackString with data set #1";d:0;s:68:"Bolt\tests\PackStream\v1\PackerTest::testPackString with data set #2";d:0;s:68:"Bolt\tests\PackStream\v1\PackerTest::testPackString with data set #3";d:0;s:49:"Bolt\tests\PackStream\v1\PackerTest::testPackNull";d:0;s:49:"Bolt\tests\PackStream\v1\PackerTest::testPackBool";d:0;s:67:"Bolt\tests\PackStream\v1\PackerTest::testPackArray with data set #0";d:0.883;s:67:"Bolt\tests\PackStream\v1\PackerTest::testPackArray with data set #1";d:0;s:67:"Bolt\tests\PackStream\v1\PackerTest::testPackArray with data set #2";d:0.003;s:78:"Bolt\tests\PackStream\v1\PackerTest::testPackInteger with data set "+tiny_int"";d:0;s:78:"Bolt\tests\PackStream\v1\PackerTest::testPackInteger with data set "-tiny_int"";d:0;s:74:"Bolt\tests\PackStream\v1\PackerTest::testPackInteger with data set "int16"";d:0;s:74:"Bolt\tests\PackStream\v1\PackerTest::testPackInteger with data set "int32"";d:0;s:74:"Bolt\tests\PackStream\v1\PackerTest::testPackInteger with data set "int64"";d:0;s:73:"Bolt\tests\PackStream\v1\PackerTest::testPackInteger with data set "int8"";d:0;s:76:"Bolt\tests\PackStream\v1\PackerTest::testPackString with data set "string16"";d:0;s:76:"Bolt\tests\PackStream\v1\PackerTest::testPackString with data set "string32"";d:0;s:75:"Bolt\tests\PackStream\v1\PackerTest::testPackString with data set "string8"";d:0;s:72:"Bolt\tests\PackStream\v1\PackerTest::testPackString with data set "tiny"";d:0;s:73:"Bolt\tests\PackStream\v1\PackerTest::testPackArray with data set "list16"";d:0.003;s:73:"Bolt\tests\PackStream\v1\PackerTest::testPackArray with data set "list32"";d:0.963;s:72:"Bolt\tests\PackStream\v1\PackerTest::testPackArray with data set "list8"";d:0;s:71:"Bolt\tests\PackStream\v1\PackerTest::testPackArray with data set "tiny"";d:0;s:48:"Bolt\tests\PackStream\v1\PackerTest::testPackMap";d:0.002;s:65:"Bolt\tests\PackStream\v1\PackerTest::testPackMap with data set #0";d:1.909;s:72:"Bolt\tests\PackStream\v1\PackerTest::testPackArray with data set "map16"";d:0;s:72:"Bolt\tests\PackStream\v1\PackerTest::testPackArray with data set "map32"";d:0.002;s:71:"Bolt\tests\PackStream\v1\PackerTest::testPackArray with data set "map8"";d:0.001;s:70:"Bolt\tests\PackStream\v1\PackerTest::testPackMap with data set "map16"";d:0.009;s:70:"Bolt\tests\PackStream\v1\PackerTest::testPackMap with data set "map32"";d:1.879;s:69:"Bolt\tests\PackStream\v1\PackerTest::testPackMap with data set "map8"";d:0.001;s:69:"Bolt\tests\PackStream\v1\PackerTest::testPackMap with data set "tiny"";d:0;s:57:"Bolt\tests\PackStream\v1\PackerTest::testIntegerException";d:0.001;s:50:"Bolt\tests\PackStream\v1\PackerTest::testException";d:0;s:45:"Bolt\tests\PackStream\v1\PackerTest::testPack";d:0.004;s:70:"Bolt\tests\PackStream\v1\PackerTest::testPack with data set "struct16"";d:0.003;s:69:"Bolt\tests\PackStream\v1\PackerTest::testPack with data set "struct8"";d:0;s:66:"Bolt\tests\PackStream\v1\PackerTest::testPack with data set "tiny"";d:0;}}}

.vscode/settings.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"phpunit.colors": "--colors=always --configuration ./phpunit.xml"
3+
}

tests/PackStream/v1/PackerTest.php

Lines changed: 157 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -31,39 +31,52 @@ public function test__construct(): Packer
3131
return $packer;
3232
}
3333

34+
/**
35+
* @depends test__construct
36+
* @dataProvider packProvider
37+
* @param string $bin
38+
* @param array $args
39+
* @param Packer $packer
40+
* @throws \Exception
41+
*/
42+
public function testPack(string $bin, array $args, Packer $packer)
43+
{
44+
array_unshift($args, 0x88);
45+
$this->assertEquals($bin, $this->getMethod($packer, 'pack')->invokeArgs($packer, $args));
46+
}
47+
48+
/**
49+
* @return array
50+
*/
51+
public function packProvider(): array
52+
{
53+
$data = $this->provider(__FUNCTION__);
54+
foreach ($data as &$entry)
55+
$entry[1] = json_decode($entry[1], true);
56+
return $data;
57+
}
58+
3459
/**
3560
* @depends test__construct
3661
* @dataProvider integerProvider
37-
* @param string $hex
62+
* @param string $bin
3863
* @param int $number
3964
* @param Packer $packer
4065
* @throws \Exception
4166
*/
42-
public function testPackInteger(string $hex, int $number, Packer $packer)
67+
public function testPackInteger(string $bin, int $number, Packer $packer)
4368
{
44-
$reflection = new \ReflectionClass(get_class($packer));
45-
$method = $reflection->getMethod('packInteger');
46-
$method->setAccessible(true);
47-
48-
$this->assertEquals($hex, $this->toHex($method->invoke($packer, $number)));
69+
$this->assertEquals($bin, $this->getMethod($packer)->invoke($packer, $number));
4970
}
5071

5172
/**
5273
* @return array
5374
*/
5475
public function integerProvider(): array
5576
{
56-
$data = [
57-
['05', 5],
58-
['fb', -5],
59-
['c8ec', -20],
60-
['c90800', 2048],
61-
['ca0000dac0', 56000]
62-
];
63-
64-
if (PHP_INT_MAX > 2147483647)
65-
array_push($data, ['cb00000000fffffffe', 2147483647 * 2]);
66-
77+
$data = $this->provider(__FUNCTION__);
78+
foreach ($data as &$entry)
79+
$entry[1] = intval($entry[1]);
6780
return $data;
6881
}
6982

@@ -74,51 +87,130 @@ public function integerProvider(): array
7487
*/
7588
public function testPackFloat(Packer $packer)
7689
{
77-
$reflection = new \ReflectionClass(get_class($packer));
78-
$method = $reflection->getMethod('packFloat');
79-
$method->setAccessible(true);
90+
$this->assertEquals('c1400921f9f01b866e', $this->toHex($this->getMethod($packer)->invoke($packer, 3.14159)));
91+
}
8092

81-
$this->assertEquals('c1400921f9f01b866e', $this->toHex($method->invoke($packer, 3.14159)));
93+
/**
94+
* @depends test__construct
95+
* @param Packer $packer
96+
* @throws \Exception
97+
*/
98+
public function testPackNull(Packer $packer)
99+
{
100+
$this->assertEquals('c0', $this->toHex($this->getMethod($packer)->invoke($packer, null)));
101+
}
102+
103+
/**
104+
* @depends test__construct
105+
* @param Packer $packer
106+
* @throws \Exception
107+
*/
108+
public function testPackBool(Packer $packer)
109+
{
110+
$this->assertEquals('c2', $this->toHex($this->getMethod($packer)->invoke($packer, false)));
111+
$this->assertEquals('c3', $this->toHex($this->getMethod($packer)->invoke($packer, true)));
82112
}
83113

84114
/**
85115
* @depends test__construct
86116
* @dataProvider stringProvider
87-
* @param string $hex
117+
* @param string $bin
88118
* @param string $str
89119
* @param Packer $packer
90120
* @throws \Exception
91121
*/
92-
public function testPackString(string $hex, string $str, Packer $packer)
122+
public function testPackString(string $bin, string $str, Packer $packer)
93123
{
94-
$reflection = new \ReflectionClass(get_class($packer));
95-
$method = $reflection->getMethod('packString');
96-
$method->setAccessible(true);
97-
98-
$this->assertEquals($hex, $this->toHex($method->invoke($packer, $str)));
124+
$this->assertEquals($bin, $this->getMethod($packer)->invoke($packer, $str));
99125
}
100126

101127
/**
102128
* @return array
103129
*/
104130
public function stringProvider(): array
105131
{
106-
$rows = array_filter(file('strings.txt'));
107-
if (empty($rows) || count($rows) % 2 == 1)
108-
return [];
132+
return $this->provider(__FUNCTION__);
133+
}
109134

110-
$output = [];
111-
for ($i = 0; $i < count($rows); $i += 2) {
112-
array_push($output, [
113-
trim($rows[$i]),
114-
trim($rows[$i + 1])
115-
]);
116-
}
135+
/**
136+
* @depends test__construct
137+
* @dataProvider arrayProvider
138+
* @param string $bin
139+
* @param array $arr
140+
* @param Packer $packer
141+
* @throws \Exception
142+
*/
143+
public function testPackArray(string $bin, array $arr, Packer $packer)
144+
{
145+
$this->assertEquals($bin, $this->getMethod($packer)->invoke($packer, $arr));
146+
}
117147

118-
return $output;
148+
/**
149+
* @return array
150+
*/
151+
public function arrayProvider(): array
152+
{
153+
$data = $this->provider(__FUNCTION__);
154+
foreach ($data as &$entry)
155+
$entry[1] = array_map('intval', explode(',', $entry[1]));
156+
return $data;
119157
}
120158

121159
/**
160+
* @depends test__construct
161+
* @dataProvider mapProvider
162+
* @param string $bin
163+
* @param object $obj
164+
* @param Packer $packer
165+
* @throws \Exception
166+
*/
167+
public function testPackMap(string $bin, object $obj, Packer $packer)
168+
{
169+
$this->assertEquals($bin, $this->getMethod($packer)->invoke($packer, $obj));
170+
}
171+
172+
/**
173+
* @return array
174+
*/
175+
public function mapProvider(): array
176+
{
177+
$data = $this->provider(__FUNCTION__);
178+
foreach ($data as &$entry)
179+
$entry[1] = json_decode($entry[1]);
180+
return $data;
181+
}
182+
183+
/**
184+
* Test it on data type resource, which is not implemented
185+
* @depends test__construct
186+
* @param Packer $packer
187+
* @throws \Exception
188+
*/
189+
public function testException(Packer $packer)
190+
{
191+
$f = fopen(__FILE__, 'r');
192+
$this->expectException(\Exception::class);
193+
$this->getMethod($packer)->invoke($packer, $f);
194+
fclose($f);
195+
}
196+
197+
198+
/**
199+
* Get method from Packer as accessible
200+
* @param Packer $packer
201+
* @param string $name
202+
* @return \ReflectionMethod
203+
*/
204+
private function getMethod(Packer $packer, string $name = 'p'): \ReflectionMethod
205+
{
206+
$reflection = new \ReflectionClass(get_class($packer));
207+
$method = $reflection->getMethod($name);
208+
$method->setAccessible(true);
209+
return $method;
210+
}
211+
212+
/**
213+
* Bin to Hex convert
122214
* @param string $str
123215
* @return string
124216
*/
@@ -127,4 +219,29 @@ private function toHex(string $str): string
127219
return implode(unpack('H*', $str));
128220
}
129221

222+
/**
223+
* "Abstract" provider to read content of directory as provider array
224+
* @param string $fnc
225+
* @return array
226+
*/
227+
private function provider(string $fnc): array
228+
{
229+
$output = [];
230+
$path = __DIR__ . DS . $fnc . DS;
231+
232+
foreach (scandir($path) as $file) {
233+
$file_parts = pathinfo($file);
234+
switch ($file_parts['extension']) {
235+
case 'bin':
236+
$output[$file_parts['filename']][0] = file_get_contents($path . $file);
237+
break;
238+
case 'txt':
239+
$output[$file_parts['filename']][1] = trim(file_get_contents($path . $file));
240+
break;
241+
}
242+
}
243+
244+
return $output;
245+
}
246+
130247
}
650 Bytes
Binary file not shown.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300
424 KB
Binary file not shown.

tests/PackStream/v1/arrayProvider/list32.txt

Lines changed: 1 addition & 0 deletions
Large diffs are not rendered by default.
23 Bytes
Binary file not shown.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
�

0 commit comments

Comments
 (0)