diff --git a/e2e/cases/rsdoctor/index.test.ts b/e2e/cases/rsdoctor/index.test.ts new file mode 100644 index 0000000000..1a1eddfebd --- /dev/null +++ b/e2e/cases/rsdoctor/index.test.ts @@ -0,0 +1,50 @@ +import path from 'node:path'; +import { expect } from '@playwright/test'; +import { build, proxyConsole, rspackOnlyTest } from '@e2e/helper'; +import { fse } from '@rsbuild/shared'; + +const packagePath = path.join( + __dirname, + 'node_modules/@rsdoctor/rspack-plugin', +); +const testFile = path.join(packagePath, 'test.txt'); + +rspackOnlyTest( + 'should register Rsdoctor plugin when process.env.RSDOCTOR is true', + async () => { + fse.removeSync(packagePath); + fse.copySync(path.join(__dirname, 'mock'), packagePath); + + const { logs, restore } = proxyConsole(); + process.env.RSDOCTOR = 'true'; + + await build({ + cwd: __dirname, + }); + + expect(fse.existsSync(testFile)).toBe(true); + expect( + logs.some((log) => log.includes('@rsdoctor') && log.includes('enabled')), + ).toBe(true); + + process.env.RSDOCTOR = ''; + restore(); + }, +); + +rspackOnlyTest( + 'should not register Rsdoctor plugin when process.env.RSDOCTOR is false', + async () => { + fse.removeSync(packagePath); + fse.copySync(path.join(__dirname, 'mock'), packagePath); + + process.env.RSDOCTOR = 'false'; + + await build({ + cwd: __dirname, + }); + + expect(fse.existsSync(testFile)).toBe(false); + process.env.RSDOCTOR = ''; + }, +); diff --git a/e2e/cases/rsdoctor/mock/index.cjs b/e2e/cases/rsdoctor/mock/index.cjs new file mode 100644 index 0000000000..5bedd9b63f --- /dev/null +++ b/e2e/cases/rsdoctor/mock/index.cjs @@ -0,0 +1,14 @@ +const path = require('node:path'); +const { fse } = require('@rsbuild/shared'); + +class RsdoctorRspackPlugin { + name = 'RsdoctorRspackPlugin'; + + apply(compiler) { + compiler.hooks.done.tap('rsdoctor:test', () => { + fse.outputFileSync(path.join(__dirname, './test.txt'), 'test'); + }); + } +} + +module.exports.RsdoctorRspackPlugin = RsdoctorRspackPlugin; diff --git a/e2e/cases/rsdoctor/mock/package.json b/e2e/cases/rsdoctor/mock/package.json new file mode 100644 index 0000000000..7cfbd98262 --- /dev/null +++ b/e2e/cases/rsdoctor/mock/package.json @@ -0,0 +1,6 @@ +{ + "name": "@rsdoctor/rspack-plugin", + "private": true, + "version": "1.0.0", + "main": "index.cjs" +} diff --git a/e2e/cases/rsdoctor/src/index.js b/e2e/cases/rsdoctor/src/index.js new file mode 100644 index 0000000000..8b1a393741 --- /dev/null +++ b/e2e/cases/rsdoctor/src/index.js @@ -0,0 +1 @@ +// empty diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 584f15e2c3..8819da5749 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -225,6 +225,8 @@ importers: specifier: ^15 version: 15.7.9 + e2e/cases/rsdoctor/mock: {} + e2e/cases/server/custom-server: dependencies: polka: