From cdada58d27b22ee5b9fc6ff23f0edcacf0aa8ce3 Mon Sep 17 00:00:00 2001 From: Zoltan Kochan Date: Sat, 15 Jan 2022 03:22:19 +0200 Subject: [PATCH] test: side effects tests should work on Windows --- packages/core/test/install/sideEffects.ts | 30 +++++++++---------- packages/headless/package.json | 1 - .../test/fixtures/side-effects/package.json | 2 +- .../test/fixtures/side-effects/pnpm-lock.yaml | 24 +++++++-------- packages/headless/test/index.ts | 16 +++++----- pnpm-lock.yaml | 2 -- 6 files changed, 33 insertions(+), 42 deletions(-) diff --git a/packages/core/test/install/sideEffects.ts b/packages/core/test/install/sideEffects.ts index 93e1dc7ad7..d3358ef7fa 100644 --- a/packages/core/test/install/sideEffects.ts +++ b/packages/core/test/install/sideEffects.ts @@ -6,14 +6,12 @@ import { REGISTRY_MOCK_PORT } from '@pnpm/registry-mock' import { prepareEmpty } from '@pnpm/prepare' import { ENGINE_NAME } from '@pnpm/constants' import rimraf from '@zkochan/rimraf' -import isWindows from 'is-windows' import loadJsonFile from 'load-json-file' import exists from 'path-exists' import writeJsonFile from 'write-json-file' import { testDefaults } from '../utils' const ENGINE_DIR = `${process.platform}-${process.arch}-node-${process.version.split('.')[0]}` -const skipOnWindows = isWindows() ? test.skip : test test.skip('caching side effects of native package', async () => { prepareEmpty() @@ -71,7 +69,7 @@ test.skip('caching side effects of native package when hoisting is used', async await project.has('.pnpm/node_modules/es6-promise') // verifying that a flat node_modules was created }) -skipOnWindows('using side effects cache', async () => { +test('using side effects cache', async () => { prepareEmpty() // Right now, hardlink does not work with side effects, so we specify copy as the packageImportMethod @@ -82,13 +80,14 @@ skipOnWindows('using side effects cache', async () => { sideEffectsCacheWrite: true, verifyStoreIntegrity: false, }, {}, {}, { packageImportMethod: 'copy' }) - const manifest = await addDependenciesToPackage({}, ['diskusage@1.1.3'], opts) + const manifest = await addDependenciesToPackage({}, ['pre-and-postinstall-scripts-example@1.0.0'], opts) - const filesIndexFile = path.join(opts.storeDir, 'files/10/0c9ac65f21cb83e1d3b9339731937e96d930d0000075d266d3443307659d27759e81f3bc0e87b202ade1f10c4af6845d060b4a985ee6b3ccc4de163a3d2171-index.json') + const filesIndexFile = path.join(opts.storeDir, 'files/2e/28a020ed7c488057d208cd705442e275352fcf88a32b32d0d312668308cb87db3a6df9171ce90d501c3de162b2a6dd5cf62ed7ae8c76532f95adfac924b9a8-index.json') const filesIndex = await loadJsonFile(filesIndexFile) expect(filesIndex.sideEffects).toBeTruthy() // files index has side effects - expect(filesIndex.sideEffects).toHaveProperty([ENGINE_NAME, 'build/Makefile']) - delete filesIndex.sideEffects![ENGINE_NAME]['build/Makefile'] + expect(filesIndex.sideEffects).toHaveProperty([ENGINE_NAME, 'generated-by-preinstall.js']) + expect(filesIndex.sideEffects).toHaveProperty([ENGINE_NAME, 'generated-by-postinstall.js']) + delete filesIndex.sideEffects![ENGINE_NAME]['generated-by-postinstall.js'] await writeJsonFile(filesIndexFile, filesIndex) await rimraf('node_modules') @@ -100,10 +99,10 @@ skipOnWindows('using side effects cache', async () => { storeDir: opts.storeDir, verifyStoreIntegrity: false, }, {}, {}, { packageImportMethod: 'copy' }) - await addDependenciesToPackage(manifest, ['diskusage@1.1.3'], opts2) + await addDependenciesToPackage(manifest, ['pre-and-postinstall-scripts-example@1.0.0'], opts2) - expect(await exists(path.resolve('node_modules/diskusage/build/Makefile'))).toBeFalsy() // side effects cache correctly used - expect(await exists(path.resolve('node_modules/diskusage/build/binding.Makefile'))).toBeTruthy() // side effects cache correctly used + expect(await exists(path.resolve('node_modules/pre-and-postinstall-scripts-example/generated-by-preinstall.js'))).toBeTruthy() // side effects cache correctly used + expect(await exists(path.resolve('node_modules/pre-and-postinstall-scripts-example/generated-by-postinstall.js'))).toBeFalsy() // side effects cache correctly used }) test.skip('readonly side effects cache', async () => { @@ -140,7 +139,7 @@ test.skip('readonly side effects cache', async () => { expect(await exists(path.join(opts2.storeDir, `localhost+${REGISTRY_MOCK_PORT}/diskusage/1.1.2/side_effects/${ENGINE_DIR}/package/build`))).toBeFalsy() }) -skipOnWindows('uploading errors do not interrupt installation', async () => { +test('uploading errors do not interrupt installation', async () => { prepareEmpty() const opts = await testDefaults({ @@ -151,10 +150,11 @@ skipOnWindows('uploading errors do not interrupt installation', async () => { opts.storeController.upload = async () => { throw new Error('an unexpected error') } - await addDependenciesToPackage({}, ['diskusage@1.1.3'], opts) + await addDependenciesToPackage({}, ['pre-and-postinstall-scripts-example@1.0.0'], opts) - expect(await exists('node_modules/diskusage/build')).toBeTruthy() + expect(await exists('node_modules/pre-and-postinstall-scripts-example/generated-by-postinstall.js')).toBeTruthy() - const cacheBuildDir = path.join(opts.storeDir, `localhost+${REGISTRY_MOCK_PORT}/diskusage/1.1.3/side_effects/${ENGINE_DIR}/package/build`) - expect(await exists(cacheBuildDir)).toBeFalsy() + const filesIndexFile = path.join(opts.storeDir, 'files/2e/28a020ed7c488057d208cd705442e275352fcf88a32b32d0d312668308cb87db3a6df9171ce90d501c3de162b2a6dd5cf62ed7ae8c76532f95adfac924b9a8-index.json') + const filesIndex = await loadJsonFile(filesIndexFile) + expect(filesIndex.sideEffects).toBeFalsy() }) diff --git a/packages/headless/package.json b/packages/headless/package.json index 8799092257..877255567c 100644 --- a/packages/headless/package.json +++ b/packages/headless/package.json @@ -29,7 +29,6 @@ "@types/ramda": "0.27.39", "@types/rimraf": "^3.0.0", "@types/sinon": "^10.0.6", - "is-windows": "^1.0.2", "isexe": "2.0.0", "load-json-file": "^6.2.0", "npm-run-all": "^4.1.5", diff --git a/packages/headless/test/fixtures/side-effects/package.json b/packages/headless/test/fixtures/side-effects/package.json index 791e6b809c..5a9f9892f2 100644 --- a/packages/headless/test/fixtures/side-effects/package.json +++ b/packages/headless/test/fixtures/side-effects/package.json @@ -1,5 +1,5 @@ { "dependencies": { - "diskusage": "1.1.3" + "pre-and-postinstall-scripts-example": "1.0.0" } } diff --git a/packages/headless/test/fixtures/side-effects/pnpm-lock.yaml b/packages/headless/test/fixtures/side-effects/pnpm-lock.yaml index 8340f40a77..b06fdfa680 100644 --- a/packages/headless/test/fixtures/side-effects/pnpm-lock.yaml +++ b/packages/headless/test/fixtures/side-effects/pnpm-lock.yaml @@ -1,25 +1,21 @@ lockfileVersion: 5.3 specifiers: - diskusage: 1.1.3 + pre-and-postinstall-scripts-example: 1.0.0 dependencies: - diskusage: 1.1.3 + pre-and-postinstall-scripts-example: 1.0.0 packages: - /diskusage/1.1.3: - resolution: {integrity: sha512-EAyaxl8hy4Ph07kzlzGTfpbZMNAAAHXSZtNEMwdlnSd1noHzvA6HsgKt4fEMSvaEXQYLSphe5rPMxN4WOj0hcQ==} + /hello-world-js-bin/1.0.0: + resolution: {integrity: sha512-g9DaVvwKClJZUDrsYc7DRhvwMuGLzWlKOJlrHWZz5qiT/RdE1jdT+7Fh1T5XNKW7Oa/pbyxHNz7fK1+vLXe/3w==} + hasBin: true + dev: false + + /pre-and-postinstall-scripts-example/1.0.0: + resolution: {integrity: sha512-LiigIO18SIBX0gjNcFRC4nU1L8+Ioysy0NMSZoMIy4fbOm35FxzpDVAcPeFisqbdXPYu166MdlMvla36ySS5qA==} requiresBuild: true dependencies: - es6-promise: 4.2.8 - nan: 2.14.1 - dev: false - - /es6-promise/4.2.8: - resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} - dev: false - - /nan/2.14.1: - resolution: {integrity: sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==} + hello-world-js-bin: 1.0.0 dev: false diff --git a/packages/headless/test/index.ts b/packages/headless/test/index.ts index 6743d06f9e..283eb964c9 100644 --- a/packages/headless/test/index.ts +++ b/packages/headless/test/index.ts @@ -18,7 +18,6 @@ import readprojectsContext from '@pnpm/read-projects-context' import { REGISTRY_MOCK_PORT } from '@pnpm/registry-mock' import fixtures from '@pnpm/test-fixtures' import rimraf from '@zkochan/rimraf' -import isWindows from 'is-windows' import loadJsonFile from 'load-json-file' import exists from 'path-exists' import sinon from 'sinon' @@ -26,7 +25,6 @@ import writeJsonFile from 'write-json-file' import testDefaults from './utils/testDefaults' const f = fixtures(__dirname) -const skipOnWindows = isWindows() ? test.skip : test test('installing a simple project', async () => { const prefix = f.prepare('simple') @@ -673,7 +671,7 @@ test('installing with publicHoistPattern=* in a project with external lockfile', const ENGINE_DIR = `${process.platform}-${process.arch}-node-${process.version.split('.')[0]}` -skipOnWindows('using side effects cache', async () => { +test('using side effects cache', async () => { let prefix = f.prepare('side-effects') // Right now, hardlink does not work with side effects, so we specify copy as the packageImportMethod @@ -686,13 +684,13 @@ skipOnWindows('using side effects cache', async () => { }, {}, {}, { packageImportMethod: 'copy' }) await headless(opts) - const cacheIntegrityPath = path.join(opts.storeDir, 'files/10/0c9ac65f21cb83e1d3b9339731937e96d930d0000075d266d3443307659d27759e81f3bc0e87b202ade1f10c4af6845d060b4a985ee6b3ccc4de163a3d2171-index.json') + const cacheIntegrityPath = path.join(opts.storeDir, 'files/2e/28a020ed7c488057d208cd705442e275352fcf88a32b32d0d312668308cb87db3a6df9171ce90d501c3de162b2a6dd5cf62ed7ae8c76532f95adfac924b9a8-index.json') const cacheIntegrity = await loadJsonFile(cacheIntegrityPath) expect(cacheIntegrity!['sideEffects']).toBeTruthy() - expect(cacheIntegrity).toHaveProperty(['sideEffects', ENGINE_NAME, 'build/Makefile']) - delete cacheIntegrity!['sideEffects'][ENGINE_NAME]['build/Makefile'] + expect(cacheIntegrity).toHaveProperty(['sideEffects', ENGINE_NAME, 'generated-by-postinstall.js']) + delete cacheIntegrity!['sideEffects'][ENGINE_NAME]['generated-by-postinstall.js'] - expect(cacheIntegrity).toHaveProperty(['sideEffects', ENGINE_NAME, 'build/binding.Makefile']) + expect(cacheIntegrity).toHaveProperty(['sideEffects', ENGINE_NAME, 'generated-by-preinstall.js']) await writeJsonFile(cacheIntegrityPath, cacheIntegrity) prefix = f.prepare('side-effects') @@ -705,8 +703,8 @@ skipOnWindows('using side effects cache', async () => { }, {}, {}, { packageImportMethod: 'copy' }) await headless(opts2) - expect(await exists(path.join(prefix, 'node_modules/diskusage/build/Makefile'))).toBeFalsy() - expect(await exists(path.join(prefix, 'node_modules/diskusage/build/binding.Makefile'))).toBeTruthy() + expect(await exists(path.join(prefix, 'node_modules/pre-and-postinstall-scripts-example/generated-by-postinstall.js'))).toBeFalsy() + expect(await exists(path.join(prefix, 'node_modules/pre-and-postinstall-scripts-example/generated-by-preinstall.js'))).toBeTruthy() }) test.skip('using side effects cache and hoistPattern=*', async () => { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 90596892a0..69d432c7d8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1076,7 +1076,6 @@ importers: '@types/sinon': ^10.0.6 '@zkochan/rimraf': ^2.1.1 dependency-path: workspace:8.0.10 - is-windows: ^1.0.2 isexe: 2.0.0 load-json-file: ^6.2.0 npm-run-all: ^4.1.5 @@ -1132,7 +1131,6 @@ importers: '@types/ramda': 0.27.39 '@types/rimraf': 3.0.2 '@types/sinon': 10.0.6 - is-windows: 1.0.2 isexe: 2.0.0 load-json-file: 6.2.0 npm-run-all: 4.1.5