Skip to content

Commit 032f08f

Browse files
committed
PHPC-314: Added a few tests that don't touch the server
1 parent bd9c021 commit 032f08f

File tree

4 files changed

+425
-0
lines changed

4 files changed

+425
-0
lines changed

tests/bson/bson-toPHP-008.phpt

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
--TEST--
2+
MongoDB\BSON\toPHP(): Setting fieldPath typemaps for compound types with string keys
3+
--FILE--
4+
<?php
5+
6+
require_once __DIR__ . "/../utils/tools.php";
7+
8+
class MyArrayObject extends ArrayObject implements MongoDB\BSON\Unserializable
9+
{
10+
function bsonUnserialize(array $data)
11+
{
12+
parent::__construct($data);
13+
}
14+
}
15+
16+
$bson = \MongoDB\BSON\fromPHP( [
17+
'_id' => 1,
18+
'array' => [1, 2, 3],
19+
'object' => ['string' => 'keys', 'for' => 'ever']
20+
] );
21+
22+
function fetch($bson, $typeMap = []) {
23+
return \MongoDB\BSON\toPHP($bson, $typeMap);
24+
}
25+
26+
27+
echo "Default\n";
28+
$document = fetch($bson);
29+
var_dump($document instanceof stdClass);
30+
var_dump(is_array($document->array));
31+
var_dump($document->object instanceof stdClass);
32+
33+
echo "\nSetting 'object' path to 'MyArrayObject'\n";
34+
$document = fetch($bson, ["fieldPaths" => [
35+
'object' => "MyArrayObject"
36+
]]);
37+
var_dump($document instanceof stdClass);
38+
var_dump(is_array($document->array));
39+
var_dump($document->object instanceof MyArrayObject);
40+
41+
echo "\nSetting 'object' and 'array' path to 'MyArrayObject'\n";
42+
$document = fetch($bson, ["fieldPaths" => [
43+
'object' => "MyArrayObject",
44+
'array' => "MyArrayObject",
45+
]]);
46+
var_dump($document instanceof stdClass);
47+
var_dump($document->array instanceof MyArrayObject);
48+
var_dump($document->object instanceof MyArrayObject);
49+
?>
50+
===DONE===
51+
<?php exit(0); ?>
52+
--EXPECT--
53+
Default
54+
bool(true)
55+
bool(true)
56+
bool(true)
57+
58+
Setting 'object' path to 'MyArrayObject'
59+
bool(true)
60+
bool(true)
61+
bool(true)
62+
63+
Setting 'object' and 'array' path to 'MyArrayObject'
64+
bool(true)
65+
bool(true)
66+
bool(true)
67+
===DONE===

