11<?php
2+
23declare (strict_types=1 );
34
45namespace Xepozz \InternalMocker ;
@@ -7,9 +8,20 @@ final class MockerState
78{
89 private static array $ savedState = [];
910 private static array $ state = [];
11+ private static array $ defaults = [];
12+
13+ public static function addCondition (
14+ string $ namespace ,
15+ string $ functionName ,
16+ array $ arguments ,
17+ mixed $ result ,
18+ bool $ default = false
19+ ): void {
20+ if ($ default ) {
21+ self ::$ defaults [$ namespace ][$ functionName ] = $ result ;
22+ return ;
23+ }
1024
11- public static function addCondition (string $ namespace , string $ functionName , array $ arguments , $ result )
12- {
1325 if (self ::checkCondition ($ namespace , $ functionName , $ arguments )) {
1426 self ::replaceResult ($ namespace , $ functionName , $ arguments , $ result );
1527 return ;
@@ -23,25 +35,33 @@ public static function addCondition(string $namespace, string $functionName, arr
2335 ];
2436 }
2537
26- public static function checkCondition (string $ namespace , string $ functionName , array $ expectedArguments ): bool
27- {
38+ public static function checkCondition (
39+ string $ namespace ,
40+ string $ functionName ,
41+ array $ expectedArguments ,
42+ ): bool {
2843 $ mocks = self ::$ state [$ namespace ][$ functionName ] ?? [];
2944
3045 foreach ($ mocks as $ mock ) {
31- if (self ::compareArguments ($ mock[ ' arguments ' ] , $ expectedArguments )) {
46+ if (self ::compareArguments ($ mock , $ expectedArguments )) {
3247 return true ;
3348 }
3449 }
3550 return false ;
3651 }
3752
38- private static function compareArguments ($ arguments , array $ expectedArguments ): bool
53+ private static function compareArguments (array $ arguments , array $ expectedArguments ): bool
3954 {
40- return $ arguments === $ expectedArguments || array_values ($ arguments ) === $ expectedArguments ;
55+ return $ arguments ['arguments ' ] === $ expectedArguments
56+ || array_values ($ arguments ['arguments ' ]) === $ expectedArguments ;
4157 }
4258
43- private static function replaceResult (string $ namespace , string $ functionName , array $ arguments , $ result ): void
44- {
59+ private static function replaceResult (
60+ string $ namespace ,
61+ string $ functionName ,
62+ array $ arguments ,
63+ mixed $ result ,
64+ ): void {
4565 $ mocks = &self ::$ state [$ namespace ][$ functionName ];
4666
4767 foreach ($ mocks as &$ mock ) {
@@ -51,24 +71,39 @@ private static function replaceResult(string $namespace, string $functionName, a
5171 }
5272 }
5373
54- public static function getResult (string $ namespace , string $ functionName , array $ expectedArguments )
55- {
74+ public static function getResult (
75+ string $ namespace ,
76+ string $ functionName ,
77+ array $ expectedArguments ,
78+ ): mixed {
5679 $ mocks = self ::$ state [$ namespace ][$ functionName ] ?? [];
5780
5881 foreach ($ mocks as $ mock ) {
59- if (self ::compareArguments ($ mock[ ' arguments ' ] , $ expectedArguments )) {
82+ if (self ::compareArguments ($ mock , $ expectedArguments )) {
6083 return $ mock ['result ' ];
6184 }
6285 }
6386 return false ;
6487 }
6588
66- public static function saveState ()
89+ public static function getDefaultResult (
90+ string $ namespace ,
91+ string $ functionName ,
92+ callable $ fallback ,
93+ ): mixed {
94+ if (isset (self ::$ defaults [$ namespace ][$ functionName ])) {
95+ return self ::$ defaults [$ namespace ][$ functionName ];
96+ }
97+
98+ return $ fallback ();
99+ }
100+
101+ public static function saveState (): void
67102 {
68103 self ::$ savedState = self ::$ state ;
69104 }
70105
71- public static function resetState ()
106+ public static function resetState (): void
72107 {
73108 self ::$ state = self ::$ savedState ;
74109 }
0 commit comments