'use strict'; const assert = require('node:assert/strict'); const { execFileSync } = require('node:child_process'); const path = require('node:path'); const test = require('node:test'); const cases = JSON.parse(execFileSync(process.env.PHP_BINARY || 'php', [ path.join(__dirname, 'tab-posts-render-harness.php'), ], { encoding: 'utf8' })).cases; for (const style of ['list', 'card', 'mini']) { test(`article ${style} widget renders its saved layout directly`, () => { const html = cases[`posts_${style}_detail`]; assert.match(html, new RegExp(`class="widget-main-post mb20 style-${style}"`)); assert.match(html, /data-widget="posts" data-instance="aksrt_widget_posts-3"/); assert.match(html, /data-loaded="1" aria-live="polite" aria-busy="false"/); assert.equal((html.match(/

{ const html = cases[`posts_${style}_ajax`]; assert.match(html, new RegExp(`class="widget-main-post mb20 style-${style}"`)); assert.match(html, /class="widget-ajaxpager lazyload" data-widget-lazy/); assert.match(html, /data-widget="posts" data-instance="aksrt_widget_posts-3"/); assert.match(html, /aria-live="polite" aria-busy="true"/); assert.match(html, /class="post_ajax_loader is-loading" role="status"/); assert.match(html, new RegExp(`data-placeholder="${style}:4"`)); assert.doesNotMatch(html, /class="item-heading|ias-btn|data-widget-ias|post_ajax_trigger|lazyload-action=/); }); }