diff --git a/packages/hydrojudge/package.json b/packages/hydrojudge/package.json index 0ae84b500..12a9cbcd8 100644 --- a/packages/hydrojudge/package.json +++ b/packages/hydrojudge/package.json @@ -1,12 +1,12 @@ { "name": "@hydrooj/hydrojudge", "bin": "bin/hydrojudge.js", - "version": "2.5.17", + "version": "2.5.18", "main": "package.json", "author": "undefined ", "repository": "https://github.com/hydro-dev/Hydro.git", "dependencies": { - "@hydrooj/utils": "^1.0.8", + "@hydrooj/utils": "^1.0.9", "adm-zip": "^0.5.5", "axios": "^0.21.1", "bson": "^4.3.0", diff --git a/packages/hydrojudge/src/cases.ts b/packages/hydrojudge/src/cases.ts index 3467b2479..276760932 100644 --- a/packages/hydrojudge/src/cases.ts +++ b/packages/hydrojudge/src/cases.ts @@ -104,8 +104,9 @@ async function read0(folder: string, files: string[], checkFile, cfg) { return config; } -async function read1(folder: string, files: string[], checkFile, cfg) { +async function read1(folder: string, files: string[], checkFile, cfg, rst) { const subtask = {}; + for (const s of rst.subtasks) if (s.id) subtask[s.id] = s; const subtasks = []; for (const file of files) { for (const REG of RE1) { @@ -150,7 +151,7 @@ async function read1(folder: string, files: string[], checkFile, cfg) { return config; } -async function readAutoCases(folder, { next }, cfg) { +async function readAutoCases(folder, { next }, cfg, rst) { const config = { checker_type: 'default', count: 0, @@ -170,7 +171,7 @@ async function readAutoCases(folder, { next }, cfg) { files.push(...outputs.map((i) => `output/${i}`)); } let result = await read0(folder, files, checkFile, cfg); - if (!result.count) result = await read1(folder, files, checkFile, cfg); + if (!result.count) result = await read1(folder, files, checkFile, cfg, rst); Object.assign(config, result); next({ message: { message: 'Found {0} testcases.', params: [config.count] } }); } catch (e) { @@ -214,8 +215,12 @@ export default async function readCases(folder: string, cfg: Record } catch (e) { throw changeErrorType(e, FormatError); } - if (!(result.outputs?.length || result.subtasks.length)) { - const c = await readAutoCases(folder, args, config); + let auto = !result.outputs?.length; + if (!result.subtasks.length) { + auto = !Math.sum(result.subtasks.map((subtask) => subtask.cases.length)); + } + if (auto) { + const c = await readAutoCases(folder, args, config, result); result.subtasks = c.subtasks; result.count = c.count; } diff --git a/packages/utils/lib/cases.ts b/packages/utils/lib/cases.ts index bd5845c1b..71c1607bd 100644 --- a/packages/utils/lib/cases.ts +++ b/packages/utils/lib/cases.ts @@ -51,7 +51,7 @@ export default async function readYamlCases(cfg: Record = {}, check } else if (cfg.subtasks) { for (const subtask of cfg.subtasks) { const cases = []; - for (const c of subtask.cases) { + for (const c of subtask.cases || []) { config.count++; cases.push({ input: c.input ? checkFile(c.input, 'Cannot find input file {0}.') : '/dev/null', diff --git a/packages/utils/package.json b/packages/utils/package.json index 0968a23b8..0e596ce8f 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,6 +1,6 @@ { "name": "@hydrooj/utils", - "version": "1.0.8", + "version": "1.0.9", "description": "hydrooj utils", "main": "package.json", "repository": "https://github.com/hydro-dev/Hydro.git",