Skip to content

Commit a201c70

Browse files
committed
Add Tree.Edit test
1 parent c86f748 commit a201c70

File tree

1 file changed

+87
-10
lines changed

1 file changed

+87
-10
lines changed

test/integration/tree_concurrency_test.go

+87-10
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,73 @@ func RunTestTreeConcurrency(testDesc string, t *testing.T, initialState json.Tre
187187
}
188188
}
189189

190+
func TestTreeConcurrencyEditEdit(t *testing.T) {
191+
// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
192+
// <root> <p> a b c </p> <p> d e f </p> <p> g h i </p> </root>
193+
194+
initialState := json.TreeNode{
195+
Type: "root",
196+
Children: []json.TreeNode{
197+
{Type: "p", Children: []json.TreeNode{{Type: "text", Value: "abc"}}},
198+
{Type: "p", Children: []json.TreeNode{{Type: "text", Value: "def"}}},
199+
{Type: "p", Children: []json.TreeNode{{Type: "text", Value: "ghi"}}},
200+
},
201+
}
202+
initialXML := `<root><p>abc</p><p>def</p><p>ghi</p></root>`
203+
204+
textNode1 := &json.TreeNode{Type: "text", Value: "A"}
205+
textNode2 := &json.TreeNode{Type: "text", Value: "B"}
206+
elementNode1 := &json.TreeNode{Type: "b", Children: []json.TreeNode{}}
207+
elementNode2 := &json.TreeNode{Type: "i", Children: []json.TreeNode{}}
208+
209+
ranges := []twoRangesType{
210+
// intersect-element: <p>abc</p><p>def</p> - <p>def</p><p>ghi</p>
211+
makeTwoRanges(0, 5, 10, 5, 10, 15, `intersect-element`),
212+
// intersect-text: ab - bc
213+
makeTwoRanges(1, 2, 3, 2, 3, 4, `intersect-text`),
214+
// contain-element: <p>abc</p><p>def</p><p>ghi</p> - <p>def</p>
215+
makeTwoRanges(0, 5, 15, 5, 5, 10, `contain-element`),
216+
// contain-text: abc - b
217+
makeTwoRanges(1, 2, 4, 2, 2, 3, `contain-text`),
218+
// contain-mixed-type: <p>abc</p><p>def</p><p>ghi</p> - def
219+
makeTwoRanges(0, 5, 15, 6, 7, 9, `contain-mixed-type`),
220+
// side-by-side-element: <p>abc</p> - <p>def</p>
221+
makeTwoRanges(0, 5, 5, 5, 5, 10, `side-by-side-element`),
222+
// side-by-side-text: a - bc
223+
makeTwoRanges(1, 1, 2, 2, 3, 4, `side-by-side-text`),
224+
// equal-text: abc - abc
225+
makeTwoRanges(1, 2, 4, 1, 2, 4, `equal-text`),
226+
// equal-element: <p>abc</p><p>def</p> - <p>abc</p><p>def</p>
227+
makeTwoRanges(0, 5, 10, 0, 5, 10, `equal-element`),
228+
}
229+
230+
editOperations1 := []operationInterface{
231+
editOperationType{RangeFront, EditUpdate, textNode1, 0, `insertTextFront`},
232+
editOperationType{RangeMiddle, EditUpdate, textNode1, 0, `insertTextMiddle`},
233+
editOperationType{RangeBack, EditUpdate, textNode1, 0, `insertTextBack`},
234+
editOperationType{RangeAll, EditUpdate, textNode1, 0, `changeText`},
235+
editOperationType{RangeFront, EditUpdate, elementNode1, 0, `insertElementFront`},
236+
editOperationType{RangeMiddle, EditUpdate, elementNode1, 0, `insertElementMiddle`},
237+
editOperationType{RangeBack, EditUpdate, elementNode1, 0, `insertElementBack`},
238+
editOperationType{RangeAll, EditUpdate, elementNode1, 0, `changeElement`},
239+
editOperationType{RangeAll, EditUpdate, nil, 0, `erase`},
240+
}
241+
242+
editOperations2 := []operationInterface{
243+
editOperationType{RangeFront, EditUpdate, textNode2, 0, `insertTextFront`},
244+
editOperationType{RangeMiddle, EditUpdate, textNode2, 0, `insertTextMiddle`},
245+
editOperationType{RangeBack, EditUpdate, textNode2, 0, `insertTextBack`},
246+
editOperationType{RangeAll, EditUpdate, textNode2, 0, `changeText`},
247+
editOperationType{RangeFront, EditUpdate, elementNode2, 0, `insertElementFront`},
248+
editOperationType{RangeMiddle, EditUpdate, elementNode2, 0, `insertElementMiddle`},
249+
editOperationType{RangeBack, EditUpdate, elementNode2, 0, `insertElementBack`},
250+
editOperationType{RangeAll, EditUpdate, elementNode2, 0, `changeElement`},
251+
editOperationType{RangeAll, EditUpdate, nil, 0, `erase`},
252+
}
253+
254+
RunTestTreeConcurrency("concurrently-edit-edit-test", t, initialState, initialXML, ranges, editOperations1, editOperations2)
255+
}
256+
190257
func TestTreeConcurrencyStyleStyle(t *testing.T) {
191258
// 0 1 2 3 4 5 6 7 8 9
192259
// <root> <p> a </p> <p> b </p> <p> c </p> </root>
@@ -205,10 +272,14 @@ func TestTreeConcurrencyStyleStyle(t *testing.T) {
205272
initialXML := `<root><p>a</p><p>b</p><p>c</p></root>`
206273

207274
ranges := []twoRangesType{
208-
makeTwoRanges(3, -1, 6, 3, -1, 6, `equal`), // (3, 6) - (3, 6)
209-
makeTwoRanges(0, -1, 9, 3, -1, 6, `contain`), // (0, 9) - (3, 6)
210-
makeTwoRanges(0, -1, 6, 3, -1, 9, `intersect`), // (0, 6) - (3, 9)
211-
makeTwoRanges(0, -1, 3, 3, -1, 6, `side-by-side`), // (0, 3) - (3, 6)
275+
// equal: <p>b</p> - <p>b</p>
276+
makeTwoRanges(3, -1, 6, 3, -1, 6, `equal`),
277+
// contain: <p>a</p><p>b</p><p>c</p> - <p>b</p>
278+
makeTwoRanges(0, -1, 9, 3, -1, 6, `contain`),
279+
// intersect: <p>a</p><p>b</p> - <p>b</p><p>c</p>
280+
makeTwoRanges(0, -1, 6, 3, -1, 9, `intersect`),
281+
// side-by-side: <p>a</p> - <p>b</p>
282+
makeTwoRanges(0, -1, 3, 3, -1, 6, `side-by-side`),
212283
}
213284

214285
styleOperations := []operationInterface{
@@ -243,12 +314,18 @@ func TestTreeConcurrencyEditStyle(t *testing.T) {
243314
content := &json.TreeNode{Type: "p", Attributes: map[string]string{"italic": "true"}, Children: []json.TreeNode{{Type: "text", Value: `d`}}}
244315

245316
ranges := []twoRangesType{
246-
makeTwoRanges(3, 3, 6, 3, -1, 6, `equal`), // (3, 6) - (3, 6)
247-
makeTwoRanges(0, 3, 9, 3, -1, 6, `A contains B`), // (0, 9) - (3, 6)
248-
makeTwoRanges(3, 3, 6, 0, -1, 9, `B contains A`), // (0, 9) - (3, 6)
249-
makeTwoRanges(0, 3, 6, 3, -1, 9, `intersect`), // (0, 6) - (3, 9)
250-
makeTwoRanges(0, 3, 3, 3, -1, 6, `A -> B`), // (0, 3) - (3, 6)
251-
makeTwoRanges(3, 3, 6, 0, -1, 3, `B -> A`), // (0, 3) - (3, 6)
317+
// equal: <p>b</p> - <p>b</p>
318+
makeTwoRanges(3, 3, 6, 3, -1, 6, `equal`),
319+
// A contains B: <p>a</p><p>b</p><p>c</p> - <p>b</p>
320+
makeTwoRanges(0, 3, 9, 3, -1, 6, `A contains B`),
321+
// B contains A: <p>b</p> - <p>a</p><p>b</p><p>c</p>
322+
makeTwoRanges(3, 3, 6, 0, -1, 9, `B contains A`),
323+
// intersect: <p>a</p><p>b</p> - <p>b</p><p>c</p>
324+
makeTwoRanges(0, 3, 6, 3, -1, 9, `intersect`),
325+
// A -> B: <p>a</p> - <p>b</p>
326+
makeTwoRanges(0, 3, 3, 3, -1, 6, `A -> B`),
327+
// B -> A: <p>b</p> - <p>a</p>
328+
makeTwoRanges(3, 3, 6, 0, -1, 3, `B -> A`),
252329
}
253330

254331
editOperations := []operationInterface{

0 commit comments

Comments
 (0)