|
|
|
|
|
const assert = require('assert') |
|
const os = require('os') |
|
const proxyquire = require('proxyquire') |
|
|
|
const platforms = [ |
|
['aix', `${os.homedir()}/.cache/linusu`], |
|
['darwin', `${os.homedir()}/Library/Caches/linusu`], |
|
['freebsd', `${os.homedir()}/.cache/linusu`], |
|
['linux', `${os.homedir()}/.cache/linusu`], |
|
['netbsd', `${os.homedir()}/.cache/linusu`], |
|
['openbsd', `${os.homedir()}/.cache/linusu`], |
|
['sunos', `${os.homedir()}/.cache/linusu`], |
|
['win32', `${os.homedir()}/AppData/Local/linusu/Cache`] |
|
] |
|
|
|
platforms.forEach((platform) => { |
|
describe(platform[0], () => { |
|
let cachedir |
|
|
|
before(() => { |
|
const os = { |
|
platform () { return platform[0] } |
|
} |
|
|
|
cachedir = proxyquire('./', { os }) |
|
}) |
|
|
|
it('should give the correct path', () => { |
|
const actual = cachedir('linusu') |
|
const expected = platform[1] |
|
|
|
assert.strictEqual(actual, expected) |
|
}) |
|
|
|
if (platform[0] === 'win32') { |
|
describe('when LOCALAPPDATA is set', () => { |
|
it('should give the correct path', () => { |
|
const oldLocalAppData = process.env.LOCALAPPDATA |
|
process.env.LOCALAPPDATA = 'X:/LocalAppData' |
|
const actual = cachedir('linusu') |
|
process.env.LOCALAPPDATA = oldLocalAppData |
|
const expected = 'X:/LocalAppData/linusu/Cache' |
|
|
|
assert.strictEqual(actual, expected) |
|
}) |
|
}) |
|
} |
|
|
|
it('should throw on bad input', () => { |
|
assert.throws(() => cachedir()) |
|
assert.throws(() => cachedir('')) |
|
assert.throws(() => cachedir({})) |
|
assert.throws(() => cachedir([])) |
|
assert.throws(() => cachedir(null)) |
|
assert.throws(() => cachedir(1337)) |
|
assert.throws(() => cachedir('test!!')) |
|
assert.throws(() => cachedir(undefined)) |
|
}) |
|
}) |
|
}) |
|
|
|
describe('fallback', () => { |
|
it('should fallback to posix with warning', () => { |
|
const originalError = console.error |
|
|
|
try { |
|
const logs = [] |
|
console.error = (msg) => logs.push(msg) |
|
|
|
const os = { platform: () => 'test' } |
|
const cachedir = proxyquire('./', { os }) |
|
|
|
const actual = cachedir('linusu') |
|
const expected = `${os.homedir()}/.cache/linusu` |
|
assert.strictEqual(actual, expected) |
|
|
|
assert.deepStrictEqual(logs, [ |
|
`(node:${process.pid}) [cachedir] Warning: the platform "test" is not currently supported by node-cachedir, falling back to "posix". Please file an issue with your platform here: https://github.com/LinusU/node-cachedir/issues/new` |
|
]) |
|
} finally { |
|
console.error = originalError |
|
} |
|
}) |
|
}) |
|
|