UNPKG

reasonably-typed

Version:

Converts flow definitions to Bucklescript definitions

59 lines (52 loc) 1.79 kB
const path = require('path') const { readdirSync, readFile } = require('fs') const { compile, format } = require('../../lib') const fixtures = path.join(__dirname, 'fixtures') const fixture = file => path.join(fixtures, file) const testFiles = readdirSync(fixtures) .filter(file => file.endsWith('.re')) .map(file => ({ [file]: { js: new Promise((resolve, reject) => { readFile(fixture(file.replace('.re', '.js')), (err, data) => { if (err) return reject(err) resolve(data.toString()) }) }), re: new Promise((resolve, reject) => { readFile(fixture(file), (err, data) => { if (err) return resolve(null) resolve(data.toString()) }) }), ts: new Promise((resolve, reject) => { readFile(fixture(file.replace('.re', '.d.ts')), (err, data) => { if (err) return resolve(null) resolve(data.toString()) }) }) } })) .reduce((all, mod) => Object.assign({}, all, mod), {}) const compareSources = (fname, { js, re, ts }) => async () => { const reSrc = await re const jsSrc = await js const tsSrc = await ts if (jsSrc) { const jsResult = compile(jsSrc, fname.replace('.re', '.js')) const jsExpected = format(reSrc) expect(jsResult).toBe(jsExpected) expect(jsResult).toBe(format(jsResult)) expect(jsResult).toMatchSnapshot() } if (tsSrc) { const tsResult = compile(tsSrc, fname.replace('.re', '.d.ts')) const tsExpected = format(reSrc) expect(tsResult).toBe(tsExpected) expect(tsResult).toBe(format(tsResult)) expect(tsResult).toMatchSnapshot() } } Object.entries(testFiles).forEach(([moduleName, source]) => { test(`Compile ${moduleName}`, compareSources(moduleName, source)) })