pulsar/spec/module-cache-spec.js
Sadick 83d6c09b10
Decaffeinate specs (#21546)
Decaffeinate the following files.

* atom-protocol-handler
* babel-spec
* buffered-node-process
* buffered-process
* clipboard
* context-menu-manager
* decoration-manager
* default-directory-provider
* deserializer-manager
* file-system-blob-store
* keymap-extensions
* menu-manager
* module-cache
* pane-axis-element
* pane-container-element
* pane-element
* package-spec
* squirel-update
* styles-element-spec
* task-spec
* typescript-spec
* spec-helper-platform
2020-10-30 16:40:57 +03:00

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