#!/usr/bin/env php
<?php
{{ header }}
declare(strict_types=1);
$pkgAutoloader = __DIR__ . '/{{ pkg_path }}/vendor/autoload.php';
if (!file_exists($pkgAutoloader)) {
fprintf(STDERR, "Error: PHP binding package autoloader not found at %s\n", $pkgAutoloader);
exit(1);
}
require_once $pkgAutoloader;
use {{ route_builder_import }}\{{ app_class }};
use {{ route_builder_import }}\ServerConfig;
use {{ route_builder_import }}\{{ route_builder_class }};
use {{ method_enum_import }}\{{ method_enum_class }};
$_FIXTURES_JSON = <<<'FIXTURES_END'
{{ fixtures_json }}
FIXTURES_END;
$_FIXTURES = json_decode($_FIXTURES_JSON, true);
if (!is_array($_FIXTURES)) {
$_FIXTURES = [];
}
$app = new {{ app_class }}();
foreach ($_FIXTURES as $fixture_id => $fixture) {
$http = $fixture['http'] ?? null;
if (!is_array($http)) {
continue;
}
$handler = $http['handler'] ?? [];
$route = $handler['route'] ?? '/';
$method_str = strtoupper($handler['method'] ?? 'GET');
$body_schema = $handler['body_schema'] ?? null;
$expected = $http['expected_response'] ?? [];
$expected_status = (int)($expected['status_code'] ?? 200);
$expected_body = $expected['body'] ?? null;
$expected_headers = $expected['headers'] ?? [];
$handler_fn = static function (...$args) use (
$expected_status,
$expected_body,
$expected_headers
): array {
return [
'status_code' => $expected_status,
'{{ response_body_field }}' => $expected_body,
'headers' => is_array($expected_headers) ? $expected_headers : [],
];
};
$full_route = "/fixtures/{$fixture_id}{$route}";
$method_enum_val = constant("{{ method_enum_import }}\\{{ method_enum_class }}::{$method_str}");
if ($method_enum_val === null) {
continue;
}
$builder = new {{ route_builder_class }}($method_enum_val, $full_route);
if ($body_schema !== null) {
$builder = $builder->{{ route_builder_schema_setter }}(json_encode($body_schema));
}
$app = $app->{{ register_route_method }}($builder, $handler_fn);
}
$_config = new ServerConfig();
$_config->host = '{{ host }}';
$_config->port = {{ port }};
$app = $app->config($_config);
echo "Harness listening on {{ host }}:{{ port }}\n";
fflush(STDOUT);
$app->{{ run_method }}();