File tree Expand file tree Collapse file tree 2 files changed +23
-0
lines changed
spec/Prophecy/Doubler/ClassPatch
src/Prophecy/Doubler/ClassPatch Expand file tree Collapse file tree 2 files changed +23
-0
lines changed Original file line number Diff line number Diff line change 5
5
use PhpSpec \ObjectBehavior ;
6
6
use Prophecy \Argument ;
7
7
use Prophecy \Doubler \Generator \Node \ArgumentNode ;
8
+ use Prophecy \Doubler \Generator \Node \ArgumentTypeNode ;
8
9
use Prophecy \Doubler \Generator \Node \ClassNode ;
9
10
use Prophecy \Doubler \Generator \Node \MethodNode ;
10
11
@@ -31,6 +32,9 @@ function it_makes_all_constructor_arguments_optional(
31
32
ArgumentNode $ arg1 ,
32
33
ArgumentNode $ arg2
33
34
) {
35
+ $ arg1 ->getTypeNode ()->willReturn (new ArgumentTypeNode ('string ' , 'null ' ));
36
+ $ arg2 ->getTypeNode ()->willReturn (new ArgumentTypeNode ('mixed ' ));
37
+
34
38
$ class ->isExtendable ('__construct ' )->willReturn (true );
35
39
$ class ->hasMethod ('__construct ' )->willReturn (true );
36
40
$ class ->getMethod ('__construct ' )->willReturn ($ method );
@@ -39,6 +43,14 @@ function it_makes_all_constructor_arguments_optional(
39
43
$ arg1 ->setDefault (null )->shouldBeCalled ();
40
44
$ arg2 ->setDefault (null )->shouldBeCalled ();
41
45
46
+ if (\PHP_VERSION_ID >= 80400 ) {
47
+ $ arg1 ->setTypeNode (new ArgumentTypeNode ('null ' , 'string ' ))->shouldBeCalled ();
48
+ $ arg2 ->setTypeNode ()->shouldNotBeCalled ();
49
+ } else {
50
+ $ arg1 ->setTypeNode ()->shouldNotBeCalled ();
51
+ $ arg2 ->setTypeNode ()->shouldNotBeCalled ();
52
+ }
53
+
42
54
$ method ->setCode (Argument::type ('string ' ))->shouldBeCalled ();
43
55
44
56
$ this ->apply ($ class );
Original file line number Diff line number Diff line change 11
11
12
12
namespace Prophecy \Doubler \ClassPatch ;
13
13
14
+ use Prophecy \Doubler \Generator \Node \ArgumentTypeNode ;
14
15
use Prophecy \Doubler \Generator \Node \ClassNode ;
15
16
use Prophecy \Doubler \Generator \Node \MethodNode ;
16
17
@@ -55,6 +56,16 @@ public function apply(ClassNode $node)
55
56
\assert ($ constructor !== null );
56
57
foreach ($ constructor ->getArguments () as $ argument ) {
57
58
$ argument ->setDefault (null );
59
+ if (\PHP_VERSION_ID < 80400 ) {
60
+ continue ;
61
+ }
62
+
63
+ $ types = $ argument ->getTypeNode ()->getNonNullTypes ();
64
+ if ([] == $ types || ['mixed ' ] == $ types ) {
65
+ continue ;
66
+ }
67
+
68
+ $ argument ->setTypeNode (new ArgumentTypeNode ('null ' , ...$ types ));
58
69
}
59
70
60
71
$ constructor ->setCode (<<<PHP
You can’t perform that action at this time.
0 commit comments