Reformat code (#372)

* format with prettier

* format pre-commit

* format in ci

* remove standardjs editor config
This commit is contained in:
Boris Verkhovskiy
2022-03-31 20:34:00 -07:00
committed by GitHub
parent f29c397882
commit 7c75a10c26
40 changed files with 4200 additions and 2756 deletions

View File

@@ -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 };

View File

@@ -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();
});
}
}
}