...
1package utils
2
3import (
4 "bytes"
5 "strings"
6 "testing"
7)
8
9func TestPosFinderLine2(t *testing.T) {
10 testval := `
11line1
12line2
13line3
14line4
15`
16 new_testval := `
17line1
18line2
19line2b
20line3
21line4
22`
23
24 ct := []byte(testval)
25 nct := []byte(new_testval)
26 pf := NewPositionFinder(ct).(*positionFinder)
27 x := pf.Content()
28 if !bytes.Equal(x, ct) {
29 t.Fatalf("content mismatch before any modification")
30 }
31 if !pf.FindLineContaining("line2") {
32 t.Fatalf("failed to find pattern")
33 }
34 pf.AddLine("line2b")
35 expect_content(t, nct, pf)
36}
37
38func TestPosFinderLine0(t *testing.T) {
39 testval := `
40line1
41line2
42line3
43line4
44`
45 new_testval := `
46line0
47line1
48line2
49line3
50line4
51`
52
53 ct := []byte(testval)
54 nct := []byte(new_testval)
55 pf := NewPositionFinder(ct).(*positionFinder)
56 x := pf.Content()
57 if !bytes.Equal(x, ct) {
58 t.Fatalf("content mismatch before any modification")
59 }
60 pf.AddLine("line0")
61 expect_content(t, nct, pf)
62}
63
64func TestPosFinderLine5(t *testing.T) {
65 testval := `
66line1
67line2
68line3
69line4
70`
71 new_testval := `
72line1
73line2
74line3
75line4
76line4b
77`
78
79 ct := []byte(testval)
80 nct := []byte(new_testval)
81 pf := NewPositionFinder(ct).(*positionFinder)
82 x := pf.Content()
83 if !bytes.Equal(x, ct) {
84 t.Fatalf("content mismatch before any modification")
85 }
86 if !pf.FindLineContaining("line4") {
87 t.Fatalf("failed to find pattern")
88 }
89 pf.AddLine("line4b")
90 expect_content(t, nct, pf)
91}
92
93func TestPosFinderMultiLine(t *testing.T) {
94 testval := `
95line1
96line2
97line3
98line4
99`
100 new_testval := `
101line1
102line2
103line2b
104line3
105line4
106`
107
108 ct := []byte(testval)
109 nct := []byte(new_testval)
110 pf := NewPositionFinder(ct).(*positionFinder)
111 x := pf.Content()
112 if !bytes.Equal(x, ct) {
113 t.Fatalf("content mismatch before any modification")
114 }
115 pf.FindLineContaining("line")
116 pf.FindLineContaining("line")
117 pf.AddLine("line2b")
118 expect_content(t, nct, pf)
119}
120
121func expect_content(t *testing.T, ct []byte, pf *positionFinder) {
122 if bytes.Equal(ct, pf.Content()) {
123 return
124 }
125 lines_expected := strings.Split(string(ct), "\n")
126 lines_got := strings.Split(string(pf.Content()), "\n")
127 max_lines := len(lines_expected)
128 if len(lines_got) > max_lines {
129 max_lines = len(lines_got)
130 }
131 ta := &Table{}
132 ta.AddHeaders("got", "expected")
133 for i := 0; i < max_lines; i++ {
134 l1 := ""
135 l2 := ""
136 if i < len(lines_got) {
137 l1 = lines_got[i]
138 }
139 if i < len(lines_expected) {
140 l2 = lines_expected[i]
141 }
142 ta.AddString(l1)
143 ta.AddString(l2)
144 ta.NewRow()
145 }
146 t.Errorf("modification produced incorrect result")
147 t.Logf("\n" + ta.ToPrettyString())
148 // t.Logf("New Content:\n%s\n", string(pf.Content()))
149}
View as plain text