mirror of
https://github.com/pulsar-edit/pulsar.git
synced 2024-09-11 19:17:09 +03:00
132 lines
3.2 KiB
JavaScript
132 lines
3.2 KiB
JavaScript
const fs = require('fs-plus');
|
|
const path = require('path');
|
|
const temp = require('temp').track();
|
|
const dedent = require('dedent');
|
|
const ConfigFile = require('../src/config-file');
|
|
|
|
describe('ConfigFile', () => {
|
|
let filePath, configFile, subscription;
|
|
|
|
beforeEach(async () => {
|
|
jasmine.useRealClock();
|
|
const tempDir = fs.realpathSync(temp.mkdirSync());
|
|
filePath = path.join(tempDir, 'the-config.cson');
|
|
});
|
|
|
|
afterEach(() => {
|
|
subscription.dispose();
|
|
});
|
|
|
|
describe('when the file does not exist', () => {
|
|
it('returns an empty object from .get()', async () => {
|
|
configFile = new ConfigFile(filePath);
|
|
subscription = await configFile.watch();
|
|
expect(configFile.get()).toEqual({});
|
|
});
|
|
});
|
|
|
|
describe('when the file is empty', () => {
|
|
it('returns an empty object from .get()', async () => {
|
|
writeFileSync(filePath, '');
|
|
configFile = new ConfigFile(filePath);
|
|
subscription = await configFile.watch();
|
|
expect(configFile.get()).toEqual({});
|
|
});
|
|
});
|
|
|
|
describe('when the file is updated with valid CSON', () => {
|
|
it('notifies onDidChange observers with the data', async () => {
|
|
configFile = new ConfigFile(filePath);
|
|
subscription = await configFile.watch();
|
|
|
|
const event = new Promise(resolve => configFile.onDidChange(resolve));
|
|
|
|
writeFileSync(
|
|
filePath,
|
|
dedent`
|
|
'*':
|
|
foo: 'bar'
|
|
|
|
'javascript':
|
|
foo: 'baz'
|
|
`
|
|
);
|
|
|
|
expect(await event).toEqual({
|
|
'*': { foo: 'bar' },
|
|
javascript: { foo: 'baz' }
|
|
});
|
|
|
|
expect(configFile.get()).toEqual({
|
|
'*': { foo: 'bar' },
|
|
javascript: { foo: 'baz' }
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('when the file is updated with invalid CSON', () => {
|
|
it('notifies onDidError observers', async () => {
|
|
configFile = new ConfigFile(filePath);
|
|
subscription = await configFile.watch();
|
|
|
|
const message = new Promise(resolve => configFile.onDidError(resolve));
|
|
|
|
writeFileSync(
|
|
filePath,
|
|
dedent`
|
|
um what?
|
|
`,
|
|
2
|
|
);
|
|
|
|
expect(await message).toContain('Failed to load `the-config.cson`');
|
|
|
|
const event = new Promise(resolve => configFile.onDidChange(resolve));
|
|
|
|
writeFileSync(
|
|
filePath,
|
|
dedent`
|
|
'*':
|
|
foo: 'bar'
|
|
|
|
'javascript':
|
|
foo: 'baz'
|
|
`,
|
|
4
|
|
);
|
|
|
|
expect(await event).toEqual({
|
|
'*': { foo: 'bar' },
|
|
javascript: { foo: 'baz' }
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('ConfigFile.at()', () => {
|
|
let path0, path1;
|
|
|
|
beforeEach(() => {
|
|
path0 = filePath;
|
|
path1 = path.join(fs.realpathSync(temp.mkdirSync()), 'the-config.cson');
|
|
|
|
configFile = ConfigFile.at(path0);
|
|
});
|
|
|
|
it('returns an existing ConfigFile', () => {
|
|
const cf = ConfigFile.at(path0);
|
|
expect(cf).toEqual(configFile);
|
|
});
|
|
|
|
it('creates a new ConfigFile for unrecognized paths', () => {
|
|
const cf = ConfigFile.at(path1);
|
|
expect(cf).not.toEqual(configFile);
|
|
});
|
|
});
|
|
});
|
|
|
|
function writeFileSync(filePath, content, seconds = 2) {
|
|
const utime = Date.now() / 1000 + seconds;
|
|
fs.writeFileSync(filePath, content);
|
|
fs.utimesSync(filePath, utime, utime);
|
|
}
|