[types] typetypetypetypetype

This commit is contained in:
Shish 2024-01-15 15:08:22 +00:00
parent 434455b836
commit 589ff69eea
16 changed files with 106 additions and 67 deletions

View file

@ -174,7 +174,7 @@ class BasePage
$this->flash[] = $message; $this->flash[] = $message;
} }
public function disable_left() public function disable_left(): void
{ {
$this->left_enabled = false; $this->left_enabled = false;
} }
@ -480,7 +480,7 @@ class BasePage
} }
/** /**
* @return array A list of stylesheets relative to the theme root. * @return string[] A list of stylesheets relative to the theme root.
*/ */
protected function get_theme_stylesheets(): array protected function get_theme_stylesheets(): array
{ {
@ -489,7 +489,7 @@ class BasePage
/** /**
* @return array A list of script files relative to the theme root. * @return string[] A list of script files relative to the theme root.
*/ */
protected function get_theme_scripts(): array protected function get_theme_scripts(): array
{ {
@ -546,7 +546,7 @@ class BasePage
/** /**
* turns the Page into HTML * turns the Page into HTML
*/ */
public function render() public function render(): void
{ {
global $config, $user; global $config, $user;
@ -643,7 +643,7 @@ class PageNavBuildingEvent extends Event
{ {
public array $links = []; public array $links = [];
public function add_nav_link(string $name, Link $link, string $desc, ?bool $active = null, int $order = 50) public function add_nav_link(string $name, Link $link, string $desc, ?bool $active = null, int $order = 50): void
{ {
$this->links[] = new NavLink($name, $link, $desc, $active, $order); $this->links[] = new NavLink($name, $link, $desc, $active, $order);
} }
@ -661,7 +661,7 @@ class PageSubNavBuildingEvent extends Event
$this->parent = $parent; $this->parent = $parent;
} }
public function add_nav_link(string $name, Link $link, string|HTMLElement $desc, ?bool $active = null, int $order = 50) public function add_nav_link(string $name, Link $link, string|HTMLElement $desc, ?bool $active = null, int $order = 50): void
{ {
$this->links[] = new NavLink($name, $link, $desc, $active, $order); $this->links[] = new NavLink($name, $link, $desc, $active, $order);
} }

View file

@ -234,7 +234,7 @@ abstract class BaseConfig implements Config
return explode(",", $this->get($name, "")); return explode(",", $this->get($name, ""));
} }
private function get(string $name, $default = null) private function get(string $name, $default = null): mixed
{ {
if (isset($this->values[$name])) { if (isset($this->values[$name])) {
return $this->values[$name]; return $this->values[$name];

View file

@ -297,7 +297,7 @@ class Database
/** /**
* Execute an SQL query and return a single value, or null. * Execute an SQL query and return a single value, or null.
*/ */
public function get_one(string $query, array $args = []) public function get_one(string $query, array $args = []): mixed
{ {
$_start = ftime(); $_start = ftime();
$row = $this->_execute($query, $args)->fetch(); $row = $this->_execute($query, $args)->fetch();

View file

@ -16,7 +16,7 @@ abstract class DBEngine
{ {
public DatabaseDriverID $id; public DatabaseDriverID $id;
public function init(PDO $db) public function init(PDO $db): void
{ {
} }
@ -30,7 +30,7 @@ abstract class DBEngine
return 'CREATE TABLE '.$name.' ('.$data.')'; return 'CREATE TABLE '.$name.' ('.$data.')';
} }
abstract public function set_timeout(PDO $db, ?int $time); abstract public function set_timeout(PDO $db, ?int $time): void;
abstract public function get_version(PDO $db): string; abstract public function get_version(PDO $db): string;
@ -41,7 +41,7 @@ class MySQL extends DBEngine
{ {
public DatabaseDriverID $id = DatabaseDriverID::MYSQL; public DatabaseDriverID $id = DatabaseDriverID::MYSQL;
public function init(PDO $db) public function init(PDO $db): void
{ {
$db->exec("SET NAMES utf8;"); $db->exec("SET NAMES utf8;");
} }
@ -80,7 +80,7 @@ class PostgreSQL extends DBEngine
{ {
public DatabaseDriverID $id = DatabaseDriverID::PGSQL; public DatabaseDriverID $id = DatabaseDriverID::PGSQL;
public function init(PDO $db) public function init(PDO $db): void
{ {
if (array_key_exists('REMOTE_ADDR', $_SERVER)) { if (array_key_exists('REMOTE_ADDR', $_SERVER)) {
$db->exec("SET application_name TO 'shimmie [{$_SERVER['REMOTE_ADDR']}]';"); $db->exec("SET application_name TO 'shimmie [{$_SERVER['REMOTE_ADDR']}]';");
@ -178,7 +178,7 @@ class SQLite extends DBEngine
{ {
public DatabaseDriverID $id = DatabaseDriverID::SQLITE; public DatabaseDriverID $id = DatabaseDriverID::SQLITE;
public function init(PDO $db) public function init(PDO $db): void
{ {
ini_set('sqlite.assoc_case', '0'); ini_set('sqlite.assoc_case', '0');
$db->exec("PRAGMA foreign_keys = ON;"); $db->exec("PRAGMA foreign_keys = ON;");

View file

@ -102,7 +102,7 @@ abstract class Extension
return $config->get_int($name, 0); return $config->get_int($name, 0);
} }
protected function set_version(string $name, int $ver) protected function set_version(string $name, int $ver): void
{ {
global $config; global $config;
$config->set_int($name, $ver); $config->set_int($name, $ver);
@ -188,7 +188,7 @@ abstract class ExtensionInfo
return Extension::is_enabled($this->key); return Extension::is_enabled($this->key);
} }
private function check_support() private function check_support(): void
{ {
global $database; global $database;
$this->support_info = ""; $this->support_info = "";
@ -243,7 +243,7 @@ abstract class ExtensionInfo
} }
} }
public static function load_all_extension_info() public static function load_all_extension_info(): void
{ {
foreach (get_subclasses_of("Shimmie2\ExtensionInfo") as $class) { foreach (get_subclasses_of("Shimmie2\ExtensionInfo") as $class) {
$extension_info = new $class(); $extension_info = new $class();

View file

@ -208,7 +208,7 @@ class Image
} }
} }
public function save_to_db() public function save_to_db(): void
{ {
global $database, $user; global $database, $user;
$cut_name = substr($this->filename, 0, 255); $cut_name = substr($this->filename, 0, 255);

View file

@ -133,7 +133,7 @@ function get_thumbnail_max_size_scaled(): array
} }
function create_image_thumb(Image $image, string $engine = null) function create_image_thumb(Image $image, string $engine = null): void
{ {
global $config; global $config;
create_scaled_image( create_scaled_image(
@ -148,8 +148,14 @@ function create_image_thumb(Image $image, string $engine = null)
function create_scaled_image(string $inname, string $outname, array $tsize, string $mime, ?string $engine = null, ?string $resize_type = null) function create_scaled_image(
{ string $inname,
string $outname,
array $tsize,
string $mime,
?string $engine = null,
?string $resize_type = null
): void {
global $config; global $config;
if (empty($engine)) { if (empty($engine)) {
$engine = $config->get_string(ImageConfig::THUMB_ENGINE); $engine = $config->get_string(ImageConfig::THUMB_ENGINE);

View file

@ -20,7 +20,7 @@ namespace Shimmie2;
* and other such things that aren't ready yet * and other such things that aren't ready yet
*/ */
function install() function install(): void
{ {
date_default_timezone_set('UTC'); date_default_timezone_set('UTC');
@ -50,7 +50,7 @@ function install()
} }
} }
function get_dsn() function get_dsn(): string
{ {
if (getenv("INSTALL_DSN")) { if (getenv("INSTALL_DSN")) {
$dsn = getenv("INSTALL_DSN"); $dsn = getenv("INSTALL_DSN");
@ -66,7 +66,7 @@ function get_dsn()
return $dsn; return $dsn;
} }
function do_install($dsn) function do_install(string $dsn): void
{ {
try { try {
create_dirs(); create_dirs();
@ -77,7 +77,7 @@ function do_install($dsn)
} }
} }
function ask_questions() function ask_questions(): void
{ {
$warnings = []; $warnings = [];
$errors = []; $errors = [];
@ -187,7 +187,7 @@ EOD
} }
function create_dirs() function create_dirs(): void
{ {
$data_exists = file_exists("data") || mkdir("data"); $data_exists = file_exists("data") || mkdir("data");
$data_writable = $data_exists && (is_writable("data") || chmod("data", 0755)); $data_writable = $data_exists && (is_writable("data") || chmod("data", 0755));
@ -204,7 +204,7 @@ function create_dirs()
} }
} }
function create_tables(Database $db) function create_tables(Database $db): void
{ {
try { try {
if ($db->count_tables() > 0) { if ($db->count_tables() > 0) {
@ -301,7 +301,7 @@ function create_tables(Database $db)
} }
} }
function write_config($dsn) function write_config(string $dsn): void
{ {
$file_content = "<" . "?php\ndefine('DATABASE_DSN', '$dsn');\n"; $file_content = "<" . "?php\ndefine('DATABASE_DSN', '$dsn');\n";

View file

@ -31,7 +31,7 @@ const LOGGING_LEVEL_NAMES = [
* When taking action, a log event should be stored by the server * When taking action, a log event should be stored by the server
* Quite often, both of these happen at once, hence log_*() having $flash * Quite often, both of these happen at once, hence log_*() having $flash
*/ */
function log_msg(string $section, int $priority, string $message, ?string $flash = null) function log_msg(string $section, int $priority, string $message, ?string $flash = null): void
{ {
global $page; global $page;
send_event(new LogEvent($section, $priority, $message)); send_event(new LogEvent($section, $priority, $message));
@ -47,23 +47,23 @@ function log_msg(string $section, int $priority, string $message, ?string $flash
} }
// More shorthand ways of logging // More shorthand ways of logging
function log_debug(string $section, string $message, ?string $flash = null) function log_debug(string $section, string $message, ?string $flash = null): void
{ {
log_msg($section, SCORE_LOG_DEBUG, $message, $flash); log_msg($section, SCORE_LOG_DEBUG, $message, $flash);
} }
function log_info(string $section, string $message, ?string $flash = null) function log_info(string $section, string $message, ?string $flash = null): void
{ {
log_msg($section, SCORE_LOG_INFO, $message, $flash); log_msg($section, SCORE_LOG_INFO, $message, $flash);
} }
function log_warning(string $section, string $message, ?string $flash = null) function log_warning(string $section, string $message, ?string $flash = null): void
{ {
log_msg($section, SCORE_LOG_WARNING, $message, $flash); log_msg($section, SCORE_LOG_WARNING, $message, $flash);
} }
function log_error(string $section, string $message, ?string $flash = null) function log_error(string $section, string $message, ?string $flash = null): void
{ {
log_msg($section, SCORE_LOG_ERROR, $message, $flash); log_msg($section, SCORE_LOG_ERROR, $message, $flash);
} }
function log_critical(string $section, string $message, ?string $flash = null) function log_critical(string $section, string $message, ?string $flash = null): void
{ {
log_msg($section, SCORE_LOG_CRITICAL, $message, $flash); log_msg($section, SCORE_LOG_CRITICAL, $message, $flash);
} }

View file

@ -253,6 +253,8 @@ function get_subclasses_of(string $parent): array
/** /**
* Like glob, with support for matching very long patterns with braces. * Like glob, with support for matching very long patterns with braces.
*
* @return string[]
*/ */
function zglob(string $pattern): array function zglob(string $pattern): array
{ {
@ -763,7 +765,7 @@ function iterator_map_to_array(callable $callback, \iterator $iter): array
return iterator_to_array(iterator_map($callback, $iter)); return iterator_to_array(iterator_map($callback, $iter));
} }
function stringer($s): string function stringer(mixed $s): string
{ {
if (is_array($s)) { if (is_array($s)) {
if (isset($s[0])) { if (isset($s[0])) {
@ -798,7 +800,7 @@ function stringer($s): string
* If a value is in the cache, return it; otherwise, call the callback * If a value is in the cache, return it; otherwise, call the callback
* to generate it and store it in the cache. * to generate it and store it in the cache.
*/ */
function cache_get_or_set(string $key, callable $callback, ?int $ttl = null) function cache_get_or_set(string $key, callable $callback, ?int $ttl = null): mixed
{ {
global $cache; global $cache;
$value = $cache->get($key); $value = $cache->get($key);

View file

@ -9,7 +9,7 @@ namespace Shimmie2;
* be included right at the very start of index.php and tests/bootstrap.php * be included right at the very start of index.php and tests/bootstrap.php
*/ */
function die_nicely($title, $body, $code = 0) function die_nicely(string $title, string $body, int $code = 0): void
{ {
print("<!DOCTYPE html> print("<!DOCTYPE html>
<html lang='en'> <html lang='en'>

View file

@ -17,7 +17,7 @@ namespace Shimmie2;
* define("SPEED_HAX", true); * define("SPEED_HAX", true);
*/ */
function _d(string $name, $value): void function _d(string $name, mixed $value): void
{ {
if (!defined($name)) { if (!defined($name)) {
define($name, $value); define($name, $value);

View file

@ -87,8 +87,12 @@ if(class_exists("\\PHPUnit\\Framework\\TestCase")) {
return $args; return $args;
} }
protected static function request($method, $page_name, $get_args = null, $post_args = null): Page protected static function request(
{ string $method,
string $page_name,
?array $get_args = null,
?array $post_args = null
): Page {
// use a fresh page // use a fresh page
global $page; global $page;
$get_args = self::check_args($get_args); $get_args = self::check_args($get_args);
@ -108,12 +112,12 @@ if(class_exists("\\PHPUnit\\Framework\\TestCase")) {
return $page; return $page;
} }
protected static function get_page($page_name, $args = null): Page protected static function get_page(string $page_name, array $args = null): Page
{ {
return self::request("GET", $page_name, $args, null); return self::request("GET", $page_name, $args, null);
} }
protected static function post_page($page_name, $args = null): Page protected static function post_page(string $page_name, array $args = null): Page
{ {
return self::request("POST", $page_name, null, $args); return self::request("POST", $page_name, null, $args);
} }
@ -125,7 +129,7 @@ if(class_exists("\\PHPUnit\\Framework\\TestCase")) {
$this->assertStringContainsString($title, $page->title); $this->assertStringContainsString($title, $page->title);
} }
protected function assert_title_matches($title): void protected function assert_title_matches(string $title): void
{ {
global $page; global $page;
$this->assertStringMatchesFormat($title, $page->title); $this->assertStringMatchesFormat($title, $page->title);
@ -190,7 +194,11 @@ if(class_exists("\\PHPUnit\\Framework\\TestCase")) {
$this->assertStringNotContainsString($content, $page->data); $this->assertStringNotContainsString($content, $page->data);
} }
protected function assert_search_results($tags, $results): void /**
* @param string[] $tags
* @param int[] $results
*/
protected function assert_search_results(array $tags, array $results): void
{ {
$images = Search::find_images(0, null, $tags); $images = Search::find_images(0, null, $tags);
$ids = []; $ids = [];

View file

@ -44,8 +44,12 @@ class SearchTest extends ShimmiePHPUnitTestCase
/******************************************************** /********************************************************
* Test turning a string into an abstract query * Test turning a string into an abstract query
*/ */
private function assert_TTC(string $tags, array $expected_tag_conditions, array $expected_img_conditions, string $expected_order) private function assert_TTC(
{ string $tags,
array $expected_tag_conditions,
array $expected_img_conditions,
string $expected_order,
): void {
$class = new \ReflectionClass('\Shimmie2\Search'); $class = new \ReflectionClass('\Shimmie2\Search');
$terms_to_conditions = $class->getMethod("terms_to_conditions"); $terms_to_conditions = $class->getMethod("terms_to_conditions");
$terms_to_conditions->setAccessible(true); // Use this if you are running PHP older than 8.1.0 $terms_to_conditions->setAccessible(true); // Use this if you are running PHP older than 8.1.0
@ -149,7 +153,7 @@ class SearchTest extends ShimmiePHPUnitTestCase
int $start = 0, int $start = 0,
array $res = [], array $res = [],
array $path = null, array $path = null,
) { ): void {
global $database; global $database;
$tcs = array_map( $tcs = array_map(
@ -192,7 +196,7 @@ class SearchTest extends ShimmiePHPUnitTestCase
* No-tag search * * No-tag search *
* * * * * * * * * * */ * * * * * * * * * * */
#[Depends('testUpload')] #[Depends('testUpload')]
public function testBSQ_NoTags($image_ids): void public function testBSQ_NoTags(array $image_ids): void
{ {
$image_ids = $this->testUpload(); $image_ids = $this->testUpload();
$this->assert_BSQ( $this->assert_BSQ(
@ -206,7 +210,7 @@ class SearchTest extends ShimmiePHPUnitTestCase
* Fast-path search * * Fast-path search *
* * * * * * * * * * */ * * * * * * * * * * */
#[Depends('testUpload')] #[Depends('testUpload')]
public function testBSQ_FastPath_NoResults($image_ids): void public function testBSQ_FastPath_NoResults(array $image_ids): void
{ {
$this->testUpload(); $this->testUpload();
$this->assert_BSQ( $this->assert_BSQ(
@ -217,7 +221,7 @@ class SearchTest extends ShimmiePHPUnitTestCase
} }
#[Depends('testUpload')] #[Depends('testUpload')]
public function testBSQ_FastPath_OneResult($image_ids): void public function testBSQ_FastPath_OneResult(array $image_ids): void
{ {
$image_ids = $this->testUpload(); $image_ids = $this->testUpload();
$this->assert_BSQ( $this->assert_BSQ(
@ -228,7 +232,7 @@ class SearchTest extends ShimmiePHPUnitTestCase
} }
#[Depends('testUpload')] #[Depends('testUpload')]
public function testBSQ_FastPath_ManyResults($image_ids): void public function testBSQ_FastPath_ManyResults(array $image_ids): void
{ {
$image_ids = $this->testUpload(); $image_ids = $this->testUpload();
$this->assert_BSQ( $this->assert_BSQ(
@ -239,7 +243,7 @@ class SearchTest extends ShimmiePHPUnitTestCase
} }
#[Depends('testUpload')] #[Depends('testUpload')]
public function testBSQ_FastPath_WildNoResults($image_ids): void public function testBSQ_FastPath_WildNoResults(array $image_ids): void
{ {
$this->testUpload(); $this->testUpload();
$this->assert_BSQ( $this->assert_BSQ(
@ -258,7 +262,7 @@ class SearchTest extends ShimmiePHPUnitTestCase
* https://github.com/shish/shimmie2/issues/547 * https://github.com/shish/shimmie2/issues/547
*/ */
#[Depends('testUpload')] #[Depends('testUpload')]
public function testBSQ_FastPath_WildOneResult($image_ids): void public function testBSQ_FastPath_WildOneResult(array $image_ids): void
{ {
$image_ids = $this->testUpload(); $image_ids = $this->testUpload();
$this->assert_BSQ( $this->assert_BSQ(
@ -273,7 +277,7 @@ class SearchTest extends ShimmiePHPUnitTestCase
* when a wildcard matches one image multiple times. * when a wildcard matches one image multiple times.
*/ */
#[Depends('testUpload')] #[Depends('testUpload')]
public function testBSQ_FastPath_WildManyResults($image_ids): void public function testBSQ_FastPath_WildManyResults(array $image_ids): void
{ {
$image_ids = $this->testUpload(); $image_ids = $this->testUpload();
// two images match comp* - one matches it once, one matches it twice // two images match comp* - one matches it once, one matches it twice
@ -288,7 +292,7 @@ class SearchTest extends ShimmiePHPUnitTestCase
* General search * * General search *
* * * * * * * * * * */ * * * * * * * * * * */
#[Depends('testUpload')] #[Depends('testUpload')]
public function testBSQ_GeneralPath_NoResults($image_ids): void public function testBSQ_GeneralPath_NoResults(array $image_ids): void
{ {
$this->testUpload(); $this->testUpload();
# multiple tags, one of which doesn't exist # multiple tags, one of which doesn't exist
@ -301,7 +305,7 @@ class SearchTest extends ShimmiePHPUnitTestCase
} }
#[Depends('testUpload')] #[Depends('testUpload')]
public function testBSQ_GeneralPath_OneResult($image_ids): void public function testBSQ_GeneralPath_OneResult(array $image_ids): void
{ {
$image_ids = $this->testUpload(); $image_ids = $this->testUpload();
$this->assert_BSQ( $this->assert_BSQ(
@ -320,7 +324,7 @@ class SearchTest extends ShimmiePHPUnitTestCase
* https://github.com/shish/shimmie2/issues/547 * https://github.com/shish/shimmie2/issues/547
*/ */
#[Depends('testUpload')] #[Depends('testUpload')]
public function testBSQ_GeneralPath_WildOneResult($image_ids): void public function testBSQ_GeneralPath_WildOneResult(array $image_ids): void
{ {
$image_ids = $this->testUpload(); $image_ids = $this->testUpload();
$this->assert_BSQ( $this->assert_BSQ(
@ -331,7 +335,7 @@ class SearchTest extends ShimmiePHPUnitTestCase
} }
#[Depends('testUpload')] #[Depends('testUpload')]
public function testBSQ_GeneralPath_ManyResults($image_ids): void public function testBSQ_GeneralPath_ManyResults(array $image_ids): void
{ {
$image_ids = $this->testUpload(); $image_ids = $this->testUpload();
$this->assert_BSQ( $this->assert_BSQ(
@ -342,7 +346,7 @@ class SearchTest extends ShimmiePHPUnitTestCase
} }
#[Depends('testUpload')] #[Depends('testUpload')]
public function testBSQ_GeneralPath_WildManyResults($image_ids): void public function testBSQ_GeneralPath_WildManyResults(array $image_ids): void
{ {
$image_ids = $this->testUpload(); $image_ids = $this->testUpload();
$this->assert_BSQ( $this->assert_BSQ(
@ -353,7 +357,7 @@ class SearchTest extends ShimmiePHPUnitTestCase
} }
#[Depends('testUpload')] #[Depends('testUpload')]
public function testBSQ_GeneralPath_SubtractValidFromResults($image_ids): void public function testBSQ_GeneralPath_SubtractValidFromResults(array $image_ids): void
{ {
$image_ids = $this->testUpload(); $image_ids = $this->testUpload();
$this->assert_BSQ( $this->assert_BSQ(
@ -364,7 +368,7 @@ class SearchTest extends ShimmiePHPUnitTestCase
} }
#[Depends('testUpload')] #[Depends('testUpload')]
public function testBSQ_GeneralPath_SubtractNotValidFromResults($image_ids): void public function testBSQ_GeneralPath_SubtractNotValidFromResults(array $image_ids): void
{ {
$image_ids = $this->testUpload(); $image_ids = $this->testUpload();
$this->assert_BSQ( $this->assert_BSQ(
@ -375,7 +379,7 @@ class SearchTest extends ShimmiePHPUnitTestCase
} }
#[Depends('testUpload')] #[Depends('testUpload')]
public function testBSQ_GeneralPath_SubtractValidFromDefault($image_ids): void public function testBSQ_GeneralPath_SubtractValidFromDefault(array $image_ids): void
{ {
$image_ids = $this->testUpload(); $image_ids = $this->testUpload();
// negative tag alone, should remove the image with that tag // negative tag alone, should remove the image with that tag
@ -387,7 +391,7 @@ class SearchTest extends ShimmiePHPUnitTestCase
} }
#[Depends('testUpload')] #[Depends('testUpload')]
public function testBSQ_GeneralPath_SubtractNotValidFromDefault($image_ids): void public function testBSQ_GeneralPath_SubtractNotValidFromDefault(array $image_ids): void
{ {
$image_ids = $this->testUpload(); $image_ids = $this->testUpload();
// negative that doesn't exist, should return all results // negative that doesn't exist, should return all results
@ -399,7 +403,7 @@ class SearchTest extends ShimmiePHPUnitTestCase
} }
#[Depends('testUpload')] #[Depends('testUpload')]
public function testBSQ_GeneralPath_SubtractMultipleNotValidFromDefault($image_ids): void public function testBSQ_GeneralPath_SubtractMultipleNotValidFromDefault(array $image_ids): void
{ {
$image_ids = $this->testUpload(); $image_ids = $this->testUpload();
// multiple negative tags that don't exist, should return all results // multiple negative tags that don't exist, should return all results
@ -414,7 +418,7 @@ class SearchTest extends ShimmiePHPUnitTestCase
* Meta Search * * Meta Search *
* * * * * * * * * * */ * * * * * * * * * * */
#[Depends('testUpload')] #[Depends('testUpload')]
public function testBSQ_ImgCond_NoResults($image_ids): void public function testBSQ_ImgCond_NoResults(array $image_ids): void
{ {
$this->testUpload(); $this->testUpload();
$this->assert_BSQ( $this->assert_BSQ(
@ -430,7 +434,7 @@ class SearchTest extends ShimmiePHPUnitTestCase
} }
#[Depends('testUpload')] #[Depends('testUpload')]
public function testBSQ_ImgCond_OneResult($image_ids): void public function testBSQ_ImgCond_OneResult(array $image_ids): void
{ {
$image_ids = $this->testUpload(); $image_ids = $this->testUpload();
$this->assert_BSQ( $this->assert_BSQ(
@ -451,7 +455,7 @@ class SearchTest extends ShimmiePHPUnitTestCase
} }
#[Depends('testUpload')] #[Depends('testUpload')]
public function testBSQ_ImgCond_ManyResults($image_ids): void public function testBSQ_ImgCond_ManyResults(array $image_ids): void
{ {
$image_ids = $this->testUpload(); $image_ids = $this->testUpload();
@ -476,7 +480,7 @@ class SearchTest extends ShimmiePHPUnitTestCase
* Mixed * * Mixed *
* * * * * * * * * * */ * * * * * * * * * * */
#[Depends('testUpload')] #[Depends('testUpload')]
public function testBSQ_TagCondWithImgCond($image_ids): void public function testBSQ_TagCondWithImgCond(array $image_ids): void
{ {
$image_ids = $this->testUpload(); $image_ids = $this->testUpload();
// multiple tags, many results // multiple tags, many results

View file

@ -24,6 +24,8 @@ class Link
/** /**
* Build a link to a search page for given terms, * Build a link to a search page for given terms,
* with all the appropriate escaping * with all the appropriate escaping
*
* @param string[] $terms
*/ */
function search_link(array $terms = [], int $page = 1): string function search_link(array $terms = [], int $page = 1): string
{ {
@ -67,12 +69,19 @@ function make_link(?string $page = null, ?string $query = null, ?string $fragmen
/** /**
* Take the current URL and modify some parameters * Take the current URL and modify some parameters
*
* @param array<string, mixed> $changes
*/ */
function modify_current_url(array $changes): string function modify_current_url(array $changes): string
{ {
return modify_url($_SERVER['REQUEST_URI'], $changes); return modify_url($_SERVER['REQUEST_URI'], $changes);
} }
/**
* Take a URL and modify some parameters
*
* @param array<string, mixed> $changes
*/
function modify_url(string $url, array $changes): string function modify_url(string $url, array $changes): string
{ {
$parts = parse_url($url); $parts = parse_url($url);
@ -115,6 +124,8 @@ function make_http(string $link): string
/** /**
* If HTTP_REFERER is set, and not blacklisted, then return it * If HTTP_REFERER is set, and not blacklisted, then return it
* Else return a default $dest * Else return a default $dest
*
* @param string[]|null $blacklist
*/ */
function referer_or(string $dest, ?array $blacklist = null): string function referer_or(string $dest, ?array $blacklist = null): string
{ {

View file

@ -536,6 +536,11 @@ function get_debug_info(): string
return $debug; return $debug;
} }
/**
* Collects some debug information (execution time, memory usage, queries, etc)
*
* @return array<string, mixed>
*/
function get_debug_info_arr(): array function get_debug_info_arr(): array
{ {
global $cache, $config, $_shm_event_count, $database, $_shm_load_start; global $cache, $config, $_shm_event_count, $database, $_shm_load_start;
@ -565,6 +570,9 @@ function get_debug_info_arr(): array
* Request initialisation stuff * * Request initialisation stuff *
\* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ \* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/**
* @param string[] $files
*/
function require_all(array $files): void function require_all(array $files): void
{ {
foreach ($files as $filename) { foreach ($files as $filename) {