4
4
5
5
use Nahid \JsonQ \Jsonq ;
6
6
use Nahid \JsonQ \Exceptions \FileNotFoundException ;
7
+ use Nahid \JsonQ \Exceptions \InvalidJsonException ;
7
8
8
9
class JsonQueriableTest extends AbstractTestCase
9
10
{
10
11
const FILE_NAME = 'data.json ' ;
12
+ const FILE_INVALID_NAME = 'invalid_data.json ' ;
11
13
12
14
/**
13
15
* @var Jsonq
@@ -19,53 +21,66 @@ class JsonQueriableTest extends AbstractTestCase
19
21
*/
20
22
protected $ file ;
21
23
22
- protected function createFile ()
23
- {
24
- $ json = [
25
- 'level1.1 ' => [
26
- 'level2.1 ' => [
27
- 'level3.1 ' => 'data31 ' ,
28
- 'level3.2 ' => 32 ,
29
- 'level3.3 ' => true ,
30
- ],
31
- 'level2.2 ' => [
32
- 'level3.4 ' => 'data34 ' ,
33
- 'level3.5 ' => 35 ,
34
- 'level3.6 ' => false ,
35
- ],
36
- 'level2.3 ' => [
37
- 'level3.7 ' => 'data37 ' ,
38
- 'level3.8 ' => 38 ,
39
- 'level3.9 ' => true ,
40
- ]
24
+ /**
25
+ * @var string
26
+ */
27
+ protected $ fileInvalid ;
28
+
29
+ protected static $ testData = [
30
+ 'level1.1 ' => [
31
+ 'level2.1 ' => [
32
+ 'level3.1 ' => 'data31 ' ,
33
+ 'level3.2 ' => 32 ,
34
+ 'level3.3 ' => true ,
41
35
],
42
- 'level1.2 ' => [
43
- 'level2.4 ' => [
44
- 'level3.10 ' => 'data310 ' ,
45
- 'level3.11 ' => 311 ,
46
- 'level3.12 ' => true ,
47
- ],
48
- 'level2.5 ' => [
49
- 'level3.13 ' => 'data313 ' ,
50
- 'level3.14 ' => 314 ,
51
- 'level3.15 ' => false ,
52
- ],
53
- 'level2.6 ' => [
54
- 'level3.16 ' => 'data316 ' ,
55
- 'level3.17 ' => 317 ,
56
- 'level3.18 ' => true ,
57
- ]
36
+ 'level2.2 ' => [
37
+ 'level3.4 ' => 'data34 ' ,
38
+ 'level3.5 ' => 35 ,
39
+ 'level3.6 ' => false ,
40
+ ],
41
+ 'level2.3 ' => [
42
+ 'level3.7 ' => 'data37 ' ,
43
+ 'level3.8 ' => 38 ,
44
+ 'level3.9 ' => true ,
58
45
]
59
- ];
60
-
61
- file_put_contents (self ::FILE_NAME , json_encode ($ json ));
46
+ ],
47
+ 'level1.2 ' => [
48
+ 'level2.4 ' => [
49
+ 'level3.10 ' => 'data310 ' ,
50
+ 'level3.11 ' => 311 ,
51
+ 'level3.12 ' => true ,
52
+ ],
53
+ 'level2.5 ' => [
54
+ 'level3.13 ' => 'data313 ' ,
55
+ 'level3.14 ' => 314 ,
56
+ 'level3.15 ' => false ,
57
+ ],
58
+ 'level2.6 ' => [
59
+ 'level3.16 ' => 'data316 ' ,
60
+ 'level3.17 ' => 317 ,
61
+ 'level3.18 ' => true ,
62
+ ]
63
+ ]
64
+ ];
65
+
66
+ protected function createFile ()
67
+ {
68
+ file_put_contents (self ::FILE_NAME , json_encode (self ::$ testData ));
62
69
$ this ->file = self ::FILE_NAME ;
63
70
}
64
71
65
- protected function removeFile ()
72
+ protected function createInvalidFile ()
73
+ {
74
+ file_put_contents (self ::FILE_INVALID_NAME , 'invalid_data ' );
75
+ $ this ->fileInvalid = self ::FILE_INVALID_NAME ;
76
+ }
77
+
78
+ protected function removeFiles ()
66
79
{
67
80
unlink (self ::FILE_NAME );
81
+ unlink (self ::FILE_INVALID_NAME );
68
82
$ this ->file = null ;
83
+ $ this ->fileInvalid = null ;
69
84
}
70
85
71
86
/**
@@ -84,12 +99,13 @@ private function getTestObject()
84
99
protected function setUp ()
85
100
{
86
101
$ this ->createFile ();
102
+ $ this ->createInvalidFile ();
87
103
$ this ->jsonq = new Jsonq (self ::FILE_NAME );
88
104
}
89
105
90
106
protected function tearDown ()
91
107
{
92
- $ this ->removeFile ();
108
+ $ this ->removeFiles ();
93
109
}
94
110
95
111
/**
@@ -146,6 +162,67 @@ public function testIsJson($input, $isReturnMap, $result = null)
146
162
$ this ->assertEquals ($ result , $ this ->jsonq ->isJson ($ input , $ isReturnMap ));
147
163
}
148
164
165
+ /**
166
+ * @param mixed $input
167
+ * @param bool $isObject
168
+ * @param array $result
169
+ *
170
+ * @dataProvider prepareResultProvider
171
+ */
172
+ public function testPrepareResult ($ input , $ isObject , $ result )
173
+ {
174
+ $ method = $ this ->makeCallable ($ this ->jsonq , 'prepareResult ' );
175
+
176
+ $ this ->assertEquals ($ result , $ method ->invokeArgs ($ this ->jsonq , [$ input , $ isObject ]));
177
+ }
178
+
179
+ /**
180
+ * @param mixed $file
181
+ * @param array $result
182
+ *
183
+ * @dataProvider getDataFromFileProvider
184
+ */
185
+ public function testGetDataFromFile ($ file , $ result )
186
+ {
187
+ $ method = $ this ->makeCallable ($ this ->jsonq , 'getDataFromFile ' );
188
+
189
+ if (is_string ($ result )) {
190
+ $ this ->expectException ($ result );
191
+ $ method ->invokeArgs ($ this ->jsonq , [$ file ]);
192
+ } else {
193
+ $ this ->assertEquals ($ result , $ method ->invokeArgs ($ this ->jsonq , [$ file ]));
194
+ }
195
+ }
196
+
197
+ public function getDataFromFileProvider ()
198
+ {
199
+ return [
200
+ [self ::FILE_NAME , self ::$ testData ],
201
+ [null , FileNotFoundException::class],
202
+ [true , FileNotFoundException::class],
203
+ [1 , FileNotFoundException::class],
204
+ ['invalid_path.json ' , FileNotFoundException::class],
205
+ [self ::FILE_INVALID_NAME , InvalidJsonException::class]
206
+ ];
207
+ }
208
+
209
+ public function prepareResultProvider ()
210
+ {
211
+ $ obj = new \stdClass ();
212
+ $ obj ->scalar = 'test ' ;
213
+ $ obj2 = new \stdClass ();
214
+ $ obj2 ->scalar = 'test2 ' ;
215
+
216
+ return [
217
+ [['test ' , 'test2 ' ], false , ['test ' , 'test2 ' ]],
218
+ [['key1 ' => 'test ' ,'key2 ' => 'test2 ' ], false , ['key1 ' => 'test ' ,'key2 ' => 'test2 ' ]],
219
+ [['test ' , 'test2 ' ], true , [$ obj , $ obj2 ]],
220
+ [['key1 ' => 'test ' ,'key2 ' => 'test2 ' ], true , ['key1 ' => $ obj , 'key2 ' => $ obj2 ]],
221
+ ['["test", "test2"] ' , false , '["test", "test2"] ' ],
222
+ ['["test", "test2"] ' , true , '["test", "test2"] ' ]
223
+ ];
224
+ }
225
+
149
226
public function isJsonProvider ()
150
227
{
151
228
return [
0 commit comments