Files
jasmine/spec/npmPackage/npmPackageSpec.js
Steve Gravrock 7b2ab822c6 Removed mostly-unmaintained dev dependency 'temp'
temp has seen some recent maintainer activity but there haven't been
any commits since 2021 and PRs have gone un-addressed for years. It's
one of the dev dependencies that depends on very old versions of rimraf.
2025-04-07 21:35:36 -07:00

159 lines
4.3 KiB
JavaScript

const fs = require('node:fs');
const path = require('node:path');
const os = require('node:os');
const { rimrafSync } = require('rimraf');
describe('npm package', function() {
beforeAll(function() {
const shell = require('shelljs'),
pack = shell.exec('npm pack', { silent: true });
this.tarball = pack.stdout.split('\n')[0];
const prefix = path.join(os.tmpdir(), 'jasmine-npm-package');
this.tmpDir = fs.mkdtempSync(prefix);
const untar = shell.exec(
'tar -xzf ' + this.tarball + ' -C ' + this.tmpDir,
{
silent: true
}
);
expect(untar.code).toBe(0);
this.packagedCore = require(path.join(
this.tmpDir,
'package/lib/jasmine-core.js'
));
});
beforeEach(function() {
jasmine.addMatchers({
toExistInPath: function() {
return {
compare: function(actual, expected) {
const fullPath = path.resolve(expected, actual);
return {
pass: fs.existsSync(fullPath)
};
}
};
}
});
});
afterAll(function() {
fs.unlinkSync(this.tarball);
rimrafSync(this.tmpDir);
});
it('has a root path', function() {
expect(this.packagedCore.files.path).toEqual(
fs.realpathSync(path.resolve(this.tmpDir, 'package/lib/jasmine-core'))
);
});
it('has a bootDir', function() {
expect(this.packagedCore.files.bootDir).toEqual(
fs.realpathSync(path.resolve(this.tmpDir, 'package/lib/jasmine-core'))
);
});
it('has jsFiles', function() {
expect(this.packagedCore.files.jsFiles).toEqual([
'jasmine.js',
'jasmine-html.js'
]);
const packagedCore = this.packagedCore;
this.packagedCore.files.jsFiles.forEach(function(fileName) {
expect(fileName).toExistInPath(packagedCore.files.path);
});
});
it('has cssFiles', function() {
expect(this.packagedCore.files.cssFiles).toEqual(['jasmine.css']);
const packagedCore = this.packagedCore;
this.packagedCore.files.cssFiles.forEach(function(fileName) {
expect(fileName).toExistInPath(packagedCore.files.path);
});
});
it('has bootFiles', function() {
expect(this.packagedCore.files.bootFiles).toEqual(['boot0.js', 'boot1.js']);
for (const fileName of this.packagedCore.files.bootFiles) {
expect(fileName).toExistInPath(this.packagedCore.files.bootDir);
}
});
it('has an imagesDir', function() {
expect(this.packagedCore.files.imagesDir).toEqual(
fs.realpathSync(path.resolve(this.tmpDir, 'package/images'))
);
const images = fs.readdirSync(path.resolve(this.tmpDir, 'package/images'));
expect(images).toContain('jasmine-horizontal.png');
expect(images).toContain('jasmine-horizontal.svg');
expect(images).toContain('jasmine_favicon.png');
});
it('does not have CI config files and scripts', function() {
expect(fs.existsSync(path.resolve(this.tmpDir, 'package/.circleci'))).toBe(
false
);
expect(fs.existsSync(path.resolve(this.tmpDir, 'package/scripts'))).toBe(
false
);
});
it('does not have any unexpected files in the root directory', function() {
const files = fs.readdirSync(this.tmpDir);
expect(files).toEqual(['package']);
});
it('does not have any unexpected files in the package directory', function() {
const files = fs.readdirSync(path.resolve(this.tmpDir, 'package'));
files.sort();
expect(files).toEqual([
'LICENSE',
'README.md',
'images',
'lib',
'package.json'
]);
});
it('only has images in the images dir', function() {
const files = fs.readdirSync(path.resolve(this.tmpDir, 'package/images'));
for (let i = 0; i < files.length; i++) {
expect(files[i]).toMatch(/\.(svg|png)$/);
}
});
it('only has JS and CSS files in the lib dir', function() {
const files = [];
function getFiles(dir) {
const dirents = fs.readdirSync(dir, { withFileTypes: true });
for (let j = 0; j < dirents.length; j++) {
const dirent = dirents[j];
if (dirent.isDirectory()) {
getFiles(path.resolve(dir, dirent.name));
} else {
files.push(path.resolve(dir, dirent.name));
}
}
}
getFiles(path.resolve(this.tmpDir, 'package/lib'));
for (let i = 0; i < files.length; i++) {
expect(files[i]).toMatch(/\.(js|css)$/);
}
});
});