-
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathcode-responsive.test.ts
More file actions
86 lines (73 loc) · 2.51 KB
/
code-responsive.test.ts
File metadata and controls
86 lines (73 loc) · 2.51 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
import { afterEach, beforeEach, describe, expect, mock, test } from 'bun:test'
import { registerCodegen } from '../code-impl'
import { Codegen } from '../codegen/Codegen'
import { ResponsiveCodegen } from '../codegen/responsive/ResponsiveCodegen'
const runMock = mock(async () => {})
const getComponentsCodesMock = mock(() => [])
const getCodeMock = mock(() => 'base-code')
const generateResponsiveCodeMock = mock(() => {
throw new Error('boom')
})
const originalError = console.error
const consoleErrorMock = mock(() => {})
const resetFigma = () => {
;(globalThis as { figma?: unknown }).figma = undefined
}
const originalRun = Codegen.prototype.run
const originalGetComponentsCodes = Codegen.prototype.getComponentsCodes
const originalGetCode = Codegen.prototype.getCode
const originalGenerateResponsiveCode =
ResponsiveCodegen.prototype.generateResponsiveCode
describe('registerCodegen responsive error handling', () => {
beforeEach(() => {
Codegen.prototype.run = runMock
Codegen.prototype.getComponentsCodes = getComponentsCodesMock
Codegen.prototype.getCode = getCodeMock
ResponsiveCodegen.prototype.generateResponsiveCode =
generateResponsiveCodeMock
console.error = consoleErrorMock as typeof console.error
resetFigma()
})
afterEach(() => {
Codegen.prototype.run = originalRun
Codegen.prototype.getComponentsCodes = originalGetComponentsCodes
Codegen.prototype.getCode = originalGetCode
ResponsiveCodegen.prototype.generateResponsiveCode =
originalGenerateResponsiveCode
console.error = originalError
resetFigma()
mock.restore()
})
test('swallows responsive errors and still returns base code', async () => {
const handlerCalls: Parameters<
Parameters<typeof registerCodegen>[0]['codegen']['on']
>[1][] = []
const ctx = {
editorType: 'dev',
mode: 'codegen',
command: 'noop',
codegen: {
on: mock((_event, handler) => {
handlerCalls.push(handler)
}),
},
} as unknown as typeof figma
const node = {
type: 'FRAME',
name: 'Main',
parent: { type: 'SECTION', name: 'Parent', children: [] },
} as unknown as SceneNode
registerCodegen(ctx)
const generate = handlerCalls[0]
const result = await generate({ node, language: 'devup-ui' })
expect(consoleErrorMock).toHaveBeenCalled()
expect(runMock).toHaveBeenCalled()
expect(result).toEqual([
{
title: 'Main',
language: 'TYPESCRIPT',
code: 'base-code',
},
])
})
})