diff options
Diffstat (limited to 'tests/Formats/BaseFormatTest.php')
-rw-r--r-- | tests/Formats/BaseFormatTest.php | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/tests/Formats/BaseFormatTest.php b/tests/Formats/BaseFormatTest.php new file mode 100644 index 00000000..dac0e341 --- /dev/null +++ b/tests/Formats/BaseFormatTest.php @@ -0,0 +1,64 @@ +<?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 = array(); + foreach($data['items'] as $item) { + $items[] = new \FeedItem($item); + } + + return (object)array( + '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(); + $formatFac->setWorkingDir(PATH_LIB_FORMATS); + $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(); + } +} |