mirror of
https://github.com/pulsar-edit/pulsar.git
synced 2024-09-20 07:28:08 +03:00
132 lines
3.6 KiB
JavaScript
132 lines
3.6 KiB
JavaScript
|
const path = require('path');
|
||
|
const Module = require('module');
|
||
|
const fs = require('fs-plus');
|
||
|
const temp = require('temp').track();
|
||
|
const ModuleCache = require('../src/module-cache');
|
||
|
|
||
|
describe('ModuleCache', function() {
|
||
|
beforeEach(() => spyOn(Module, '_findPath').andCallThrough());
|
||
|
|
||
|
afterEach(function() {
|
||
|
try {
|
||
|
temp.cleanupSync();
|
||
|
} catch (error) {}
|
||
|
});
|
||
|
|
||
|
it('resolves Electron module paths without hitting the filesystem', function() {
|
||
|
const { builtins } = ModuleCache.cache;
|
||
|
expect(Object.keys(builtins).length).toBeGreaterThan(0);
|
||
|
|
||
|
for (let builtinName in builtins) {
|
||
|
const builtinPath = builtins[builtinName];
|
||
|
expect(require.resolve(builtinName)).toBe(builtinPath);
|
||
|
expect(fs.isFileSync(require.resolve(builtinName))).toBeTruthy();
|
||
|
}
|
||
|
|
||
|
expect(Module._findPath.callCount).toBe(0);
|
||
|
});
|
||
|
|
||
|
it('resolves relative core paths without hitting the filesystem', function() {
|
||
|
ModuleCache.add(atom.getLoadSettings().resourcePath, {
|
||
|
_atomModuleCache: {
|
||
|
extensions: {
|
||
|
'.json': [path.join('spec', 'fixtures', 'module-cache', 'file.json')]
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
expect(require('./fixtures/module-cache/file.json').foo).toBe('bar');
|
||
|
expect(Module._findPath.callCount).toBe(0);
|
||
|
});
|
||
|
|
||
|
it('resolves module paths when a compatible version is provided by core', function() {
|
||
|
const packagePath = fs.realpathSync(temp.mkdirSync('atom-package'));
|
||
|
ModuleCache.add(packagePath, {
|
||
|
_atomModuleCache: {
|
||
|
folders: [
|
||
|
{
|
||
|
paths: [''],
|
||
|
dependencies: {
|
||
|
'underscore-plus': '*'
|
||
|
}
|
||
|
}
|
||
|
]
|
||
|
}
|
||
|
});
|
||
|
ModuleCache.add(atom.getLoadSettings().resourcePath, {
|
||
|
_atomModuleCache: {
|
||
|
dependencies: [
|
||
|
{
|
||
|
name: 'underscore-plus',
|
||
|
version: require('underscore-plus/package.json').version,
|
||
|
path: path.join(
|
||
|
'node_modules',
|
||
|
'underscore-plus',
|
||
|
'lib',
|
||
|
'underscore-plus.js'
|
||
|
)
|
||
|
}
|
||
|
]
|
||
|
}
|
||
|
});
|
||
|
|
||
|
const indexPath = path.join(packagePath, 'index.js');
|
||
|
fs.writeFileSync(
|
||
|
indexPath,
|
||
|
`\
|
||
|
exports.load = function() { require('underscore-plus'); };\
|
||
|
`
|
||
|
);
|
||
|
|
||
|
const packageMain = require(indexPath);
|
||
|
Module._findPath.reset();
|
||
|
packageMain.load();
|
||
|
expect(Module._findPath.callCount).toBe(0);
|
||
|
});
|
||
|
|
||
|
it('does not resolve module paths when no compatible version is provided by core', function() {
|
||
|
const packagePath = fs.realpathSync(temp.mkdirSync('atom-package'));
|
||
|
ModuleCache.add(packagePath, {
|
||
|
_atomModuleCache: {
|
||
|
folders: [
|
||
|
{
|
||
|
paths: [''],
|
||
|
dependencies: {
|
||
|
'underscore-plus': '0.0.1'
|
||
|
}
|
||
|
}
|
||
|
]
|
||
|
}
|
||
|
});
|
||
|
ModuleCache.add(atom.getLoadSettings().resourcePath, {
|
||
|
_atomModuleCache: {
|
||
|
dependencies: [
|
||
|
{
|
||
|
name: 'underscore-plus',
|
||
|
version: require('underscore-plus/package.json').version,
|
||
|
path: path.join(
|
||
|
'node_modules',
|
||
|
'underscore-plus',
|
||
|
'lib',
|
||
|
'underscore-plus.js'
|
||
|
)
|
||
|
}
|
||
|
]
|
||
|
}
|
||
|
});
|
||
|
|
||
|
const indexPath = path.join(packagePath, 'index.js');
|
||
|
fs.writeFileSync(
|
||
|
indexPath,
|
||
|
`\
|
||
|
exports.load = function() { require('underscore-plus'); };\
|
||
|
`
|
||
|
);
|
||
|
|
||
|
spyOn(process, 'cwd').andReturn('/'); // Required when running this test from CLI
|
||
|
const packageMain = require(indexPath);
|
||
|
Module._findPath.reset();
|
||
|
expect(() => packageMain.load()).toThrow();
|
||
|
expect(Module._findPath.callCount).toBe(1);
|
||
|
});
|
||
|
});
|