expectException($class); $this->expectExceptionCode($code); } else { // expecting a standard PHP exception $this->expectException(\Exception::class); } } protected function assertResponse(ResponseInterface $exp, ResponseInterface $act, string $text = null) { $this->assertEquals($exp->getStatusCode(), $act->getStatusCode(), $text); $this->assertInstanceOf(get_class($exp), $act); if ($exp instanceof JsonResponse) { $this->assertEquals($exp->getPayload(), $act->getPayload(), $text); $this->assertSame($exp->getPayload(), $act->getPayload(), $text); } $this->assertEquals($exp->getHeaders(), $act->getHeaders(), $text); } public function approximateTime($exp, $act) { if (is_null($act)) { return null; } $target = Date::normalize($exp)->getTimeStamp(); $value = Date::normalize($act)->getTimeStamp(); if ($value >= ($target - 1) && $value <= ($target + 1)) { // if the actual time is off by no more than one second, it's acceptable return $exp; } else { return $act; } } public function assertTime($exp, $test, string $msg = null) { $test = $this->approximateTime($exp, $test); $exp = Date::transform($exp, "iso8601"); $test = Date::transform($test, "iso8601"); $this->assertSame($exp, $test, $msg); } public function clearData(bool $loadLang = true): bool { date_default_timezone_set("America/Toronto"); $r = new \ReflectionClass(\JKingWeb\Arsse\Arsse::class); $props = array_keys($r->getStaticProperties()); foreach ($props as $prop) { Arsse::$$prop = null; } if ($loadLang) { Arsse::$lang = new \JKingWeb\Arsse\Lang(); } return true; } }