更新大量官方api工具,目前已支持超过150个工具调用,支持除了预制体操作之外的所有cocos 操作。同时mcp端口更健壮,ai使用起来准确率更高。修复大量bug
This commit is contained in:
223
source/test/prefab-tools-test.ts
Normal file
223
source/test/prefab-tools-test.ts
Normal file
@@ -0,0 +1,223 @@
|
||||
import { PrefabTools } from '../tools/prefab-tools';
|
||||
|
||||
// 预制体工具测试
|
||||
export class PrefabToolsTest {
|
||||
private prefabTools: PrefabTools;
|
||||
|
||||
constructor() {
|
||||
this.prefabTools = new PrefabTools();
|
||||
}
|
||||
|
||||
async runAllTests() {
|
||||
console.log('开始预制体工具测试...');
|
||||
|
||||
try {
|
||||
// 测试1: 获取工具列表
|
||||
await this.testGetTools();
|
||||
|
||||
// 测试2: 获取预制体列表
|
||||
await this.testGetPrefabList();
|
||||
|
||||
// 测试3: 测试预制体创建(模拟)
|
||||
await this.testCreatePrefab();
|
||||
|
||||
// 测试3.5: 测试预制体实例化(模拟)
|
||||
await this.testInstantiatePrefab();
|
||||
|
||||
// 测试4: 测试预制体验证
|
||||
await this.testValidatePrefab();
|
||||
|
||||
console.log('所有测试完成!');
|
||||
} catch (error) {
|
||||
console.error('测试过程中发生错误:', error);
|
||||
}
|
||||
}
|
||||
|
||||
private async testGetTools() {
|
||||
console.log('测试1: 获取工具列表');
|
||||
const tools = this.prefabTools.getTools();
|
||||
console.log(`找到 ${tools.length} 个工具:`);
|
||||
tools.forEach(tool => {
|
||||
console.log(` - ${tool.name}: ${tool.description}`);
|
||||
});
|
||||
console.log('测试1完成\n');
|
||||
}
|
||||
|
||||
private async testGetPrefabList() {
|
||||
console.log('测试2: 获取预制体列表');
|
||||
try {
|
||||
const result = await this.prefabTools.execute('get_prefab_list', { folder: 'db://assets' });
|
||||
if (result.success) {
|
||||
console.log(`找到 ${result.data?.length || 0} 个预制体`);
|
||||
if (result.data && result.data.length > 0) {
|
||||
result.data.slice(0, 3).forEach((prefab: any) => {
|
||||
console.log(` - ${prefab.name}: ${prefab.path}`);
|
||||
});
|
||||
}
|
||||
} else {
|
||||
console.log('获取预制体列表失败:', result.error);
|
||||
}
|
||||
} catch (error) {
|
||||
console.log('获取预制体列表时发生错误:', error);
|
||||
}
|
||||
console.log('测试2完成\n');
|
||||
}
|
||||
|
||||
private async testCreatePrefab() {
|
||||
console.log('测试3: 测试预制体创建(模拟)');
|
||||
try {
|
||||
// 模拟创建预制体
|
||||
const mockArgs = {
|
||||
nodeUuid: 'mock-node-uuid',
|
||||
savePath: 'db://assets/test',
|
||||
prefabName: 'TestPrefab'
|
||||
};
|
||||
|
||||
const result = await this.prefabTools.execute('create_prefab', mockArgs);
|
||||
console.log('创建预制体结果:', result);
|
||||
} catch (error) {
|
||||
console.log('创建预制体时发生错误:', error);
|
||||
}
|
||||
console.log('测试3完成\n');
|
||||
}
|
||||
|
||||
private async testInstantiatePrefab() {
|
||||
console.log('测试3.5: 测试预制体实例化(模拟)');
|
||||
try {
|
||||
// 模拟实例化预制体
|
||||
const mockArgs = {
|
||||
prefabPath: 'db://assets/prefabs/TestPrefab.prefab',
|
||||
parentUuid: 'canvas-uuid',
|
||||
position: { x: 100, y: 200, z: 0 }
|
||||
};
|
||||
|
||||
const result = await this.prefabTools.execute('instantiate_prefab', mockArgs);
|
||||
console.log('实例化预制体结果:', result);
|
||||
|
||||
// 测试API参数构建
|
||||
this.testCreateNodeAPIParams();
|
||||
} catch (error) {
|
||||
console.log('实例化预制体时发生错误:', error);
|
||||
}
|
||||
console.log('测试3.5完成\n');
|
||||
}
|
||||
|
||||
private testCreateNodeAPIParams() {
|
||||
console.log('测试 create-node API 参数构建...');
|
||||
|
||||
// 模拟 assetUuid
|
||||
const assetUuid = 'mock-prefab-uuid';
|
||||
|
||||
// 测试基本参数
|
||||
const basicOptions = {
|
||||
assetUuid: assetUuid,
|
||||
name: 'TestPrefabInstance'
|
||||
};
|
||||
console.log('基本参数:', basicOptions);
|
||||
|
||||
// 测试带父节点的参数
|
||||
const withParentOptions = {
|
||||
...basicOptions,
|
||||
parent: 'parent-node-uuid'
|
||||
};
|
||||
console.log('带父节点参数:', withParentOptions);
|
||||
|
||||
// 测试带位置的参数
|
||||
const withPositionOptions = {
|
||||
...basicOptions,
|
||||
dump: {
|
||||
position: { x: 100, y: 200, z: 0 }
|
||||
}
|
||||
};
|
||||
console.log('带位置参数:', withPositionOptions);
|
||||
|
||||
// 测试完整参数
|
||||
const fullOptions = {
|
||||
assetUuid: assetUuid,
|
||||
name: 'TestPrefabInstance',
|
||||
parent: 'parent-node-uuid',
|
||||
dump: {
|
||||
position: { x: 100, y: 200, z: 0 }
|
||||
},
|
||||
keepWorldTransform: false,
|
||||
unlinkPrefab: false
|
||||
};
|
||||
console.log('完整参数:', fullOptions);
|
||||
}
|
||||
|
||||
private async testValidatePrefab() {
|
||||
console.log('测试4: 测试预制体验证');
|
||||
try {
|
||||
// 测试验证一个不存在的预制体
|
||||
const result = await this.prefabTools.execute('validate_prefab', {
|
||||
prefabPath: 'db://assets/nonexistent.prefab'
|
||||
});
|
||||
console.log('验证预制体结果:', result);
|
||||
} catch (error) {
|
||||
console.log('验证预制体时发生错误:', error);
|
||||
}
|
||||
console.log('测试4完成\n');
|
||||
}
|
||||
|
||||
// 测试预制体数据结构生成
|
||||
testPrefabDataGeneration() {
|
||||
console.log('测试预制体数据结构生成...');
|
||||
|
||||
const mockNodeData = {
|
||||
name: 'TestNode',
|
||||
position: { x: 0, y: 0, z: 0 },
|
||||
scale: { x: 1, y: 1, z: 1 },
|
||||
active: true,
|
||||
children: [],
|
||||
components: [
|
||||
{
|
||||
type: 'cc.UITransform',
|
||||
enabled: true,
|
||||
properties: {
|
||||
_contentSize: { width: 100, height: 100 },
|
||||
_anchorPoint: { x: 0.5, y: 0.5 }
|
||||
}
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
const prefabUuid = this.prefabTools['generateUUID']();
|
||||
const prefabData = this.prefabTools['createPrefabData'](mockNodeData, 'TestPrefab', prefabUuid);
|
||||
|
||||
console.log('生成的预制体数据结构:');
|
||||
console.log(JSON.stringify(prefabData, null, 2));
|
||||
|
||||
// 验证数据结构
|
||||
const validationResult = this.prefabTools['validatePrefabFormat'](prefabData);
|
||||
console.log('验证结果:', validationResult);
|
||||
|
||||
console.log('预制体数据结构生成测试完成\n');
|
||||
}
|
||||
|
||||
// 测试UUID生成
|
||||
testUUIDGeneration() {
|
||||
console.log('测试UUID生成...');
|
||||
|
||||
const uuids = [];
|
||||
for (let i = 0; i < 5; i++) {
|
||||
const uuid = this.prefabTools['generateUUID']();
|
||||
uuids.push(uuid);
|
||||
console.log(`UUID ${i + 1}: ${uuid}`);
|
||||
}
|
||||
|
||||
// 检查UUID格式
|
||||
const uuidPattern = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
||||
const validUuids = uuids.filter(uuid => uuidPattern.test(uuid));
|
||||
|
||||
console.log(`UUID格式验证: ${validUuids.length}/${uuids.length} 个有效`);
|
||||
console.log('UUID生成测试完成\n');
|
||||
}
|
||||
}
|
||||
|
||||
// 如果直接运行此文件
|
||||
if (typeof module !== 'undefined' && module.exports) {
|
||||
const test = new PrefabToolsTest();
|
||||
test.runAllTests();
|
||||
test.testPrefabDataGeneration();
|
||||
test.testUUIDGeneration();
|
||||
}
|
||||
Reference in New Issue
Block a user