@@ -15,29 +15,52 @@ import SwiftSyntax
1515import _SwiftSyntaxTestSupport
1616
1717public class SourceEditsUtilTest : XCTestCase {
18+ public func testStringDifferenceReturnSequentialEdits( ) {
19+ let base = " 0123 "
20+ let new = " a0123b "
21+
22+ let diffs = new. difference ( from: base)
23+
24+ let edits = diffs. insertions. map ( { diff in
25+ switch diff {
26+ case . insert( offset: let offset, element: _, associatedWith: _) :
27+ return SourceEdit ( offset: offset, length: 0 , replacementLength: 1 )
28+ case . remove( offset: let offset, element: _, associatedWith: _) :
29+ return SourceEdit ( offset: offset, length: 0 , replacementLength: 1 )
30+ }
31+ } )
32+
33+ let expectEdits = [
34+ SourceEdit ( offset: 0 , length: 0 , replacementLength: 1 ) ,
35+ SourceEdit ( offset: 5 , length: 0 , replacementLength: 1 ) ,
36+ ]
37+
38+ XCTAssertEqual ( edits, expectEdits)
39+ }
40+
1841 public func testDiffOfTwoStringsSimple( ) throws {
19- let s1 = " struct A { func f() { "
20- let s2 = " struct AA { func f() { "
42+ let base = " struct A { func f() { "
43+ let new = " struct AA { func f() { "
2144
22- let diffs = getConcurrentEdits ( from: s1 , to: s2 )
45+ let diffs = getConcurrentEdits ( from: base , to: new )
2346 XCTAssertEqual ( diffs. edits. count, 1 )
2447
2548 let firstDiff = try XCTUnwrap ( diffs. edits. first)
2649 XCTAssertEqual ( firstDiff, SourceEdit ( offset: 8 , length: 0 , replacementLength: 1 ) )
2750 }
2851
2952 public func testDiffOfTwoSameStrings( ) {
30- let s1 = " 0123456 "
53+ let base = " 0123456 "
3154
32- let diffs = getConcurrentEdits ( from: s1 , to: s1 )
55+ let diffs = getConcurrentEdits ( from: base , to: base )
3356 XCTAssert ( diffs. edits. isEmpty)
3457 }
3558
3659 public func testDiffOfTwoStrings( ) {
37- let s1 = " 0123456 "
38- let s2 = " x12456yz "
60+ let base = " 0123456 "
61+ let new = " x12456yz "
3962
40- let diffs = getConcurrentEdits ( from: s1 , to: s2 )
63+ let diffs = getConcurrentEdits ( from: base , to: new )
4164
4265 let expectedDiffs : [ SourceEdit ] = [
4366 SourceEdit ( offset: 0 , length: 1 , replacementLength: 1 ) ,
@@ -47,8 +70,8 @@ public class SourceEditsUtilTest: XCTestCase {
4770
4871 XCTAssertEqual ( diffs. edits, expectedDiffs)
4972
50- let s3 = applyEdits ( expectedDiffs, concurrent: true , to: s1 )
73+ let appliedDiffsBase = applyEdits ( expectedDiffs, concurrent: true , to: base )
5174
52- XCTAssertEqual ( s3 , " ?12456?? " )
75+ XCTAssertEqual ( appliedDiffsBase , " ?12456?? " )
5376 }
5477}
0 commit comments