@@ -205,4 +205,89 @@ public function testExport()
205205
206206 $ this ->assertEquals ($ this ->getSampleData (), $ data ->export ());
207207 }
208+
209+ public function testOffsetExists ()
210+ {
211+ $ data = new Data ($ this ->getSampleData ());
212+
213+ foreach (
214+ ['a ' , 'i ' , 'b.d ' , 'f.g.h ' , 'h.i ' , 'b.d.d1 ' ] as $ existentKey
215+ ) {
216+ $ this ->assertTrue (isset ($ data [$ existentKey ]));
217+ }
218+
219+ foreach (
220+ ['p ' , 'b.b1 ' , 'b.c.C1 ' , 'h.i.I ' , 'b.d.d1.D1 ' ] as $ notExistentKey
221+ ) {
222+ $ this ->assertFalse (isset ($ data [$ notExistentKey ]));
223+ }
224+ }
225+
226+ public function testOffsetGet ()
227+ {
228+ $ wrappedData = new Data ([
229+ 'wrapped ' => [
230+ 'sampleData ' => $ this ->getSampleData ()
231+ ],
232+ ]);
233+
234+ $ data = $ wrappedData ->getData ('wrapped.sampleData ' );
235+
236+ $ this ->assertEquals ('A ' , $ data ['a ' ]);
237+ $ this ->assertEquals ('B ' , $ data ['b.b ' ]);
238+ $ this ->assertEquals (['C1 ' , 'C2 ' , 'C3 ' ], $ data ['b.c ' ]);
239+ $ this ->assertEquals ('D3 ' , $ data ['b.d.d3 ' ]);
240+ $ this ->assertEquals (['c1 ' , 'c2 ' , 'c3 ' ], $ data ['c ' ]);
241+ $ this ->assertNull ($ data ['foo ' ], 'Foo should not exist ' );
242+ $ this ->assertNull ($ data ['f.g.h.i ' ]);
243+
244+ $ this ->expectException (RuntimeException::class);
245+
246+ $ data = $ wrappedData ->getData ('wrapped.sampleData.a ' );
247+ }
248+
249+ public function testOffsetSet ()
250+ {
251+ $ data = new Data ;
252+
253+ $ this ->assertNull ($ data ['a ' ]);
254+ $ this ->assertNull ($ data ['b.c ' ]);
255+ $ this ->assertNull ($ data ['d.e ' ]);
256+
257+ $ data ['a ' ] = 'A ' ;
258+ $ data ['b.c ' ] = 'C ' ;
259+ $ data ['d.e ' ] = ['f ' => 'F ' , 'g ' => 'G ' ];
260+
261+ $ this ->assertEquals ('A ' , $ data ['a ' ]);
262+ $ this ->assertEquals (['c ' => 'C ' ], $ data ['b ' ]);
263+ $ this ->assertEquals ('C ' , $ data ['b.c ' ]);
264+ $ this ->assertEquals ('F ' , $ data ['d.e.f ' ]);
265+ $ this ->assertEquals (['e ' => ['f ' => 'F ' , 'g ' => 'G ' ]], $ data ['d ' ]);
266+
267+ $ this ->expectException (RuntimeException::class);
268+
269+ $ data ->set ('' , 'broken ' );
270+ }
271+
272+ public function testOffsetUnset ()
273+ {
274+ $ data = new Data ($ this ->getSampleData ());
275+
276+ unset($ data ['a ' ]);
277+ unset($ data ['b.c ' ]);
278+ unset($ data ['b.d.d3 ' ]);
279+ unset($ data ['d ' ]);
280+ unset($ data ['d.e.f ' ]);
281+ unset($ data ['empty.path ' ]);
282+
283+ $ this ->assertNull ($ data ['a ' ]);
284+ $ this ->assertNull ($ data ['b.c ' ]);
285+ $ this ->assertNull ($ data ['b.d.d3 ' ]);
286+ $ this ->assertNull (null );
287+ $ this ->assertEquals ('D2 ' , $ data ['b.d.d2 ' ]);
288+
289+ $ this ->expectException (RuntimeException::class);
290+
291+ unset($ data ['' ]);
292+ }
208293}
0 commit comments