Files
cc-3-8-x-mcp/cli/test/classid-resolver.test.js
T

36 lines
1.4 KiB
JavaScript

'use strict';
const { test, after } = require('node:test');
const assert = require('node:assert/strict');
const fs = require('fs');
const os = require('os');
const path = require('path');
const { compressUuid } = require('../src/id.js');
const { clearCache, resolveClassIdByName } = require('../src/classid-resolver.js');
const tmpRoots = [];
after(() => {
clearCache();
for (const root of tmpRoots) {
try { fs.rmSync(root, { recursive: true, force: true }); } catch (_) {}
}
});
test('ClassIdResolver: 扫描 extensions 下的 ccclass 脚本', () => {
const project = fs.mkdtempSync(path.join(os.tmpdir(), 'classid-ext-project-'));
tmpRoots.push(project);
fs.writeFileSync(path.join(project, 'package.json'), '{}');
fs.mkdirSync(path.join(project, 'assets', 'scripts'), { recursive: true });
fs.mkdirSync(path.join(project, 'extensions', 'cc-state-controller', 'lib'), { recursive: true });
const uuid = 'fca1c7d0-b8e9-4a6f-9c3d-2e5f18a04b7c';
const tsPath = path.join(project, 'extensions', 'cc-state-controller', 'lib', 'StateController.ts');
fs.writeFileSync(tsPath, "import { _decorator } from 'cc';\nconst { ccclass } = _decorator;\n@ccclass('StateController')\nexport class StateController {}\n");
fs.writeFileSync(tsPath + '.meta', JSON.stringify({ uuid }));
assert.equal(resolveClassIdByName('StateController', project), compressUuid(uuid));
});