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.
103 lines
2.9 KiB
103 lines
2.9 KiB
import * as cp from 'child_process' |
|
import { mkdir, writeFile, readFile } from 'fs/promises' |
|
import { join, isAbsolute } from 'path' |
|
import { tmpdir } from 'os' |
|
import { promisify } from 'util' |
|
|
|
const exec = promisify(cp.exec) |
|
|
|
export const tests = [] |
|
const ranStr = () => |
|
Math.random() |
|
.toString(36) |
|
.substring(7) |
|
|
|
export const setup = async ({ path }) => { |
|
const dir = `${tmpdir()}/tell-it-cypher` |
|
|
|
await mkdir(dir) |
|
|
|
const run = async (cmd) => { |
|
const [filename, keyword, newFile] = cmd.split(' ') |
|
const filePath = isAbsolute(filename) ? filename : join(dir, filename) |
|
const { stdout } = await exec( |
|
`node ${path} ${filePath} ${keyword} ${newFile || ''}`, |
|
) |
|
const newFileName = |
|
newFile || (keyword === 'encode' ? 'cypher.txt' : 'clear.txt') |
|
const fileContent = await readFile(newFileName, 'utf8').catch((err) => |
|
err.code === 'ENOENT' ? 'output file not found' : err, |
|
) |
|
return { data: fileContent } |
|
} |
|
|
|
return { tmpPath: dir, run, encoded, decoded } |
|
} |
|
|
|
tests.push(async ({ path, eq, ctx }) => { |
|
const vips = `1. Langley Shyam |
|
2. Harwood Austin |
|
3. Morgan Reem |
|
4. Chamberlain Neal |
|
5. Walters Ryan` |
|
const fileName = `${ctx.tmpPath}/vip.txt` |
|
await writeFile(fileName, vips) |
|
|
|
const { data } = await ctx.run(`${fileName} encode`) |
|
|
|
return eq( |
|
data, |
|
'MS4gTGFuZ2xleSBTaHlhbQogIDIuIEhhcndvb2QgQXVzdGluCiAgMy4gTW9yZ2FuIFJlZW0KICA0LiBDaGFtYmVybGFpbiBOZWFsCiAgNS4gV2FsdGVycyBSeWFu', |
|
) |
|
}) |
|
|
|
tests.push(async ({ path, eq, ctx }) => { |
|
const vips = `1. Wynn Kayla |
|
2. Hardy Gladys |
|
3. Rogers Laaibah |
|
4. Randolph Zishan |
|
5. Connolly Connor` |
|
const fileName = `${ctx.tmpPath}/vip-${ranStr()}.txt` |
|
await writeFile(fileName, vips) |
|
|
|
const { data } = await ctx.run(`${fileName} encode mysecret.txt`) |
|
|
|
return eq( |
|
data, |
|
'MS4gV3lubiBLYXlsYQogIDIuIEhhcmR5IEdsYWR5cwogIDMuIFJvZ2VycyBMYWFpYmFoCiAgNC4gUmFuZG9scGggWmlzaGFuCiAgNS4gQ29ubm9sbHkgQ29ubm9y', |
|
) |
|
}) |
|
|
|
tests.push(async ({ path, eq, ctx }) => { |
|
const vipsEncoded = "MS4gVmlsbGFycmVhbCBFc2EKICAyLiBXeW5uIEtheWxhCiAgMy4gSGFyZHkgR2xhZHlzCiAgNC4gUm9nZXJzIExhYWliYWgKICA1LiBSYW5kb2xwaCBaaXNoYW4=" |
|
const fileName = `${ctx.tmpPath}/vip-encoded-${ranStr()}.txt` |
|
await writeFile(fileName, vipsEncoded) |
|
|
|
const { data } = await ctx.run(`${fileName} decode`) |
|
return eq( |
|
data, |
|
`1. Villarreal Esa |
|
2. Wynn Kayla |
|
3. Hardy Gladys |
|
4. Rogers Laaibah |
|
5. Randolph Zishan`, |
|
) |
|
}) |
|
|
|
tests.push(async ({ path, eq, ctx }) => { |
|
const vipsEncoded = "MS4gQmVybmFyZCBDaGFybWFpbmUKICAyLiBEb3duZXMgU29oYWlsCiAgMy4gR29tZXogUmFiaWEKICA0LiBCcmVubmFuIEJyZW5kYW4KICA1LiBBdGhlcnRvbiBTaGFubmVu" |
|
const fileName = `${ctx.tmpPath}/vip-encoded-${ranStr()}.txt` |
|
await writeFile(fileName, vipsEncoded) |
|
|
|
const { data } = await ctx.run(`${fileName} decode pandora.txt`) |
|
return eq( |
|
data, |
|
`1. Bernard Charmaine |
|
2. Downes Sohail |
|
3. Gomez Rabia |
|
4. Brennan Brendan |
|
5. Atherton Shannen`, |
|
) |
|
}) |
|
|
|
Object.freeze(tests)
|
|
|