51 lines
3.4 KiB
JavaScript
51 lines
3.4 KiB
JavaScript
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 read = (file) => fs.readFileSync(path.join(root, file), 'utf8');
|
|
|
|
test('modern widget schemas expose Zibll field names and defaults', () => {
|
|
const source = read('src/WidgetSystem/WidgetSchemas.php');
|
|
for (const field of ['mini_opt', 'paginate', 'tabs', "'id' => 'cat'", "'id' => 'topics'", 'zibpay_type', 'layout_ratio', 'slide_scale', 'm_layout_type', 'm_cover_ratio', 'image_layer', 'image_select']) {
|
|
assert.match(source, new RegExp(field.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')));
|
|
}
|
|
assert.match(source, /'热门推荐'.*'orderby' => 'views'/s);
|
|
assert.match(source, /'最近更新'.*'orderby' => 'modified'/s);
|
|
assert.match(source, /'猜你喜欢'.*'orderby' => 'rand'/s);
|
|
});
|
|
|
|
test('tab and slider renderers retain reference DOM contracts', () => {
|
|
const content = read('src/WidgetSystem/Renderers/ContentRenderer.php');
|
|
const slider = read('src/WidgetSystem/Renderers/SliderRenderer.php');
|
|
for (const token of ['widget-tab-post', 'posts-mini-lists', 'index-tab', 'tab-nav-theme', 'tab-pane fade', 'post_ajax_trigger', 'post_ajax_loader', 'widget-ajaxpager']) assert.match(content, new RegExp(token.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')));
|
|
for (const token of ['relative zib-slider', 'new-swiper slide-widget', 'swiper-wrapper', 'swiper-slide', 'slide-layer', 'data-swiper-parallax', 'swiper-button-prev', 'swiper-pagination', 'widget-slider-graphic', 'slider-col', 'cover-col', 'widget-graphic-cover']) assert.match(slider, new RegExp(token.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')));
|
|
});
|
|
|
|
test('reference slider CSS includes responsive height and combo selectors', () => {
|
|
const css = read('assets/widgets/frontend.css');
|
|
for (const token of ['.new-swiper.slide-widget.scale-height', '--scale-height', '--pc-height', '--m-height', '.widget-slider-graphic', '.m-hide_slide', '.m-hide_cover', '--m-cover-ratio']) assert.match(css, new RegExp(token.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')));
|
|
});
|
|
|
|
test('icon card widgets expose Zibll vertical and horizontal contracts', () => {
|
|
const schemas = read('src/WidgetSystem/WidgetSchemas.php');
|
|
const renderer = read('src/WidgetSystem/Renderers/GeneralRenderer.php');
|
|
const helper = read('inc/helpers/aksrt-icon-cards.php');
|
|
for (const token of ['show_widget_bg', "'id' => 'size'", 'icon_radius', 'icon_custom_color', "'id' => 'icon_radius4'", 'icon_background_palette', 'icon_text_palette']) {
|
|
assert.match(schemas, new RegExp(token.replace(/[.*+?^${}()|[\\]\\]/g, '\\$&')));
|
|
}
|
|
for (const token of ['clearfix', 'row gutters-5', 'icon-card', 'icon-cover-card', 'icon-cover-icon', 'icon-cover-desc']) {
|
|
assert.match(renderer + helper, new RegExp(token.replace(/[.*+?^${}()|[\\]\\]/g, '\\$&')));
|
|
}
|
|
assert.match(helper, /wp_kses_post\(\$title\)/);
|
|
assert.match(helper, /wp_kses_post\(\$desc\)/);
|
|
});
|
|
|
|
test('admin core supports composite dependencies and nested repeater renumbering', () => {
|
|
const core = require(path.join(root, 'assets/widgets/admin-core.js'));
|
|
assert.equal(core.dependencyVisible([['direction', '!=', 'vertical'], ['scale_height', '!=', '']], { direction: 'horizontal', scale_height: '1' }), true);
|
|
assert.equal(core.dependencyVisible(['image|free_size', '!=|!=', '|'], { image: 'x', free_size: '1' }), true);
|
|
assert.equal(core.replaceRepeaterIndexes('widget[3][0][1]', [4, 2]), 'widget[3][4][2]');
|
|
});
|