Files
creator-hub/web/tests/account-network-exit-size.test.cjs
T

35 lines
1.6 KiB
JavaScript

const assert = require('node:assert/strict');
const { readFileSync } = require('node:fs');
const { test } = require('node:test');
const ts = require('typescript');
function source(path) {
return ts.createSourceFile(path, readFileSync(`${__dirname}/../src/${path}`, 'utf8'), ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
}
function find(ast, predicate) {
let result;
function visit(node) {
if (!result && predicate(node)) result = node;
ts.forEachChild(node, visit);
}
visit(ast);
assert.ok(result, '目标控件必须存在');
return result;
}
function size(element) {
return element.attributes.properties.find(prop => prop.name?.getText() === 'size')?.initializer?.getText();
}
test('网络出口下拉框与业务状态使用同一默认大小,保存按钮保持 small', () => {
const edit = source('pages/accounts/$id/edit.tsx');
const status = find(edit, node => ts.isJsxElement(node) && node.openingElement.tagName.getText() === 'Form.Item' &&
node.openingElement.attributes.properties.some(prop => prop.name?.getText() === 'name' && prop.initializer?.text === 'business_status'));
const statusSelect = find(status, node => ts.isJsxSelfClosingElement(node) && node.tagName.getText() === 'Select');
const exit = source('components/accounts/RebindEnvironment.tsx');
const exitSelect = find(exit, node => ts.isJsxSelfClosingElement(node) && node.tagName.getText() === 'Select');
assert.equal(size(statusSelect), undefined);
assert.equal(size(exitSelect), size(statusSelect));
const save = find(exit, node => ts.isJsxOpeningElement(node) && node.tagName.getText() === 'Button');
assert.equal(size(save), '"small"');
});