const test = require('node:test') const assert = require('node:assert/strict') const fs = require('node:fs') const path = require('node:path') const root = path.resolve(__dirname, '../..') const core = require(path.join(root, 'assets/widgets/admin-core.js')) const admin = fs.readFileSync(path.join(root, 'assets/widgets/admin.js'), 'utf8') const controller = fs.readFileSync(path.join(root, 'src/WidgetSystem/AdminFormController.php'), 'utf8') const transfer = fs.readFileSync(path.join(root, 'src/WidgetSystem/TransferController.php'), 'utf8') const renderer = fs.readFileSync(path.join(root, 'src/WidgetSystem/FormRenderer.php'), 'utf8') const styles = fs.readFileSync(path.join(root, 'assets/widgets/admin.css'), 'utf8') test('lazy widget forms resolve assigned instances across core and customizer markup', () => { assert.equal(core.resolveWidgetNumber('widget-aksrt_widget_posts[12][title]', 'widget-aksrt_widget_posts-12', '__i__'), '12') assert.equal(core.resolveWidgetNumber('', 'widget-aksrt_widget_posts-8', '__i__'), '8') assert.equal(core.resolveWidgetNumber('', '', '4'), '4') assert.equal(core.resolveWidgetNumber('', '', '__i__'), '') assert.equal(core.resolveWidgetNumber('', 'widget-aksrt_widget_posts-0', ''), '') assert.match(admin, /customize-control-widget_form \.aksrt-widget-form-lazy/) }) test('lazy form AJAX failures remain retryable and instance filters match WordPress widget forms', () => { assert.match(admin, /data\('loading', false\)/) assert.match(controller, /apply_filters\('widget_form_callback', \$instance, \$widget\)/) }) test('sidebar toolbars open one contextual import, export, or template dialog', () => { assert.match(admin, /widgets-holder-wrap:not\(#available-widgets\)/) assert.match(admin, /control-section-sidebar/) assert.match(admin, /data-aksrt-transfer-action/) assert.match(admin, /data-sidebar-id/) assert.match(admin, /data-transfer-tab/) assert.match(transfer, /aksrt-widget-transfer-modal__dialog/) assert.match(transfer, /aksrt_widgets_template_preview/) assert.doesNotMatch(transfer, /aksrt-widget-transfer__grid/) assert.doesNotMatch(transfer, /function sidebar_select/) assert.match(admin, /aksrt-widget-customizer-remove/) }) test('widget fields follow the current CSF compact palette and cloneable group patterns', () => { assert.match(renderer, /aksrt-widget-palette-choice/) assert.match(renderer, /