GoPLS Viewer

Home|gopls/internal/diff/difftest/difftest_test.go
1// Copyright 2019 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5// Package difftest supplies a set of tests that will operate on any
6// implementation of a diff algorithm as exposed by
7// "golang.org/x/tools/internal/diff"
8package difftest_test
9
10import (
11    "fmt"
12    "io/ioutil"
13    "os"
14    "os/exec"
15    "strings"
16    "testing"
17
18    "golang.org/x/tools/internal/diff/difftest"
19    "golang.org/x/tools/internal/testenv"
20)
21
22func TestVerifyUnified(t *testing.T) {
23    testenv.NeedsTool(t"diff")
24    for _test := range difftest.TestCases {
25        t.Run(test.Name, func(t *testing.T) {
26            if test.NoDiff {
27                t.Skip("diff tool produces expected different results")
28            }
29            differr := getDiffOutput(test.Intest.Out)
30            if err != nil {
31                t.Fatal(err)
32            }
33            if len(diff) > 0 {
34                diff = difftest.UnifiedPrefix + diff
35            }
36            if diff != test.Unified {
37                t.Errorf("unified:\n%s\ndiff -u:\n%s"test.Unifieddiff)
38            }
39        })
40    }
41}
42
43func getDiffOutput(ab string) (stringerror) {
44    fileAerr := ioutil.TempFile("""myers.in")
45    if err != nil {
46        return ""err
47    }
48    defer os.Remove(fileA.Name())
49    if _err := fileA.Write([]byte(a)); err != nil {
50        return ""err
51    }
52    if err := fileA.Close(); err != nil {
53        return ""err
54    }
55    fileBerr := ioutil.TempFile("""myers.in")
56    if err != nil {
57        return ""err
58    }
59    defer os.Remove(fileB.Name())
60    if _err := fileB.Write([]byte(b)); err != nil {
61        return ""err
62    }
63    if err := fileB.Close(); err != nil {
64        return ""err
65    }
66    cmd := exec.Command("diff""-u"fileA.Name(), fileB.Name())
67    cmd.Env = append(cmd.Env"LANG=en_US.UTF-8")
68    outerr := cmd.CombinedOutput()
69    if err != nil {
70        if _ok := err.(*exec.ExitError); !ok {
71            return ""fmt.Errorf("failed to run diff -u %v %v: %v\n%v"fileA.Name(), fileB.Name(), errstring(out))
72        }
73    }
74    diff := string(out)
75    if len(diff) <= 0 {
76        return diffnil
77    }
78    bits := strings.SplitN(diff"\n"3)
79    if len(bits) != 3 {
80        return ""fmt.Errorf("diff output did not have file prefix:\n%s"diff)
81    }
82    return bits[2], nil
83}
84
MembersX
difftest
TestVerifyUnified.RangeStmt_569.BlockStmt.BlockStmt.err
getDiffOutput.fileA
getDiffOutput.err
getDiffOutput.out
getDiffOutput.diff
getDiffOutput.cmd
fmt
strings
TestVerifyUnified
TestVerifyUnified.RangeStmt_569.test
TestVerifyUnified.RangeStmt_569.BlockStmt.BlockStmt.diff
getDiffOutput._
getDiffOutput.fileB
ioutil
os
TestVerifyUnified.t
getDiffOutput
getDiffOutput.b
exec
testenv
getDiffOutput.a
getDiffOutput.bits
Members
X