123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- 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);
- }
|