Fix diff case
authorTom Clegg <tom@curii.com>
Fri, 5 Aug 2022 19:45:52 +0000 (15:45 -0400)
committerTom Clegg <tom@curii.com>
Fri, 5 Aug 2022 19:45:52 +0000 (15:45 -0400)
refs #19236 #note-20

Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tom@curii.com>

hgvs/diff.go
hgvs/diff_test.go

index bde91fba75ac8bcd791486675e20e561e3252679..0858aebe489dcc5d1ec0a4622098bd7765427cf5 100644 (file)
@@ -269,6 +269,12 @@ func cleanup(in []diffmatchpatch.Diff) (out []diffmatchpatch.Diff) {
                                in[i+1].Type == diffmatchpatch.DiffDelete &&
                                in[i+3].Type == diffmatchpatch.DiffInsert &&
                                strings.HasSuffix(in[i+3].Text, in[i+2].Text)) {
+                       if i+3 < len(in) && in[i+1].Type == in[i+3].Type && strings.HasSuffix(in[i+3].Text, in[i+2].Text) {
+                               // [=AB,delC,=E,delDBE] => [=AB,delCEDB,=E,=]
+                               in[i+1], in[i+2], in[i+3] = diffmatchpatch.Diff{in[i+1].Type, in[i+1].Text + in[i+2].Text + in[i+3].Text[:len(in[i+3].Text)-len(in[i+2].Text)]},
+                                       diffmatchpatch.Diff{diffmatchpatch.DiffEqual, in[i+2].Text},
+                                       diffmatchpatch.Diff{diffmatchpatch.DiffEqual, ""}
+                       }
                        // Find x, length of common suffix B
                        x := 1
                        for ; x <= len(d.Text) && x <= len(in[i+1].Text); x++ {
index eb882fb856c4ac7b4eaded3cd0d007abef434881..aef9f9e86b42b68558fbbe4c555921e1ab855493 100644 (file)
@@ -197,6 +197,26 @@ func (s *diffSuite) TestDiff(c *check.C) {
                        b:      "aggatgcaa",
                        expect: []string{"2_15del"},
                },
+               {
+                       a:      "aGACGGACAGGGCCCgt",
+                       b:      "agt",
+                       expect: []string{"2_15del"},
+               },
+               {
+                       a:      "aGACGGACAGGGCCCgacggacagggccctag",
+                       b:      "agacggacagggccctag",
+                       expect: []string{"2_15del"},
+               },
+               {
+                       a:      "cagacggacgtggggacccaGACGGACAGGGCCCggtaacc",
+                       b:      "cagacggacgtggggacccaggtaacc",
+                       expect: []string{"21_34del"},
+               },
+               {
+                       a:      "cagacggacgtggggacccaggtaacc",
+                       b:      "cagacggacgtggggacccaGACGGACAGGGCCCggtaacc",
+                       expect: []string{"20_21insGACGGACAGGGCCC"},
+               },
                {
                        a:      "aggGac",
                        b:      "aggAac",