Files
wordpress-theme-aksrt/tests/widget-system/runtime-assets-behavior-harness.php
T
kate522 8aa116ec43 fix(theme): align reference layouts and restore passing contracts
Align homepage and category discovery, modern widgets, admin controls, quotes, and comments with the reference theme. Remove superseded paths and add rendering and behavior coverage. Update stale asset and finance contracts; all 760 Node tests and 139 widget assertions pass.
2026-10-29 19:16:03 +08:00

98 lines
4.5 KiB
PHP

<?php
/** Exercise ScriptsPart1c's _win runtime version with an isolated asset tree. */
declare(strict_types=1);
define('ABSPATH', __DIR__ . DIRECTORY_SEPARATOR);
define('AKSRT_VERSION', 'theme-fallback');
define('AKSRT_URI', 'https://example.test/theme');
$GLOBALS['runtime_asset_fixture_root'] = sys_get_temp_dir() . DIRECTORY_SEPARATOR . 'aksrt-runtime-assets-' . bin2hex(random_bytes(6));
$GLOBALS['runtime_asset_localized'] = [];
mkdir($GLOBALS['runtime_asset_fixture_root'] . '/assets/js/runtime', 0777, true);
function get_template_directory(): string { return $GLOBALS['runtime_asset_fixture_root']; }
function get_template_directory_uri(): string { return 'https://example.test/theme'; }
function wp_enqueue_script(...$args): void { unset($args); }
function wp_enqueue_style(...$args): void { unset($args); }
function wp_register_script(...$args): void { unset($args); }
function wp_register_style(...$args): void { unset($args); }
function wp_localize_script(string $handle, string $object_name, array $data): bool {
$GLOBALS['runtime_asset_localized'][$handle][$object_name] = $data;
return true;
}
function __($text, $domain = null): string { return (string) $text; }
function sanitize_key($value): string { return preg_replace('/[^a-z0-9_-]/', '', strtolower((string) $value)) ?? ''; }
function home_url(string $path = '/'): string { return 'https://example.test' . $path; }
function admin_url(string $path = ''): string { return 'https://example.test/wp-admin/' . $path; }
function wp_login_url(): string { return 'https://example.test/login'; }
function wp_registration_url(): string { return 'https://example.test/register'; }
function wp_lostpassword_url(): string { return 'https://example.test/lost-password'; }
function rest_url(string $path = ''): string { return 'https://example.test/wp-json/' . $path; }
function esc_url_raw($url): string { return (string) $url; }
function get_allowed_mime_types(): array { return ['jpg|jpeg' => 'image/jpeg']; }
function wp_create_nonce(string $action): string { return 'nonce-' . $action; }
function get_query_var(string $name, $default = '') { return $default; }
function is_user_logged_in(): bool { return false; }
function get_current_user_id(): int { return 0; }
function wp_max_upload_size(): int { return 1048576; }
function is_page_template(string $template = ''): bool { return false; }
function aksrt_is_lazy(string $scope): bool { return false; }
function aksrt_get_lazy_thumb(string $size = ''): string { return 'https://example.test/lazy.svg'; }
function aksrt_get_default_avatar_url(): string { return 'https://example.test/avatar.png'; }
require dirname(__DIR__, 2) . '/src/Core/ScriptsPart1c.php';
class RuntimeAssetBehaviorHarness {
use \AKSRT\Core\ScriptsPart1c;
public function enqueue(): void {
$this->enqueue_public_fonts_js_and_data('https://example.test/theme', 'aksrt-public', [], false, false, false, false, AKSRT_VERSION, []);
}
private function resolve_frontend_routes(): array {
return ['orders' => '/orders', 'resources' => '/resources'];
}
}
function write_runtime_file(string $relative, int $mtime): void {
$path = get_template_directory() . '/assets/js/runtime/' . $relative;
if (!is_dir(dirname($path))) mkdir(dirname($path), 0777, true);
file_put_contents($path, '// ' . $relative);
touch($path, $mtime);
clearstatcache(true, $path);
}
function latest_runtime_version(): string {
$GLOBALS['runtime_asset_localized'] = [];
(new RuntimeAssetBehaviorHarness())->enqueue();
return (string) $GLOBALS['runtime_asset_localized']['loader_js']['_win']['ver'];
}
$baseTime = time() - 600;
write_runtime_file('main.js', $baseTime + 10);
write_runtime_file('main.min.js', $baseTime + 30);
write_runtime_file('imgbox.js', $baseTime + 20);
$versions = [latest_runtime_version()];
write_runtime_file('main.min.js', $baseTime + 40);
$versions[] = latest_runtime_version();
write_runtime_file('comment-tools.js', $baseTime + 50);
$versions[] = latest_runtime_version();
foreach (glob(get_template_directory() . '/assets/js/runtime/*.js') ?: [] as $file) unlink($file);
$versions[] = latest_runtime_version();
foreach (glob(get_template_directory() . '/assets/js/runtime/*') ?: [] as $file) {
if (is_dir($file)) rmdir($file);
}
rmdir(get_template_directory() . '/assets/js/runtime');
rmdir(get_template_directory() . '/assets/js');
rmdir(get_template_directory() . '/assets');
rmdir(get_template_directory());
echo json_encode([
'versions' => $versions,
'expected' => [(string) ($baseTime + 30), (string) ($baseTime + 40), (string) ($baseTime + 50), AKSRT_VERSION],
], JSON_THROW_ON_ERROR);