mirror of
https://code.mensbeam.com/MensBeam/Arsse.git
synced 2024-12-22 13:12:41 +00:00
Tests for union context
This commit is contained in:
parent
206c5c0012
commit
630536d789
3 changed files with 34 additions and 4 deletions
|
@ -6,7 +6,7 @@
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
namespace JKingWeb\Arsse\Context;
|
namespace JKingWeb\Arsse\Context;
|
||||||
|
|
||||||
class RootContext extends AbstractContext {
|
abstract class RootContext extends AbstractContext {
|
||||||
public $limit = 0;
|
public $limit = 0;
|
||||||
public $offset = 0;
|
public $offset = 0;
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@ class UnionContext extends RootContext implements \ArrayAccess, \Countable, \Ite
|
||||||
protected $contexts = [];
|
protected $contexts = [];
|
||||||
|
|
||||||
public function offsetExists(mixed $offset): bool {
|
public function offsetExists(mixed $offset): bool {
|
||||||
return array_key_exists($offset, $this->contexts);
|
return isset($this->contexts[$offset]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function offsetGet(mixed $offset): mixed {
|
public function offsetGet(mixed $offset): mixed {
|
||||||
|
@ -18,7 +18,12 @@ class UnionContext extends RootContext implements \ArrayAccess, \Countable, \Ite
|
||||||
}
|
}
|
||||||
|
|
||||||
public function offsetSet(mixed $offset, mixed $value): void {
|
public function offsetSet(mixed $offset, mixed $value): void {
|
||||||
$this->contexts[$offset ?? count($this->contexts)] = $value;
|
assert($value instanceof RootContext, new \Exception("Union contexts may only contain other non-exclusion contexts"));
|
||||||
|
if (isset($offset)) {
|
||||||
|
$this->contexts[$offset] = $value;
|
||||||
|
} else {
|
||||||
|
$this->contexts[] = $value;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function offsetUnset(mixed $offset): void {
|
public function offsetUnset(mixed $offset): void {
|
||||||
|
@ -35,7 +40,7 @@ class UnionContext extends RootContext implements \ArrayAccess, \Countable, \Ite
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function __construct(Context ...$context) {
|
public function __construct(RootContext ...$context) {
|
||||||
$this->contexts = $context;
|
$this->contexts = $context;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,12 +8,14 @@ namespace JKingWeb\Arsse\TestCase\Misc;
|
||||||
|
|
||||||
use JKingWeb\Arsse\Context\Context;
|
use JKingWeb\Arsse\Context\Context;
|
||||||
use JKingWeb\Arsse\Context\ExclusionContext;
|
use JKingWeb\Arsse\Context\ExclusionContext;
|
||||||
|
use JKingWeb\Arsse\Context\UnionContext;
|
||||||
use JKingWeb\Arsse\Misc\Date;
|
use JKingWeb\Arsse\Misc\Date;
|
||||||
use JKingWeb\Arsse\Misc\ValueInfo;
|
use JKingWeb\Arsse\Misc\ValueInfo;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @covers \JKingWeb\Arsse\Context\Context<extended>
|
* @covers \JKingWeb\Arsse\Context\Context<extended>
|
||||||
* @covers \JKingWeb\Arsse\Context\ExclusionContext<extended>
|
* @covers \JKingWeb\Arsse\Context\ExclusionContext<extended>
|
||||||
|
* @covers \JKingWeb\Arsse\Context\UnionContext<extended>
|
||||||
*/
|
*/
|
||||||
class TestContext extends \JKingWeb\Arsse\Test\AbstractTest {
|
class TestContext extends \JKingWeb\Arsse\Test\AbstractTest {
|
||||||
protected $ranges = ['modifiedRange', 'markedRange', 'articleRange', 'editionRange'];
|
protected $ranges = ['modifiedRange', 'markedRange', 'articleRange', 'editionRange'];
|
||||||
|
@ -150,4 +152,27 @@ class TestContext extends \JKingWeb\Arsse\Test\AbstractTest {
|
||||||
$this->assertSame($c1, $c1->not->article(null));
|
$this->assertSame($c1, $c1->not->article(null));
|
||||||
$this->assertSame($c2, $c2->not->article(null));
|
$this->assertSame($c2, $c2->not->article(null));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testExerciseAUnionContext(): void {
|
||||||
|
$c1 = new UnionContext;
|
||||||
|
$c2 = new Context;
|
||||||
|
$c3 = new UnionContext;
|
||||||
|
$this->assertSame(0, sizeof($c1));
|
||||||
|
$c1[] = $c2;
|
||||||
|
$c1[2] = $c3;
|
||||||
|
$this->assertSame(2, sizeof($c1));
|
||||||
|
$this->assertSame($c2, $c1[0]);
|
||||||
|
$this->assertSame($c3, $c1[2]);
|
||||||
|
$this->assertSame(null, $c1[1]);
|
||||||
|
unset($c1[0]);
|
||||||
|
$this->assertFalse(isset($c1[0]));
|
||||||
|
$this->assertTrue(isset($c1[2]));
|
||||||
|
$c1[] = $c2;
|
||||||
|
$act = [];
|
||||||
|
foreach($c1 as $k => $v) {
|
||||||
|
$act[$k] = $v;
|
||||||
|
}
|
||||||
|
$exp = [2 => $c3, $c2];
|
||||||
|
$this->assertSame($exp, $act);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue