// Copyright 2019 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // Package difftest supplies a set of tests that will operate on any // implementation of a diff algorithm as exposed by // "golang.org/x/tools/internal/lsp/diff" package difftest import ( "testing" "golang.org/x/tools/internal/lsp/diff" "golang.org/x/tools/internal/span" ) func DiffTest(t *testing.T) { t.Helper() for _, test := range []struct{ name, in, out, unified string }{{ name: "empty", in: "", out: "", }, { name: "no_diff", in: "gargantuan", out: "gargantuan", }, { name: "insert_rune", in: "gord", out: "gourd", }, { name: "delete_rune", in: "groat", out: "goat", }, { name: "replace_rune", in: "loud", out: "lord", }, { name: "insert_line", in: "one\nthree\n", out: "one\ntwo\nthree\n", }} { edits := diff.ComputeEdits(span.FileURI("/"+test.name), test.in, test.out) got := diff.ApplyEdits(test.in, edits) if got != test.out { t.Logf("test %v had diff:%v\n", test.name, diff.ToUnified(test.name+".orig", test.name, test.in, edits)) t.Errorf("diff %v got:\n%v\nexpected:\n%v", test.name, got, test.out) } } }