$assetName, 'file_name' => 'logo.png', 'mime_type' => 'image/png', 'file_bytes' => $pngBytes, 'width_mm' => 20, 'height_mm' => 10, 'justification' => $assetName === 'right_logo_asset' ? 'right' : 'left', ]; } ); $rendered = $renderer->render( 'Subject', '

Body

', '
{{ pdf_asset("logo_asset") }}
', [] ); $pdfHtml = (string) ($rendered['pdf_attachment'] ?? ''); if (strpos($pdfHtml, 'data:image/png;base64,') === false && strpos($pdfHtml, 'data:image/jpeg;base64,') === false) { fwrite(STDERR, "pdf_asset did not render png/jpeg data-uri image HTML\n"); exit(1); } if (strpos($pdfHtml, 'text-align:left') === false) { fwrite(STDERR, "pdf_asset did not apply left justification wrapper\n"); exit(1); } if (strpos($pdfHtml, 'width:20mm;height:10mm;') === false) { fwrite(STDERR, "pdf_asset did not apply width/height mm styles\n"); exit(1); } $rightRendered = $renderer->render( 'Subject', '

Body

', '

{{ pdf_asset("right_logo_asset") }}Text should wrap to the left of the floated image.

', [] ); $rightPdfHtml = (string) ($rightRendered['pdf_attachment'] ?? ''); if (strpos($rightPdfHtml, 'float:right') === false) { fwrite(STDERR, "pdf_asset did not float right-justified image\n"); exit(1); } if (strpos($rightPdfHtml, 'text-align:right') !== false) { fwrite(STDERR, "pdf_asset right justification should not use a block text-align wrapper\n"); exit(1); } $booleanRendered = $renderer->render( '{{ advertisers_islapsed }} {{ advertisers_selected }} {{ advertisers_advertisername }}', '

{{ advertisers_islapsed }} {{ advertisers_selected }} {{ advertisers_advertisername }}

', '', [ 'advertisers.IsLapsed?' => "\xff", 'advertisers.Selected' => '0', 'advertisers.AdvertiserName' => 'A R Aspinall & Sons Ltd', ] ); if (($booleanRendered['subject'] ?? '') !== 'Yes No A R Aspinall & Sons Ltd') { fwrite(STDERR, "Boolean-ish template fields were not rendered readably: " . ($booleanRendered['subject'] ?? '') . "\n"); exit(1); } try { $renderer->render('S', 'M', '{{ pdf_asset("missing_asset") }}', []); fwrite(STDERR, "Expected hard error for missing pdf_asset, but render succeeded\n"); exit(1); } catch (Throwable $e) { if (strpos($e->getMessage(), 'not found') === false) { fwrite(STDERR, "Unexpected missing-asset error message: {$e->getMessage()}\n"); exit(1); } } echo "TemplateRenderer pdf_asset regression test passed\n";