easy-richtextarea 4.0.3 → 4.0.4
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/README.md +0 -8
- package/example.js +1399 -982
- package/lib/constants.js +13 -4
- package/lib/contentCompare.js +34 -0
- package/lib/example/richTextarea.js +2 -2
- package/lib/example/view.js +18 -9
- package/lib/keyCodes.js +13 -0
- package/lib/operation/delete.js +101 -52
- package/lib/operation/empty.js +21 -6
- package/lib/operation/insert.js +78 -31
- package/lib/operations/fromJSON.js +4 -4
- package/lib/operations/generate.js +3 -3
- package/lib/operations/transform.js +3 -7
- package/lib/richTextarea.js +244 -156
- package/lib/selection.js +55 -13
- package/lib/types.js +13 -13
- package/lib/undoBuffer.js +105 -0
- package/package.json +3 -2
- package/src/constants.js +1 -0
- package/src/contentCompare.js +34 -0
- package/src/example/richTextarea.js +11 -9
- package/src/example/view.js +28 -10
- package/src/keyCodes.js +3 -0
- package/src/operation/delete.js +135 -58
- package/src/operation/empty.js +19 -14
- package/src/operation/insert.js +97 -39
- package/src/operations/fromJSON.js +4 -4
- package/src/operations/generate.js +8 -4
- package/src/operations/transform.js +3 -3
- package/src/richTextarea.js +316 -185
- package/src/selection.js +53 -9
- package/src/types.js +6 -6
- package/src/undoBuffer.js +73 -0
- package/test/content/transform.js +9 -11
- package/test/helpers.js +27 -21
- package/test/operation/delete.js +187 -147
- package/test/operation/empty.js +3 -5
- package/test/operation/insert.js +134 -118
- package/test/operations/generate.js +19 -22
- package/test/operations/transform.js +37 -98
- package/lib/stringCompare.js +0 -33
- package/src/stringCompare.js +0 -33
package/test/operation/delete.js
CHANGED
|
@@ -4,227 +4,267 @@ const { assert } = require("chai"),
|
|
|
4
4
|
{ arrayUtilities } = require("necessary"),
|
|
5
5
|
{ EmptyOperation, DeleteOperation, InsertOperation } = require("../../lib/main"); ///
|
|
6
6
|
|
|
7
|
-
const helpers = require("../helpers");
|
|
8
|
-
|
|
9
7
|
const { first } = arrayUtilities;
|
|
10
8
|
|
|
11
9
|
describe("DeleteOperation", () => {
|
|
12
10
|
describe("transform", () => {
|
|
13
|
-
it("
|
|
14
|
-
const deleteOperation1 = DeleteOperation.
|
|
15
|
-
|
|
16
|
-
transformedOperations = deleteOperation1.transformOperation(
|
|
11
|
+
it("leaves an empty operation intact", () => {
|
|
12
|
+
const deleteOperation1 = DeleteOperation.fromContentAndPosition("juiHYGrvc", 6),
|
|
13
|
+
emptyOperation2 = EmptyOperation.fromNothing(),
|
|
14
|
+
transformedOperations = deleteOperation1.transformOperation(emptyOperation2);
|
|
17
15
|
|
|
18
16
|
assert.lengthOf(transformedOperations, 1);
|
|
19
17
|
|
|
20
18
|
const firstTransformedOperation = first(transformedOperations),
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
19
|
+
transformedOperation = firstTransformedOperation, ///
|
|
20
|
+
transformedOperationJSON = transformedOperation.toJSON(),
|
|
21
|
+
expectedTransformedOperation = emptyOperation2.clone(),
|
|
22
|
+
expectedTransformedOperationJSON = expectedTransformedOperation.toJSON();
|
|
25
23
|
|
|
26
24
|
assert.deepEqual(transformedOperationJSON, expectedTransformedOperationJSON)
|
|
27
25
|
});
|
|
28
26
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
27
|
+
describe("completely to the left of an insert", () => {
|
|
28
|
+
it("move the insert left by its own length", () => {
|
|
29
|
+
const deleteOperation1 = DeleteOperation.fromContentAndPosition("dkjyBH", 1),
|
|
30
|
+
insertOperation2 = InsertOperation.fromContentAndPosition("grFTd", 10),
|
|
31
|
+
transformedOperations = deleteOperation1.transformOperation(insertOperation2);
|
|
33
32
|
|
|
34
|
-
|
|
33
|
+
assert.lengthOf(transformedOperations, 1);
|
|
35
34
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
35
|
+
const firstTransformedOperation = first(transformedOperations),
|
|
36
|
+
transformedOperation = firstTransformedOperation, ///
|
|
37
|
+
transformedOperationJSON = transformedOperation.toJSON(),
|
|
38
|
+
expectedTransformedOperation = InsertOperation.fromContentAndPosition("grFTd", 4),
|
|
39
|
+
expectedTransformedOperationJSON = expectedTransformedOperation.toJSON();
|
|
40
|
+
|
|
41
|
+
assert.deepEqual(transformedOperationJSON, expectedTransformedOperationJSON)
|
|
42
|
+
});
|
|
43
43
|
});
|
|
44
44
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
45
|
+
describe("partially overlaps an insert on the left", () => {
|
|
46
|
+
it("moves the insert left by its own position", () => {
|
|
47
|
+
const deleteOperation1 = DeleteOperation.fromContentAndPosition("bgRDTh", 2),
|
|
48
|
+
insertOperation2 = InsertOperation.fromContentAndPosition("zn76g", 4),
|
|
49
|
+
transformedOperations = deleteOperation1.transformOperation(insertOperation2);
|
|
49
50
|
|
|
50
|
-
|
|
51
|
+
assert.lengthOf(transformedOperations, 1);
|
|
51
52
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
53
|
+
const firstTransformedOperation = first(transformedOperations),
|
|
54
|
+
transformedOperation = firstTransformedOperation, ///
|
|
55
|
+
transformedOperationJSON = transformedOperation.toJSON(),
|
|
56
|
+
expectedTransformedOperation = InsertOperation.fromContentAndPosition("zn76g", 2),
|
|
57
|
+
expectedTransformedOperationJSON = expectedTransformedOperation.toJSON();
|
|
57
58
|
|
|
58
|
-
|
|
59
|
+
assert.deepEqual(transformedOperationJSON, expectedTransformedOperationJSON)
|
|
60
|
+
});
|
|
59
61
|
});
|
|
60
62
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
63
|
+
describe("completely overlaps an insert", () => {
|
|
64
|
+
it("moves the insert left by its own position", () => {
|
|
65
|
+
const deleteOperation1 = DeleteOperation.fromContentAndPosition("bgRjhgtFFGHRTDTh", 2),
|
|
66
|
+
insertOperation2 = InsertOperation.fromContentAndPosition("zn76g", 4),
|
|
67
|
+
transformedOperations = deleteOperation1.transformOperation(insertOperation2);
|
|
65
68
|
|
|
66
|
-
|
|
69
|
+
assert.lengthOf(transformedOperations, 1);
|
|
67
70
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
71
|
+
const firstTransformedOperation = first(transformedOperations),
|
|
72
|
+
transformedOperation = firstTransformedOperation, ///
|
|
73
|
+
transformedOperationJSON = transformedOperation.toJSON(),
|
|
74
|
+
expectedTransformedOperation = InsertOperation.fromContentAndPosition("zn76g", 2),
|
|
75
|
+
expectedTransformedOperationJSON = expectedTransformedOperation.toJSON();
|
|
73
76
|
|
|
74
|
-
|
|
77
|
+
assert.deepEqual(transformedOperationJSON, expectedTransformedOperationJSON)
|
|
78
|
+
});
|
|
75
79
|
});
|
|
76
80
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
+
describe("overlaps an insert on the right", () => {
|
|
82
|
+
it("leaves the insert intact", () => {
|
|
83
|
+
const deleteOperation1 = DeleteOperation.fromContentAndPosition("jhuGTRRde2kjU", 6),
|
|
84
|
+
insertOperation2 = InsertOperation.fromContentAndPosition("znds76g", 4),
|
|
85
|
+
transformedOperations = deleteOperation1.transformOperation(insertOperation2);
|
|
81
86
|
|
|
82
|
-
|
|
87
|
+
assert.lengthOf(transformedOperations, 1);
|
|
83
88
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
+
const firstTransformedOperation = first(transformedOperations),
|
|
90
|
+
transformedOperation = firstTransformedOperation, ///
|
|
91
|
+
transformedOperationJSON = transformedOperation.toJSON(),
|
|
92
|
+
expectedTransformedOperation = InsertOperation.fromContentAndPosition("znds76g", 4),
|
|
93
|
+
expectedTransformedOperationJSON = expectedTransformedOperation.toJSON();
|
|
89
94
|
|
|
90
|
-
|
|
95
|
+
assert.deepEqual(transformedOperationJSON, expectedTransformedOperationJSON)
|
|
96
|
+
});
|
|
91
97
|
});
|
|
92
98
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
99
|
+
describe("is overlapped by an insert", () => {
|
|
100
|
+
it("leaves the insert intact", () => {
|
|
101
|
+
const deleteOperation1 = DeleteOperation.fromContentAndPosition("juiyd", 6),
|
|
102
|
+
insertOperation2 = InsertOperation.fromContentAndPosition("zndLKo76g", 2),
|
|
103
|
+
transformedOperations = deleteOperation1.transformOperation(insertOperation2);
|
|
97
104
|
|
|
98
|
-
|
|
105
|
+
assert.lengthOf(transformedOperations, 1);
|
|
99
106
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
107
|
+
const firstTransformedOperation = first(transformedOperations),
|
|
108
|
+
transformedOperation = firstTransformedOperation, ///
|
|
109
|
+
transformedOperationJSON = transformedOperation.toJSON(),
|
|
110
|
+
expectedTransformedOperation = InsertOperation.fromContentAndPosition("zndLKo76g", 2),
|
|
111
|
+
expectedTransformedOperationJSON = expectedTransformedOperation.toJSON();
|
|
105
112
|
|
|
106
|
-
|
|
113
|
+
assert.deepEqual(transformedOperationJSON, expectedTransformedOperationJSON)
|
|
114
|
+
});
|
|
107
115
|
});
|
|
108
116
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
117
|
+
describe("completely to the left of another delete", () => {
|
|
118
|
+
it("moves the other delete to the left by its own length", () => {
|
|
119
|
+
const deleteOperation1 = DeleteOperation.fromContentAndPosition("juhtyb", 2),
|
|
120
|
+
deleteOperation2 = DeleteOperation.fromContentAndPosition("xhTRF43X", 10),
|
|
121
|
+
transformedOperations = deleteOperation1.transformOperation(deleteOperation2);
|
|
113
122
|
|
|
114
|
-
|
|
123
|
+
assert.lengthOf(transformedOperations, 1);
|
|
115
124
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
125
|
+
const firstTransformedOperation = first(transformedOperations),
|
|
126
|
+
transformedOperation = firstTransformedOperation, ///
|
|
127
|
+
transformedOperationJSON = transformedOperation.toJSON(),
|
|
128
|
+
expectedTransformedOperation = DeleteOperation.fromContentAndPosition("xhTRF43X", 4),
|
|
129
|
+
expectedTransformedOperationJSON = expectedTransformedOperation.toJSON();
|
|
121
130
|
|
|
122
|
-
|
|
131
|
+
assert.deepEqual(transformedOperationJSON, expectedTransformedOperationJSON)
|
|
132
|
+
});
|
|
123
133
|
});
|
|
124
134
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
135
|
+
describe("partially overlaps another delete on the left", () => {
|
|
136
|
+
it("moves the other delete to the left to its own position and truncates it on the left", () => {
|
|
137
|
+
const deleteOperation1 = DeleteOperation.fromContentAndPosition("jkimmijhdX", 2),
|
|
138
|
+
deleteOperation2 = DeleteOperation.fromContentAndPosition("mijhdXkAVB", 6),
|
|
139
|
+
transformedOperations = deleteOperation1.transformOperation(deleteOperation2);
|
|
129
140
|
|
|
130
|
-
|
|
141
|
+
assert.lengthOf(transformedOperations, 1);
|
|
131
142
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
143
|
+
const firstTransformedOperation = first(transformedOperations),
|
|
144
|
+
transformedOperation = firstTransformedOperation, ///
|
|
145
|
+
transformedOperationJSON = transformedOperation.toJSON(),
|
|
146
|
+
expectedTransformedOperation = DeleteOperation.fromContentAndPosition("kAVB", 2),
|
|
147
|
+
expectedTransformedOperationJSON = expectedTransformedOperation.toJSON();
|
|
137
148
|
|
|
138
|
-
|
|
149
|
+
assert.deepEqual(transformedOperationJSON, expectedTransformedOperationJSON)
|
|
150
|
+
});
|
|
139
151
|
});
|
|
140
152
|
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
153
|
+
describe("completely overlaps another delete on the left", () => {
|
|
154
|
+
it("transforms it to an empty operation", () => {
|
|
155
|
+
const deleteOperation1 = DeleteOperation.fromContentAndPosition("jkimmijhdX", 2),
|
|
156
|
+
deleteOperation2 = DeleteOperation.fromContentAndPosition("immi", 4),
|
|
157
|
+
transformedOperations = deleteOperation1.transformOperation(deleteOperation2);
|
|
145
158
|
|
|
146
|
-
|
|
159
|
+
assert.lengthOf(transformedOperations, 1);
|
|
147
160
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
161
|
+
const firstTransformedOperation = first(transformedOperations),
|
|
162
|
+
transformedOperation = firstTransformedOperation, ///
|
|
163
|
+
transformedOperationJSON = transformedOperation.toJSON(),
|
|
164
|
+
expectedTransformedOperation = EmptyOperation.fromNothing(),
|
|
165
|
+
expectedTransformedOperationJSON = expectedTransformedOperation.toJSON();
|
|
153
166
|
|
|
154
|
-
|
|
167
|
+
assert.deepEqual(transformedOperationJSON, expectedTransformedOperationJSON)
|
|
168
|
+
});
|
|
155
169
|
});
|
|
156
170
|
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
171
|
+
describe("is completely overlapped by another delete", () => {
|
|
172
|
+
it("splites the ohter delete", () => {
|
|
173
|
+
const deleteOperation1 = DeleteOperation.fromContentAndPosition("immi", 4),
|
|
174
|
+
deleteOperation2 = DeleteOperation.fromContentAndPosition("jkimmijhdX", 2),
|
|
175
|
+
transformedOperations = deleteOperation1.transformOperation(deleteOperation2);
|
|
161
176
|
|
|
162
|
-
|
|
177
|
+
assert.lengthOf(transformedOperations, 1);
|
|
163
178
|
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
179
|
+
const firstTransformedOperation = first(transformedOperations),
|
|
180
|
+
transformedOperation = firstTransformedOperation, ///
|
|
181
|
+
transformedOperationJSON = transformedOperation.toJSON(),
|
|
182
|
+
expectedTransformedOperation = DeleteOperation.fromContentAndPosition("jkjhdX", 2),
|
|
183
|
+
expectedTransformedOperationJSON = expectedTransformedOperation.toJSON();
|
|
169
184
|
|
|
170
|
-
|
|
185
|
+
assert.deepEqual(transformedOperationJSON, expectedTransformedOperationJSON)
|
|
186
|
+
});
|
|
171
187
|
});
|
|
172
188
|
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
189
|
+
describe("overlaps another delete on the right", () => {
|
|
190
|
+
it("truncates the other delete on the right", () => {
|
|
191
|
+
const deleteOperation1 = DeleteOperation.fromContentAndPosition("GtfrdIKJU", 6),
|
|
192
|
+
deleteOperation2 = DeleteOperation.fromContentAndPosition("juHYGtfrd", 2),
|
|
193
|
+
transformedOperations = deleteOperation1.transformOperation(deleteOperation2);
|
|
177
194
|
|
|
178
|
-
|
|
195
|
+
assert.lengthOf(transformedOperations, 1);
|
|
179
196
|
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
197
|
+
const firstTransformedOperation = first(transformedOperations),
|
|
198
|
+
transformedOperation = firstTransformedOperation, ///
|
|
199
|
+
transformedOperationJSON = transformedOperation.toJSON(),
|
|
200
|
+
expectedTransformedOperation = DeleteOperation.fromContentAndPosition("juHY", 2),
|
|
201
|
+
expectedTransformedOperationJSON = expectedTransformedOperation.toJSON();
|
|
185
202
|
|
|
186
|
-
|
|
203
|
+
assert.deepEqual(transformedOperationJSON, expectedTransformedOperationJSON)
|
|
204
|
+
});
|
|
187
205
|
});
|
|
188
206
|
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
207
|
+
describe("completely to the right another delete", () => {
|
|
208
|
+
it("leaves the other delete intact", () => {
|
|
209
|
+
const deleteOperation1 = DeleteOperation.fromContentAndPosition("jikd", 12),
|
|
210
|
+
deleteOperation2 = DeleteOperation.fromContentAndPosition("ZDrert5", 2),
|
|
211
|
+
transformedOperations = deleteOperation1.transformOperation(deleteOperation2);
|
|
193
212
|
|
|
194
|
-
|
|
213
|
+
assert.lengthOf(transformedOperations, 1);
|
|
195
214
|
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
215
|
+
const firstTransformedOperation = first(transformedOperations),
|
|
216
|
+
transformedOperation = firstTransformedOperation, ///
|
|
217
|
+
transformedOperationJSON = transformedOperation.toJSON(),
|
|
218
|
+
expectedTransformedOperation = DeleteOperation.fromContentAndPosition("ZDrert5", 2),
|
|
219
|
+
expectedTransformedOperationJSON = expectedTransformedOperation.toJSON();
|
|
201
220
|
|
|
202
|
-
|
|
221
|
+
assert.deepEqual(transformedOperationJSON, expectedTransformedOperationJSON)
|
|
222
|
+
});
|
|
203
223
|
});
|
|
204
224
|
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
225
|
+
describe("has the same position as the other delete and is strictly overlapped by it", () => {
|
|
226
|
+
it("truncates the other delete on the left", () => {
|
|
227
|
+
const deleteOperation1 = DeleteOperation.fromContentAndPosition("juhy", 2),
|
|
228
|
+
deleteOperation2 = DeleteOperation.fromContentAndPosition("juhyKIOU", 2),
|
|
229
|
+
transformedOperations = deleteOperation1.transformOperation(deleteOperation2);
|
|
209
230
|
|
|
210
|
-
|
|
231
|
+
assert.lengthOf(transformedOperations, 1);
|
|
211
232
|
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
233
|
+
const firstTransformedOperation = first(transformedOperations),
|
|
234
|
+
transformedOperation = firstTransformedOperation, ///
|
|
235
|
+
transformedOperationJSON = transformedOperation.toJSON(),
|
|
236
|
+
expectedTransformedOperation = DeleteOperation.fromContentAndPosition("KIOU", 2),
|
|
237
|
+
expectedTransformedOperationJSON = expectedTransformedOperation.toJSON();
|
|
217
238
|
|
|
218
|
-
|
|
239
|
+
assert.deepEqual(transformedOperationJSON, expectedTransformedOperationJSON)
|
|
240
|
+
});
|
|
241
|
+
});
|
|
242
|
+
|
|
243
|
+
describe("has the same position as the other delete and overlaps it", () => {
|
|
244
|
+
it("transforms the other delete to an empty operation", () => {
|
|
245
|
+
const deleteOperation1 = DeleteOperation.fromContentAndPosition("juhYGTfv", 2),
|
|
246
|
+
deleteOperation2 = DeleteOperation.fromContentAndPosition("juhYG", 2),
|
|
247
|
+
transformedOperations = deleteOperation1.transformOperation(deleteOperation2);
|
|
248
|
+
|
|
249
|
+
assert.lengthOf(transformedOperations, 1);
|
|
250
|
+
|
|
251
|
+
const firstTransformedOperation = first(transformedOperations),
|
|
252
|
+
transformedOperation = firstTransformedOperation, ///
|
|
253
|
+
transformedOperationJSON = transformedOperation.toJSON(),
|
|
254
|
+
expectedTransformedOperation = EmptyOperation.fromNothing(),
|
|
255
|
+
expectedTransformedOperationJSON = expectedTransformedOperation.toJSON();
|
|
256
|
+
|
|
257
|
+
assert.deepEqual(transformedOperationJSON, expectedTransformedOperationJSON)
|
|
258
|
+
});
|
|
219
259
|
});
|
|
220
260
|
});
|
|
221
261
|
|
|
222
262
|
describe("transformContent", () => {
|
|
223
263
|
it("deletes the requisite characters from the content", () => {
|
|
224
|
-
const content =
|
|
225
|
-
deleteOperation = DeleteOperation.
|
|
264
|
+
const content = "3c9OQTyTmb",
|
|
265
|
+
deleteOperation = DeleteOperation.fromContentAndPosition("QTyTmb", 4),
|
|
226
266
|
transformedContent = deleteOperation.transformContent(content),
|
|
227
|
-
expectedContent =
|
|
267
|
+
expectedContent = "3c9O";
|
|
228
268
|
|
|
229
269
|
assert.equal(transformedContent, expectedContent);
|
|
230
270
|
});
|
|
@@ -234,7 +274,7 @@ describe("DeleteOperation", () => {
|
|
|
234
274
|
it("transforms from and to JSON, leaving the operation unchanged", () => {
|
|
235
275
|
const expectedJSON = {
|
|
236
276
|
"type": "delete",
|
|
237
|
-
"
|
|
277
|
+
"content": "bcd",
|
|
238
278
|
"position": 1
|
|
239
279
|
},
|
|
240
280
|
json = DeleteOperation.fromJSON(expectedJSON).toJSON();
|
package/test/operation/empty.js
CHANGED
|
@@ -4,15 +4,13 @@ const { assert } = require("chai"),
|
|
|
4
4
|
{ arrayUtilities } = require("necessary"),
|
|
5
5
|
{ EmptyOperation, DeleteOperation, InsertOperation } = require("../../lib/main"); ///
|
|
6
6
|
|
|
7
|
-
const helpers = require("../helpers");
|
|
8
|
-
|
|
9
7
|
const { first } = arrayUtilities;
|
|
10
8
|
|
|
11
9
|
describe("EmptyOperation", () => {
|
|
12
10
|
describe("transform", () => {
|
|
13
11
|
it("transforms an insert operation, leaving it the same", () => {
|
|
14
12
|
const emptyOperation1 = EmptyOperation.fromNothing(),
|
|
15
|
-
insertOperation2 = InsertOperation.
|
|
13
|
+
insertOperation2 = InsertOperation.fromContentAndPosition("jinHgt", 8),
|
|
16
14
|
transformedOperations = emptyOperation1.transformOperation(insertOperation2);
|
|
17
15
|
|
|
18
16
|
assert.lengthOf(transformedOperations, 1);
|
|
@@ -44,7 +42,7 @@ describe("EmptyOperation", () => {
|
|
|
44
42
|
|
|
45
43
|
it("transforms a delete operation, leaving it the same", () => {
|
|
46
44
|
const emptyOperation1 = EmptyOperation.fromNothing(),
|
|
47
|
-
deleteOperation2 = DeleteOperation.
|
|
45
|
+
deleteOperation2 = DeleteOperation.fromContentAndPosition("bKinld", 4),
|
|
48
46
|
transformedOperations = emptyOperation1.transformOperation(deleteOperation2);
|
|
49
47
|
|
|
50
48
|
assert.lengthOf(transformedOperations, 1);
|
|
@@ -61,7 +59,7 @@ describe("EmptyOperation", () => {
|
|
|
61
59
|
|
|
62
60
|
describe("transformContent", () => {
|
|
63
61
|
it("leaves the content unchanged", () => {
|
|
64
|
-
const content =
|
|
62
|
+
const content = "asXdvvyi",
|
|
65
63
|
emptyOperation = EmptyOperation.fromNothing(),
|
|
66
64
|
transformedContent = emptyOperation.transformContent(content),
|
|
67
65
|
expectedContent = content; ///
|