mirror of
https://github.com/atom/atom.git
synced 2026-04-28 03:01:47 -04:00
104 lines
2.9 KiB
JavaScript
104 lines
2.9 KiB
JavaScript
/** @babel */
|
|
|
|
const assert = require('assert');
|
|
const fs = require('fs');
|
|
const sinon = require('sinon');
|
|
const path = require('path');
|
|
|
|
const dalek = require('../lib/dalek');
|
|
|
|
describe('dalek', function() {
|
|
describe('enumerate', function() {
|
|
let availablePackages = {};
|
|
let realPaths = {};
|
|
let bundledPackages = [];
|
|
let packageDirPaths = [];
|
|
let sandbox = null;
|
|
|
|
beforeEach(function() {
|
|
availablePackages = {
|
|
'an-unduplicated-installed-package': path.join(
|
|
'Users',
|
|
'username',
|
|
'.atom',
|
|
'packages',
|
|
'an-unduplicated-installed-package'
|
|
),
|
|
'duplicated-package': path.join(
|
|
'Users',
|
|
'username',
|
|
'.atom',
|
|
'packages',
|
|
'duplicated-package'
|
|
),
|
|
'unduplicated-package': path.join(
|
|
`${atom.getLoadSettings().resourcePath}`,
|
|
'node_modules',
|
|
'unduplicated-package'
|
|
)
|
|
};
|
|
|
|
atom.devMode = false;
|
|
bundledPackages = ['duplicated-package', 'unduplicated-package'];
|
|
packageDirPaths = [path.join('Users', 'username', '.atom', 'packages')];
|
|
sandbox = sinon.createSandbox();
|
|
sandbox
|
|
.stub(dalek, 'realpath')
|
|
.callsFake(filePath =>
|
|
Promise.resolve(realPaths[filePath] || filePath)
|
|
);
|
|
sandbox.stub(atom.packages, 'isBundledPackage').callsFake(packageName => {
|
|
return bundledPackages.includes(packageName);
|
|
});
|
|
sandbox
|
|
.stub(atom.packages, 'getAvailablePackageNames')
|
|
.callsFake(() => Object.keys(availablePackages));
|
|
sandbox.stub(atom.packages, 'getPackageDirPaths').callsFake(() => {
|
|
return packageDirPaths;
|
|
});
|
|
sandbox.stub(fs, 'existsSync').callsFake(candidate => {
|
|
return (
|
|
Object.values(availablePackages).includes(candidate) &&
|
|
!candidate.includes(atom.getLoadSettings().resourcePath)
|
|
);
|
|
});
|
|
});
|
|
|
|
afterEach(function() {
|
|
sandbox.restore();
|
|
});
|
|
|
|
it('returns a list of duplicate names', async function() {
|
|
assert.deepEqual(await dalek.enumerate(), ['duplicated-package']);
|
|
});
|
|
|
|
describe('when in dev mode', function() {
|
|
beforeEach(function() {
|
|
atom.devMode = true;
|
|
});
|
|
|
|
it('always returns an empty list', async function() {
|
|
assert.deepEqual(await dalek.enumerate(), []);
|
|
});
|
|
});
|
|
|
|
describe('when a package is symlinked into the package directory', async function() {
|
|
beforeEach(function() {
|
|
const realPath = path.join('Users', 'username', 'duplicated-package');
|
|
const packagePath = path.join(
|
|
'Users',
|
|
'username',
|
|
'.atom',
|
|
'packages',
|
|
'duplicated-package'
|
|
);
|
|
realPaths[packagePath] = realPath;
|
|
});
|
|
|
|
it('is not included in the list of duplicate names', async function() {
|
|
assert.deepEqual(await dalek.enumerate(), []);
|
|
});
|
|
});
|
|
});
|
|
});
|