mirror of
https://github.com/curlconverter/curlconverter.git
synced 2022-05-22 02:35:29 +03:00
Reformat code (#372)
* format with prettier * format pre-commit * format in ci * remove standardjs editor config
This commit is contained in:
committed by
GitHub
parent
f29c397882
commit
7c75a10c26
@@ -1,146 +1,167 @@
|
||||
import * as curlconverter from '../src/index.js'
|
||||
import * as utils from '../src/util.js'
|
||||
import * as curlconverter from "../src/index.js";
|
||||
import * as utils from "../src/util.js";
|
||||
|
||||
import fs from 'fs'
|
||||
import path from 'path'
|
||||
import { fileURLToPath } from 'url'
|
||||
import fs from "fs";
|
||||
import path from "path";
|
||||
import { fileURLToPath } from "url";
|
||||
|
||||
const __dirname = path.dirname(fileURLToPath(import.meta.url))
|
||||
export const fixturesDir = path.resolve(__dirname, '../../test/fixtures')
|
||||
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
||||
export const fixturesDir = path.resolve(__dirname, "../../test/fixtures");
|
||||
|
||||
// Special case that returns the parsed argument object
|
||||
const toParser = (curl: string | string[]): string => {
|
||||
const parserOutput = utils.parseCurlCommand(curl)
|
||||
const code = JSON.stringify(parserOutput, null, 2)
|
||||
return code + '\n'
|
||||
}
|
||||
const parserOutput = utils.parseCurlCommand(curl);
|
||||
const code = JSON.stringify(parserOutput, null, 2);
|
||||
return code + "\n";
|
||||
};
|
||||
|
||||
// TODO: move this (or something like this) to index.js?
|
||||
// TODO: 'parser' ?
|
||||
type Converter = ('ansible' |
|
||||
'dart' |
|
||||
'elixir' |
|
||||
'go' |
|
||||
'java' |
|
||||
'javascript' |
|
||||
'json' |
|
||||
'matlab' |
|
||||
'node' |
|
||||
'node-request' |
|
||||
'php' |
|
||||
'python' |
|
||||
'r' |
|
||||
'rust' |
|
||||
'strest' |
|
||||
'parser')
|
||||
type Converter =
|
||||
| "ansible"
|
||||
| "dart"
|
||||
| "elixir"
|
||||
| "go"
|
||||
| "java"
|
||||
| "javascript"
|
||||
| "json"
|
||||
| "matlab"
|
||||
| "node"
|
||||
| "node-request"
|
||||
| "php"
|
||||
| "python"
|
||||
| "r"
|
||||
| "rust"
|
||||
| "strest"
|
||||
| "parser";
|
||||
const converters = {
|
||||
ansible: {
|
||||
name: 'Ansible',
|
||||
extension: '.yml',
|
||||
converter: curlconverter.toAnsible
|
||||
name: "Ansible",
|
||||
extension: ".yml",
|
||||
converter: curlconverter.toAnsible,
|
||||
},
|
||||
dart: {
|
||||
name: 'Dart',
|
||||
extension: '.dart',
|
||||
converter: curlconverter.toDart
|
||||
name: "Dart",
|
||||
extension: ".dart",
|
||||
converter: curlconverter.toDart,
|
||||
},
|
||||
elixir: {
|
||||
name: 'Elixir',
|
||||
extension: '.ex',
|
||||
converter: curlconverter.toElixir
|
||||
name: "Elixir",
|
||||
extension: ".ex",
|
||||
converter: curlconverter.toElixir,
|
||||
},
|
||||
go: {
|
||||
name: 'Go',
|
||||
extension: '.go',
|
||||
converter: curlconverter.toGo
|
||||
name: "Go",
|
||||
extension: ".go",
|
||||
converter: curlconverter.toGo,
|
||||
},
|
||||
java: {
|
||||
name: 'Java',
|
||||
extension: '.java',
|
||||
converter: curlconverter.toJava
|
||||
name: "Java",
|
||||
extension: ".java",
|
||||
converter: curlconverter.toJava,
|
||||
},
|
||||
javascript: {
|
||||
name: 'JavaScript',
|
||||
extension: '.js',
|
||||
converter: curlconverter.toJavaScript
|
||||
name: "JavaScript",
|
||||
extension: ".js",
|
||||
converter: curlconverter.toJavaScript,
|
||||
},
|
||||
json: {
|
||||
name: 'Json',
|
||||
extension: '.json',
|
||||
converter: curlconverter.toJsonString
|
||||
name: "Json",
|
||||
extension: ".json",
|
||||
converter: curlconverter.toJsonString,
|
||||
},
|
||||
matlab: {
|
||||
name: 'MATLAB',
|
||||
extension: '.m',
|
||||
converter: curlconverter.toMATLAB
|
||||
name: "MATLAB",
|
||||
extension: ".m",
|
||||
converter: curlconverter.toMATLAB,
|
||||
},
|
||||
node: {
|
||||
name: 'Node',
|
||||
extension: '.js',
|
||||
converter: curlconverter.toNode
|
||||
name: "Node",
|
||||
extension: ".js",
|
||||
converter: curlconverter.toNode,
|
||||
},
|
||||
'node-request': {
|
||||
name: 'Node',
|
||||
extension: '.js',
|
||||
converter: curlconverter.toNodeRequest
|
||||
"node-request": {
|
||||
name: "Node",
|
||||
extension: ".js",
|
||||
converter: curlconverter.toNodeRequest,
|
||||
},
|
||||
php: {
|
||||
name: 'PHP',
|
||||
extension: '.php',
|
||||
converter: curlconverter.toPhp
|
||||
name: "PHP",
|
||||
extension: ".php",
|
||||
converter: curlconverter.toPhp,
|
||||
},
|
||||
python: {
|
||||
name: 'Python',
|
||||
extension: '.py',
|
||||
converter: curlconverter.toPython
|
||||
name: "Python",
|
||||
extension: ".py",
|
||||
converter: curlconverter.toPython,
|
||||
},
|
||||
r: {
|
||||
name: 'R',
|
||||
extension: '.r',
|
||||
converter: curlconverter.toR
|
||||
name: "R",
|
||||
extension: ".r",
|
||||
converter: curlconverter.toR,
|
||||
},
|
||||
rust: {
|
||||
name: 'Rust',
|
||||
extension: '.rs',
|
||||
converter: curlconverter.toRust
|
||||
name: "Rust",
|
||||
extension: ".rs",
|
||||
converter: curlconverter.toRust,
|
||||
},
|
||||
strest: {
|
||||
name: 'Strest',
|
||||
extension: '.strest.yml',
|
||||
converter: curlconverter.toStrest
|
||||
name: "Strest",
|
||||
extension: ".strest.yml",
|
||||
converter: curlconverter.toStrest,
|
||||
},
|
||||
parser: {
|
||||
name: 'Parser',
|
||||
extension: '.json',
|
||||
converter: toParser
|
||||
}
|
||||
}
|
||||
name: "Parser",
|
||||
extension: ".json",
|
||||
converter: toParser,
|
||||
},
|
||||
};
|
||||
|
||||
// Check that we have at least one test for every generator
|
||||
// https://github.com/curlconverter/curlconverter/pull/299
|
||||
const testedConverters = Object.entries(converters).map(c => c[1].converter.name)
|
||||
const availableConverters = Object.entries(curlconverter).map(c => c[1].name).filter(n => n !== 'CCError')
|
||||
const missing = availableConverters.filter(c => !testedConverters.includes(c))
|
||||
const extra = testedConverters.filter(c => !availableConverters.includes(c) && c !== 'toParser')
|
||||
const testedConverters = Object.entries(converters).map(
|
||||
(c) => c[1].converter.name
|
||||
);
|
||||
const availableConverters = Object.entries(curlconverter)
|
||||
.map((c) => c[1].name)
|
||||
.filter((n) => n !== "CCError");
|
||||
const missing = availableConverters.filter(
|
||||
(c) => !testedConverters.includes(c)
|
||||
);
|
||||
const extra = testedConverters.filter(
|
||||
(c) => !availableConverters.includes(c) && c !== "toParser"
|
||||
);
|
||||
if (missing.length) {
|
||||
console.error('these converters are not tested: ' + missing.join(', '))
|
||||
console.error("these converters are not tested: " + missing.join(", "));
|
||||
}
|
||||
if (extra.length) {
|
||||
console.error('these non-existant converters are being tested: ' + extra.join(', '))
|
||||
console.error(
|
||||
"these non-existant converters are being tested: " + extra.join(", ")
|
||||
);
|
||||
}
|
||||
for (const [converterName, converter] of Object.entries(converters)) {
|
||||
const testDir = path.resolve(fixturesDir, converterName)
|
||||
const testDir = path.resolve(fixturesDir, converterName);
|
||||
if (fs.existsSync(testDir)) {
|
||||
const dirContents = fs.readdirSync(testDir)
|
||||
const dirContents = fs.readdirSync(testDir);
|
||||
if (!dirContents.length) {
|
||||
console.error(testDir + " doesn't contain any files")
|
||||
} else if (!dirContents.filter(f => f.endsWith(converter.extension)).length) { // TODO: early stopping
|
||||
console.error(testDir + " doesn't have any files ending with '" + converter.extension + "'")
|
||||
console.error(testDir + " doesn't contain any files");
|
||||
} else if (
|
||||
!dirContents.filter((f) => f.endsWith(converter.extension)).length
|
||||
) {
|
||||
// TODO: early stopping
|
||||
console.error(
|
||||
testDir +
|
||||
" doesn't have any files ending with '" +
|
||||
converter.extension +
|
||||
"'"
|
||||
);
|
||||
}
|
||||
} else {
|
||||
console.error(converterName + " doesn't have a corresponding directory in fixtures/")
|
||||
console.error(
|
||||
converterName + " doesn't have a corresponding directory in fixtures/"
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export { converters }
|
||||
export type { Converter }
|
||||
export { converters };
|
||||
export type { Converter };
|
||||
|
||||
118
test/test.ts
118
test/test.ts
@@ -1,12 +1,12 @@
|
||||
import fs from 'fs'
|
||||
import path from 'path'
|
||||
import fs from "fs";
|
||||
import path from "path";
|
||||
|
||||
import test from 'tape'
|
||||
import yargs from 'yargs'
|
||||
import { hideBin } from 'yargs/helpers'
|
||||
import test from "tape";
|
||||
import yargs from "yargs";
|
||||
import { hideBin } from "yargs/helpers";
|
||||
|
||||
import { fixturesDir, converters } from './test-utils.js'
|
||||
import type { Converter } from './test-utils.js'
|
||||
import { fixturesDir, converters } from "./test-utils.js";
|
||||
import type { Converter } from "./test-utils.js";
|
||||
|
||||
// The curl_commands/ directory contains input files
|
||||
// The file name is a description of the command.
|
||||
@@ -14,85 +14,99 @@ import type { Converter } from './test-utils.js'
|
||||
// language-specific directories: node/, php/, python/, parser/
|
||||
// we get a list of all input files, iterate over it, and if an
|
||||
// output file exists, compare the output.
|
||||
const curlCommandsDir = path.resolve(fixturesDir, 'curl_commands')
|
||||
console.log(curlCommandsDir)
|
||||
const curlCommandsDir = path.resolve(fixturesDir, "curl_commands");
|
||||
console.log(curlCommandsDir);
|
||||
|
||||
const testArgs = await yargs(hideBin(process.argv))
|
||||
.scriptName('test.js')
|
||||
.usage('Usage: $0 [--language <language>] [--test <test_name>] [test_name...]')
|
||||
.option('l', {
|
||||
alias: 'language',
|
||||
describe: 'the language to convert the curl command to',
|
||||
.scriptName("test.js")
|
||||
.usage(
|
||||
"Usage: $0 [--language <language>] [--test <test_name>] [test_name...]"
|
||||
)
|
||||
.option("l", {
|
||||
alias: "language",
|
||||
describe: "the language to convert the curl command to",
|
||||
choices: Object.keys(converters),
|
||||
default: Object.keys(converters),
|
||||
defaultDescription: 'all of them',
|
||||
defaultDescription: "all of them",
|
||||
demandOption: false,
|
||||
type: 'string'
|
||||
type: "string",
|
||||
})
|
||||
.option('test', {
|
||||
describe: 'the name of a file in fixtures/curl_commands without the .sh extension',
|
||||
defaultDescription: 'run all tests',
|
||||
.option("test", {
|
||||
describe:
|
||||
"the name of a file in fixtures/curl_commands without the .sh extension",
|
||||
defaultDescription: "run all tests",
|
||||
demandOption: false,
|
||||
type: 'string'
|
||||
type: "string",
|
||||
})
|
||||
.alias('h', 'help')
|
||||
.alias("h", "help")
|
||||
.help()
|
||||
.parse()
|
||||
.parse();
|
||||
|
||||
const languages: Converter[] = Array.isArray(testArgs.language) ? testArgs.language : [testArgs.language]
|
||||
const languages: Converter[] = Array.isArray(testArgs.language)
|
||||
? testArgs.language
|
||||
: [testArgs.language];
|
||||
|
||||
// Test names can be positional args or --test=<test name>. We need to merge them
|
||||
let testNames = testArgs._.slice(1)
|
||||
let testNames = testArgs._.slice(1);
|
||||
if (Array.isArray(testArgs.test)) {
|
||||
testNames = testNames.concat(testArgs.test)
|
||||
} else if (typeof testArgs.test === 'string') {
|
||||
testNames.push(testArgs.test)
|
||||
testNames = testNames.concat(testArgs.test);
|
||||
} else if (typeof testArgs.test === "string") {
|
||||
testNames.push(testArgs.test);
|
||||
}
|
||||
|
||||
const testFileNames = testNames && testNames.length
|
||||
? testNames.map(t => t.toString().replace(/ /g, '_') + '.sh')
|
||||
: fs.readdirSync(curlCommandsDir).filter(f => f.endsWith('.sh')) // if no --test specified, run them all
|
||||
const testFileNames =
|
||||
testNames && testNames.length
|
||||
? testNames.map((t) => t.toString().replace(/ /g, "_") + ".sh")
|
||||
: fs.readdirSync(curlCommandsDir).filter((f) => f.endsWith(".sh")); // if no --test specified, run them all
|
||||
|
||||
for (const outputLanguage of Object.keys(converters)) {
|
||||
// TODO: always test 'parser'?
|
||||
if (!languages.includes(outputLanguage as Converter)) {
|
||||
console.error('skipping language: ' + outputLanguage)
|
||||
console.error("skipping language: " + outputLanguage);
|
||||
}
|
||||
}
|
||||
|
||||
for (const fileName of testFileNames) {
|
||||
const inputFilePath = path.resolve(curlCommandsDir, fileName)
|
||||
const inputFileContents = fs.readFileSync(inputFilePath, 'utf8')
|
||||
const inputFilePath = path.resolve(curlCommandsDir, fileName);
|
||||
const inputFileContents = fs.readFileSync(inputFilePath, "utf8");
|
||||
|
||||
for (const outputLanguage of languages) {
|
||||
const converter = converters[outputLanguage]
|
||||
const converter = converters[outputLanguage];
|
||||
|
||||
const filePath = path.resolve(fixturesDir, outputLanguage, fileName.replace(/\.sh$/, converter.extension))
|
||||
const testName = fileName.replace(/_/g, ' ').replace(/\.sh$/, '')
|
||||
const fullTestName = converter.name + ': ' + testName
|
||||
const filePath = path.resolve(
|
||||
fixturesDir,
|
||||
outputLanguage,
|
||||
fileName.replace(/\.sh$/, converter.extension)
|
||||
);
|
||||
const testName = fileName.replace(/_/g, " ").replace(/\.sh$/, "");
|
||||
const fullTestName = converter.name + ": " + testName;
|
||||
|
||||
if (fs.existsSync(filePath)) {
|
||||
// normalize code for just \n line endings (aka fix input under Windows)
|
||||
const expected = fs.readFileSync(filePath, 'utf-8').replace(/\r\n/g, '\n')
|
||||
let actual: string
|
||||
const expected = fs
|
||||
.readFileSync(filePath, "utf-8")
|
||||
.replace(/\r\n/g, "\n");
|
||||
let actual: string;
|
||||
try {
|
||||
actual = converter.converter(inputFileContents)
|
||||
actual = converter.converter(inputFileContents);
|
||||
} catch (e) {
|
||||
console.error('Failed converting ' + fileName + ' to ' + converter.name + ':')
|
||||
console.error(e)
|
||||
process.exit(1)
|
||||
console.error(
|
||||
"Failed converting " + fileName + " to " + converter.name + ":"
|
||||
);
|
||||
console.error(e);
|
||||
process.exit(1);
|
||||
}
|
||||
if (outputLanguage === 'parser') {
|
||||
test(fullTestName, t => {
|
||||
if (outputLanguage === "parser") {
|
||||
test(fullTestName, (t) => {
|
||||
// TODO: `actual` is a needless roundtrip
|
||||
t.deepEquals(JSON.parse(actual), JSON.parse(expected))
|
||||
t.end()
|
||||
})
|
||||
t.deepEquals(JSON.parse(actual), JSON.parse(expected));
|
||||
t.end();
|
||||
});
|
||||
} else {
|
||||
test(fullTestName, t => {
|
||||
t.equal(actual, expected)
|
||||
t.end()
|
||||
})
|
||||
test(fullTestName, (t) => {
|
||||
t.equal(actual, expected);
|
||||
t.end();
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user