rpgmaker-linux/nwjs/packagefiles/tyranobuilder/node_modules/jsonfile/test/read-file-sync.test.js
2024-07-01 20:36:56 +03:00

149 lines
3.9 KiB
JavaScript

const assert = require('assert')
const fs = require('fs')
const os = require('os')
const path = require('path')
const rimraf = require('rimraf')
const jf = require('../')
/* global describe it beforeEach afterEach */
describe('+ readFileSync()', () => {
let TEST_DIR
beforeEach((done) => {
TEST_DIR = path.join(os.tmpdir(), 'jsonfile-tests-readfile-sync')
rimraf.sync(TEST_DIR)
fs.mkdir(TEST_DIR, done)
})
afterEach((done) => {
rimraf.sync(TEST_DIR)
done()
})
it('should read and parse JSON', () => {
const file = path.join(TEST_DIR, 'somefile3.json')
const obj = { name: 'JP' }
fs.writeFileSync(file, JSON.stringify(obj))
try {
const obj2 = jf.readFileSync(file)
assert.strictEqual(obj2.name, obj.name)
} catch (err) {
assert(err)
}
})
describe('> when invalid JSON', () => {
it('should include the filename in the error', () => {
const fn = 'somefile.json'
const file = path.join(TEST_DIR, fn)
fs.writeFileSync(file, '{')
assert.throws(() => {
jf.readFileSync(file)
}, (err) => {
assert(err instanceof Error)
assert(err.message.match(fn))
return true
})
})
})
describe('> when invalid JSON and throws set to false', () => {
it('should return null', () => {
const file = path.join(TEST_DIR, 'somefile4-invalid.json')
const data = '{not valid JSON'
fs.writeFileSync(file, data)
assert.throws(() => {
jf.readFileSync(file)
})
const obj = jf.readFileSync(file, { throws: false })
assert.strictEqual(obj, null)
})
})
describe('> when invalid JSON and throws set to true', () => {
it('should throw an exception', () => {
const file = path.join(TEST_DIR, 'somefile4-invalid.json')
const data = '{not valid JSON'
fs.writeFileSync(file, data)
assert.throws(() => {
jf.readFileSync(file, { throws: true })
})
})
})
describe('> when json file is missing and throws set to false', () => {
it('should return null', () => {
const file = path.join(TEST_DIR, 'somefile4-invalid.json')
const obj = jf.readFileSync(file, { throws: false })
assert.strictEqual(obj, null)
})
})
describe('> when json file is missing and throws set to true', () => {
it('should throw an exception', () => {
const file = path.join(TEST_DIR, 'somefile4-invalid.json')
assert.throws(() => {
jf.readFileSync(file, { throws: true })
})
})
})
describe('> when JSON reviver is set', () => {
it('should transform the JSON', () => {
const file = path.join(TEST_DIR, 'somefile.json')
const sillyReviver = function (k, v) {
if (typeof v !== 'string') return v
if (v.indexOf('date:') < 0) return v
return new Date(v.split('date:')[1])
}
const obj = {
name: 'jp',
day: 'date:2015-06-19T11:41:26.815Z'
}
fs.writeFileSync(file, JSON.stringify(obj))
const data = jf.readFileSync(file, { reviver: sillyReviver })
assert.strictEqual(data.name, 'jp')
assert(data.day instanceof Date)
assert.strictEqual(data.day.toISOString(), '2015-06-19T11:41:26.815Z')
})
})
describe('> when passing encoding string as option', () => {
it('should not throw an error', () => {
const file = path.join(TEST_DIR, 'somefile.json')
const obj = {
name: 'jp'
}
fs.writeFileSync(file, JSON.stringify(obj))
let data
try {
data = jf.readFileSync(file, 'utf8')
} catch (err) {
assert.ifError(err)
}
assert.strictEqual(data.name, 'jp')
})
})
describe('> w/ BOM', () => {
it('should properly parse', () => {
const file = path.join(TEST_DIR, 'file-bom.json')
const obj = { name: 'JP' }
fs.writeFileSync(file, `\uFEFF${JSON.stringify(obj)}`)
const data = jf.readFileSync(file)
assert.deepStrictEqual(obj, data)
})
})
})