'use strict'; const assert = require('node:assert/strict'); const fs = require('node:fs'); const path = require('node:path'); const test = require('node:test'); const { execFileSync } = require('node:child_process'); const root = path.resolve(__dirname, '..', '..'); const read = (file) => fs.readFileSync(path.join(root, file), 'utf8'); test('TOC widget renders one escaped title and asset eligibility follows saved article settings', () => { const fixture = JSON.parse(execFileSync(process.env.PHP_BINARY || 'php', [path.join(__dirname, 'posts-toc-render-harness.php')], { encoding: 'utf8' })); assert.equal(fixture.dynamic_headings, true, 'shortcode headings must get the directory script'); assert.equal(fixture.global_disabled, false); assert.equal(fixture.post_disabled, false); assert.equal(fixture.other_page, false); assert.equal(fixture.non_article_widget, ''); assert.deepEqual(fixture.widget_fields, ['title', 'mini_title', 'in_affix'], 'TOC exposes only its three reference settings'); assert.match(fixture.widget, /^