1
1
Fork 0
mirror of https://code.mensbeam.com/MensBeam/Arsse.git synced 2024-12-22 13:12:41 +00:00

Upgrade to PHPUnit 8

This commit is contained in:
J. King 2019-10-16 14:42:43 -04:00
parent b8b8a6aa70
commit 17a2fa96f8
53 changed files with 273 additions and 180 deletions

3
.gitignore vendored
View file

@ -9,7 +9,8 @@
/arsse.db* /arsse.db*
/config.php /config.php
/.php_cs.cache /.php_cs.cache
yarn-error.log /yarn-error.log
/tests/.phpunit.result.cache
# Windows files # Windows files

View file

@ -17,7 +17,7 @@ use JKingWeb\Arsse\ImportExport\OPML;
/** @covers \JKingWeb\Arsse\CLI */ /** @covers \JKingWeb\Arsse\CLI */
class TestCLI extends \JKingWeb\Arsse\Test\AbstractTest { class TestCLI extends \JKingWeb\Arsse\Test\AbstractTest {
public function setUp() { public function setUp(): void {
self::clearData(false); self::clearData(false);
$this->cli = \Phake::partialMock(CLI::class); $this->cli = \Phake::partialMock(CLI::class);
\Phake::when($this->cli)->logError->thenReturn(null); \Phake::when($this->cli)->logError->thenReturn(null);
@ -57,7 +57,7 @@ class TestCLI extends \JKingWeb\Arsse\Test\AbstractTest {
$this->assertLoaded(false); $this->assertLoaded(false);
} }
public function provideHelpText() { public function provideHelpText(): iterable {
return [ return [
["arsse.php --help", "arsse.php"], ["arsse.php --help", "arsse.php"],
["arsse --help", "arsse"], ["arsse --help", "arsse"],
@ -98,7 +98,7 @@ class TestCLI extends \JKingWeb\Arsse\Test\AbstractTest {
\Phake::verify(Arsse::$db)->feedUpdate; \Phake::verify(Arsse::$db)->feedUpdate;
} }
public function provideFeedUpdates() { public function provideFeedUpdates(): iterable {
return [ return [
["arsse.php feed refresh 1", 0, ""], ["arsse.php feed refresh 1", 0, ""],
["arsse.php feed refresh 2", 10502, ""], ["arsse.php feed refresh 2", 10502, ""],
@ -117,7 +117,7 @@ class TestCLI extends \JKingWeb\Arsse\Test\AbstractTest {
\Phake::verify($conf)->exportFile($file, true); \Phake::verify($conf)->exportFile($file, true);
} }
public function provideDefaultConfigurationSaves() { public function provideDefaultConfigurationSaves(): iterable {
return [ return [
["arsse.php conf save-defaults", 0, "php://output"], ["arsse.php conf save-defaults", 0, "php://output"],
["arsse.php conf save-defaults -", 0, "php://output"], ["arsse.php conf save-defaults -", 0, "php://output"],
@ -134,7 +134,7 @@ class TestCLI extends \JKingWeb\Arsse\Test\AbstractTest {
$this->assertConsole($this->cli, $cmd, $exitStatus, $output); $this->assertConsole($this->cli, $cmd, $exitStatus, $output);
} }
public function provideUserList() { public function provideUserList(): iterable {
$list = ["john.doe@example.com", "jane.doe@example.com"]; $list = ["john.doe@example.com", "jane.doe@example.com"];
$str = implode(PHP_EOL, $list); $str = implode(PHP_EOL, $list);
return [ return [
@ -160,7 +160,7 @@ class TestCLI extends \JKingWeb\Arsse\Test\AbstractTest {
$this->assertConsole($this->cli, $cmd, $exitStatus, $output); $this->assertConsole($this->cli, $cmd, $exitStatus, $output);
} }
public function provideUserAdditions() { public function provideUserAdditions(): iterable {
return [ return [
["arsse.php user add john.doe@example.com", 10403, ""], ["arsse.php user add john.doe@example.com", 10403, ""],
["arsse.php user add jane.doe@example.com", 0, "random password"], ["arsse.php user add jane.doe@example.com", 0, "random password"],
@ -186,7 +186,7 @@ class TestCLI extends \JKingWeb\Arsse\Test\AbstractTest {
$this->assertConsole($this->cli, $cmd, $exitStatus, $output); $this->assertConsole($this->cli, $cmd, $exitStatus, $output);
} }
public function provideUserAuthentication() { public function provideUserAuthentication(): iterable {
$l = new \JKingWeb\Arsse\Lang; $l = new \JKingWeb\Arsse\Lang;
$success = $l("CLI.Auth.Success"); $success = $l("CLI.Auth.Success");
$failure = $l("CLI.Auth.Failure"); $failure = $l("CLI.Auth.Failure");
@ -215,7 +215,7 @@ class TestCLI extends \JKingWeb\Arsse\Test\AbstractTest {
$this->assertConsole($this->cli, $cmd, $exitStatus, $output); $this->assertConsole($this->cli, $cmd, $exitStatus, $output);
} }
public function provideUserRemovals() { public function provideUserRemovals(): iterable {
return [ return [
["arsse.php user remove john.doe@example.com", 0, ""], ["arsse.php user remove john.doe@example.com", 0, ""],
["arsse.php user remove jane.doe@example.com", 10402, ""], ["arsse.php user remove jane.doe@example.com", 10402, ""],
@ -241,7 +241,7 @@ class TestCLI extends \JKingWeb\Arsse\Test\AbstractTest {
$this->assertConsole($this->cli, $cmd, $exitStatus, $output); $this->assertConsole($this->cli, $cmd, $exitStatus, $output);
} }
public function provideUserPasswordChanges() { public function provideUserPasswordChanges(): iterable {
return [ return [
["arsse.php user set-pass john.doe@example.com", 0, "random password"], ["arsse.php user set-pass john.doe@example.com", 0, "random password"],
["arsse.php user set-pass john.doe@example.com superman", 0, ""], ["arsse.php user set-pass john.doe@example.com superman", 0, ""],
@ -271,7 +271,7 @@ class TestCLI extends \JKingWeb\Arsse\Test\AbstractTest {
$this->assertConsole($this->cli, $cmd, $exitStatus, $output); $this->assertConsole($this->cli, $cmd, $exitStatus, $output);
} }
public function provideUserPasswordClearings() { public function provideUserPasswordClearings(): iterable {
return [ return [
["arsse.php user unset-pass john.doe@example.com", 0, ""], ["arsse.php user unset-pass john.doe@example.com", 0, ""],
["arsse.php user unset-pass jane.doe@example.com", 10402, ""], ["arsse.php user unset-pass jane.doe@example.com", 10402, ""],
@ -292,7 +292,7 @@ class TestCLI extends \JKingWeb\Arsse\Test\AbstractTest {
\Phake::verify($opml)->exportFile($file, $user, $flat); \Phake::verify($opml)->exportFile($file, $user, $flat);
} }
public function provideOpmlExports() { public function provideOpmlExports(): iterable {
return [ return [
["arsse.php export john.doe@example.com", 0, "php://output", "john.doe@example.com", false], ["arsse.php export john.doe@example.com", 0, "php://output", "john.doe@example.com", false],
["arsse.php export john.doe@example.com -", 0, "php://output", "john.doe@example.com", false], ["arsse.php export john.doe@example.com -", 0, "php://output", "john.doe@example.com", false],
@ -333,7 +333,7 @@ class TestCLI extends \JKingWeb\Arsse\Test\AbstractTest {
\Phake::verify($opml)->importFile($file, $user, $flat, $replace); \Phake::verify($opml)->importFile($file, $user, $flat, $replace);
} }
public function provideOpmlImports() { public function provideOpmlImports(): iterable {
return [ return [
["arsse.php import john.doe@example.com", 0, "php://input", "john.doe@example.com", false, false], ["arsse.php import john.doe@example.com", 0, "php://input", "john.doe@example.com", false, false],
["arsse.php import john.doe@example.com -", 0, "php://input", "john.doe@example.com", false, false], ["arsse.php import john.doe@example.com -", 0, "php://input", "john.doe@example.com", false, false],

View file

@ -14,7 +14,7 @@ class TestConf extends \JKingWeb\Arsse\Test\AbstractTest {
public static $vfs; public static $vfs;
public static $path; public static $path;
public function setUp() { public function setUp(): void {
self::clearData(); self::clearData();
self::$vfs = vfsStream::setup("root", null, [ self::$vfs = vfsStream::setup("root", null, [
'confGood' => '<?php return Array("lang" => "xx");', 'confGood' => '<?php return Array("lang" => "xx");',
@ -32,7 +32,7 @@ class TestConf extends \JKingWeb\Arsse\Test\AbstractTest {
chmod(self::$path."confForbidden", 0000); chmod(self::$path."confForbidden", 0000);
} }
public function tearDown() { public function tearDown(): void {
self::$path = null; self::$path = null;
self::$vfs = null; self::$vfs = null;
self::clearData(); self::clearData();

View file

@ -41,7 +41,7 @@ abstract class AbstractTest extends \JKingWeb\Arsse\Test\AbstractTest {
return $class->getShortName(); return $class->getShortName();
} }
public static function setUpBeforeClass() { public static function setUpBeforeClass(): void {
// establish a clean baseline // establish a clean baseline
static::clearData(); static::clearData();
// perform an initial connection to the database to reset its version to zero // perform an initial connection to the database to reset its version to zero
@ -61,7 +61,7 @@ abstract class AbstractTest extends \JKingWeb\Arsse\Test\AbstractTest {
Arsse::$db->driverSchemaUpdate(); Arsse::$db->driverSchemaUpdate();
} }
public function setUp() { public function setUp(): void {
// get the name of the test's test series // get the name of the test's test series
$this->series = $this->findTraitofTest($this->getName(false)); $this->series = $this->findTraitofTest($this->getName(false));
static::clearData(); static::clearData();
@ -83,7 +83,7 @@ abstract class AbstractTest extends \JKingWeb\Arsse\Test\AbstractTest {
} }
} }
public function tearDown() { public function tearDown(): void {
// call the series-specific teardown method // call the series-specific teardown method
$this->series = $this->findTraitofTest($this->getName(false)); $this->series = $this->findTraitofTest($this->getName(false));
$tearDown = "tearDown".$this->series; $tearDown = "tearDown".$this->series;
@ -96,7 +96,7 @@ abstract class AbstractTest extends \JKingWeb\Arsse\Test\AbstractTest {
static::clearData(); static::clearData();
} }
public static function tearDownAfterClass() { public static function tearDownAfterClass(): void {
if (static::$drv) { if (static::$drv) {
// wipe the database absolutely clean // wipe the database absolutely clean
static::dbRaze(static::$drv); static::dbRaze(static::$drv);

View file

@ -420,7 +420,7 @@ trait SeriesArticle {
$this->assertEquals($exp, $ids); $this->assertEquals($exp, $ids);
} }
public function provideContextMatches() { public function provideContextMatches(): iterable {
return [ return [
'Blank context' => [new Context, [1,2,3,4,5,6,7,8,19,20]], 'Blank context' => [new Context, [1,2,3,4,5,6,7,8,19,20]],
'Folder tree' => [(new Context)->folder(1), [5,6,7,8]], 'Folder tree' => [(new Context)->folder(1), [5,6,7,8]],
@ -582,7 +582,7 @@ trait SeriesArticle {
$this->assertSame($exp, $act); $this->assertSame($exp, $act);
} }
public function provideOrderedLists() { public function provideOrderedLists(): iterable {
return [ return [
[["id"], [1,2,3,4,5,6,7,8,19,20]], [["id"], [1,2,3,4,5,6,7,8,19,20]],
[["id asc"], [1,2,3,4,5,6,7,8,19,20]], [["id asc"], [1,2,3,4,5,6,7,8,19,20]],
@ -1058,7 +1058,7 @@ trait SeriesArticle {
Arsse::$db->articleList($this->user, (new Context)->$option([])); Arsse::$db->articleList($this->user, (new Context)->$option([]));
} }
public function provideArrayContextOptions() { public function provideArrayContextOptions(): iterable {
foreach ([ foreach ([
"articles", "editions", "articles", "editions",
"subscriptions", "foldersShallow", //"folders", "subscriptions", "foldersShallow", //"folders",

View file

@ -42,7 +42,7 @@ trait SeriesMiscellany {
} }
public function testCheckCharacterSetAcceptability() { public function testCheckCharacterSetAcceptability() {
$this->assertInternalType("bool", Arsse::$db->driverCharsetAcceptable()); $this->assertIsBool(Arsse::$db->driverCharsetAcceptable());
} }
public function testPerformMaintenance() { public function testPerformMaintenance() {

View file

@ -12,7 +12,7 @@ use JKingWeb\Arsse\Database;
class TestDatabase extends \JKingWeb\Arsse\Test\AbstractTest { class TestDatabase extends \JKingWeb\Arsse\Test\AbstractTest {
protected $db = null; protected $db = null;
public function setUp() { public function setUp(): void {
self::clearData(); self::clearData();
self::setConf(); self::setConf();
try { try {
@ -22,7 +22,7 @@ class TestDatabase extends \JKingWeb\Arsse\Test\AbstractTest {
} }
} }
public function tearDown() { public function tearDown(): void {
$this->db = null; $this->db = null;
self::clearData(); self::clearData();
} }
@ -34,7 +34,7 @@ class TestDatabase extends \JKingWeb\Arsse\Test\AbstractTest {
$this->assertSame($exp, $this->db->generateIn($inV, $inT)); $this->assertSame($exp, $this->db->generateIn($inV, $inT));
} }
public function provideInClauses() { public function provideInClauses(): iterable {
$l = Database::LIMIT_SET_SIZE + 1; $l = Database::LIMIT_SET_SIZE + 1;
$strings = array_fill(0, $l, ""); $strings = array_fill(0, $l, "");
$ints = range(1, $l); $ints = range(1, $l);
@ -69,7 +69,7 @@ class TestDatabase extends \JKingWeb\Arsse\Test\AbstractTest {
$this->assertSame($exp, $this->db->generateSearch($inV, $inC, $inAny)); $this->assertSame($exp, $this->db->generateSearch($inV, $inC, $inAny));
} }
public function provideSearchClauses() { public function provideSearchClauses(): iterable {
$terms = array_fill(0, Database::LIMIT_SET_SIZE + 1, "a"); $terms = array_fill(0, Database::LIMIT_SET_SIZE + 1, "a");
$clause = array_fill(0, Database::LIMIT_SET_SIZE + 1, "test like '%a%' escape '^'"); $clause = array_fill(0, Database::LIMIT_SET_SIZE + 1, "test like '%a%' escape '^'");
$longString = str_repeat("0", Database::LIMIT_SET_STRING_LENGTH + 1); $longString = str_repeat("0", Database::LIMIT_SET_STRING_LENGTH + 1);

View file

@ -23,14 +23,14 @@ abstract class BaseDriver extends \JKingWeb\Arsse\Test\AbstractTest {
//'dbSQLite3File' => "(temporary file)", //'dbSQLite3File' => "(temporary file)",
]; ];
public static function setUpBeforeClass() { public static function setUpBeforeClass(): void {
// establish a clean baseline // establish a clean baseline
static::clearData(); static::clearData();
static::setConf(static::$conf); static::setConf(static::$conf);
static::$interface = static::dbInterface(); static::$interface = static::dbInterface();
} }
public function setUp() { public function setUp(): void {
self::clearData(); self::clearData();
self::setConf(static::$conf); self::setConf(static::$conf);
if (!static::$interface) { if (!static::$interface) {
@ -45,13 +45,13 @@ abstract class BaseDriver extends \JKingWeb\Arsse\Test\AbstractTest {
$this->drv = new static::$dbDriverClass; $this->drv = new static::$dbDriverClass;
} }
public function tearDown() { public function tearDown(): void {
// deconstruct the driver // deconstruct the driver
unset($this->drv); unset($this->drv);
self::clearData(); self::clearData();
} }
public static function tearDownAfterClass() { public static function tearDownAfterClass(): void {
if (static::$interface) { if (static::$interface) {
// completely clear the database // completely clear the database
static::dbRaze(static::$interface); static::dbRaze(static::$interface);

View file

@ -15,14 +15,14 @@ abstract class BaseResult extends \JKingWeb\Arsse\Test\AbstractTest {
abstract protected function makeResult(string $q): array; abstract protected function makeResult(string $q): array;
public static function setUpBeforeClass() { public static function setUpBeforeClass(): void {
// establish a clean baseline // establish a clean baseline
static::clearData(); static::clearData();
static::setConf(); static::setConf();
static::$interface = static::dbInterface(); static::$interface = static::dbInterface();
} }
public function setUp() { public function setUp(): void {
self::clearData(); self::clearData();
self::setConf(); self::setConf();
if (!static::$interface) { if (!static::$interface) {
@ -33,11 +33,11 @@ abstract class BaseResult extends \JKingWeb\Arsse\Test\AbstractTest {
$this->resultClass = static::$dbResultClass; $this->resultClass = static::$dbResultClass;
} }
public function tearDown() { public function tearDown(): void {
self::clearData(); self::clearData();
} }
public static function tearDownAfterClass() { public static function tearDownAfterClass(): void {
if (static::$interface) { if (static::$interface) {
// completely clear the database // completely clear the database
static::dbRaze(static::$interface); static::dbRaze(static::$interface);

View file

@ -15,14 +15,14 @@ abstract class BaseStatement extends \JKingWeb\Arsse\Test\AbstractTest {
abstract protected function makeStatement(string $q, array $types = []): array; abstract protected function makeStatement(string $q, array $types = []): array;
abstract protected function decorateTypeSyntax(string $value, string $type): string; abstract protected function decorateTypeSyntax(string $value, string $type): string;
public static function setUpBeforeClass() { public static function setUpBeforeClass(): void {
// establish a clean baseline // establish a clean baseline
static::clearData(); static::clearData();
static::setConf(); static::setConf();
static::$interface = static::dbInterface(); static::$interface = static::dbInterface();
} }
public function setUp() { public function setUp(): void {
self::clearData(); self::clearData();
self::setConf(); self::setConf();
if (!static::$interface) { if (!static::$interface) {
@ -33,11 +33,11 @@ abstract class BaseStatement extends \JKingWeb\Arsse\Test\AbstractTest {
$this->statementClass = static::$dbStatementClass; $this->statementClass = static::$dbStatementClass;
} }
public function tearDown() { public function tearDown(): void {
self::clearData(); self::clearData();
} }
public static function tearDownAfterClass() { public static function tearDownAfterClass(): void {
if (static::$interface) { if (static::$interface) {
// completely clear the database // completely clear the database
static::dbRaze(static::$interface); static::dbRaze(static::$interface);
@ -129,7 +129,7 @@ abstract class BaseStatement extends \JKingWeb\Arsse\Test\AbstractTest {
$s->runArray(['ook', 'eek']); $s->runArray(['ook', 'eek']);
} }
public function provideBindings() { public function provideBindings(): iterable {
$dateMutable = new \DateTime("Noon Today", new \DateTimezone("America/Toronto")); $dateMutable = new \DateTime("Noon Today", new \DateTimezone("America/Toronto"));
$dateImmutable = new \DateTimeImmutable("Noon Today", new \DateTimezone("America/Toronto")); $dateImmutable = new \DateTimeImmutable("Noon Today", new \DateTimezone("America/Toronto"));
$dateUTC = new \DateTime("@".$dateMutable->getTimestamp(), new \DateTimezone("UTC")); $dateUTC = new \DateTime("@".$dateMutable->getTimestamp(), new \DateTimezone("UTC"));
@ -272,7 +272,7 @@ abstract class BaseStatement extends \JKingWeb\Arsse\Test\AbstractTest {
} }
} }
public function provideBinaryBindings() { public function provideBinaryBindings(): iterable {
$dateMutable = new \DateTime("Noon Today", new \DateTimezone("America/Toronto")); $dateMutable = new \DateTime("Noon Today", new \DateTimezone("America/Toronto"));
$dateImmutable = new \DateTimeImmutable("Noon Today", new \DateTimezone("America/Toronto")); $dateImmutable = new \DateTimeImmutable("Noon Today", new \DateTimezone("America/Toronto"));
$dateUTC = new \DateTime("@".$dateMutable->getTimestamp(), new \DateTimezone("UTC")); $dateUTC = new \DateTime("@".$dateMutable->getTimestamp(), new \DateTimezone("UTC"));

View file

@ -18,14 +18,14 @@ class BaseUpdate extends \JKingWeb\Arsse\Test\AbstractTest {
protected $base; protected $base;
protected $path; protected $path;
public static function setUpBeforeClass() { public static function setUpBeforeClass(): void {
// establish a clean baseline // establish a clean baseline
static::clearData(); static::clearData();
static::setConf(); static::setConf();
static::$interface = static::dbInterface(); static::$interface = static::dbInterface();
} }
public function setUp() { public function setUp(): void {
if (!static::$interface) { if (!static::$interface) {
$this->markTestSkipped(static::$implementation." database driver not available"); $this->markTestSkipped(static::$implementation." database driver not available");
} }
@ -42,14 +42,14 @@ class BaseUpdate extends \JKingWeb\Arsse\Test\AbstractTest {
static::dbRaze(static::$interface); static::dbRaze(static::$interface);
} }
public function tearDown() { public function tearDown(): void {
// deconstruct the driver // deconstruct the driver
unset($this->drv); unset($this->drv);
unset($this->path, $this->base, $this->vfs); unset($this->path, $this->base, $this->vfs);
self::clearData(); self::clearData();
} }
public static function tearDownAfterClass() { public static function tearDownAfterClass(): void {
if (static::$interface) { if (static::$interface) {
// completely clear the database // completely clear the database
static::dbRaze(static::$interface); static::dbRaze(static::$interface);

View file

@ -13,7 +13,7 @@ use JKingWeb\Arsse\Db\MySQL\Driver as Driver;
* @covers \JKingWeb\Arsse\Db\MySQL\Driver<extended> * @covers \JKingWeb\Arsse\Db\MySQL\Driver<extended>
* @covers \JKingWeb\Arsse\Db\MySQL\ExceptionBuilder */ * @covers \JKingWeb\Arsse\Db\MySQL\ExceptionBuilder */
class TestCreation extends \JKingWeb\Arsse\Test\AbstractTest { class TestCreation extends \JKingWeb\Arsse\Test\AbstractTest {
public function setUp() { public function setUp(): void {
if (!Driver::requirementsMet()) { if (!Driver::requirementsMet()) {
$this->markTestSkipped("MySQL extension not loaded"); $this->markTestSkipped("MySQL extension not loaded");
} }

View file

@ -13,7 +13,7 @@ use JKingWeb\Arsse\Db\MySQL\PDODriver as Driver;
* @covers \JKingWeb\Arsse\Db\MySQL\PDODriver<extended> * @covers \JKingWeb\Arsse\Db\MySQL\PDODriver<extended>
* @covers \JKingWeb\Arsse\Db\MySQL\ExceptionBuilder */ * @covers \JKingWeb\Arsse\Db\MySQL\ExceptionBuilder */
class TestCreation extends \JKingWeb\Arsse\Test\AbstractTest { class TestCreation extends \JKingWeb\Arsse\Test\AbstractTest {
public function setUp() { public function setUp(): void {
if (!Driver::requirementsMet()) { if (!Driver::requirementsMet()) {
$this->markTestSkipped("PDO-MySQL extension not loaded"); $this->markTestSkipped("PDO-MySQL extension not loaded");
} }

View file

@ -13,7 +13,7 @@ use JKingWeb\Arsse\Db\PostgreSQL\Driver;
* @group slow * @group slow
* @covers \JKingWeb\Arsse\Db\PostgreSQL\Driver<extended> */ * @covers \JKingWeb\Arsse\Db\PostgreSQL\Driver<extended> */
class TestCreation extends \JKingWeb\Arsse\Test\AbstractTest { class TestCreation extends \JKingWeb\Arsse\Test\AbstractTest {
public function setUp() { public function setUp(): void {
if (!Driver::requirementsMet()) { if (!Driver::requirementsMet()) {
$this->markTestSkipped("PostgreSQL extension not loaded"); $this->markTestSkipped("PostgreSQL extension not loaded");
} }
@ -35,7 +35,7 @@ class TestCreation extends \JKingWeb\Arsse\Test\AbstractTest {
} }
} }
public function provideConnectionStrings() { public function provideConnectionStrings(): iterable {
return [ return [
[false, "arsse", "secret", "arsse", "", 5432, "", "dbname='arsse' password='secret' user='arsse'"], [false, "arsse", "secret", "arsse", "", 5432, "", "dbname='arsse' password='secret' user='arsse'"],
[false, "arsse", "p word", "arsse", "", 5432, "", "dbname='arsse' password='p word' user='arsse'"], [false, "arsse", "p word", "arsse", "", 5432, "", "dbname='arsse' password='p word' user='arsse'"],

View file

@ -19,7 +19,7 @@ class TestDatabase extends \JKingWeb\Arsse\TestCase\Database\AbstractTest {
return (int) static::$drv->query("SELECT coalesce(last_value, (select max(id) from $table)) + 1 from pg_sequences where sequencename = '{$table}_id_seq'")->getValue(); return (int) static::$drv->query("SELECT coalesce(last_value, (select max(id) from $table)) + 1 from pg_sequences where sequencename = '{$table}_id_seq'")->getValue();
} }
public function setUp() { public function setUp(): void {
parent::setUp(); parent::setUp();
$seqList = $seqList =
"select "select

View file

@ -18,7 +18,7 @@ class TestDriver extends \JKingWeb\Arsse\TestCase\Db\BaseDriver {
protected $lock = ["BEGIN", "LOCK TABLE arsse_meta IN EXCLUSIVE MODE NOWAIT"]; protected $lock = ["BEGIN", "LOCK TABLE arsse_meta IN EXCLUSIVE MODE NOWAIT"];
protected $setVersion = "UPDATE arsse_meta set value = '#' where key = 'schema_version'"; protected $setVersion = "UPDATE arsse_meta set value = '#' where key = 'schema_version'";
public function tearDown() { public function tearDown(): void {
try { try {
$this->drv->exec("ROLLBACK"); $this->drv->exec("ROLLBACK");
} catch (\Throwable $e) { } catch (\Throwable $e) {
@ -26,7 +26,7 @@ class TestDriver extends \JKingWeb\Arsse\TestCase\Db\BaseDriver {
parent::tearDown(); parent::tearDown();
} }
public static function tearDownAfterClass() { public static function tearDownAfterClass(): void {
if (static::$interface) { if (static::$interface) {
static::dbRaze(static::$interface); static::dbRaze(static::$interface);
@pg_close(static::$interface); @pg_close(static::$interface);

View file

@ -21,7 +21,7 @@ class TestResult extends \JKingWeb\Arsse\TestCase\Db\BaseResult {
return [static::$interface, $set]; return [static::$interface, $set];
} }
public static function tearDownAfterClass() { public static function tearDownAfterClass(): void {
if (static::$interface) { if (static::$interface) {
static::dbRaze(static::$interface); static::dbRaze(static::$interface);
@pg_close(static::$interface); @pg_close(static::$interface);

View file

@ -32,7 +32,7 @@ class TestStatement extends \JKingWeb\Arsse\TestCase\Db\BaseStatement {
} }
} }
public static function tearDownAfterClass() { public static function tearDownAfterClass(): void {
if (static::$interface) { if (static::$interface) {
static::dbRaze(static::$interface); static::dbRaze(static::$interface);
@pg_close(static::$interface); @pg_close(static::$interface);

View file

@ -13,7 +13,7 @@ use JKingWeb\Arsse\Db\PostgreSQL\PDODriver as Driver;
* @group slow * @group slow
* @covers \JKingWeb\Arsse\Db\PostgreSQL\PDODriver<extended> */ * @covers \JKingWeb\Arsse\Db\PostgreSQL\PDODriver<extended> */
class TestCreation extends \JKingWeb\Arsse\Test\AbstractTest { class TestCreation extends \JKingWeb\Arsse\Test\AbstractTest {
public function setUp() { public function setUp(): void {
if (!Driver::requirementsMet()) { if (!Driver::requirementsMet()) {
$this->markTestSkipped("PDO-PostgreSQL extension not loaded"); $this->markTestSkipped("PDO-PostgreSQL extension not loaded");
} }
@ -35,7 +35,7 @@ class TestCreation extends \JKingWeb\Arsse\Test\AbstractTest {
} }
} }
public function provideConnectionStrings() { public function provideConnectionStrings(): iterable {
return [ return [
[false, "arsse", "secret", "arsse", "", 5432, "", "dbname='arsse' password='secret' user='arsse'"], [false, "arsse", "secret", "arsse", "", 5432, "", "dbname='arsse' password='secret' user='arsse'"],
[false, "arsse", "p word", "arsse", "", 5432, "", "dbname='arsse' password='p word' user='arsse'"], [false, "arsse", "p word", "arsse", "", 5432, "", "dbname='arsse' password='p word' user='arsse'"],

View file

@ -20,7 +20,7 @@ class TestDatabase extends \JKingWeb\Arsse\TestCase\Database\AbstractTest {
return (int) static::$drv->query("SELECT coalesce(last_value, (select max(id) from $table)) + 1 from pg_sequences where sequencename = '{$table}_id_seq'")->getValue(); return (int) static::$drv->query("SELECT coalesce(last_value, (select max(id) from $table)) + 1 from pg_sequences where sequencename = '{$table}_id_seq'")->getValue();
} }
public function setUp() { public function setUp(): void {
parent::setUp(); parent::setUp();
$seqList = $seqList =
"select "select

View file

@ -19,7 +19,7 @@ class TestDriver extends \JKingWeb\Arsse\TestCase\Db\BaseDriver {
protected $lock = ["BEGIN", "LOCK TABLE arsse_meta IN EXCLUSIVE MODE NOWAIT"]; protected $lock = ["BEGIN", "LOCK TABLE arsse_meta IN EXCLUSIVE MODE NOWAIT"];
protected $setVersion = "UPDATE arsse_meta set value = '#' where key = 'schema_version'"; protected $setVersion = "UPDATE arsse_meta set value = '#' where key = 'schema_version'";
public function tearDown() { public function tearDown(): void {
try { try {
$this->drv->exec("ROLLBACK"); $this->drv->exec("ROLLBACK");
} catch (\Throwable $e) { } catch (\Throwable $e) {

View file

@ -18,7 +18,7 @@ class TestCreation extends \JKingWeb\Arsse\Test\AbstractTest {
protected $drv; protected $drv;
protected $ch; protected $ch;
public function setUp() { public function setUp(): void {
if (!Driver::requirementsMet()) { if (!Driver::requirementsMet()) {
$this->markTestSkipped("SQLite extension not loaded"); $this->markTestSkipped("SQLite extension not loaded");
} }
@ -108,7 +108,7 @@ class TestCreation extends \JKingWeb\Arsse\Test\AbstractTest {
self::setConf(); self::setConf();
} }
public function tearDown() { public function tearDown(): void {
self::clearData(); self::clearData();
} }

View file

@ -17,7 +17,7 @@ class TestDriver extends \JKingWeb\Arsse\TestCase\Db\BaseDriver {
protected $setVersion = "PRAGMA user_version=#"; protected $setVersion = "PRAGMA user_version=#";
protected static $file; protected static $file;
public static function setUpBeforeClass() { public static function setUpBeforeClass(): void {
// create a temporary database file rather than using a memory database // create a temporary database file rather than using a memory database
// some tests require one connection to block another, so a memory database is not suitable // some tests require one connection to block another, so a memory database is not suitable
static::$file = tempnam(sys_get_temp_dir(), 'ook'); static::$file = tempnam(sys_get_temp_dir(), 'ook');
@ -25,7 +25,7 @@ class TestDriver extends \JKingWeb\Arsse\TestCase\Db\BaseDriver {
parent::setUpBeforeclass(); parent::setUpBeforeclass();
} }
public static function tearDownAfterClass() { public static function tearDownAfterClass(): void {
static::$interface->close(); static::$interface->close();
static::$interface = null; static::$interface = null;
parent::tearDownAfterClass(); parent::tearDownAfterClass();

View file

@ -15,7 +15,7 @@ class TestResult extends \JKingWeb\Arsse\TestCase\Db\BaseResult {
protected static $createMeta = "CREATE TABLE arsse_meta(key text primary key not null, value text) without rowid"; protected static $createMeta = "CREATE TABLE arsse_meta(key text primary key not null, value text) without rowid";
protected static $createTest = "CREATE TABLE arsse_test(id integer primary key)"; protected static $createTest = "CREATE TABLE arsse_test(id integer primary key)";
public static function tearDownAfterClass() { public static function tearDownAfterClass(): void {
static::$interface->close(); static::$interface->close();
static::$interface = null; static::$interface = null;
parent::tearDownAfterClass(); parent::tearDownAfterClass();

View file

@ -12,7 +12,7 @@ namespace JKingWeb\Arsse\TestCase\Db\SQLite3;
class TestStatement extends \JKingWeb\Arsse\TestCase\Db\BaseStatement { class TestStatement extends \JKingWeb\Arsse\TestCase\Db\BaseStatement {
use \JKingWeb\Arsse\Test\DatabaseDrivers\SQLite3; use \JKingWeb\Arsse\Test\DatabaseDrivers\SQLite3;
public static function tearDownAfterClass() { public static function tearDownAfterClass(): void {
static::$interface->close(); static::$interface->close();
static::$interface = null; static::$interface = null;
parent::tearDownAfterClass(); parent::tearDownAfterClass();

View file

@ -15,7 +15,7 @@ class TestUpdate extends \JKingWeb\Arsse\TestCase\Db\BaseUpdate {
protected static $minimal1 = "create table arsse_meta(key text primary key not null, value text); pragma user_version=1"; protected static $minimal1 = "create table arsse_meta(key text primary key not null, value text); pragma user_version=1";
protected static $minimal2 = "pragma user_version=2"; protected static $minimal2 = "pragma user_version=2";
public static function tearDownAfterClass() { public static function tearDownAfterClass(): void {
static::$interface->close(); static::$interface->close();
static::$interface = null; static::$interface = null;
parent::tearDownAfterClass(); parent::tearDownAfterClass();

View file

@ -20,7 +20,7 @@ class TestCreation extends \JKingWeb\Arsse\Test\AbstractTest {
protected $drv; protected $drv;
protected $ch; protected $ch;
public function setUp() { public function setUp(): void {
if (!Driver::requirementsMet()) { if (!Driver::requirementsMet()) {
$this->markTestSkipped("PDO-SQLite extension not loaded"); $this->markTestSkipped("PDO-SQLite extension not loaded");
} }
@ -110,7 +110,7 @@ class TestCreation extends \JKingWeb\Arsse\Test\AbstractTest {
self::setConf(); self::setConf();
} }
public function tearDown() { public function tearDown(): void {
self::clearData(); self::clearData();
} }

View file

@ -19,7 +19,7 @@ class TestDriver extends \JKingWeb\Arsse\TestCase\Db\BaseDriver {
protected $setVersion = "PRAGMA user_version=#"; protected $setVersion = "PRAGMA user_version=#";
protected static $file; protected static $file;
public static function setUpBeforeClass() { public static function setUpBeforeClass(): void {
// create a temporary database file rather than using a memory database // create a temporary database file rather than using a memory database
// some tests require one connection to block another, so a memory database is not suitable // some tests require one connection to block another, so a memory database is not suitable
static::$file = tempnam(sys_get_temp_dir(), 'ook'); static::$file = tempnam(sys_get_temp_dir(), 'ook');
@ -27,7 +27,7 @@ class TestDriver extends \JKingWeb\Arsse\TestCase\Db\BaseDriver {
parent::setUpBeforeclass(); parent::setUpBeforeclass();
} }
public static function tearDownAfterClass() { public static function tearDownAfterClass(): void {
parent::tearDownAfterClass(); parent::tearDownAfterClass();
@unlink(self::$file); @unlink(self::$file);
self::$file = null; self::$file = null;

View file

@ -14,7 +14,7 @@ use JKingWeb\Arsse\Db\Exception;
class TestTransaction extends \JKingWeb\Arsse\Test\AbstractTest { class TestTransaction extends \JKingWeb\Arsse\Test\AbstractTest {
protected $drv; protected $drv;
public function setUp() { public function setUp(): void {
self::clearData(); self::clearData();
$drv = \Phake::mock(\JKingWeb\Arsse\Db\SQLite3\Driver::class); $drv = \Phake::mock(\JKingWeb\Arsse\Db\SQLite3\Driver::class);
\Phake::when($drv)->savepointRelease->thenReturn(true); \Phake::when($drv)->savepointRelease->thenReturn(true);

View file

@ -13,14 +13,14 @@ use JKingWeb\Arsse\Lang\Exception as LangException;
/** @covers \JKingWeb\Arsse\AbstractException */ /** @covers \JKingWeb\Arsse\AbstractException */
class TestException extends \JKingWeb\Arsse\Test\AbstractTest { class TestException extends \JKingWeb\Arsse\Test\AbstractTest {
public function setUp() { public function setUp(): void {
self::clearData(false); self::clearData(false);
// create a mock Lang object so as not to create a dependency loop // create a mock Lang object so as not to create a dependency loop
Arsse::$lang = \Phake::mock(Lang::class); Arsse::$lang = \Phake::mock(Lang::class);
\Phake::when(Arsse::$lang)->msg->thenReturn(""); \Phake::when(Arsse::$lang)->msg->thenReturn("");
} }
public function tearDown() { public function tearDown(): void {
// verify calls to the mock Lang object // verify calls to the mock Lang object
\Phake::verify(Arsse::$lang, \Phake::atLeast(0))->msg($this->isType("string"), $this->anything()); \Phake::verify(Arsse::$lang, \Phake::atLeast(0))->msg($this->isType("string"), $this->anything());
\Phake::verifyNoOtherInteractions(Arsse::$lang); \Phake::verifyNoOtherInteractions(Arsse::$lang);

View file

@ -88,7 +88,7 @@ class TestFeed extends \JKingWeb\Arsse\Test\AbstractTest {
], ],
]; ];
public function setUp() { public function setUp(): void {
if (!@file_get_contents(self::$host."IsUp")) { if (!@file_get_contents(self::$host."IsUp")) {
$this->markTestSkipped("Test Web server is not accepting requests"); $this->markTestSkipped("Test Web server is not accepting requests");
} }
@ -264,7 +264,7 @@ class TestFeed extends \JKingWeb\Arsse\Test\AbstractTest {
$this->assertTime($exp, $f->nextFetch); $this->assertTime($exp, $f->nextFetch);
} }
public function provide304Timestamps() { public function provide304Timestamps(): iterable {
return [ return [
'less than half an hour 1' => ["now", "now + 15 minutes"], 'less than half an hour 1' => ["now", "now + 15 minutes"],
'less than half an hour 2' => ["now - 29 minutes", "now + 15 minutes"], 'less than half an hour 2' => ["now - 29 minutes", "now + 15 minutes"],

View file

@ -16,7 +16,7 @@ class TestFetching extends \JKingWeb\Arsse\Test\AbstractTest {
protected static $host = "http://localhost:8000/"; protected static $host = "http://localhost:8000/";
protected $base = ""; protected $base = "";
public function setUp() { public function setUp(): void {
if (!extension_loaded('curl')) { if (!extension_loaded('curl')) {
$this->markTestSkipped("Feed fetching tests are only accurate with curl enabled."); $this->markTestSkipped("Feed fetching tests are only accurate with curl enabled.");
} elseif (!@file_get_contents(self::$host."IsUp")) { } elseif (!@file_get_contents(self::$host."IsUp")) {

View file

@ -16,7 +16,7 @@ class TestFile extends \JKingWeb\Arsse\Test\AbstractTest {
protected $path; protected $path;
protected $proc; protected $proc;
public function setUp() { public function setUp(): void {
self::clearData(); self::clearData();
// create a mock Import/Export processor with stubbed underlying import/export routines // create a mock Import/Export processor with stubbed underlying import/export routines
$this->proc = \Phake::partialMock(AbstractImportExport::class); $this->proc = \Phake::partialMock(AbstractImportExport::class);
@ -37,7 +37,7 @@ class TestFile extends \JKingWeb\Arsse\Test\AbstractTest {
chmod($this->path."importBadFile", 0000); chmod($this->path."importBadFile", 0000);
} }
public function tearDown() { public function tearDown(): void {
$this->path = null; $this->path = null;
$this->vfs = null; $this->vfs = null;
$this->proc = null; $this->proc = null;
@ -60,7 +60,7 @@ class TestFile extends \JKingWeb\Arsse\Test\AbstractTest {
} }
} }
public function provideFileExports() { public function provideFileExports(): iterable {
$createException = new Exception("fileUncreatable"); $createException = new Exception("fileUncreatable");
$writeException = new Exception("fileUnwritable"); $writeException = new Exception("fileUnwritable");
return [ return [
@ -98,7 +98,7 @@ class TestFile extends \JKingWeb\Arsse\Test\AbstractTest {
} }
} }
public function provideFileImports() { public function provideFileImports(): iterable {
$missingException = new Exception("fileMissing"); $missingException = new Exception("fileMissing");
$permissionException = new Exception("fileUnreadable"); $permissionException = new Exception("fileUnreadable");
return [ return [

View file

@ -23,7 +23,7 @@ class TestImportExport extends \JKingWeb\Arsse\Test\AbstractTest {
'arsse_tag_members' => ["tag", "subscription", "assigned"], 'arsse_tag_members' => ["tag", "subscription", "assigned"],
]; ];
public function setUp() { public function setUp(): void {
self::clearData(); self::clearData();
// create a mock user manager // create a mock user manager
Arsse::$user = \Phake::mock(\JKingWeb\Arsse\User::class); Arsse::$user = \Phake::mock(\JKingWeb\Arsse\User::class);
@ -140,7 +140,7 @@ class TestImportExport extends \JKingWeb\Arsse\Test\AbstractTest {
$this->primeDatabase($this->drv, $this->data); $this->primeDatabase($this->drv, $this->data);
} }
public function tearDown() { public function tearDown(): void {
$this->drv = null; $this->drv = null;
$this->proc = null; $this->proc = null;
self::clearData(); self::clearData();

View file

@ -79,7 +79,7 @@ OPML_EXPORT_SERIALIZATION;
</opml> </opml>
OPML_EXPORT_SERIALIZATION; OPML_EXPORT_SERIALIZATION;
public function setUp() { public function setUp(): void {
self::clearData(); self::clearData();
Arsse::$db = \Phake::mock(\JKingWeb\Arsse\Database::class); Arsse::$db = \Phake::mock(\JKingWeb\Arsse\Database::class);
Arsse::$user = \Phake::mock(\JKingWeb\Arsse\User::class); Arsse::$user = \Phake::mock(\JKingWeb\Arsse\User::class);
@ -119,7 +119,7 @@ OPML_EXPORT_SERIALIZATION;
} }
} }
public function provideParserData() { public function provideParserData(): iterable {
return [ return [
["BrokenXML.opml", false, new Exception("invalidSyntax")], ["BrokenXML.opml", false, new Exception("invalidSyntax")],
["BrokenOPML.1.opml", false, new Exception("invalidSemantics")], ["BrokenOPML.1.opml", false, new Exception("invalidSemantics")],

View file

@ -10,7 +10,7 @@ use JKingWeb\Arsse\Misc\Date;
/** @covers \JKingWeb\Arsse\Misc\Date */ /** @covers \JKingWeb\Arsse\Misc\Date */
class TestDate extends \JKingWeb\Arsse\Test\AbstractTest { class TestDate extends \JKingWeb\Arsse\Test\AbstractTest {
public function setUp() { public function setUp(): void {
self::clearData(); self::clearData();
} }

View file

@ -10,7 +10,7 @@ use JKingWeb\Arsse\Misc\URL;
/** @covers \JKingWeb\Arsse\Misc\URL */ /** @covers \JKingWeb\Arsse\Misc\URL */
class TestURL extends \JKingWeb\Arsse\Test\AbstractTest { class TestURL extends \JKingWeb\Arsse\Test\AbstractTest {
public function setUp() { public function setUp(): void {
self::clearData(); self::clearData();
} }
@ -19,7 +19,7 @@ class TestURL extends \JKingWeb\Arsse\Test\AbstractTest {
$this->assertSame($exp, URL::normalize($url, $user, $pass)); $this->assertSame($exp, URL::normalize($url, $user, $pass));
} }
public function provideNormalizations() { public function provideNormalizations(): iterable {
return [ return [
["http://example.com/", "http://example.com/"], ["http://example.com/", "http://example.com/"],
["HTTP://example.com/", "http://example.com/"], ["HTTP://example.com/", "http://example.com/"],
@ -81,7 +81,7 @@ class TestURL extends \JKingWeb\Arsse\Test\AbstractTest {
$this->assertSame($exp, URL::queryAppend($url, $query)); $this->assertSame($exp, URL::queryAppend($url, $query));
} }
public function provideQueries() { public function provideQueries(): iterable {
return [ return [
["/", "ook=eek", "/?ook=eek"], ["/", "ook=eek", "/?ook=eek"],
["/?", "ook=eek", "/?ook=eek"], ["/?", "ook=eek", "/?ook=eek"],

View file

@ -12,7 +12,7 @@ use JKingWeb\Arsse\Test\Result;
/** @covers \JKingWeb\Arsse\Misc\ValueInfo */ /** @covers \JKingWeb\Arsse\Misc\ValueInfo */
class TestValueInfo extends \JKingWeb\Arsse\Test\AbstractTest { class TestValueInfo extends \JKingWeb\Arsse\Test\AbstractTest {
public function setUp() { public function setUp(): void {
self::clearData(); self::clearData();
} }
@ -424,7 +424,7 @@ class TestValueInfo extends \JKingWeb\Arsse\Test\AbstractTest {
} }
} }
public function provideSimpleNormalizationValues() { public function provideSimpleNormalizationValues(): iterable {
$types = [ $types = [
"Mixed", "Mixed",
"Null", "Null",
@ -556,7 +556,7 @@ class TestValueInfo extends \JKingWeb\Arsse\Test\AbstractTest {
} }
} }
public function provideDateNormalizationValues() { public function provideDateNormalizationValues(): iterable {
$formats = [ $formats = [
"microtime", "microtime",
"iso8601", "iso8601",

View file

@ -152,7 +152,7 @@ class TestAPI extends \JKingWeb\Arsse\Test\AbstractTest {
return $this->serverRequest($method, $url, $prefix, [], [], $dataPost, $type, $dataGet, $user); return $this->serverRequest($method, $url, $prefix, [], [], $dataPost, $type, $dataGet, $user);
} }
public function setUp() { public function setUp(): void {
self::clearData(); self::clearData();
self::setConf(); self::setConf();
// create a mock user manager // create a mock user manager
@ -168,7 +168,7 @@ class TestAPI extends \JKingWeb\Arsse\Test\AbstractTest {
\Phake::when($this->h)->baseResponse->thenReturn([]); \Phake::when($this->h)->baseResponse->thenReturn([]);
} }
public function tearDown() { public function tearDown(): void {
self::clearData(); self::clearData();
} }
@ -192,7 +192,7 @@ class TestAPI extends \JKingWeb\Arsse\Test\AbstractTest {
$this->assertMessage($exp, $act); $this->assertMessage($exp, $act);
} }
public function provideTokenAuthenticationRequests() { public function provideTokenAuthenticationRequests(): iterable {
$success = new JsonResponse(['auth' => 1]); $success = new JsonResponse(['auth' => 1]);
$failure = new JsonResponse(['auth' => 0]); $failure = new JsonResponse(['auth' => 0]);
$denied = new EmptyResponse(401); $denied = new EmptyResponse(401);
@ -313,7 +313,7 @@ class TestAPI extends \JKingWeb\Arsse\Test\AbstractTest {
\Phake::verify(Arsse::$db)->articleList(Arsse::$user->id, $c, $fields, $order); \Phake::verify(Arsse::$db)->articleList(Arsse::$user->id, $c, $fields, $order);
} }
public function provideItemListContexts() { public function provideItemListContexts(): iterable {
$c = (new Context)->limit(50); $c = (new Context)->limit(50);
return [ return [
["items", (clone $c), false], ["items", (clone $c), false],
@ -388,7 +388,7 @@ class TestAPI extends \JKingWeb\Arsse\Test\AbstractTest {
} }
} }
public function provideMarkingContexts() { public function provideMarkingContexts(): iterable {
$markRead = ['read' => true]; $markRead = ['read' => true];
$markUnread = ['read' => false]; $markUnread = ['read' => false];
$markSaved = ['starred' => true]; $markSaved = ['starred' => true];
@ -431,7 +431,7 @@ class TestAPI extends \JKingWeb\Arsse\Test\AbstractTest {
$this->assertMessage($exp, $this->h->dispatch($req)); $this->assertMessage($exp, $this->h->dispatch($req));
} }
public function provideInvalidRequests() { public function provideInvalidRequests(): iterable {
return [ return [
'Not an API request' => [$this->req(""), new EmptyResponse(404)], 'Not an API request' => [$this->req(""), new EmptyResponse(404)],
'Wrong method' => [$this->req("api", "", "GET"), new EmptyResponse(405, ['Allow' => "OPTIONS,POST"])], 'Wrong method' => [$this->req("api", "", "GET"), new EmptyResponse(405, ['Allow' => "OPTIONS,POST"])],

View file

@ -18,7 +18,7 @@ use JKingWeb\Arsse\REST\Fever\User as FeverUser;
class TestUser extends \JKingWeb\Arsse\Test\AbstractTest { class TestUser extends \JKingWeb\Arsse\Test\AbstractTest {
protected $u; protected $u;
public function setUp() { public function setUp(): void {
self::clearData(); self::clearData();
self::setConf(); self::setConf();
// create a mock user manager // create a mock user manager
@ -31,7 +31,7 @@ class TestUser extends \JKingWeb\Arsse\Test\AbstractTest {
$this->u = new FeverUser(); $this->u = new FeverUser();
} }
public function tearDown() { public function tearDown(): void {
self::clearData(); self::clearData();
} }
@ -55,7 +55,7 @@ class TestUser extends \JKingWeb\Arsse\Test\AbstractTest {
} }
} }
public function providePasswordCreations() { public function providePasswordCreations(): iterable {
return [ return [
["jane.doe@example.com", "secret", "secret"], ["jane.doe@example.com", "secret", "secret"],
["jane.doe@example.com", "superman", "superman"], ["jane.doe@example.com", "superman", "superman"],
@ -83,7 +83,7 @@ class TestUser extends \JKingWeb\Arsse\Test\AbstractTest {
$this->assertSame($exp, $this->u->authenticate($user, $password)); $this->assertSame($exp, $this->u->authenticate($user, $password));
} }
public function provideUserAuthenticationRequests() { public function provideUserAuthenticationRequests(): iterable {
return [ return [
["jane.doe@example.com", "secret", true], ["jane.doe@example.com", "secret", true],
["jane.doe@example.com", "superman", false], ["jane.doe@example.com", "superman", false],

View file

@ -305,7 +305,7 @@ class TestV1_2 extends \JKingWeb\Arsse\Test\AbstractTest {
return $this->h->dispatch($req); return $this->h->dispatch($req);
} }
public function setUp() { public function setUp(): void {
self::clearData(); self::clearData();
self::setConf(); self::setConf();
// create a mock user manager // create a mock user manager
@ -317,7 +317,7 @@ class TestV1_2 extends \JKingWeb\Arsse\Test\AbstractTest {
$this->h = new V1_2(); $this->h = new V1_2();
} }
public function tearDown() { public function tearDown(): void {
self::clearData(); self::clearData();
} }

View file

@ -14,7 +14,7 @@ use Zend\Diactoros\Response\EmptyResponse;
/** @covers \JKingWeb\Arsse\REST\NextCloudNews\Versions */ /** @covers \JKingWeb\Arsse\REST\NextCloudNews\Versions */
class TestVersions extends \JKingWeb\Arsse\Test\AbstractTest { class TestVersions extends \JKingWeb\Arsse\Test\AbstractTest {
public function setUp() { public function setUp(): void {
self::clearData(); self::clearData();
} }

View file

@ -35,7 +35,7 @@ class TestREST extends \JKingWeb\Arsse\Test\AbstractTest {
$this->assertEquals($exp, $out); $this->assertEquals($exp, $out);
} }
public function provideApiMatchData() { public function provideApiMatchData(): iterable {
$real = null; $real = null;
$fake = [ $fake = [
'unstripped' => ['match' => "/full/url", 'strip' => "", 'class' => "UnstrippedProtocol"], 'unstripped' => ['match' => "/full/url", 'strip' => "", 'class' => "UnstrippedProtocol"],
@ -80,7 +80,7 @@ class TestREST extends \JKingWeb\Arsse\Test\AbstractTest {
$this->assertMessage($exp, $act); $this->assertMessage($exp, $act);
} }
public function provideAuthenticableRequests() { public function provideAuthenticableRequests(): iterable {
return [ return [
[['PHP_AUTH_USER' => "john.doe@example.com", 'PHP_AUTH_PW' => "secret"], ['authenticated' => true, 'authenticatedUser' => "john.doe@example.com"]], [['PHP_AUTH_USER' => "john.doe@example.com", 'PHP_AUTH_PW' => "secret"], ['authenticated' => true, 'authenticatedUser' => "john.doe@example.com"]],
[['PHP_AUTH_USER' => "john.doe@example.com", 'PHP_AUTH_PW' => "secret", 'REMOTE_USER' => "jane.doe@example.com"], ['authenticated' => true, 'authenticatedUser' => "john.doe@example.com"]], [['PHP_AUTH_USER' => "john.doe@example.com", 'PHP_AUTH_PW' => "secret", 'REMOTE_USER' => "jane.doe@example.com"], ['authenticated' => true, 'authenticatedUser' => "john.doe@example.com"]],
@ -112,7 +112,7 @@ class TestREST extends \JKingWeb\Arsse\Test\AbstractTest {
$this->assertSame($exp, $act); $this->assertSame($exp, $act);
} }
public function provideUnnormalizedOrigins() { public function provideUnnormalizedOrigins(): iterable {
return [ return [
["null", "null"], ["null", "null"],
["http://example.com", "http://example.com"], ["http://example.com", "http://example.com"],
@ -161,7 +161,7 @@ class TestREST extends \JKingWeb\Arsse\Test\AbstractTest {
$this->assertSame($exp, $act); $this->assertSame($exp, $act);
} }
public function provideCorsNegotiations() { public function provideCorsNegotiations(): iterable {
return [ return [
["http://example", true ], ["http://example", true ],
["http://example", true, "http://example", "*" ], ["http://example", true, "http://example", "*" ],
@ -196,7 +196,7 @@ class TestREST extends \JKingWeb\Arsse\Test\AbstractTest {
$this->assertMessage($exp, $act); $this->assertMessage($exp, $act);
} }
public function provideCorsHeaders() { public function provideCorsHeaders(): iterable {
return [ return [
["GET", ['Origin' => "null"], [], [ ["GET", ['Origin' => "null"], [], [
'Access-Control-Allow-Origin' => "null", 'Access-Control-Allow-Origin' => "null",
@ -264,7 +264,7 @@ class TestREST extends \JKingWeb\Arsse\Test\AbstractTest {
$this->assertMessage($exp, $act); $this->assertMessage($exp, $act);
} }
public function provideUnnormalizedResponses() { public function provideUnnormalizedResponses(): iterable {
$stream = fopen("php://memory", "w+b"); $stream = fopen("php://memory", "w+b");
fwrite($stream, "ook"); fwrite($stream, "ook");
return [ return [
@ -322,7 +322,7 @@ class TestREST extends \JKingWeb\Arsse\Test\AbstractTest {
\Phake::verify($r)->normalizeResponse; \Phake::verify($r)->normalizeResponse;
} }
public function provideMockRequests() { public function provideMockRequests(): iterable {
return [ return [
[new ServerRequest([], [], "/index.php/apps/news/api/v1-2/feeds", "GET"), "GET", true, NCN::class, "/feeds"], [new ServerRequest([], [], "/index.php/apps/news/api/v1-2/feeds", "GET"), "GET", true, NCN::class, "/feeds"],
[new ServerRequest([], [], "/index.php/apps/news/api/v1-2/feeds", "HEAD"), "GET", true, NCN::class, "/feeds"], [new ServerRequest([], [], "/index.php/apps/news/api/v1-2/feeds", "HEAD"), "GET", true, NCN::class, "/feeds"],

View file

@ -154,7 +154,7 @@ LONG_STRING;
]); ]);
} }
public function setUp() { public function setUp(): void {
self::clearData(); self::clearData();
self::setConf(); self::setConf();
// create a mock user manager // create a mock user manager
@ -174,7 +174,7 @@ LONG_STRING;
$this->h = new API(); $this->h = new API();
} }
public function tearDown() { public function tearDown(): void {
self::clearData(); self::clearData();
} }
@ -231,7 +231,7 @@ LONG_STRING;
\Phake::verify(Arsse::$db, \Phake::times(0))->sessionResume($this->anything()); \Phake::verify(Arsse::$db, \Phake::times(0))->sessionResume($this->anything());
} }
public function provideLoginRequests() { public function provideLoginRequests(): iterable {
return $this->generateLoginRequests("login"); return $this->generateLoginRequests("login");
} }
@ -269,7 +269,7 @@ LONG_STRING;
$this->assertSame($exp2, Arsse::$user->id); $this->assertSame($exp2, Arsse::$user->id);
} }
public function provideResumeRequests() { public function provideResumeRequests(): iterable {
return $this->generateLoginRequests("isLoggedIn"); return $this->generateLoginRequests("isLoggedIn");
} }

View file

@ -19,7 +19,7 @@ class TestIcon extends \JKingWeb\Arsse\Test\AbstractTest {
protected $h; protected $h;
protected $user = "john.doe@example.com"; protected $user = "john.doe@example.com";
public function setUp() { public function setUp(): void {
self::clearData(); self::clearData();
self::setConf(); self::setConf();
// create a mock user manager // create a mock user manager
@ -29,7 +29,7 @@ class TestIcon extends \JKingWeb\Arsse\Test\AbstractTest {
$this->h = new Icon(); $this->h = new Icon();
} }
public function tearDown() { public function tearDown(): void {
self::clearData(); self::clearData();
} }

View file

@ -11,7 +11,7 @@ use JKingWeb\Arsse\REST\TinyTinyRSS\Search;
/** @covers \JKingWeb\Arsse\REST\TinyTinyRSS\Search */ /** @covers \JKingWeb\Arsse\REST\TinyTinyRSS\Search */
class TestSearch extends \JKingWeb\Arsse\Test\AbstractTest { class TestSearch extends \JKingWeb\Arsse\Test\AbstractTest {
public function provideSearchStrings() { public function provideSearchStrings(): iterable {
return [ return [
'Blank string' => ["", new Context], 'Blank string' => ["", new Context],
'Whitespace only' => [" \n \t", new Context], 'Whitespace only' => [" \n \t", new Context],

View file

@ -15,7 +15,7 @@ use JKingWeb\Arsse\Misc\Date;
class TestService extends \JKingWeb\Arsse\Test\AbstractTest { class TestService extends \JKingWeb\Arsse\Test\AbstractTest {
protected $srv; protected $srv;
public function setUp() { public function setUp(): void {
self::clearData(); self::clearData();
self::setConf(); self::setConf();
Arsse::$db = \Phake::mock(Database::class); Arsse::$db = \Phake::mock(Database::class);

View file

@ -13,7 +13,7 @@ use JKingWeb\Arsse\User\Internal\Driver;
/** @covers \JKingWeb\Arsse\User\Internal\Driver */ /** @covers \JKingWeb\Arsse\User\Internal\Driver */
class TestInternal extends \JKingWeb\Arsse\Test\AbstractTest { class TestInternal extends \JKingWeb\Arsse\Test\AbstractTest {
public function setUp() { public function setUp(): void {
self::clearData(); self::clearData();
self::setConf(); self::setConf();
// create a mock database interface // create a mock database interface
@ -46,7 +46,7 @@ class TestInternal extends \JKingWeb\Arsse\Test\AbstractTest {
$this->assertSame($exp, (new Driver)->auth($user, $password)); $this->assertSame($exp, (new Driver)->auth($user, $password));
} }
public function provideAuthentication() { public function provideAuthentication(): iterable {
$john = "john.doe@example.com"; $john = "john.doe@example.com";
$jane = "jane.doe@example.com"; $jane = "jane.doe@example.com";
$owen = "owen.hardy@example.com"; $owen = "owen.hardy@example.com";

View file

@ -14,7 +14,7 @@ use JKingWeb\Arsse\User\Driver;
/** @covers \JKingWeb\Arsse\User */ /** @covers \JKingWeb\Arsse\User */
class TestUser extends \JKingWeb\Arsse\Test\AbstractTest { class TestUser extends \JKingWeb\Arsse\Test\AbstractTest {
public function setUp() { public function setUp(): void {
self::clearData(); self::clearData();
self::setConf(); self::setConf();
// create a mock database interface // create a mock database interface
@ -60,7 +60,7 @@ class TestUser extends \JKingWeb\Arsse\Test\AbstractTest {
\Phake::verify(Arsse::$db, \Phake::times($exp && $user === "jane.doe@example.com" ? 1 : 0))->userAdd($user, $password); \Phake::verify(Arsse::$db, \Phake::times($exp && $user === "jane.doe@example.com" ? 1 : 0))->userAdd($user, $password);
} }
public function provideAuthentication() { public function provideAuthentication(): iterable {
$john = "john.doe@example.com"; $john = "john.doe@example.com";
$jane = "jane.doe@example.com"; $jane = "jane.doe@example.com";
return [ return [
@ -86,7 +86,7 @@ class TestUser extends \JKingWeb\Arsse\Test\AbstractTest {
$this->assertSame($exp, $u->list()); $this->assertSame($exp, $u->list());
} }
public function provideUserList() { public function provideUserList(): iterable {
$john = "john.doe@example.com"; $john = "john.doe@example.com";
$jane = "jane.doe@example.com"; $jane = "jane.doe@example.com";
return [ return [
@ -107,7 +107,7 @@ class TestUser extends \JKingWeb\Arsse\Test\AbstractTest {
$this->assertSame($exp, $u->exists($user)); $this->assertSame($exp, $u->exists($user));
} }
public function provideExistence() { public function provideExistence(): iterable {
$john = "john.doe@example.com"; $john = "john.doe@example.com";
$jane = "jane.doe@example.com"; $jane = "jane.doe@example.com";
return [ return [
@ -166,7 +166,7 @@ class TestUser extends \JKingWeb\Arsse\Test\AbstractTest {
} }
} }
public function provideAdditions() { public function provideAdditions(): iterable {
$john = "john.doe@example.com"; $john = "john.doe@example.com";
$jane = "jane.doe@example.com"; $jane = "jane.doe@example.com";
return [ return [
@ -201,7 +201,7 @@ class TestUser extends \JKingWeb\Arsse\Test\AbstractTest {
} }
} }
public function provideRemovals() { public function provideRemovals(): iterable {
$john = "john.doe@example.com"; $john = "john.doe@example.com";
$jane = "jane.doe@example.com"; $jane = "jane.doe@example.com";
return [ return [
@ -281,7 +281,7 @@ class TestUser extends \JKingWeb\Arsse\Test\AbstractTest {
} }
} }
public function providePasswordChanges() { public function providePasswordChanges(): iterable {
$john = "john.doe@example.com"; $john = "john.doe@example.com";
$jane = "jane.doe@example.com"; $jane = "jane.doe@example.com";
return [ return [
@ -314,7 +314,7 @@ class TestUser extends \JKingWeb\Arsse\Test\AbstractTest {
} }
} }
public function providePasswordClearings() { public function providePasswordClearings(): iterable {
$forbidden = new \JKingWeb\Arsse\User\ExceptionAuthz("notAuthorized"); $forbidden = new \JKingWeb\Arsse\User\ExceptionAuthz("notAuthorized");
$missing = new \JKingWeb\Arsse\User\Exception("doesNotExist"); $missing = new \JKingWeb\Arsse\User\Exception("doesNotExist");
return [ return [

View file

@ -24,11 +24,13 @@ use Zend\Diactoros\Response\XmlResponse;
/** @coversNothing */ /** @coversNothing */
abstract class AbstractTest extends \PHPUnit\Framework\TestCase { abstract class AbstractTest extends \PHPUnit\Framework\TestCase {
public function setUp() { use \DMS\PHPUnitExtensions\ArraySubset\ArraySubsetAsserts;
public function setUp(): void {
self::clearData(); self::clearData();
} }
public function tearDown() { public function tearDown(): void {
self::clearData(); self::clearData();
} }

View file

@ -11,7 +11,7 @@ use JKingWeb\Arsse\Arsse;
use org\bovigo\vfs\vfsStream; use org\bovigo\vfs\vfsStream;
trait Setup { trait Setup {
public function setUp() { public function setUp(): void {
// test files // test files
$this->files = [ $this->files = [
'en.php' => '<?php return ["Test.presentText" => "and the Philosopher\'s Stone"];', 'en.php' => '<?php return ["Test.presentText" => "and the Philosopher\'s Stone"];',
@ -47,7 +47,7 @@ trait Setup {
} }
} }
public function tearDown() { public function tearDown(): void {
// verify calls to the mock Lang object // verify calls to the mock Lang object
\Phake::verify(Arsse::$lang, \Phake::atLeast(0))->msg($this->isType("string"), $this->anything()); \Phake::verify(Arsse::$lang, \Phake::atLeast(0))->msg($this->isType("string"), $this->anything());
\Phake::verifyNoOtherInteractions(Arsse::$lang); \Phake::verifyNoOtherInteractions(Arsse::$lang);

View file

@ -1,6 +1,7 @@
{ {
"require": { "require": {
"phpunit/phpunit": "6.* | 7.*", "phpunit/phpunit": "8.*",
"dms/phpunit-arraysubset-asserts": "^0.1",
"phake/phake": "^3.0", "phake/phake": "^3.0",
"clue/arguments": "^2.0", "clue/arguments": "^2.0",
"mikey179/vfsstream": "^1.6", "mikey179/vfsstream": "^1.6",

View file

@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"content-hash": "0efc271cb10b6582cac5f373a48fc969", "content-hash": "95cd95b15b030103607205ea2f05ea81",
"packages": [ "packages": [
{ {
"name": "clue/arguments", "name": "clue/arguments",
@ -56,6 +56,47 @@
], ],
"time": "2016-12-18T14:37:39+00:00" "time": "2016-12-18T14:37:39+00:00"
}, },
{
"name": "dms/phpunit-arraysubset-asserts",
"version": "v0.1.0",
"source": {
"type": "git",
"url": "https://github.com/rdohms/phpunit-arraysubset-asserts.git",
"reference": "d618ece5d53e05be87eba835b079377eaafbd7c8"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/rdohms/phpunit-arraysubset-asserts/zipball/d618ece5d53e05be87eba835b079377eaafbd7c8",
"reference": "d618ece5d53e05be87eba835b079377eaafbd7c8",
"shasum": ""
},
"require": {
"php": "^7.2",
"phpunit/phpunit": "^8.0"
},
"require-dev": {
"dms/coding-standard": "^1.0",
"squizlabs/php_codesniffer": "^3.4"
},
"type": "library",
"autoload": {
"psr-4": {
"DMS\\PHPUnitExtensions\\ArraySubset\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Rafael Dohms",
"email": "rdohms@gmail.com"
}
],
"description": "This package provides Array Subset and related asserts once depracated in PHPunit 8",
"time": "2019-02-17T14:29:58+00:00"
},
{ {
"name": "doctrine/instantiator", "name": "doctrine/instantiator",
"version": "1.2.0", "version": "1.2.0",
@ -581,40 +622,40 @@
}, },
{ {
"name": "phpunit/php-code-coverage", "name": "phpunit/php-code-coverage",
"version": "6.1.4", "version": "7.0.8",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/sebastianbergmann/php-code-coverage.git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
"reference": "807e6013b00af69b6c5d9ceb4282d0393dbb9d8d" "reference": "aa0d179a13284c7420fc281fc32750e6cc7c9e2f"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/807e6013b00af69b6c5d9ceb4282d0393dbb9d8d", "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/aa0d179a13284c7420fc281fc32750e6cc7c9e2f",
"reference": "807e6013b00af69b6c5d9ceb4282d0393dbb9d8d", "reference": "aa0d179a13284c7420fc281fc32750e6cc7c9e2f",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"ext-dom": "*", "ext-dom": "*",
"ext-xmlwriter": "*", "ext-xmlwriter": "*",
"php": "^7.1", "php": "^7.2",
"phpunit/php-file-iterator": "^2.0", "phpunit/php-file-iterator": "^2.0.2",
"phpunit/php-text-template": "^1.2.1", "phpunit/php-text-template": "^1.2.1",
"phpunit/php-token-stream": "^3.0", "phpunit/php-token-stream": "^3.1.1",
"sebastian/code-unit-reverse-lookup": "^1.0.1", "sebastian/code-unit-reverse-lookup": "^1.0.1",
"sebastian/environment": "^3.1 || ^4.0", "sebastian/environment": "^4.2.2",
"sebastian/version": "^2.0.1", "sebastian/version": "^2.0.1",
"theseer/tokenizer": "^1.1" "theseer/tokenizer": "^1.1.3"
}, },
"require-dev": { "require-dev": {
"phpunit/phpunit": "^7.0" "phpunit/phpunit": "^8.2.2"
}, },
"suggest": { "suggest": {
"ext-xdebug": "^2.6.0" "ext-xdebug": "^2.7.2"
}, },
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "6.1-dev" "dev-master": "7.0-dev"
} }
}, },
"autoload": { "autoload": {
@ -640,7 +681,7 @@
"testing", "testing",
"xunit" "xunit"
], ],
"time": "2018-10-31T16:06:48+00:00" "time": "2019-09-17T06:24:36+00:00"
}, },
{ {
"name": "phpunit/php-file-iterator", "name": "phpunit/php-file-iterator",
@ -833,53 +874,52 @@
}, },
{ {
"name": "phpunit/phpunit", "name": "phpunit/phpunit",
"version": "7.5.16", "version": "8.4.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git", "url": "https://github.com/sebastianbergmann/phpunit.git",
"reference": "316afa6888d2562e04aeb67ea7f2017a0eb41661" "reference": "366a4a0f2b971fd43b7c351d621e8dd7d7131869"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/316afa6888d2562e04aeb67ea7f2017a0eb41661", "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/366a4a0f2b971fd43b7c351d621e8dd7d7131869",
"reference": "316afa6888d2562e04aeb67ea7f2017a0eb41661", "reference": "366a4a0f2b971fd43b7c351d621e8dd7d7131869",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"doctrine/instantiator": "^1.1", "doctrine/instantiator": "^1.2.0",
"ext-dom": "*", "ext-dom": "*",
"ext-json": "*", "ext-json": "*",
"ext-libxml": "*", "ext-libxml": "*",
"ext-mbstring": "*", "ext-mbstring": "*",
"ext-xml": "*", "ext-xml": "*",
"myclabs/deep-copy": "^1.7", "ext-xmlwriter": "*",
"phar-io/manifest": "^1.0.2", "myclabs/deep-copy": "^1.9.1",
"phar-io/version": "^2.0", "phar-io/manifest": "^1.0.3",
"php": "^7.1", "phar-io/version": "^2.0.1",
"phpspec/prophecy": "^1.7", "php": "^7.2",
"phpunit/php-code-coverage": "^6.0.7", "phpspec/prophecy": "^1.8.1",
"phpunit/php-file-iterator": "^2.0.1", "phpunit/php-code-coverage": "^7.0.7",
"phpunit/php-file-iterator": "^2.0.2",
"phpunit/php-text-template": "^1.2.1", "phpunit/php-text-template": "^1.2.1",
"phpunit/php-timer": "^2.1", "phpunit/php-timer": "^2.1.2",
"sebastian/comparator": "^3.0", "sebastian/comparator": "^3.0.2",
"sebastian/diff": "^3.0", "sebastian/diff": "^3.0.2",
"sebastian/environment": "^4.0", "sebastian/environment": "^4.2.2",
"sebastian/exporter": "^3.1", "sebastian/exporter": "^3.1.1",
"sebastian/global-state": "^2.0", "sebastian/global-state": "^3.0.0",
"sebastian/object-enumerator": "^3.0.3", "sebastian/object-enumerator": "^3.0.3",
"sebastian/resource-operations": "^2.0", "sebastian/resource-operations": "^2.0.1",
"sebastian/type": "^1.1.3",
"sebastian/version": "^2.0.1" "sebastian/version": "^2.0.1"
}, },
"conflict": {
"phpunit/phpunit-mock-objects": "*"
},
"require-dev": { "require-dev": {
"ext-pdo": "*" "ext-pdo": "*"
}, },
"suggest": { "suggest": {
"ext-soap": "*", "ext-soap": "*",
"ext-xdebug": "*", "ext-xdebug": "*",
"phpunit/php-invoker": "^2.0" "phpunit/php-invoker": "^2.0.0"
}, },
"bin": [ "bin": [
"phpunit" "phpunit"
@ -887,7 +927,7 @@
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "7.5-dev" "dev-master": "8.4-dev"
} }
}, },
"autoload": { "autoload": {
@ -913,7 +953,7 @@
"testing", "testing",
"xunit" "xunit"
], ],
"time": "2019-09-14T09:08:39+00:00" "time": "2019-10-07T12:57:41+00:00"
}, },
{ {
"name": "sebastian/code-unit-reverse-lookup", "name": "sebastian/code-unit-reverse-lookup",
@ -1202,23 +1242,26 @@
}, },
{ {
"name": "sebastian/global-state", "name": "sebastian/global-state",
"version": "2.0.0", "version": "3.0.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/sebastianbergmann/global-state.git", "url": "https://github.com/sebastianbergmann/global-state.git",
"reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4" "reference": "edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4",
"reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", "reference": "edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.0" "php": "^7.2",
"sebastian/object-reflector": "^1.1.1",
"sebastian/recursion-context": "^3.0"
}, },
"require-dev": { "require-dev": {
"phpunit/phpunit": "^6.0" "ext-dom": "*",
"phpunit/phpunit": "^8.0"
}, },
"suggest": { "suggest": {
"ext-uopz": "*" "ext-uopz": "*"
@ -1226,7 +1269,7 @@
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "2.0-dev" "dev-master": "3.0-dev"
} }
}, },
"autoload": { "autoload": {
@ -1249,7 +1292,7 @@
"keywords": [ "keywords": [
"global state" "global state"
], ],
"time": "2017-04-27T15:39:26+00:00" "time": "2019-02-01T05:30:01+00:00"
}, },
{ {
"name": "sebastian/object-enumerator", "name": "sebastian/object-enumerator",
@ -1438,6 +1481,52 @@
"homepage": "https://www.github.com/sebastianbergmann/resource-operations", "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
"time": "2018-10-04T04:07:39+00:00" "time": "2018-10-04T04:07:39+00:00"
}, },
{
"name": "sebastian/type",
"version": "1.1.3",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/type.git",
"reference": "3aaaa15fa71d27650d62a948be022fe3b48541a3"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/type/zipball/3aaaa15fa71d27650d62a948be022fe3b48541a3",
"reference": "3aaaa15fa71d27650d62a948be022fe3b48541a3",
"shasum": ""
},
"require": {
"php": "^7.2"
},
"require-dev": {
"phpunit/phpunit": "^8.2"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.1-dev"
}
},
"autoload": {
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
"email": "sebastian@phpunit.de",
"role": "lead"
}
],
"description": "Collection of value objects that represent the types of the PHP type system",
"homepage": "https://github.com/sebastianbergmann/type",
"time": "2019-07-02T08:10:15+00:00"
},
{ {
"name": "sebastian/version", "name": "sebastian/version",
"version": "2.0.1", "version": "2.0.1",