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 9a50139 commit f6952a0
Show file tree
Hide file tree
Showing 7 changed files with 51 additions and 88 deletions.
18 changes: 0 additions & 18 deletions tests/Data/BaseSubject.php

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
use Ngmy\Observer\Observer;
use Ngmy\Observer\Subject;

class BaseObserver implements Observer
class ConcreteObserver implements Observer
{
/** @var int */
private $times = 0;
Expand Down
13 changes: 10 additions & 3 deletions tests/Data/SubjectTrait.php → tests/Data/ConcreteSubject.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,24 @@
namespace Ngmy\Observer\Tests\Data;

use Ngmy\Observer\Observer;
use Ngmy\Observer\Subject;

trait SubjectTrait
class ConcreteSubject extends Subject
{
public function execute(): void
{
for ($i = 0; $i < 10; $i++) {
$this->notify();
}
}

/**
* @param array<int, Observer> $observers
*
* @phpstan-param list<Observer> $observers
*/
public function withObservers(array $observers): BaseSubject
public function withObservers(array $observers): self
{
/** @var BaseSubject $new */
$new = new self();
$new->observers = $observers;
return $new;
Expand Down
9 changes: 0 additions & 9 deletions tests/Data/Observer1.php

This file was deleted.

17 changes: 0 additions & 17 deletions tests/Data/Subject1.php

This file was deleted.

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

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

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

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

$observer1 = new Data\Observer1();
$observer2 = new Data\Observer1();
$subject = new Data\Subject1();
$observer1 = new Data\ConcreteObserver();
$observer2 = new Data\ConcreteObserver();
$subject = new Data\ConcreteSubject();
$subject->attach($observer1);
$subject->attach($observer2);
$subject->detach($observer2);
Expand Down
56 changes: 28 additions & 28 deletions tests/SubjectTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,23 +15,23 @@ public function attachProvider(): array
{
return [
[
new Data\Subject1(),
[new Data\Observer1()],
new Data\ConcreteSubject(),
[new Data\ConcreteObserver()],
],
[
new Data\Subject1(),
[new Data\Observer1(), new Data\Observer1()],
new Data\ConcreteSubject(),
[new Data\ConcreteObserver(), new Data\ConcreteObserver()],
],
];
}

/**
* @param array<int, Data\BaseObserver> $attaches
* @param array<int, Data\ConcreteObserver> $attaches
* @dataProvider attachProvider
*
* @phpstan-param list<Data\BaseObserver> $attaches
* @phpstan-param list<Data\ConcreteObserver> $attaches
*/
public function testAttach(Data\BaseSubject $actual, array $attaches): void
public function testAttach(Data\ConcreteSubject $actual, array $attaches): void
{
foreach ($attaches as $o) {
$actual->attach($o);
Expand All @@ -47,16 +47,16 @@ public function testAttach(Data\BaseSubject $actual, array $attaches): void
*/
public function detachProvider(): array
{
$observer1 = new Data\Observer1();
$observer1 = new Data\ConcreteObserver();
return [
[
new Data\Subject1(),
new Data\ConcreteSubject(),
[$observer1],
[$observer1],
[],
],
[
new Data\Subject1(),
new Data\ConcreteSubject(),
[$observer1, $observer1],
[$observer1],
[$observer1],
Expand All @@ -65,16 +65,16 @@ public function detachProvider(): array
}

/**
* @param array<int, Data\BaseObserver> $attaches
* @param array<int, Data\BaseObserver> $detaches
* @param array<int, Data\BaseObserver> $remainings
* @param array<int, Data\ConcreteObserver> $attaches
* @param array<int, Data\ConcreteObserver> $detaches
* @param array<int, Data\ConcreteObserver> $remainings
* @dataProvider detachProvider
*
* @phpstan-param list<Data\BaseObserver> $attaches
* @phpstan-param list<Data\BaseObserver> $detaches
* @phpstan-param list<Data\BaseObserver> $remainings
* @phpstan-param list<Data\ConcreteObserver> $attaches
* @phpstan-param list<Data\ConcreteObserver> $detaches
* @phpstan-param list<Data\ConcreteObserver> $remainings
*/
public function testDetach(Data\BaseSubject $actual, array $attaches, array $detaches, array $remainings): void
public function testDetach(Data\ConcreteSubject $actual, array $attaches, array $detaches, array $remainings): void
{
foreach ($attaches as $o) {
$actual->attach($o);
Expand All @@ -95,35 +95,35 @@ public function notifyProvider(): array
{
return [
[
new Data\Subject1(),
[new Data\Observer1()],
new Data\ConcreteSubject(),
[new Data\ConcreteObserver()],
1,
],
[
new Data\Subject1(),
[new Data\Observer1(), new Data\Observer1()],
new Data\ConcreteSubject(),
[new Data\ConcreteObserver(), new Data\ConcreteObserver()],
1,
],
[
new Data\Subject1(),
[new Data\Observer1()],
new Data\ConcreteSubject(),
[new Data\ConcreteObserver()],
2,
],
[
new Data\Subject1(),
[new Data\Observer1(), new Data\Observer1()],
new Data\ConcreteSubject(),
[new Data\ConcreteObserver(), new Data\ConcreteObserver()],
2,
],
];
}

/**
* @param array<int, Data\BaseObserver> $attaches
* @param array<int, Data\ConcreteObserver> $attaches
* @dataProvider notifyProvider
*
* @phpstan-param list<Data\BaseObserver> $attaches
* @phpstan-param list<Data\ConcreteObserver> $attaches
*/
public function testNofity(Data\BaseSubject $subject, array $attaches, int $times): void
public function testNofity(Data\ConcreteSubject $subject, array $attaches, int $times): void
{
foreach ($attaches as $o) {
$subject->attach($o);
Expand Down

0 comments on commit f6952a0

Please sign in to comment.