tests/bson/bson-toPHP-009.phpt

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
--TEST--
2+
MongoDB\BSON\toPHP(): Setting fieldPath typemaps for compound types with numerical keys
3+
--FILE--
4+
<?php
5+
6+
require_once __DIR__ . "/../utils/tools.php";
7+
8+
class MyArrayObject extends ArrayObject implements MongoDB\BSON\Unserializable
9+
{
10+
function bsonUnserialize(array $data)
11+
{
12+
parent::__construct($data, ArrayObject::ARRAY_AS_PROPS);
13+
}
14+
}
15+
16+
$bson = \MongoDB\BSON\fromPHP( [
17+
'_id' => 1,
18+
'array0' => [0 => [ 4, 5, 6 ], 1 => [ 7, 8, 9 ]],
19+
'array1' => [1 => [ 4, 5, 6 ], 2 => [ 7, 8, 9 ]],
20+
] );
21+
22+
function fetch($bson, $typeMap = []) {
23+
return \MongoDB\BSON\toPHP($bson, $typeMap);
24+
}
25+
26+
27+
echo "Default\n";
28+
$document = fetch($bson);
29+
var_dump($document instanceof stdClass);
30+
var_dump(is_array($document->array0));
31+
var_dump(is_object($document->array1));
32+
var_dump($document->array1 instanceof stdClass);
33+
34+
echo "\nSetting 'array0' path to 'MyArrayObject'\n";
35+
$document = fetch($bson, ["fieldPaths" => [
36+
'array0' => "MyArrayObject"
37+
]]);
38+
var_dump($document instanceof stdClass);
39+
var_dump(is_object($document->array0));
40+
var_dump($document->array0 instanceof MyArrayObject);
41+
42+
echo "\nSetting 'array0.1' path to 'MyArrayObject'\n";
43+
$document = fetch($bson, ["fieldPaths" => [
44+
'array0.1' => "MyArrayObject",
45+
]]);
46+
var_dump($document instanceof stdClass);
47+
var_dump(is_array($document->array0));
48+
var_dump(is_array($document->array0[0]));
49+
var_dump($document->array0[1] instanceof MyArrayObject);
50+
51+
echo "\nSetting 'array1.1' path to 'MyArrayObject'\n";
52+
$document = fetch($bson, ["fieldPaths" => [
53+
'array1.1' => "MyArrayObject",
54+
]]);
55+
var_dump($document instanceof stdClass);
56+
var_dump(is_object($document->array1));
57+
var_dump($document->array1 instanceof stdClass);
58+
$a = ((array) $document->array1);
59+
var_dump($a[1] instanceof MyArrayObject);
60+
var_dump(is_array($a[2]));
61+
?>
62+
===DONE===
63+
<?php exit(0); ?>
64+
--EXPECT--
65+
Default
66+
bool(true)
67+
bool(true)
68+
bool(true)
69+
bool(true)
70+
71+
Setting 'array0' path to 'MyArrayObject'
72+
bool(true)
73+
bool(true)
74+
bool(true)
75+
76+
Setting 'array0.1' path to 'MyArrayObject'
77+
bool(true)
78+
bool(true)
79+
bool(true)
80+
bool(true)
81+
82+
Setting 'array1.1' path to 'MyArrayObject'
83+
bool(true)
84+
bool(true)
85+
bool(true)
86+
bool(true)
87+
bool(true)
88+
===DONE===

