9
9
10
10
use NiceshopsDev \NiceCore \PHPUnit \DefaultTestCase ;
11
11
use PHPUnit \Framework \MockObject \MockObject ;
12
+ use SplObserver ;
13
+ use SplSubject ;
12
14
13
15
/**
14
16
* UnitTest class for TraversableRunner
@@ -55,4 +57,95 @@ public function testTestClassExists()
55
57
$ this ->assertUseTrait (ObserverSubjectTrait::class, $ this ->object , "Mock Object uses " . ObserverSubjectTrait::class);
56
58
}
57
59
60
+
61
+ /**
62
+ * @group unit
63
+ * @small
64
+ *
65
+ * @covers ObserverSubjectTrait::getObserverStorage
66
+ */
67
+ public function testGetObserverStorage ()
68
+ {
69
+ $ observerStorage = $ this ->invokeMethod ($ this ->object , "getObserverStorage " );
70
+ $ this ->assertInstanceOf (ObserverStorage::class, $ observerStorage );
71
+ $ this ->assertSame ($ observerStorage , $ this ->invokeMethod ($ this ->object , "getObserverStorage " ));
72
+ }
73
+
74
+
75
+ /**
76
+ * @group unit
77
+ * @small
78
+ *
79
+ * @covers ObserverSubjectTrait::attach
80
+ */
81
+ public function testAttach ()
82
+ {
83
+ $ observerStorage = $ this ->getMockBuilder (ObserverStorage::class)->disableOriginalConstructor ()->setMethods (["addObserver " ])->getMock ();
84
+
85
+ /**
86
+ * @var SplObserver $observer
87
+ */
88
+ $ observer = $ this ->getMockBuilder (SplObserver::class)->getMock ();
89
+
90
+ $ this ->invokeSetProperty ($ this ->object , "observerStorage " , $ observerStorage );
91
+ $ observerStorage ->expects ($ this ->once ())->method ("addObserver " )->with (...[$ observer ]);
92
+
93
+ $ this ->assertSame ($ this ->object , $ this ->object ->attach ($ observer ));
94
+ }
95
+
96
+
97
+ /**
98
+ * @group unit
99
+ * @small
100
+ *
101
+ * @covers ObserverSubjectTrait::c
102
+ */
103
+ public function testDetach ()
104
+ {
105
+ $ observerStorage = $ this ->getMockBuilder (ObserverStorage::class)->disableOriginalConstructor ()->setMethods (["removeObserver " ])->getMock ();
106
+
107
+ /**
108
+ * @var SplObserver|MockObject $observer
109
+ */
110
+ $ observer = $ this ->getMockBuilder (SplObserver::class)->getMock ();
111
+
112
+ $ this ->invokeSetProperty ($ this ->object , "observerStorage " , $ observerStorage );
113
+ $ observerStorage ->expects ($ this ->once ())->method ("removeObserver " )->with (...[$ observer ]);
114
+
115
+ $ this ->assertSame ($ this ->object , $ this ->object ->detach ($ observer ));
116
+ }
117
+
118
+
119
+ /**
120
+ * @group unit
121
+ * @small
122
+ *
123
+ * @covers ObserverSubjectTrait::notify
124
+ */
125
+ public function testNotify ()
126
+ {
127
+ $ observerStorage = $ this ->getMockBuilder (ObserverStorage::class)->disableOriginalConstructor ()->setMethods (["runObserver " ])->getMock ();
128
+
129
+ $ this ->object = new class implements SplSubject {
130
+ use ObserverSubjectTrait;
131
+ };
132
+ $ this ->invokeSetProperty ($ this ->object , "observerStorage " , $ observerStorage );
133
+
134
+ /**
135
+ * @var SplObserver[]|MockObject[] $arrObserver
136
+ */
137
+ $ arrObserver = [
138
+ $ this ->getMockBuilder (SplObserver::class)->setMethods (["update " ])->getMock (),
139
+ $ this ->getMockBuilder (SplObserver::class)->setMethods (["update " ])->getMock (),
140
+ $ this ->getMockBuilder (SplObserver::class)->setMethods (["update " ])->getMock (),
141
+ ];
142
+
143
+ foreach ($ arrObserver as $ observer ) {
144
+ $ observer ->expects ($ this ->once ())->method ("update " )->with (...[$ this ->object ]);
145
+ }
146
+
147
+ $ observerStorage ->expects ($ this ->once ())->method ("runObserver " )->willReturn ($ arrObserver );
148
+
149
+ $ this ->assertSame ($ this ->object , $ this ->object ->notify ());
150
+ }
58
151
}
0 commit comments