@@ -523,4 +523,92 @@ public function test_remove_nested_element_between_jsons(): void
523523 $ jsonDiff = new JsonDiff ($ original , $ new );
524524// dd($jsonDiff->getKeysRemoved());
525525 }
526+
527+ public function test_json_diff_with_scalar_types (): void
528+ {
529+ $ dataSets = [
530+ 'string ' => [
531+ 'original ' => 'Original String ' ,
532+ 'new ' => 'New String ' ,
533+ 'changes ' => 1 ,
534+ ],
535+ 'number ' => [
536+ 'original ' => 1 ,
537+ 'new ' => 2 ,
538+ 'changes ' => 1 ,
539+ ],
540+ 'boolean ' => [
541+ 'original ' => true ,
542+ 'new ' => false ,
543+ 'changes ' => 1 ,
544+ ],
545+ 'null ' => [
546+ 'original ' => null ,
547+ 'new ' => null ,
548+ 'changes ' => 0 ,
549+ ],
550+ ];
551+
552+ // Compare same data types
553+ foreach ($ dataSets as $ dataSet ) {
554+ $ jsonDiff = new JsonDiff ($ dataSet ['original ' ], $ dataSet ['new ' ]);
555+ $ this ->assertCount ($ dataSet ['changes ' ], $ jsonDiff ->getValuesChanged ());
556+ $ this ->assertSame ($ dataSet ['changes ' ], $ jsonDiff ->getNumberOfChanges ());
557+ $ this ->assertCount (0 , $ jsonDiff ->getKeysAdded ());
558+ $ this ->assertCount (0 , $ jsonDiff ->getKeysRemoved ());
559+ $ this ->assertCount (0 , $ jsonDiff ->getValuesAdded ());
560+ $ this ->assertCount (0 , $ jsonDiff ->getValuesRemoved ());
561+
562+ if (! $ dataSet ['changes ' ]) {
563+ continue ;
564+ }
565+
566+ /** @var ValueChange $valueChange */
567+ $ valueChange = $ jsonDiff ->getValuesChanged ()->first ();
568+ $ this ->assertSame (
569+ $ dataSet ['original ' ],
570+ $ valueChange ->getOldValue ()
571+ );
572+ $ this ->assertSame (
573+ $ dataSet ['new ' ],
574+ $ valueChange ->getNewValue ()
575+ );
576+ $ this ->assertSame (
577+ '' ,
578+ $ valueChange ->getPath ()
579+ );
580+ }
581+
582+ // Compare different data types
583+ foreach ($ dataSets as $ dataType => $ dataSet ) {
584+ foreach ($ dataSets as $ subDataType => $ subDataSet ) {
585+ if ($ dataType === $ subDataType ) {
586+ continue ;
587+ }
588+
589+ $ jsonDiff = new JsonDiff ($ dataSet ['original ' ], $ subDataSet ['original ' ]);
590+ $ this ->assertCount (1 , $ jsonDiff ->getValuesChanged ());
591+ $ this ->assertSame (1 , $ jsonDiff ->getNumberOfChanges ());
592+ $ this ->assertCount (0 , $ jsonDiff ->getKeysAdded ());
593+ $ this ->assertCount (0 , $ jsonDiff ->getKeysRemoved ());
594+ $ this ->assertCount (0 , $ jsonDiff ->getValuesAdded ());
595+ $ this ->assertCount (0 , $ jsonDiff ->getValuesRemoved ());
596+
597+ /** @var ValueChange $valueChange */
598+ $ valueChange = $ jsonDiff ->getValuesChanged ()->first ();
599+ $ this ->assertSame (
600+ $ dataSet ['original ' ],
601+ $ valueChange ->getOldValue ()
602+ );
603+ $ this ->assertSame (
604+ $ subDataSet ['original ' ],
605+ $ valueChange ->getNewValue ()
606+ );
607+ $ this ->assertSame (
608+ '' ,
609+ $ valueChange ->getPath ()
610+ );
611+ }
612+ }
613+ }
526614}
0 commit comments