mirror of https://github.com/01-edu/public.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
83 lines
2.5 KiB
83 lines
2.5 KiB
import { mkdir, writeFile } from 'fs/promises' |
|
import { tmpdir } from 'os' |
|
import { join, isAbsolute } from 'path' |
|
import { promisify } from 'util' |
|
import * as cp from 'child_process' |
|
|
|
const exec = promisify(cp.exec) |
|
|
|
export const tests = [] |
|
const randomLetters = (number) => |
|
Math.random() |
|
.toString(36) |
|
.substring(0, number) |
|
export const setup = async ({ path }) => { |
|
const dir = `${tmpdir()}/verydisco-reverso` |
|
await mkdir(dir) |
|
const run = async (cmd) => { |
|
const cmdPath = isAbsolute(cmd || '') ? cmd : join(dir, cmd || '') |
|
const { stdout } = await exec(`node ${path} ${cmdPath}`) |
|
|
|
return { stdout: stdout.trim() } |
|
} |
|
|
|
return { tmpPath: dir, run } |
|
} |
|
|
|
tests.push(async ({ path, eq, ctx }) => { |
|
const trueWords = 'kisscool' |
|
await writeFile(`${ctx.tmpPath}/fever.txt`, trueWords, 'utf8') |
|
|
|
const { stdout } = await ctx.run(`${ctx.tmpPath}/fever.txt`) |
|
return eq(stdout, 'coolkiss') |
|
}) |
|
|
|
tests.push(async ({ path, eq, ctx }) => { |
|
const trueWords = 'verydisco' |
|
await writeFile(`${ctx.tmpPath}/fever.txt`, trueWords, 'utf8') |
|
|
|
const { stdout } = await ctx.run(`${ctx.tmpPath}/fever.txt`) |
|
return eq(stdout, 'discovery') |
|
}) |
|
|
|
tests.push(async ({ path, eq, ctx }) => { |
|
const trueWords = 'deNo si omeawes' |
|
await writeFile(`${ctx.tmpPath}/myTruth.txt`, trueWords, 'utf8') |
|
|
|
const { stdout } = await ctx.run(`${ctx.tmpPath}/myTruth.txt`) |
|
return eq(stdout, 'Node is awesome') |
|
}) |
|
|
|
tests.push(async ({ path, eq, ctx }) => { |
|
const recto = randomLetters(3) |
|
const verso = randomLetters(3) |
|
const meaningOfLife = `${recto}${verso}` |
|
await writeFile(`${ctx.tmpPath}/theTruth.txt`, meaningOfLife, 'utf8') |
|
|
|
const { stdout } = await ctx.run(`${ctx.tmpPath}/theTruth.txt`) |
|
return eq(stdout, `${verso}${recto}`) |
|
}) |
|
|
|
tests.push(async ({ path, eq, ctx }) => { |
|
const heads = randomLetters(3) |
|
const tails = randomLetters(4) |
|
const coinFlipping = `${heads}${tails}` |
|
await writeFile(`${ctx.tmpPath}/coins-flipping.txt`, coinFlipping, 'utf8') |
|
|
|
const { stdout } = await ctx.run(`${ctx.tmpPath}/coins-flipping.txt`) |
|
return eq(stdout, `${tails}${heads}`) |
|
}) |
|
|
|
tests.push(async ({ path, eq, ctx }) => { |
|
const ying = randomLetters(8) |
|
const yang = randomLetters(8) |
|
const tic = randomLetters(5) |
|
const tac = randomLetters(6) |
|
const absurd = `${tic}${tac} ${ying}${yang}` |
|
await writeFile(`${ctx.tmpPath}/absurd.txt`, absurd, 'utf8') |
|
|
|
const { stdout } = await ctx.run(`${ctx.tmpPath}/absurd.txt`) |
|
return eq(stdout, `${tac}${tic} ${yang}${ying}`) |
|
}) |
|
|
|
Object.freeze(tests)
|
|
|