From 0f04fb2a74468688c3db7e8255dfe4493026e516 Mon Sep 17 00:00:00 2001 From: Amin Yahyaabadi Date: Sat, 6 Mar 2021 20:00:57 -0600 Subject: [PATCH] test: add test for conditionally loaded .node files --- .gitignore | 1 + .../main.js | 6 ++++++ .../native-module/build/Release/native.node | 0 .../node_modules/native-module/main.js | 7 +++++++ .../node_modules/native-module/package.json | 4 ++++ .../package.json | 5 +++++ spec/package-spec.js | 14 ++++++++++++++ 7 files changed, 37 insertions(+) create mode 100644 spec/fixtures/packages/package-with-incompatible-native-module-loaded-conditionally/main.js create mode 100644 spec/fixtures/packages/package-with-incompatible-native-module-loaded-conditionally/node_modules/native-module/build/Release/native.node create mode 100644 spec/fixtures/packages/package-with-incompatible-native-module-loaded-conditionally/node_modules/native-module/main.js create mode 100644 spec/fixtures/packages/package-with-incompatible-native-module-loaded-conditionally/node_modules/native-module/package.json create mode 100644 spec/fixtures/packages/package-with-incompatible-native-module-loaded-conditionally/package.json diff --git a/.gitignore b/.gitignore index b21d0cdf9..c743195e3 100644 --- a/.gitignore +++ b/.gitignore @@ -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/ diff --git a/spec/fixtures/packages/package-with-incompatible-native-module-loaded-conditionally/main.js b/spec/fixtures/packages/package-with-incompatible-native-module-loaded-conditionally/main.js new file mode 100644 index 000000000..3b6530bc1 --- /dev/null +++ b/spec/fixtures/packages/package-with-incompatible-native-module-loaded-conditionally/main.js @@ -0,0 +1,6 @@ +const condition = false; + +if (condition) { + const { native } = require("./node_modules/native-module"); + native(condition); +} diff --git a/spec/fixtures/packages/package-with-incompatible-native-module-loaded-conditionally/node_modules/native-module/build/Release/native.node b/spec/fixtures/packages/package-with-incompatible-native-module-loaded-conditionally/node_modules/native-module/build/Release/native.node new file mode 100644 index 000000000..e69de29bb diff --git a/spec/fixtures/packages/package-with-incompatible-native-module-loaded-conditionally/node_modules/native-module/main.js b/spec/fixtures/packages/package-with-incompatible-native-module-loaded-conditionally/node_modules/native-module/main.js new file mode 100644 index 000000000..bde22006e --- /dev/null +++ b/spec/fixtures/packages/package-with-incompatible-native-module-loaded-conditionally/node_modules/native-module/main.js @@ -0,0 +1,7 @@ +exports.native = function loadNative(condition) { + if (condition) { + return require('../build/Release/native.node'); + } else { + return null; + } +} diff --git a/spec/fixtures/packages/package-with-incompatible-native-module-loaded-conditionally/node_modules/native-module/package.json b/spec/fixtures/packages/package-with-incompatible-native-module-loaded-conditionally/node_modules/native-module/package.json new file mode 100644 index 000000000..cac262cba --- /dev/null +++ b/spec/fixtures/packages/package-with-incompatible-native-module-loaded-conditionally/node_modules/native-module/package.json @@ -0,0 +1,4 @@ +{ + "name": "native-module", + "main": "./main.js" +} diff --git a/spec/fixtures/packages/package-with-incompatible-native-module-loaded-conditionally/package.json b/spec/fixtures/packages/package-with-incompatible-native-module-loaded-conditionally/package.json new file mode 100644 index 000000000..857bc7221 --- /dev/null +++ b/spec/fixtures/packages/package-with-incompatible-native-module-loaded-conditionally/package.json @@ -0,0 +1,5 @@ +{ + "name": "package-with-incompatible-native-module", + "version": "1.0.0", + "main": "./main.js" +} diff --git a/spec/package-spec.js b/spec/package-spec.js index 59025efaa..a31c2141c 100644 --- a/spec/package-spec.js +++ b/spec/package-spec.js @@ -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]