35 lines
1.6 KiB
JavaScript
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"');
|
|
});
|