Skip to content

Commit

Permalink
fix
Browse files Browse the repository at this point in the history
  • Loading branch information
ngmy committed Mar 24, 2021
1 parent 9dca54e commit 57aeb66
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 38 deletions.
11 changes: 10 additions & 1 deletion tests/Data/ConcreteObserver.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,21 @@

class ConcreteObserver implements Observer
{
/** @var ConcreteSubject */
private $subject;
/** @var int */
private $times = 0;

public function __construct(ConcreteSubject $subject)
{
$this->subject = $subject;
}

public function update(Subject $changedSubject): void
{
$this->times++;
if ($changedSubject === $this->subject) {
$this->times++;
}
}

/**
Expand Down
23 changes: 12 additions & 11 deletions tests/SubjectObserverTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,30 +8,31 @@ class SubjectObserverTest extends TestCase
{
public function test(): void
{
$observer = new Data\ConcreteObserver();
$subject = new Data\ConcreteSubject();
$observer = new Data\ConcreteObserver($subject);
$subject->attach($observer);
$subject->execute();
$this->assertEquals(10, $observer->getTimes());

$observer1 = new Data\ConcreteObserver();
$observer2 = new Data\ConcreteObserver();
$subject = new Data\ConcreteSubject();
$observer1 = new Data\ConcreteObserver($subject);
$observer2 = new Data\ConcreteObserver($subject);
$subject->attach($observer1);
$subject->attach($observer2);
$subject->execute();
$this->assertEquals(10, $observer1->getTimes());
$this->assertEquals(10, $observer2->getTimes());

$observer = new Data\ConcreteObserver();
$subject = new Data\ConcreteSubject();
$observer = new Data\ConcreteObserver($subject);
$subject->attach($observer);
$subject->detach($observer);
$subject->execute();
$this->assertEquals(0, $observer->getTimes());

$observer1 = new Data\ConcreteObserver();
$observer2 = new Data\ConcreteObserver();
$subject = new Data\ConcreteSubject();
$observer1 = new Data\ConcreteObserver($subject);
$observer2 = new Data\ConcreteObserver($subject);
$subject->attach($observer1);
$subject->attach($observer2);
$subject->detach($observer1);
Expand All @@ -40,14 +41,14 @@ public function test(): void
$this->assertEquals(0, $observer1->getTimes());
$this->assertEquals(0, $observer2->getTimes());

$observer1 = new Data\ConcreteObserver();
$observer2 = new Data\ConcreteObserver();
$subject = new Data\ConcreteSubject();
$observer1 = new Data\ConcreteObserver($subject);
$observer2 = new Data\ConcreteObserver($subject);
$subject->attach($observer1);
$subject->attach($observer2);
$subject->detach($observer2);
$subject->detach($observer1);
$subject->execute();
$this->assertEquals(10, $observer1->getTimes());
$this->assertEquals(0, $observer2->getTimes());
$this->assertEquals(0, $observer1->getTimes());
$this->assertEquals(10, $observer2->getTimes());
}
}
62 changes: 36 additions & 26 deletions tests/SubjectTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,21 @@ class SubjectTest extends TestCase
*/
public function attachProvider(): array
{
$subject1 = new Data\ConcreteSubject();
$observer1 = new Data\ConcreteObserver($subject1);

$subject2 = new Data\ConcreteSubject();
$observer2_1 = new Data\ConcreteObserver($subject2);
$observer2_2 = new Data\ConcreteObserver($subject2);

return [
[
new Data\ConcreteSubject(),
[new Data\ConcreteObserver()],
$subject1,
[$observer1],
],
[
new Data\ConcreteSubject(),
[new Data\ConcreteObserver(), new Data\ConcreteObserver()],
$subject2,
[$observer2_1, $observer2_2],
],
];
}
Expand All @@ -47,19 +54,25 @@ public function testAttach(Data\ConcreteSubject $actual, array $attaches): void
*/
public function detachProvider(): array
{
$observer1 = new Data\ConcreteObserver();
$subject1 = new Data\ConcreteSubject();
$observer1 = new Data\ConcreteObserver($subject1);

$subject2 = new Data\ConcreteSubject();
$observer2_1 = new Data\ConcreteObserver($subject2);
$observer2_2 = new Data\ConcreteObserver($subject2);

return [
[
new Data\ConcreteSubject(),
new $subject1(),
[$observer1],
[$observer1],
[],
],
[
new Data\ConcreteSubject(),
[$observer1, $observer1],
[$observer1],
[$observer1],
new $subject2(),
[$observer2_1, $observer2_2],
[$observer2_1],
[$observer2_2],
],
];
}
Expand Down Expand Up @@ -93,26 +106,23 @@ public function testDetach(Data\ConcreteSubject $actual, array $attaches, array
*/
public function notifyProvider(): array
{
$subject1 = new Data\ConcreteSubject();
$observer1 = new Data\ConcreteObserver($subject1);

$subject2 = new Data\ConcreteSubject();
$observer2_1 = new Data\ConcreteObserver($subject2);
$observer2_2 = new Data\ConcreteObserver($subject2);

return [
[
new Data\ConcreteSubject(),
[new Data\ConcreteObserver()],
1,
],
[
new Data\ConcreteSubject(),
[new Data\ConcreteObserver(), new Data\ConcreteObserver()],
1,
],
[
new Data\ConcreteSubject(),
[new Data\ConcreteObserver()],
2,
$subject1,
[$observer1],
10,
],
[
new Data\ConcreteSubject(),
[new Data\ConcreteObserver(), new Data\ConcreteObserver()],
2,
$subject2,
[$observer2_1, $observer2_2],
10,
],
];
}
Expand Down

0 comments on commit 57aeb66

Please sign in to comment.