Skip to content

Commit 5d165b1

Browse files
committed
test: cover demo hot update matrix
1 parent c46a84a commit 5d165b1

4 files changed

Lines changed: 52 additions & 74 deletions

File tree

e2e/e2eMatrix.ts

Lines changed: 7 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
import process from 'node:process'
2+
import path from 'pathe'
3+
import { buildCases } from '../tools/weapp-tailwindcss-scripts/src/watch-hmr-regression/cases'
24
import { E2E_PROJECTS, NATIVE_PROJECTS } from './projectEntries'
35

46
export const HOT_UPDATE_TARGETS = [
@@ -10,30 +12,16 @@ export const HOT_UPDATE_TARGETS = [
1012

1113
export type HotUpdateTargetName = typeof HOT_UPDATE_TARGETS[number]['name']
1214

13-
const DEMO_HOT_UPDATE_CASES = [
14-
'gulp-tailwindcss-v3',
15-
'gulp-tailwindcss-v4',
16-
'mpx-tailwindcss-v3',
17-
'mpx-tailwindcss-v4',
18-
'taro-webpack-react-tailwindcss-v3',
19-
'taro-webpack-react-tailwindcss-v4',
20-
'taro-webpack-vue3-tailwindcss-v3',
21-
'taro-webpack-vue3-tailwindcss-v4',
22-
'taro-vite-react-tailwindcss-v3',
23-
'taro-vite-react-tailwindcss-v4',
24-
'taro-vite-vue3-tailwindcss-v3',
25-
'taro-vite-vue3-tailwindcss-v4',
26-
'uni-app-vite-tailwindcss-v3',
27-
'uni-app-vite-tailwindcss-v4',
28-
'weapp-vite-tailwindcss-v3',
29-
'weapp-vite-tailwindcss-v4',
30-
] as const
15+
const repoRoot = path.resolve(import.meta.dirname, '..')
16+
const DEMO_HOT_UPDATE_CASES = buildCases(repoRoot)
17+
.filter(item => item.group === 'demo')
18+
.map(item => item.name)
3119

3220
export const HOT_UPDATE_CASES_BY_TARGET: Record<HotUpdateTargetName, string[]> = {
3321
demo: [...DEMO_HOT_UPDATE_CASES],
3422
}
3523

36-
export const HOT_UPDATE_CI_CASES = [...DEMO_HOT_UPDATE_CASES] as const
24+
export const HOT_UPDATE_CI_CASES = [...DEMO_HOT_UPDATE_CASES]
3725

3826
export const HOT_UPDATE_COVERED_PROJECTS = new Set(DEMO_HOT_UPDATE_CASES)
3927

e2e/watch/hot-update/shared.ts

Lines changed: 4 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import process from 'node:process'
33
import { execa } from 'execa'
44
import path from 'pathe'
55
import { expect } from 'vitest'
6+
import { buildCases } from '../../../tools/weapp-tailwindcss-scripts/src/watch-hmr-regression/cases'
67
import { DEFAULT_PLUGIN_PROCESS_BUDGET_MS } from '../../../tools/weapp-tailwindcss-scripts/src/watch-hmr-regression/types'
78

89
export type WatchProjectGroup = 'demo'
@@ -228,24 +229,9 @@ interface HotUpdateReport {
228229
cases: HotUpdateCaseReport[]
229230
}
230231

231-
const criticalDemoProjects = [
232-
'demo/gulp-tailwindcss-v3',
233-
'demo/gulp-tailwindcss-v4',
234-
'demo/mpx-tailwindcss-v3',
235-
'demo/mpx-tailwindcss-v4',
236-
'demo/taro-webpack-react-tailwindcss-v3',
237-
'demo/taro-webpack-react-tailwindcss-v4',
238-
'demo/taro-webpack-vue3-tailwindcss-v3',
239-
'demo/taro-webpack-vue3-tailwindcss-v4',
240-
'demo/taro-vite-react-tailwindcss-v3',
241-
'demo/taro-vite-react-tailwindcss-v4',
242-
'demo/taro-vite-vue3-tailwindcss-v3',
243-
'demo/taro-vite-vue3-tailwindcss-v4',
244-
'demo/uni-app-vite-tailwindcss-v3',
245-
'demo/uni-app-vite-tailwindcss-v4',
246-
'demo/weapp-vite-tailwindcss-v3',
247-
'demo/weapp-vite-tailwindcss-v4',
248-
] as const
232+
const criticalDemoProjects = buildCases(path.resolve(__dirname, '../../..'))
233+
.filter(item => item.group === 'demo')
234+
.map(item => item.project)
249235

250236
const bothCases = new Set<ConcreteWatchCaseName>(['taro-webpack-react-tailwindcss-v3', 'uni-app-vite-tailwindcss-v3'])
251237
const noApplyValidationCases = new Set<ConcreteWatchCaseName>([

packages/weapp-tailwindcss/test/watch-hmr-coverage-matrix.unit.test.ts

Lines changed: 27 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
import { existsSync, readFileSync } from 'node:fs'
1+
import { existsSync, readdirSync, readFileSync } from 'node:fs'
22
import { join } from 'node:path'
33
import { describe, expect, it } from 'vitest'
4+
import { HOT_UPDATE_CASES_BY_TARGET, HOT_UPDATE_COVERED_PROJECTS } from '../../../e2e/e2eMatrix'
45
import { getFrameworkIdeCases, getFrameworkIdeExemptCases } from '../../../e2e/frameworkSupportMatrix'
56
import { shouldRequireIdeLivePageVisibility } from '../../../e2e/frameworkIdeClassHotUpdate'
67
import { frameworkIdeWatchCaseNames } from '../../../e2e/frameworkIdeHotUpdate'
@@ -19,27 +20,15 @@ const automatedWatchCases = [
1920
]
2021

2122
const watchCoveredProjects = new Set(automatedWatchCases.map(item => item.project))
23+
const watchCoveredCaseNames = new Set(automatedWatchCases.map(item => item.name))
2224
const automatedWatchCasesByName = new Map(automatedWatchCases.map(item => [item.name, item]))
2325
const repoRoot = join(import.meta.dirname, '../../..')
24-
25-
const matrixProjects = [
26-
'demo/gulp-tailwindcss-v3',
27-
'demo/gulp-tailwindcss-v4',
28-
'demo/mpx-tailwindcss-v3',
29-
'demo/mpx-tailwindcss-v4',
30-
'demo/taro-webpack-react-tailwindcss-v3',
31-
'demo/taro-webpack-react-tailwindcss-v4',
32-
'demo/taro-webpack-vue3-tailwindcss-v3',
33-
'demo/taro-webpack-vue3-tailwindcss-v4',
34-
'demo/taro-vite-react-tailwindcss-v3',
35-
'demo/taro-vite-react-tailwindcss-v4',
36-
'demo/taro-vite-vue3-tailwindcss-v3',
37-
'demo/taro-vite-vue3-tailwindcss-v4',
38-
'demo/uni-app-vite-tailwindcss-v3',
39-
'demo/uni-app-vite-tailwindcss-v4',
40-
'demo/weapp-vite-tailwindcss-v3',
41-
'demo/weapp-vite-tailwindcss-v4',
42-
]
26+
const demoPackageProjects = readdirSync(join(repoRoot, 'demo'), { withFileTypes: true })
27+
.filter(item => item.isDirectory())
28+
.map(item => item.name)
29+
.filter(name => existsSync(join(repoRoot, 'demo', name, 'package.json')))
30+
.map(name => `demo/${name}`)
31+
.sort()
4332

4433
function toSlashPath(filePath: string) {
4534
return filePath.replace(/\\/g, '/')
@@ -68,15 +57,30 @@ function expectHasRoundConfig(
6857
}
6958

7059
describe('watch-hmr coverage matrix', () => {
71-
it('covers every retained demo matrix project through watch regression cases', () => {
72-
for (const project of matrixProjects) {
60+
it('covers every demo package project through watch regression cases', () => {
61+
for (const project of demoPackageProjects) {
7362
expect(
7463
watchCoveredProjects.has(project),
7564
`${project} should be covered by watch regression cases`,
7665
).toBe(true)
7766
}
7867
})
7968

69+
it('wires every demo watch case into hot-update e2e entries', () => {
70+
expect([...HOT_UPDATE_CASES_BY_TARGET.demo].sort()).toEqual([...watchCoveredCaseNames].sort())
71+
72+
for (const watchCase of automatedWatchCases) {
73+
expect(
74+
HOT_UPDATE_COVERED_PROJECTS.has(watchCase.name),
75+
`${watchCase.name} should be included in hot-update e2e coverage`,
76+
).toBe(true)
77+
expect(
78+
existsSync(join(repoRoot, 'e2e/watch/hot-update/demo', `${watchCase.name}.test.ts`)),
79+
`${watchCase.name} should have a dedicated e2e watch hot-update test entry`,
80+
).toBe(true)
81+
}
82+
})
83+
8084
it('keeps every automated watch case covering developer-facing HMR surfaces', () => {
8185
expect(automatedWatchCases.length).toBeGreaterThan(0)
8286

@@ -295,6 +299,6 @@ describe('watch-hmr coverage matrix', () => {
295299
})
296300

297301
it('keeps the automated watch matrix explicit', () => {
298-
expect([...watchCoveredProjects].sort()).toEqual([...matrixProjects].sort())
302+
expect([...watchCoveredProjects].sort()).toEqual(demoPackageProjects)
299303
})
300304
})

tools/weapp-tailwindcss-scripts/src/watch-hmr-regression/cases/demo/extended.ts

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -142,16 +142,16 @@ export function buildDemoExtendedCases(baseCwd: string): WatchCase[] {
142142
requireStableGlobalStyleOnSameClassLiteral: false,
143143
maxPluginProcessMs: 5000,
144144
cwd: path.resolve(baseCwd, 'demo/uni-app-vite-tailwindcss-v3'),
145-
devScript: 'dev:e2e-watch',
146-
outputWxml: path.resolve(baseCwd, 'demo/uni-app-vite-tailwindcss-v3/dist/build/mp-weixin/pages/index/index.wxml'),
147-
outputJs: path.resolve(baseCwd, 'demo/uni-app-vite-tailwindcss-v3/dist/build/mp-weixin/pages/index/index.js'),
145+
devScript: 'dev:mp-weixin',
146+
outputWxml: path.resolve(baseCwd, 'demo/uni-app-vite-tailwindcss-v3/dist/dev/mp-weixin/pages/index/index.wxml'),
147+
outputJs: path.resolve(baseCwd, 'demo/uni-app-vite-tailwindcss-v3/dist/dev/mp-weixin/pages/index/index.js'),
148148
outputStyleCandidates: [
149-
path.resolve(baseCwd, 'demo/uni-app-vite-tailwindcss-v3/dist/build/mp-weixin/pages/index/index.wxss'),
150-
path.resolve(baseCwd, 'demo/uni-app-vite-tailwindcss-v3/dist/build/mp-weixin/app.wxss'),
149+
path.resolve(baseCwd, 'demo/uni-app-vite-tailwindcss-v3/dist/dev/mp-weixin/pages/index/index.wxss'),
150+
path.resolve(baseCwd, 'demo/uni-app-vite-tailwindcss-v3/dist/dev/mp-weixin/app.wxss'),
151151
],
152152
globalStyleCandidates: [
153-
path.resolve(baseCwd, 'demo/uni-app-vite-tailwindcss-v3/dist/build/mp-weixin/pages/index/index.wxss'),
154-
path.resolve(baseCwd, 'demo/uni-app-vite-tailwindcss-v3/dist/build/mp-weixin/app.wxss'),
153+
path.resolve(baseCwd, 'demo/uni-app-vite-tailwindcss-v3/dist/dev/mp-weixin/pages/index/index.wxss'),
154+
path.resolve(baseCwd, 'demo/uni-app-vite-tailwindcss-v3/dist/dev/mp-weixin/app.wxss'),
155155
],
156156
templateMutation: {
157157
sourceFile: path.resolve(baseCwd, 'demo/uni-app-vite-tailwindcss-v3/src/pages/index/index.vue'),
@@ -212,7 +212,7 @@ export function buildDemoExtendedCases(baseCwd: string): WatchCase[] {
212212
subPackageMutations: createSubPackageMutations(baseCwd, {
213213
project: 'uni-app-vite-tailwindcss-v3',
214214
sourceRoot: 'src',
215-
distRoot: 'dist/build/mp-weixin',
215+
distRoot: 'dist/dev/mp-weixin',
216216
version: 'v3',
217217
pageKind: 'vue',
218218
}),
@@ -224,14 +224,14 @@ export function buildDemoExtendedCases(baseCwd: string): WatchCase[] {
224224
project: 'demo/uni-app-vite-tailwindcss-v4',
225225
group: 'demo',
226226
cwd: path.resolve(baseCwd, 'demo/uni-app-vite-tailwindcss-v4'),
227-
devScript: 'dev:e2e-watch',
228-
outputWxml: path.resolve(baseCwd, 'demo/uni-app-vite-tailwindcss-v4/dist/build/mp-weixin/pages/index/index.wxml'),
229-
outputJs: path.resolve(baseCwd, 'demo/uni-app-vite-tailwindcss-v4/dist/build/mp-weixin/pages/index/index.js'),
227+
devScript: 'dev:mp-weixin',
228+
outputWxml: path.resolve(baseCwd, 'demo/uni-app-vite-tailwindcss-v4/dist/dev/mp-weixin/pages/index/index.wxml'),
229+
outputJs: path.resolve(baseCwd, 'demo/uni-app-vite-tailwindcss-v4/dist/dev/mp-weixin/pages/index/index.js'),
230230
outputStyleCandidates: [
231-
path.resolve(baseCwd, 'demo/uni-app-vite-tailwindcss-v4/dist/build/mp-weixin/app.wxss'),
231+
path.resolve(baseCwd, 'demo/uni-app-vite-tailwindcss-v4/dist/dev/mp-weixin/app.wxss'),
232232
],
233233
globalStyleCandidates: [
234-
path.resolve(baseCwd, 'demo/uni-app-vite-tailwindcss-v4/dist/build/mp-weixin/app.wxss'),
234+
path.resolve(baseCwd, 'demo/uni-app-vite-tailwindcss-v4/dist/dev/mp-weixin/app.wxss'),
235235
],
236236
userReportedHotUpdate: {
237237
label: 'index text-[88rpx] to text-[188rpx]',
@@ -289,7 +289,7 @@ export function buildDemoExtendedCases(baseCwd: string): WatchCase[] {
289289
subPackageMutations: createSubPackageMutations(baseCwd, {
290290
project: 'uni-app-vite-tailwindcss-v4',
291291
sourceRoot: 'src',
292-
distRoot: 'dist/build/mp-weixin',
292+
distRoot: 'dist/dev/mp-weixin',
293293
version: 'v4',
294294
pageKind: 'vue',
295295
}),

0 commit comments

Comments
 (0)