<?php namespace RssBridge\Tests\Formats; use PHPUnit\Framework\TestCase; use FormatFactory; abstract class BaseFormatTest extends TestCase { protected const PATH_SAMPLES = __DIR__ . '/samples/'; /** * @return array<string, array{string, string}> */ public function sampleProvider() { $samples = []; foreach (glob(self::PATH_SAMPLES . '*.json') as $path) { $name = basename($path, '.json'); $samples[$name] = [ $name, $path, ]; } return $samples; } /** * Cannot be part of the sample returned by sampleProvider since this modifies $_SERVER * and thus needs to be run in a separate process to avoid side effects. */ protected function loadSample(string $path): \stdClass { $data = json_decode(file_get_contents($path), true); if (isset($data['meta']) && isset($data['items'])) { if (!empty($data['server'])) { $this->setServerVars($data['server']); } $items = []; foreach ($data['items'] as $item) { $items[] = new \FeedItem($item); } return (object)[ 'meta' => $data['meta'], 'items' => $items, ]; } else { $this->fail('invalid test sample: ' . basename($path, '.json')); } } private function setServerVars(array $list): void { $_SERVER = array_merge($_SERVER, $list); } protected function formatData(string $formatName, \stdClass $sample): string { $formatFac = new FormatFactory(); $format = $formatFac->create($formatName); $format->setItems($sample->items); $format->setExtraInfos($sample->meta); $format->setLastModified(strtotime('2000-01-01 12:00:00 UTC')); return $format->stringify(); } }