@geometra/renderer-canvas 1.59.0 → 1.60.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +2 -2
- package/dist/__tests__/border-radius.test.d.ts +0 -2
- package/dist/__tests__/border-radius.test.d.ts.map +0 -1
- package/dist/__tests__/border-radius.test.js +0 -115
- package/dist/__tests__/border-radius.test.js.map +0 -1
- package/dist/__tests__/browser-client.test.d.ts +0 -2
- package/dist/__tests__/browser-client.test.d.ts.map +0 -1
- package/dist/__tests__/browser-client.test.js +0 -147
- package/dist/__tests__/browser-client.test.js.map +0 -1
- package/dist/__tests__/gestures.test.d.ts +0 -2
- package/dist/__tests__/gestures.test.d.ts.map +0 -1
- package/dist/__tests__/gestures.test.js +0 -134
- package/dist/__tests__/gestures.test.js.map +0 -1
- package/dist/__tests__/input-forwarding.test.d.ts +0 -2
- package/dist/__tests__/input-forwarding.test.d.ts.map +0 -1
- package/dist/__tests__/input-forwarding.test.js +0 -170
- package/dist/__tests__/input-forwarding.test.js.map +0 -1
- package/dist/__tests__/renderer-timing.test.d.ts +0 -2
- package/dist/__tests__/renderer-timing.test.d.ts.map +0 -1
- package/dist/__tests__/renderer-timing.test.js +0 -473
- package/dist/__tests__/renderer-timing.test.js.map +0 -1
- package/dist/__tests__/visual-regression.test.d.ts +0 -2
- package/dist/__tests__/visual-regression.test.d.ts.map +0 -1
- package/dist/__tests__/visual-regression.test.js +0 -134
- package/dist/__tests__/visual-regression.test.js.map +0 -1
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { box, text, setFocus, clearFocus } from '@geometra/core';
|
|
3
|
-
import { CanvasRenderer } from '../renderer.js';
|
|
4
|
-
class FakeGradient {
|
|
5
|
-
stops = [];
|
|
6
|
-
addColorStop(offset, color) {
|
|
7
|
-
this.stops.push({ offset, color });
|
|
8
|
-
}
|
|
9
|
-
}
|
|
10
|
-
class FakeCtx {
|
|
11
|
-
ops = [];
|
|
12
|
-
fillStyle = '';
|
|
13
|
-
strokeStyle = '';
|
|
14
|
-
lineWidth = 1;
|
|
15
|
-
font = '12px sans-serif';
|
|
16
|
-
textBaseline = 'top';
|
|
17
|
-
globalAlpha = 1;
|
|
18
|
-
shadowOffsetX = 0;
|
|
19
|
-
shadowOffsetY = 0;
|
|
20
|
-
shadowBlur = 0;
|
|
21
|
-
shadowColor = '';
|
|
22
|
-
scale() { this.ops.push('scale'); }
|
|
23
|
-
setTransform() { this.ops.push('setTransform'); }
|
|
24
|
-
fillRect() { this.ops.push('fillRect'); }
|
|
25
|
-
beginPath() { this.ops.push('beginPath'); }
|
|
26
|
-
rect() { this.ops.push('rect'); }
|
|
27
|
-
clip() { this.ops.push('clip'); }
|
|
28
|
-
save() { this.ops.push('save'); }
|
|
29
|
-
restore() { this.ops.push('restore'); }
|
|
30
|
-
strokeRect() { this.ops.push('strokeRect'); }
|
|
31
|
-
fillText() { this.ops.push('fillText'); }
|
|
32
|
-
measureText(s) { return { width: s.length * 8 }; }
|
|
33
|
-
createLinearGradient() {
|
|
34
|
-
this.ops.push('createLinearGradient');
|
|
35
|
-
return new FakeGradient();
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
/** Extends fake context to record `ctx.font` whenever text is painted (font-sensitive regression). */
|
|
39
|
-
class FontAuditCtx extends FakeCtx {
|
|
40
|
-
fontsAtFillText = [];
|
|
41
|
-
fillText() {
|
|
42
|
-
this.fontsAtFillText.push(this.font);
|
|
43
|
-
this.ops.push('fillText');
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
function setWindowDpr(devicePixelRatio) {
|
|
47
|
-
Object.defineProperty(globalThis, 'window', {
|
|
48
|
-
value: { devicePixelRatio },
|
|
49
|
-
configurable: true,
|
|
50
|
-
writable: true,
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
describe('canvas visual operation snapshots', () => {
|
|
54
|
-
it('emits operations for selection, focus ring, gradient, and clipping', () => {
|
|
55
|
-
setWindowDpr(1);
|
|
56
|
-
const ctx = new FakeCtx();
|
|
57
|
-
const canvas = {
|
|
58
|
-
style: {},
|
|
59
|
-
getContext: () => ctx,
|
|
60
|
-
};
|
|
61
|
-
const focused = box({ onKeyDown: () => undefined, width: 120, height: 30 }, [
|
|
62
|
-
text({ text: 'Focused text', font: '14px Inter', lineHeight: 18 }),
|
|
63
|
-
]);
|
|
64
|
-
const tree = box({ gradient: { type: 'linear', stops: [{ offset: 0, color: '#000' }, { offset: 1, color: '#fff' }] } }, [
|
|
65
|
-
box({ overflow: 'hidden', width: 200, height: 80 }, [focused]),
|
|
66
|
-
]);
|
|
67
|
-
const layout = {
|
|
68
|
-
x: 0, y: 0, width: 260, height: 120,
|
|
69
|
-
children: [{
|
|
70
|
-
x: 20, y: 20, width: 200, height: 80,
|
|
71
|
-
children: [{ x: 0, y: 0, width: 120, height: 30, children: [{ x: 0, y: 0, width: 100, height: 18, children: [] }] }],
|
|
72
|
-
}],
|
|
73
|
-
};
|
|
74
|
-
const renderer = new CanvasRenderer({ canvas, showFocusRing: true });
|
|
75
|
-
renderer.selection = { anchorNode: 0, anchorOffset: 0, focusNode: 0, focusOffset: 6 };
|
|
76
|
-
setFocus(focused, layout.children[0].children[0]);
|
|
77
|
-
renderer.render(layout, tree);
|
|
78
|
-
clearFocus();
|
|
79
|
-
expect(ctx.ops).toContain('createLinearGradient');
|
|
80
|
-
expect(ctx.ops).toContain('clip');
|
|
81
|
-
expect(ctx.ops).toContain('fillText');
|
|
82
|
-
expect(ctx.ops).toContain('strokeRect');
|
|
83
|
-
expect(ctx.ops).toMatchInlineSnapshot(`
|
|
84
|
-
[
|
|
85
|
-
"scale",
|
|
86
|
-
"fillRect",
|
|
87
|
-
"createLinearGradient",
|
|
88
|
-
"fillRect",
|
|
89
|
-
"save",
|
|
90
|
-
"beginPath",
|
|
91
|
-
"rect",
|
|
92
|
-
"clip",
|
|
93
|
-
"fillRect",
|
|
94
|
-
"fillText",
|
|
95
|
-
"fillText",
|
|
96
|
-
"restore",
|
|
97
|
-
"save",
|
|
98
|
-
"beginPath",
|
|
99
|
-
"rect",
|
|
100
|
-
"clip",
|
|
101
|
-
"save",
|
|
102
|
-
"strokeRect",
|
|
103
|
-
"restore",
|
|
104
|
-
"restore",
|
|
105
|
-
"setTransform",
|
|
106
|
-
]
|
|
107
|
-
`);
|
|
108
|
-
});
|
|
109
|
-
it('applies distinct ctx.font values per text node (font stack regression)', () => {
|
|
110
|
-
setWindowDpr(1);
|
|
111
|
-
const ctx = new FontAuditCtx();
|
|
112
|
-
const canvas = {
|
|
113
|
-
style: {},
|
|
114
|
-
getContext: () => ctx,
|
|
115
|
-
};
|
|
116
|
-
const tree = box({ flexDirection: 'column', gap: 4, padding: 8, width: 220, height: 80 }, [
|
|
117
|
-
text({ text: 'Inter line', font: '14px Inter, sans-serif', lineHeight: 18 }),
|
|
118
|
-
text({ text: 'Mono line', font: 'bold 12px ui-monospace, monospace', lineHeight: 16 }),
|
|
119
|
-
]);
|
|
120
|
-
const layout = {
|
|
121
|
-
x: 0, y: 0, width: 220, height: 80,
|
|
122
|
-
children: [
|
|
123
|
-
{ x: 8, y: 8, width: 204, height: 18, children: [{ x: 0, y: 0, width: 80, height: 18, children: [] }] },
|
|
124
|
-
{ x: 8, y: 30, width: 204, height: 16, children: [{ x: 0, y: 0, width: 80, height: 16, children: [] }] },
|
|
125
|
-
],
|
|
126
|
-
};
|
|
127
|
-
const renderer = new CanvasRenderer({ canvas, showFocusRing: false });
|
|
128
|
-
renderer.render(layout, tree);
|
|
129
|
-
expect(ctx.fontsAtFillText.length).toBeGreaterThanOrEqual(2);
|
|
130
|
-
expect(ctx.fontsAtFillText).toContain('14px Inter, sans-serif');
|
|
131
|
-
expect(ctx.fontsAtFillText).toContain('bold 12px ui-monospace, monospace');
|
|
132
|
-
});
|
|
133
|
-
});
|
|
134
|
-
//# sourceMappingURL=visual-regression.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"visual-regression.test.js","sourceRoot":"","sources":["../../src/__tests__/visual-regression.test.ts"],"names":[],"mappings":"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"}
|