@twick/2d 0.14.0 → 1.14.3
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/LICENSE +21 -21
- package/editor/editor/tsconfig.build.tsbuildinfo +1 -1
- package/lib/components/Audio.d.ts.map +1 -1
- package/lib/components/Audio.js +33 -3
- package/lib/components/CodeBlock.d.ts +1 -1
- package/lib/components/Img.js +23 -23
- package/lib/components/Line.js +31 -31
- package/lib/components/Media.d.ts +6 -0
- package/lib/components/Media.d.ts.map +1 -1
- package/lib/components/Media.js +277 -61
- package/lib/components/Node.d.ts +1 -1
- package/lib/components/Path.d.ts +1 -1
- package/lib/components/SVG.d.ts +1 -1
- package/lib/components/Shape.d.ts +1 -1
- package/lib/components/Spline.js +25 -25
- package/lib/components/Video.d.ts +0 -1
- package/lib/components/Video.d.ts.map +1 -1
- package/lib/components/Video.js +70 -65
- package/lib/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +4 -5
- package/src/editor/NodeInspectorConfig.tsx +76 -76
- package/src/editor/PreviewOverlayConfig.tsx +67 -67
- package/src/editor/Provider.tsx +93 -93
- package/src/editor/SceneGraphTabConfig.tsx +81 -81
- package/src/editor/icons/CircleIcon.tsx +7 -7
- package/src/editor/icons/CodeBlockIcon.tsx +8 -8
- package/src/editor/icons/CurveIcon.tsx +7 -7
- package/src/editor/icons/GridIcon.tsx +7 -7
- package/src/editor/icons/IconMap.ts +35 -35
- package/src/editor/icons/ImgIcon.tsx +8 -8
- package/src/editor/icons/LayoutIcon.tsx +9 -9
- package/src/editor/icons/LineIcon.tsx +7 -7
- package/src/editor/icons/NodeIcon.tsx +7 -7
- package/src/editor/icons/RayIcon.tsx +7 -7
- package/src/editor/icons/RectIcon.tsx +7 -7
- package/src/editor/icons/ShapeIcon.tsx +7 -7
- package/src/editor/icons/TxtIcon.tsx +8 -8
- package/src/editor/icons/VideoIcon.tsx +7 -7
- package/src/editor/icons/View2DIcon.tsx +10 -10
- package/src/editor/index.ts +17 -17
- package/src/editor/tree/DetachedRoot.tsx +23 -23
- package/src/editor/tree/NodeElement.tsx +74 -74
- package/src/editor/tree/TreeElement.tsx +72 -72
- package/src/editor/tree/TreeRoot.tsx +10 -10
- package/src/editor/tree/ViewRoot.tsx +20 -20
- package/src/editor/tree/index.module.scss +38 -38
- package/src/editor/tree/index.ts +3 -3
- package/src/editor/tsconfig.build.json +5 -5
- package/src/editor/tsconfig.json +12 -12
- package/src/editor/tsdoc.json +4 -4
- package/src/editor/vite-env.d.ts +1 -1
- package/src/lib/code/CodeCursor.ts +445 -445
- package/src/lib/code/CodeDiffer.ts +78 -78
- package/src/lib/code/CodeFragment.ts +97 -97
- package/src/lib/code/CodeHighlighter.ts +75 -75
- package/src/lib/code/CodeMetrics.ts +47 -47
- package/src/lib/code/CodeRange.test.ts +74 -74
- package/src/lib/code/CodeRange.ts +216 -216
- package/src/lib/code/CodeScope.ts +101 -101
- package/src/lib/code/CodeSelection.ts +24 -24
- package/src/lib/code/CodeSignal.ts +327 -327
- package/src/lib/code/CodeTokenizer.ts +54 -54
- package/src/lib/code/DefaultHighlightStyle.ts +98 -98
- package/src/lib/code/LezerHighlighter.ts +113 -113
- package/src/lib/code/diff.test.ts +311 -311
- package/src/lib/code/diff.ts +319 -319
- package/src/lib/code/extractRange.ts +126 -126
- package/src/lib/code/index.ts +13 -13
- package/src/lib/components/Audio.ts +168 -131
- package/src/lib/components/Bezier.ts +105 -105
- package/src/lib/components/Circle.ts +266 -266
- package/src/lib/components/Code.ts +526 -526
- package/src/lib/components/CodeBlock.ts +576 -576
- package/src/lib/components/CubicBezier.ts +112 -112
- package/src/lib/components/Curve.ts +455 -455
- package/src/lib/components/Grid.ts +135 -135
- package/src/lib/components/Icon.ts +96 -96
- package/src/lib/components/Img.ts +319 -319
- package/src/lib/components/Knot.ts +157 -157
- package/src/lib/components/Latex.ts +122 -122
- package/src/lib/components/Layout.ts +1092 -1092
- package/src/lib/components/Line.ts +429 -429
- package/src/lib/components/Media.ts +576 -346
- package/src/lib/components/Node.ts +1940 -1940
- package/src/lib/components/Path.ts +137 -137
- package/src/lib/components/Polygon.ts +171 -171
- package/src/lib/components/QuadBezier.ts +100 -100
- package/src/lib/components/Ray.ts +125 -125
- package/src/lib/components/Rect.ts +187 -187
- package/src/lib/components/Rive.ts +156 -156
- package/src/lib/components/SVG.ts +797 -797
- package/src/lib/components/Shape.ts +143 -143
- package/src/lib/components/Spline.ts +344 -344
- package/src/lib/components/Txt.test.tsx +81 -81
- package/src/lib/components/Txt.ts +203 -203
- package/src/lib/components/TxtLeaf.ts +205 -205
- package/src/lib/components/Video.ts +461 -462
- package/src/lib/components/View2D.ts +98 -98
- package/src/lib/components/__tests__/children.test.tsx +142 -142
- package/src/lib/components/__tests__/clone.test.tsx +126 -126
- package/src/lib/components/__tests__/generatorTest.ts +28 -28
- package/src/lib/components/__tests__/mockScene2D.ts +45 -45
- package/src/lib/components/__tests__/query.test.tsx +122 -122
- package/src/lib/components/__tests__/state.test.tsx +60 -60
- package/src/lib/components/index.ts +28 -28
- package/src/lib/components/types.ts +35 -35
- package/src/lib/curves/ArcSegment.ts +159 -159
- package/src/lib/curves/CircleSegment.ts +77 -77
- package/src/lib/curves/CubicBezierSegment.ts +78 -78
- package/src/lib/curves/CurveDrawingInfo.ts +11 -11
- package/src/lib/curves/CurvePoint.ts +15 -15
- package/src/lib/curves/CurveProfile.ts +7 -7
- package/src/lib/curves/KnotInfo.ts +10 -10
- package/src/lib/curves/LineSegment.ts +62 -62
- package/src/lib/curves/Polynomial.ts +355 -355
- package/src/lib/curves/Polynomial2D.ts +62 -62
- package/src/lib/curves/PolynomialSegment.ts +124 -124
- package/src/lib/curves/QuadBezierSegment.ts +64 -64
- package/src/lib/curves/Segment.ts +17 -17
- package/src/lib/curves/UniformPolynomialCurveSampler.ts +94 -94
- package/src/lib/curves/createCurveProfileLerp.ts +471 -471
- package/src/lib/curves/getBezierSplineProfile.ts +223 -223
- package/src/lib/curves/getCircleProfile.ts +86 -86
- package/src/lib/curves/getPathProfile.ts +178 -178
- package/src/lib/curves/getPointAtDistance.ts +21 -21
- package/src/lib/curves/getPolylineProfile.test.ts +21 -21
- package/src/lib/curves/getPolylineProfile.ts +89 -89
- package/src/lib/curves/getRectProfile.ts +139 -139
- package/src/lib/curves/index.ts +16 -16
- package/src/lib/decorators/canvasStyleSignal.ts +16 -16
- package/src/lib/decorators/colorSignal.ts +9 -9
- package/src/lib/decorators/compound.ts +72 -72
- package/src/lib/decorators/computed.ts +18 -18
- package/src/lib/decorators/defaultStyle.ts +18 -18
- package/src/lib/decorators/filtersSignal.ts +136 -136
- package/src/lib/decorators/index.ts +10 -10
- package/src/lib/decorators/initializers.ts +32 -32
- package/src/lib/decorators/nodeName.ts +13 -13
- package/src/lib/decorators/signal.test.ts +90 -90
- package/src/lib/decorators/signal.ts +345 -345
- package/src/lib/decorators/spacingSignal.ts +15 -15
- package/src/lib/decorators/vector2Signal.ts +30 -30
- package/src/lib/globals.d.ts +2 -2
- package/src/lib/index.ts +8 -8
- package/src/lib/jsx-dev-runtime.ts +2 -2
- package/src/lib/jsx-runtime.ts +46 -46
- package/src/lib/parse-svg-path.d.ts +14 -14
- package/src/lib/partials/Filter.ts +180 -180
- package/src/lib/partials/Gradient.ts +102 -102
- package/src/lib/partials/Pattern.ts +34 -34
- package/src/lib/partials/ShaderConfig.ts +117 -117
- package/src/lib/partials/index.ts +4 -4
- package/src/lib/partials/types.ts +58 -58
- package/src/lib/scenes/Scene2D.ts +242 -242
- package/src/lib/scenes/index.ts +3 -3
- package/src/lib/scenes/makeScene2D.ts +16 -16
- package/src/lib/scenes/useScene2D.ts +6 -6
- package/src/lib/tsconfig.build.json +5 -5
- package/src/lib/tsconfig.json +10 -10
- package/src/lib/tsdoc.json +4 -4
- package/src/lib/utils/CanvasUtils.ts +306 -306
- package/src/lib/utils/diff.test.ts +453 -453
- package/src/lib/utils/diff.ts +148 -148
- package/src/lib/utils/index.ts +2 -2
- package/src/lib/utils/is.ts +11 -11
- package/src/lib/utils/makeSignalExtensions.ts +30 -30
- package/src/lib/utils/video/declarations.d.ts +1 -1
- package/src/lib/utils/video/ffmpeg-client.ts +50 -50
- package/src/lib/utils/video/mp4-parser-manager.ts +72 -72
- package/src/lib/utils/video/parser/index.ts +1 -1
- package/src/lib/utils/video/parser/parser.ts +257 -257
- package/src/lib/utils/video/parser/sampler.ts +72 -72
- package/src/lib/utils/video/parser/segment.ts +302 -302
- package/src/lib/utils/video/parser/sink.ts +29 -29
- package/src/lib/utils/video/parser/utils.ts +31 -31
- package/src/tsconfig.base.json +19 -19
- package/src/tsconfig.build.json +8 -8
- package/src/tsconfig.json +5 -5
- package/tsconfig.project.json +7 -7
- package/lib/components/utils/waitUntil.d.ts +0 -7
- package/lib/components/utils/waitUntil.d.ts.map +0 -1
- package/lib/components/utils/waitUntil.js +0 -15
- package/lib/utils/waitUntil.d.ts +0 -7
- package/lib/utils/waitUntil.d.ts.map +0 -1
- package/lib/utils/waitUntil.js +0 -15
- package/src/lib/utils/waitUntil.ts +0 -18
|
@@ -1,311 +1,311 @@
|
|
|
1
|
-
import {expect, test} from 'vitest';
|
|
2
|
-
import {patienceDiff} from './diff';
|
|
3
|
-
|
|
4
|
-
test('should find simple strings', () => {
|
|
5
|
-
const result = patienceDiff(
|
|
6
|
-
['abc', 'def', 'ghi'],
|
|
7
|
-
['abc', 'def', 'ghi', 'jkl'],
|
|
8
|
-
);
|
|
9
|
-
|
|
10
|
-
// printDiff(result);
|
|
11
|
-
/*
|
|
12
|
-
abc
|
|
13
|
-
def
|
|
14
|
-
ghi
|
|
15
|
-
+ jkl
|
|
16
|
-
*/
|
|
17
|
-
|
|
18
|
-
expect(result).toMatchObject({
|
|
19
|
-
lines: [
|
|
20
|
-
// We don't care too much about the first three line results
|
|
21
|
-
{},
|
|
22
|
-
{},
|
|
23
|
-
{},
|
|
24
|
-
{
|
|
25
|
-
line: 'jkl',
|
|
26
|
-
// We care that we know that this line was not there.
|
|
27
|
-
aIndex: -1,
|
|
28
|
-
bIndex: 3,
|
|
29
|
-
},
|
|
30
|
-
],
|
|
31
|
-
});
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
test('should diff code effectively', () => {
|
|
35
|
-
const result = patienceDiff(
|
|
36
|
-
`function test() {
|
|
37
|
-
console.log('hello world');
|
|
38
|
-
}`.split('\n'),
|
|
39
|
-
`function test() {
|
|
40
|
-
console.log('hello world');
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
function other() {
|
|
44
|
-
return 5;
|
|
45
|
-
}`.split('\n'),
|
|
46
|
-
);
|
|
47
|
-
|
|
48
|
-
// printDiff(result);
|
|
49
|
-
/*
|
|
50
|
-
function test() {
|
|
51
|
-
console.log('hello world');
|
|
52
|
-
}
|
|
53
|
-
+
|
|
54
|
-
+ function other() {
|
|
55
|
-
+ return 5;
|
|
56
|
-
+ }
|
|
57
|
-
*/
|
|
58
|
-
|
|
59
|
-
expect(result).toMatchObject({
|
|
60
|
-
lines: [
|
|
61
|
-
{
|
|
62
|
-
line: 'function test() {',
|
|
63
|
-
},
|
|
64
|
-
{
|
|
65
|
-
line: " console.log('hello world');",
|
|
66
|
-
},
|
|
67
|
-
{
|
|
68
|
-
line: '}',
|
|
69
|
-
},
|
|
70
|
-
{
|
|
71
|
-
line: '',
|
|
72
|
-
},
|
|
73
|
-
{
|
|
74
|
-
line: 'function other() {',
|
|
75
|
-
// Make sure this line was added
|
|
76
|
-
aIndex: -1,
|
|
77
|
-
},
|
|
78
|
-
{
|
|
79
|
-
line: ' return 5;',
|
|
80
|
-
aIndex: -1,
|
|
81
|
-
},
|
|
82
|
-
{
|
|
83
|
-
line: '}',
|
|
84
|
-
aIndex: -1,
|
|
85
|
-
},
|
|
86
|
-
],
|
|
87
|
-
});
|
|
88
|
-
});
|
|
89
|
-
|
|
90
|
-
test('should diff code movement effectively', () => {
|
|
91
|
-
const result = patienceDiff(
|
|
92
|
-
`function test() {
|
|
93
|
-
console.log('hello world');
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
function other() {
|
|
97
|
-
return 5;
|
|
98
|
-
}`.split('\n'),
|
|
99
|
-
`function other() {
|
|
100
|
-
return 5;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
function test() {
|
|
104
|
-
console.log('hello world');
|
|
105
|
-
}`.split('\n'),
|
|
106
|
-
);
|
|
107
|
-
|
|
108
|
-
// printDiff(result);
|
|
109
|
-
/*
|
|
110
|
-
- function test() {
|
|
111
|
-
- console.log('hello world');
|
|
112
|
-
- }
|
|
113
|
-
-
|
|
114
|
-
function other() {
|
|
115
|
-
return 5;
|
|
116
|
-
}
|
|
117
|
-
+
|
|
118
|
-
+ function test() {
|
|
119
|
-
+ console.log('hello world');
|
|
120
|
-
+ }
|
|
121
|
-
*/
|
|
122
|
-
|
|
123
|
-
expect(result).toMatchObject({
|
|
124
|
-
lines: [
|
|
125
|
-
{
|
|
126
|
-
line: 'function test() {',
|
|
127
|
-
// Make sure this line was removed
|
|
128
|
-
bIndex: -1,
|
|
129
|
-
},
|
|
130
|
-
{
|
|
131
|
-
line: " console.log('hello world');",
|
|
132
|
-
bIndex: -1,
|
|
133
|
-
},
|
|
134
|
-
{
|
|
135
|
-
line: '}',
|
|
136
|
-
bIndex: -1,
|
|
137
|
-
},
|
|
138
|
-
{
|
|
139
|
-
line: '',
|
|
140
|
-
bIndex: -1,
|
|
141
|
-
},
|
|
142
|
-
{
|
|
143
|
-
line: 'function other() {',
|
|
144
|
-
},
|
|
145
|
-
{
|
|
146
|
-
line: ' return 5;',
|
|
147
|
-
},
|
|
148
|
-
{
|
|
149
|
-
line: '}',
|
|
150
|
-
},
|
|
151
|
-
{
|
|
152
|
-
line: '',
|
|
153
|
-
aIndex: -1,
|
|
154
|
-
},
|
|
155
|
-
{
|
|
156
|
-
line: 'function test() {',
|
|
157
|
-
// Make sure this line was added
|
|
158
|
-
aIndex: -1,
|
|
159
|
-
},
|
|
160
|
-
{
|
|
161
|
-
line: " console.log('hello world');",
|
|
162
|
-
aIndex: -1,
|
|
163
|
-
},
|
|
164
|
-
{
|
|
165
|
-
line: '}',
|
|
166
|
-
aIndex: -1,
|
|
167
|
-
},
|
|
168
|
-
],
|
|
169
|
-
});
|
|
170
|
-
});
|
|
171
|
-
|
|
172
|
-
test('should diff complex code movement effectively', () => {
|
|
173
|
-
const result = patienceDiff(
|
|
174
|
-
`void Chunk_copy(Chunk *src, size_t src_start, Chunk *dst, size_t dst_start, size_t n)
|
|
175
|
-
{
|
|
176
|
-
if (!Chunk_bounds_check(src, src_start, n)) return;
|
|
177
|
-
if (!Chunk_bounds_check(dst, dst_start, n)) return;
|
|
178
|
-
|
|
179
|
-
memcpy(dst->data + dst_start, src->data + src_start, n);
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
int Chunk_bounds_check(Chunk *chunk, size_t start, size_t n)
|
|
183
|
-
{
|
|
184
|
-
if (chunk == NULL) return 0;
|
|
185
|
-
|
|
186
|
-
return start <= chunk->length && n <= chunk->length - start;
|
|
187
|
-
}`.split('\n'),
|
|
188
|
-
`int Chunk_bounds_check(Chunk *chunk, size_t start, size_t n)
|
|
189
|
-
{
|
|
190
|
-
if (chunk == NULL) return 0;
|
|
191
|
-
|
|
192
|
-
return start <= chunk->length && n <= chunk->length - start;
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
void Chunk_copy(Chunk *src, size_t src_start, Chunk *dst, size_t dst_start, size_t n)
|
|
196
|
-
{
|
|
197
|
-
if (!Chunk_bounds_check(src, src_start, n)) return;
|
|
198
|
-
if (!Chunk_bounds_check(dst, dst_start, n)) return;
|
|
199
|
-
|
|
200
|
-
memcpy(dst->data + dst_start, src->data + src_start, n);
|
|
201
|
-
}`.split('\n'),
|
|
202
|
-
);
|
|
203
|
-
|
|
204
|
-
// printDiff(result);
|
|
205
|
-
/*
|
|
206
|
-
+ int Chunk_bounds_check(Chunk *chunk, size_t start, size_t n)
|
|
207
|
-
+ {
|
|
208
|
-
+ if (chunk == NULL) return 0;
|
|
209
|
-
+
|
|
210
|
-
+ return start <= chunk->length && n <= chunk->length - start;
|
|
211
|
-
+ }
|
|
212
|
-
+
|
|
213
|
-
void Chunk_copy(Chunk *src, size_t src_start, Chunk *dst, size_t dst_start, size_t n)
|
|
214
|
-
{
|
|
215
|
-
if (!Chunk_bounds_check(src, src_start, n)) return;
|
|
216
|
-
if (!Chunk_bounds_check(dst, dst_start, n)) return;
|
|
217
|
-
|
|
218
|
-
memcpy(dst->data + dst_start, src->data + src_start, n);
|
|
219
|
-
}
|
|
220
|
-
-
|
|
221
|
-
- int Chunk_bounds_check(Chunk *chunk, size_t start, size_t n)
|
|
222
|
-
- {
|
|
223
|
-
- if (chunk == NULL) return 0;
|
|
224
|
-
-
|
|
225
|
-
- return start <= chunk->length && n <= chunk->length - start;
|
|
226
|
-
- }
|
|
227
|
-
*/
|
|
228
|
-
|
|
229
|
-
expect(result).toMatchObject({
|
|
230
|
-
lines: [
|
|
231
|
-
{
|
|
232
|
-
line: 'int Chunk_bounds_check(Chunk *chunk, size_t start, size_t n)',
|
|
233
|
-
// Make sure this is the line added
|
|
234
|
-
aIndex: -1,
|
|
235
|
-
},
|
|
236
|
-
{
|
|
237
|
-
line: '{',
|
|
238
|
-
aIndex: -1,
|
|
239
|
-
},
|
|
240
|
-
{
|
|
241
|
-
line: ' if (chunk == NULL) return 0;',
|
|
242
|
-
aIndex: -1,
|
|
243
|
-
},
|
|
244
|
-
{
|
|
245
|
-
line: '',
|
|
246
|
-
aIndex: -1,
|
|
247
|
-
},
|
|
248
|
-
{
|
|
249
|
-
line: ' return start <= chunk->length && n <= chunk->length - start;',
|
|
250
|
-
aIndex: -1,
|
|
251
|
-
},
|
|
252
|
-
{
|
|
253
|
-
line: '}',
|
|
254
|
-
aIndex: -1,
|
|
255
|
-
},
|
|
256
|
-
{
|
|
257
|
-
line: '',
|
|
258
|
-
},
|
|
259
|
-
{
|
|
260
|
-
line: 'void Chunk_copy(Chunk *src, size_t src_start, Chunk *dst, size_t dst_start, size_t n)',
|
|
261
|
-
},
|
|
262
|
-
{
|
|
263
|
-
line: '{',
|
|
264
|
-
},
|
|
265
|
-
{
|
|
266
|
-
line: ' if (!Chunk_bounds_check(src, src_start, n)) return;',
|
|
267
|
-
},
|
|
268
|
-
{
|
|
269
|
-
line: ' if (!Chunk_bounds_check(dst, dst_start, n)) return;',
|
|
270
|
-
},
|
|
271
|
-
{
|
|
272
|
-
line: '',
|
|
273
|
-
},
|
|
274
|
-
{
|
|
275
|
-
line: ' memcpy(dst->data + dst_start, src->data + src_start, n);',
|
|
276
|
-
},
|
|
277
|
-
{
|
|
278
|
-
line: '}',
|
|
279
|
-
},
|
|
280
|
-
{
|
|
281
|
-
line: '',
|
|
282
|
-
bIndex: -1,
|
|
283
|
-
},
|
|
284
|
-
{
|
|
285
|
-
line: 'int Chunk_bounds_check(Chunk *chunk, size_t start, size_t n)',
|
|
286
|
-
// Make sure this is the line removed
|
|
287
|
-
bIndex: -1,
|
|
288
|
-
},
|
|
289
|
-
{
|
|
290
|
-
line: '{',
|
|
291
|
-
bIndex: -1,
|
|
292
|
-
},
|
|
293
|
-
{
|
|
294
|
-
line: ' if (chunk == NULL) return 0;',
|
|
295
|
-
bIndex: -1,
|
|
296
|
-
},
|
|
297
|
-
{
|
|
298
|
-
line: '',
|
|
299
|
-
bIndex: -1,
|
|
300
|
-
},
|
|
301
|
-
{
|
|
302
|
-
line: ' return start <= chunk->length && n <= chunk->length - start;',
|
|
303
|
-
bIndex: -1,
|
|
304
|
-
},
|
|
305
|
-
{
|
|
306
|
-
line: '}',
|
|
307
|
-
bIndex: -1,
|
|
308
|
-
},
|
|
309
|
-
],
|
|
310
|
-
});
|
|
311
|
-
});
|
|
1
|
+
import {expect, test} from 'vitest';
|
|
2
|
+
import {patienceDiff} from './diff';
|
|
3
|
+
|
|
4
|
+
test('should find simple strings', () => {
|
|
5
|
+
const result = patienceDiff(
|
|
6
|
+
['abc', 'def', 'ghi'],
|
|
7
|
+
['abc', 'def', 'ghi', 'jkl'],
|
|
8
|
+
);
|
|
9
|
+
|
|
10
|
+
// printDiff(result);
|
|
11
|
+
/*
|
|
12
|
+
abc
|
|
13
|
+
def
|
|
14
|
+
ghi
|
|
15
|
+
+ jkl
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
expect(result).toMatchObject({
|
|
19
|
+
lines: [
|
|
20
|
+
// We don't care too much about the first three line results
|
|
21
|
+
{},
|
|
22
|
+
{},
|
|
23
|
+
{},
|
|
24
|
+
{
|
|
25
|
+
line: 'jkl',
|
|
26
|
+
// We care that we know that this line was not there.
|
|
27
|
+
aIndex: -1,
|
|
28
|
+
bIndex: 3,
|
|
29
|
+
},
|
|
30
|
+
],
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
test('should diff code effectively', () => {
|
|
35
|
+
const result = patienceDiff(
|
|
36
|
+
`function test() {
|
|
37
|
+
console.log('hello world');
|
|
38
|
+
}`.split('\n'),
|
|
39
|
+
`function test() {
|
|
40
|
+
console.log('hello world');
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function other() {
|
|
44
|
+
return 5;
|
|
45
|
+
}`.split('\n'),
|
|
46
|
+
);
|
|
47
|
+
|
|
48
|
+
// printDiff(result);
|
|
49
|
+
/*
|
|
50
|
+
function test() {
|
|
51
|
+
console.log('hello world');
|
|
52
|
+
}
|
|
53
|
+
+
|
|
54
|
+
+ function other() {
|
|
55
|
+
+ return 5;
|
|
56
|
+
+ }
|
|
57
|
+
*/
|
|
58
|
+
|
|
59
|
+
expect(result).toMatchObject({
|
|
60
|
+
lines: [
|
|
61
|
+
{
|
|
62
|
+
line: 'function test() {',
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
line: " console.log('hello world');",
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
line: '}',
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
line: '',
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
line: 'function other() {',
|
|
75
|
+
// Make sure this line was added
|
|
76
|
+
aIndex: -1,
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
line: ' return 5;',
|
|
80
|
+
aIndex: -1,
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
line: '}',
|
|
84
|
+
aIndex: -1,
|
|
85
|
+
},
|
|
86
|
+
],
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
test('should diff code movement effectively', () => {
|
|
91
|
+
const result = patienceDiff(
|
|
92
|
+
`function test() {
|
|
93
|
+
console.log('hello world');
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
function other() {
|
|
97
|
+
return 5;
|
|
98
|
+
}`.split('\n'),
|
|
99
|
+
`function other() {
|
|
100
|
+
return 5;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
function test() {
|
|
104
|
+
console.log('hello world');
|
|
105
|
+
}`.split('\n'),
|
|
106
|
+
);
|
|
107
|
+
|
|
108
|
+
// printDiff(result);
|
|
109
|
+
/*
|
|
110
|
+
- function test() {
|
|
111
|
+
- console.log('hello world');
|
|
112
|
+
- }
|
|
113
|
+
-
|
|
114
|
+
function other() {
|
|
115
|
+
return 5;
|
|
116
|
+
}
|
|
117
|
+
+
|
|
118
|
+
+ function test() {
|
|
119
|
+
+ console.log('hello world');
|
|
120
|
+
+ }
|
|
121
|
+
*/
|
|
122
|
+
|
|
123
|
+
expect(result).toMatchObject({
|
|
124
|
+
lines: [
|
|
125
|
+
{
|
|
126
|
+
line: 'function test() {',
|
|
127
|
+
// Make sure this line was removed
|
|
128
|
+
bIndex: -1,
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
line: " console.log('hello world');",
|
|
132
|
+
bIndex: -1,
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
line: '}',
|
|
136
|
+
bIndex: -1,
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
line: '',
|
|
140
|
+
bIndex: -1,
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
line: 'function other() {',
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
line: ' return 5;',
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
line: '}',
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
line: '',
|
|
153
|
+
aIndex: -1,
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
line: 'function test() {',
|
|
157
|
+
// Make sure this line was added
|
|
158
|
+
aIndex: -1,
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
line: " console.log('hello world');",
|
|
162
|
+
aIndex: -1,
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
line: '}',
|
|
166
|
+
aIndex: -1,
|
|
167
|
+
},
|
|
168
|
+
],
|
|
169
|
+
});
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
test('should diff complex code movement effectively', () => {
|
|
173
|
+
const result = patienceDiff(
|
|
174
|
+
`void Chunk_copy(Chunk *src, size_t src_start, Chunk *dst, size_t dst_start, size_t n)
|
|
175
|
+
{
|
|
176
|
+
if (!Chunk_bounds_check(src, src_start, n)) return;
|
|
177
|
+
if (!Chunk_bounds_check(dst, dst_start, n)) return;
|
|
178
|
+
|
|
179
|
+
memcpy(dst->data + dst_start, src->data + src_start, n);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
int Chunk_bounds_check(Chunk *chunk, size_t start, size_t n)
|
|
183
|
+
{
|
|
184
|
+
if (chunk == NULL) return 0;
|
|
185
|
+
|
|
186
|
+
return start <= chunk->length && n <= chunk->length - start;
|
|
187
|
+
}`.split('\n'),
|
|
188
|
+
`int Chunk_bounds_check(Chunk *chunk, size_t start, size_t n)
|
|
189
|
+
{
|
|
190
|
+
if (chunk == NULL) return 0;
|
|
191
|
+
|
|
192
|
+
return start <= chunk->length && n <= chunk->length - start;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
void Chunk_copy(Chunk *src, size_t src_start, Chunk *dst, size_t dst_start, size_t n)
|
|
196
|
+
{
|
|
197
|
+
if (!Chunk_bounds_check(src, src_start, n)) return;
|
|
198
|
+
if (!Chunk_bounds_check(dst, dst_start, n)) return;
|
|
199
|
+
|
|
200
|
+
memcpy(dst->data + dst_start, src->data + src_start, n);
|
|
201
|
+
}`.split('\n'),
|
|
202
|
+
);
|
|
203
|
+
|
|
204
|
+
// printDiff(result);
|
|
205
|
+
/*
|
|
206
|
+
+ int Chunk_bounds_check(Chunk *chunk, size_t start, size_t n)
|
|
207
|
+
+ {
|
|
208
|
+
+ if (chunk == NULL) return 0;
|
|
209
|
+
+
|
|
210
|
+
+ return start <= chunk->length && n <= chunk->length - start;
|
|
211
|
+
+ }
|
|
212
|
+
+
|
|
213
|
+
void Chunk_copy(Chunk *src, size_t src_start, Chunk *dst, size_t dst_start, size_t n)
|
|
214
|
+
{
|
|
215
|
+
if (!Chunk_bounds_check(src, src_start, n)) return;
|
|
216
|
+
if (!Chunk_bounds_check(dst, dst_start, n)) return;
|
|
217
|
+
|
|
218
|
+
memcpy(dst->data + dst_start, src->data + src_start, n);
|
|
219
|
+
}
|
|
220
|
+
-
|
|
221
|
+
- int Chunk_bounds_check(Chunk *chunk, size_t start, size_t n)
|
|
222
|
+
- {
|
|
223
|
+
- if (chunk == NULL) return 0;
|
|
224
|
+
-
|
|
225
|
+
- return start <= chunk->length && n <= chunk->length - start;
|
|
226
|
+
- }
|
|
227
|
+
*/
|
|
228
|
+
|
|
229
|
+
expect(result).toMatchObject({
|
|
230
|
+
lines: [
|
|
231
|
+
{
|
|
232
|
+
line: 'int Chunk_bounds_check(Chunk *chunk, size_t start, size_t n)',
|
|
233
|
+
// Make sure this is the line added
|
|
234
|
+
aIndex: -1,
|
|
235
|
+
},
|
|
236
|
+
{
|
|
237
|
+
line: '{',
|
|
238
|
+
aIndex: -1,
|
|
239
|
+
},
|
|
240
|
+
{
|
|
241
|
+
line: ' if (chunk == NULL) return 0;',
|
|
242
|
+
aIndex: -1,
|
|
243
|
+
},
|
|
244
|
+
{
|
|
245
|
+
line: '',
|
|
246
|
+
aIndex: -1,
|
|
247
|
+
},
|
|
248
|
+
{
|
|
249
|
+
line: ' return start <= chunk->length && n <= chunk->length - start;',
|
|
250
|
+
aIndex: -1,
|
|
251
|
+
},
|
|
252
|
+
{
|
|
253
|
+
line: '}',
|
|
254
|
+
aIndex: -1,
|
|
255
|
+
},
|
|
256
|
+
{
|
|
257
|
+
line: '',
|
|
258
|
+
},
|
|
259
|
+
{
|
|
260
|
+
line: 'void Chunk_copy(Chunk *src, size_t src_start, Chunk *dst, size_t dst_start, size_t n)',
|
|
261
|
+
},
|
|
262
|
+
{
|
|
263
|
+
line: '{',
|
|
264
|
+
},
|
|
265
|
+
{
|
|
266
|
+
line: ' if (!Chunk_bounds_check(src, src_start, n)) return;',
|
|
267
|
+
},
|
|
268
|
+
{
|
|
269
|
+
line: ' if (!Chunk_bounds_check(dst, dst_start, n)) return;',
|
|
270
|
+
},
|
|
271
|
+
{
|
|
272
|
+
line: '',
|
|
273
|
+
},
|
|
274
|
+
{
|
|
275
|
+
line: ' memcpy(dst->data + dst_start, src->data + src_start, n);',
|
|
276
|
+
},
|
|
277
|
+
{
|
|
278
|
+
line: '}',
|
|
279
|
+
},
|
|
280
|
+
{
|
|
281
|
+
line: '',
|
|
282
|
+
bIndex: -1,
|
|
283
|
+
},
|
|
284
|
+
{
|
|
285
|
+
line: 'int Chunk_bounds_check(Chunk *chunk, size_t start, size_t n)',
|
|
286
|
+
// Make sure this is the line removed
|
|
287
|
+
bIndex: -1,
|
|
288
|
+
},
|
|
289
|
+
{
|
|
290
|
+
line: '{',
|
|
291
|
+
bIndex: -1,
|
|
292
|
+
},
|
|
293
|
+
{
|
|
294
|
+
line: ' if (chunk == NULL) return 0;',
|
|
295
|
+
bIndex: -1,
|
|
296
|
+
},
|
|
297
|
+
{
|
|
298
|
+
line: '',
|
|
299
|
+
bIndex: -1,
|
|
300
|
+
},
|
|
301
|
+
{
|
|
302
|
+
line: ' return start <= chunk->length && n <= chunk->length - start;',
|
|
303
|
+
bIndex: -1,
|
|
304
|
+
},
|
|
305
|
+
{
|
|
306
|
+
line: '}',
|
|
307
|
+
bIndex: -1,
|
|
308
|
+
},
|
|
309
|
+
],
|
|
310
|
+
});
|
|
311
|
+
});
|