test: add test for conditionally loaded .node files

This commit is contained in:
Amin Yahyaabadi 2021-03-06 20:00:57 -06:00
parent ad2aaa8c3c
commit 0f04fb2a74
7 changed files with 37 additions and 0 deletions

1
.gitignore vendored
View File

@ -16,5 +16,6 @@ node_modules
docs/output
docs/includes
spec/fixtures/evil-files/
!spec/fixtures/packages/package-with-incompatible-native-module-loaded-conditionally/node_modules/
out/
/electron/

View File

@ -0,0 +1,6 @@
const condition = false;
if (condition) {
const { native } = require("./node_modules/native-module");
native(condition);
}

View File

@ -0,0 +1,7 @@
exports.native = function loadNative(condition) {
if (condition) {
return require('../build/Release/native.node');
} else {
return null;
}
}

View File

@ -0,0 +1,4 @@
{
"name": "native-module",
"main": "./main.js"
}

View File

@ -0,0 +1,5 @@
{
"name": "package-with-incompatible-native-module",
"version": "1.0.0",
"main": "./main.js"
}

View File

@ -45,6 +45,20 @@ describe('Package', function() {
);
});
it('detects the package as incompatible even if .node file is loaded conditionally', function() {
const packagePath = atom.project
.getDirectories()[0]
.resolve(
'packages/package-with-incompatible-native-module-loaded-conditionally'
);
const pack = buildPackage(packagePath);
expect(pack.isCompatible()).toBe(false);
expect(pack.incompatibleModules[0].name).toBe('native-module');
expect(pack.incompatibleModules[0].path).toBe(
path.join(packagePath, 'node_modules', 'native-module')
);
});
it("utilizes _atomModuleCache if present to determine the package's native dependencies", function() {
let packagePath = atom.project
.getDirectories()[0]