'use strict' const assert = require('assert') const { exec: _exec } = require('child_process') const { platform } = require('os') const path = require('path') const { promisify: pify } = require('util') const exec = pify(_exec) const { trueCasePath, trueCasePathSync } = require('../') const expected = path.join(__dirname, 'fixture/fOoBaR/BAZ') const requested = expected.toLowerCase() function testSync() { assert.equal(trueCasePathSync(requested), expected, 'trueCasePathSync works') } function testAsync() { return trueCasePath(requested).then((actual) => assert.equal(actual, expected, 'trueCasePath (async) works') ) } function testRelative() { assert.equal( trueCasePathSync(requested.replace(process.cwd() + '/', '')), expected, 'works with relative paths' ) } function testSpecialChars() { assert.equal( trueCasePathSync('test/fixture/F[U&N%K)Y'), path.join(__dirname, 'fixture/f[u&n%k)y'), 'works with file names w/ special chars' ) } async function testSharedHostingWorkaround() { await exec('mkdir -p fixture/home/casey', { cwd: __dirname }) await exec('touch fixture/home/casey/fOoBaR', { cwd: __dirname }) await exec('chmod 100 fixture/home', { cwd: __dirname }) assert.throws(() => trueCasePathSync('fixture/home/casey/foobar', __dirname)) assert.equal( trueCasePathSync('foobar', path.join(__dirname, 'fixture/home/casey')), path.join(__dirname, 'fixture/home/casey/fOoBaR') ) assert.equal( await trueCasePath('foobar', path.join(__dirname, 'fixture/home/casey')), path.join(__dirname, 'fixture/home/casey/fOoBaR') ) } Promise.all([ // testSync(), // testRelative(), // testAsync(), testSpecialChars(), platform() === 'linux' ? testSharedHostingWorkaround() : Promise.resolve() ]) .then(() => { console.log('All tests passed!') }) .catch((err) => { console.log('Test failed!') console.error(err) process.exitCode = 1 })