. */ declare(strict_types=1); namespace Fisharebest\Webtrees\Module; use Fisharebest\Webtrees\Report\AbstractRenderer; use Fisharebest\Webtrees\Report\HtmlRenderer; use Fisharebest\Webtrees\Report\PdfRenderer; use Fisharebest\Webtrees\Report\ReportBaseCell; use Fisharebest\Webtrees\Report\ReportBaseElement; use Fisharebest\Webtrees\Report\ReportBaseFootnote; use Fisharebest\Webtrees\Report\ReportBaseImage; use Fisharebest\Webtrees\Report\ReportBaseLine; use Fisharebest\Webtrees\Report\ReportBaseText; use Fisharebest\Webtrees\Report\ReportBaseTextbox; use Fisharebest\Webtrees\Report\ReportExpressionLanguageProvider; use Fisharebest\Webtrees\Report\ReportHtmlCell; use Fisharebest\Webtrees\Report\ReportHtmlFootnote; use Fisharebest\Webtrees\Report\ReportHtmlImage; use Fisharebest\Webtrees\Report\ReportHtmlLine; use Fisharebest\Webtrees\Report\ReportHtmlText; use Fisharebest\Webtrees\Report\ReportHtmlTextbox; use Fisharebest\Webtrees\Report\ReportParserBase; use Fisharebest\Webtrees\Report\ReportParserGenerate; use Fisharebest\Webtrees\Report\ReportParserSetup; use Fisharebest\Webtrees\Report\ReportPdfCell; use Fisharebest\Webtrees\Report\ReportPdfFootnote; use Fisharebest\Webtrees\Report\ReportPdfImage; use Fisharebest\Webtrees\Report\ReportPdfLine; use Fisharebest\Webtrees\Report\ReportPdfText; use Fisharebest\Webtrees\Report\ReportPdfTextBox; use Fisharebest\Webtrees\Report\TcpdfWrapper; use Fisharebest\Webtrees\TestCase; use PHPUnit\Framework\Attributes\CoversClass; use PHPUnit\Framework\Attributes\CoversTrait; #[CoversTrait(ModuleReportTrait::class)] #[CoversClass(PedigreeReportModule::class)] #[CoversClass(AbstractRenderer::class)] #[CoversClass(HtmlRenderer::class)] #[CoversClass(PdfRenderer::class)] #[CoversClass(ReportBaseCell::class)] #[CoversClass(ReportBaseElement::class)] #[CoversClass(ReportBaseFootnote::class)] #[CoversClass(ReportBaseImage::class)] #[CoversClass(ReportBaseLine::class)] #[CoversClass(ReportBaseText::class)] #[CoversClass(ReportBaseTextbox::class)] #[CoversClass(ReportExpressionLanguageProvider::class)] #[CoversClass(ReportHtmlCell::class)] #[CoversClass(ReportHtmlFootnote::class)] #[CoversClass(ReportHtmlImage::class)] #[CoversClass(ReportHtmlLine::class)] #[CoversClass(ReportHtmlText::class)] #[CoversClass(ReportHtmlTextbox::class)] #[CoversClass(ReportParserBase::class)] #[CoversClass(ReportParserGenerate::class)] #[CoversClass(ReportParserSetup::class)] #[CoversClass(ReportPdfCell::class)] #[CoversClass(ReportPdfFootnote::class)] #[CoversClass(ReportPdfImage::class)] #[CoversClass(ReportPdfLine::class)] #[CoversClass(ReportPdfText::class)] #[CoversClass(ReportPdfTextBox::class)] #[CoversClass(TcpdfWrapper::class)] class BirthDeathMarriageReportModuleTest extends TestCase { protected static bool $uses_database = true; public function testReportRunsWithoutError(): void { $tree = $this->importTree('demo.ged'); $module = new BirthDeathMarriageReportModule(); $module->setName('bdm_report'); $xml = 'resources/' . $module->xmlFilename(); $vars = [ 'name' => ['id' => ''], 'bdmplace' => ['id' => ''], 'birthdate1' => ['id' => ''], 'birthdate2' => ['id' => ''], 'deathdate1' => ['id' => ''], 'deathdate2' => ['id' => ''], 'sortby' => ['id' => 'BIRT:DATE'], 'pageSize' => ['id' => 'A4'], ]; $report = new ReportParserSetup($xml); self::assertNotEmpty($report->reportProperties()); ob_start(); new ReportParserGenerate($xml, new HtmlRenderer(), $vars, $tree); $html = ob_get_clean(); self::assertStringStartsWith('<', $html); self::assertStringEndsWith('>', $html); ob_start(); new ReportParserGenerate($xml, new PdfRenderer(), $vars, $tree); $pdf = ob_get_clean(); self::assertStringStartsWith('%PDF', $pdf); self::assertStringEndsWith("%%EOF\n", $pdf); } }