tests/bson/bson-toPHP-010.phpt

Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
--TEST--
2+
MongoDB\BSON\toPHP(): Setting fieldPath typemaps for compound types with wildcard keys
3+
--FILE--
4+
<?php
5+
6+
require_once __DIR__ . "/../utils/tools.php";
7+
8+
class MyArrayObject extends ArrayObject implements MongoDB\BSON\Unserializable
9+
{
10+
function bsonUnserialize(array $data)
11+
{
12+
parent::__construct($data, ArrayObject::ARRAY_AS_PROPS);
13+
}
14+
}
15+
16+
class MyWildcardArrayObject extends ArrayObject implements MongoDB\BSON\Unserializable
17+
{
18+
function bsonUnserialize(array $data)
19+
{
20+
parent::__construct($data, ArrayObject::ARRAY_AS_PROPS);
21+
}
22+
}
23+
24+
$bson = \MongoDB\BSON\fromPHP( [
25+
'_id' => 1,
26+
'array' => [0 => [ 4, 5, 6 ], 1 => [ 7, 8, 9 ]],
27+
'object' => ['one' => [ 4, 5, 6 ], 'two' => [ 7, 8, 9 ]],
28+
] );
29+
30+
function fetch($bson, $typeMap = []) {
31+
return \MongoDB\BSON\toPHP($bson, $typeMap);
32+
}
33+
34+
35+
echo "\nSetting 'array.$' path to 'MyWildcardArrayObject'\n";
36+
$document = fetch($bson, ["fieldPaths" => [
37+
'array.$' => "MyWildcardArrayObject"
38+
]]);
39+
var_dump($document instanceof stdClass);
40+
var_dump(is_array($document->array));
41+
var_dump($document->array[0] instanceof MyWildcardArrayObject);
42+
var_dump($document->array[1] instanceof MyWildcardArrayObject);
43+
44+
echo "\nSetting 'array.1' to 'MyArrayObject' and 'array.$' path to 'MyWildcardArrayObject'\n";
45+
$document = fetch($bson, ["fieldPaths" => [
46+
'array.1' => "MyArrayObject",
47+
'array.$' => "MyWildcardArrayObject"
48+
]]);
49+
var_dump($document instanceof stdClass);
50+
var_dump(is_array($document->array));
51+
var_dump($document->array[0] instanceof MyWildcardArrayObject);
52+
var_dump($document->array[1] instanceof MyArrayObject);
53+
54+
echo "\nSetting 'array.$' to 'MyWildcardArrayObject' and 'array.1' path to 'MyArrayObject'\n";
55+
$document = fetch($bson, ["fieldPaths" => [
56+
'array.$' => "MyWildcardArrayObject",
57+
'array.1' => "MyArrayObject"
58+
]]);
59+
var_dump($document instanceof stdClass);
60+
var_dump(is_array($document->array));
61+
var_dump($document->array[0] instanceof MyWildcardArrayObject);
62+
var_dump($document->array[1] instanceof MyWildcardArrayObject);
63+
64+
65+
echo "\nSetting 'object.$' path to 'MyWildcardArrayObject'\n";
66+
$document = fetch($bson, ["fieldPaths" => [
67+
'object.$' => "MyWildcardArrayObject"
68+
]]);
69+
var_dump($document instanceof stdClass);
70+
var_dump(is_object($document->object));
71+
var_dump($document->object->one instanceof MyWildcardArrayObject);
72+
var_dump($document->object->two instanceof MyWildcardArrayObject);
73+
74+
echo "\nSetting 'object.two' to 'MyArrayObject' and 'object.$' path to 'MyWildcardArrayObject'\n";
75+
$document = fetch($bson, ["fieldPaths" => [
76+
'object.two' => "MyArrayObject",
77+
'object.$' => "MyWildcardArrayObject"
78+
]]);
79+
var_dump($document instanceof stdClass);
80+
var_dump(is_object($document->object));
81+
var_dump($document->object->one instanceof MyWildcardArrayObject);
82+
var_dump($document->object->two instanceof MyArrayObject);
83+
84+
echo "\nSetting 'object.$' to 'MyWildcardArrayObject' and 'object.one' path to 'MyArrayObject'\n";
85+
$document = fetch($bson, ["fieldPaths" => [
86+
'object.$' => "MyWildcardArrayObject",
87+
'object.one' => "MyArrayObject"
88+
]]);
89+
var_dump($document instanceof stdClass);
90+
var_dump(is_object($document->object));
91+
var_dump($document->object->one instanceof MyWildcardArrayObject);
92+
var_dump($document->object->two instanceof MyWildcardArrayObject);
93+
?>
94+
===DONE===
95+
<?php exit(0); ?>
96+
--EXPECT--
97+
Setting 'array.$' path to 'MyWildcardArrayObject'
98+
bool(true)
99+
bool(true)
100+
bool(true)
101+
bool(true)
102+
103+
Setting 'array.1' to 'MyArrayObject' and 'array.$' path to 'MyWildcardArrayObject'
104+
bool(true)
105+
bool(true)
106+
bool(true)
107+
bool(true)
108+
109+
Setting 'array.$' to 'MyWildcardArrayObject' and 'array.1' path to 'MyArrayObject'
110+
bool(true)
111+
bool(true)
112+
bool(true)
113+
bool(true)
114+
115+
Setting 'object.$' path to 'MyWildcardArrayObject'
116+
bool(true)
117+
bool(true)
118+
bool(true)
119+
bool(true)
120+
121+
Setting 'object.two' to 'MyArrayObject' and 'object.$' path to 'MyWildcardArrayObject'
122+
bool(true)
123+
bool(true)
124+
bool(true)
125+
bool(true)
126+
127+
Setting 'object.$' to 'MyWildcardArrayObject' and 'object.one' path to 'MyArrayObject'
128+
bool(true)
129+
bool(true)
130+
bool(true)
131+
bool(true)
132+
===DONE===

0 commit comments

Comments
 (0)