@@ -4,18 +4,21 @@ import "testing"
44
55func TestAutoTemplate (t * testing.T ) {
66 for _ , tc := range []struct {
7+ name string
78 contentsStr string
89 data map [string ]interface {}
910 wantStr string
1011 }{
1112 {
13+ name : "simple" ,
1214 contentsStr : "email = hello@example.com\n " ,
1315 data : map [string ]interface {}{
1416 "email" : "hello@example.com" ,
1517 },
1618 wantStr : "email = {{ .email }}\n " ,
1719 },
1820 {
21+ name : "longest_first" ,
1922 contentsStr : "name = John Smith\n firstName = John\n " ,
2023 data : map [string ]interface {}{
2124 "name" : "John Smith" ,
@@ -24,6 +27,17 @@ func TestAutoTemplate(t *testing.T) {
2427 wantStr : "name = {{ .name }}\n firstName = {{ .firstName }}\n " ,
2528 },
2629 {
30+ name : "alphabetical_first" ,
31+ contentsStr : "name = John Smith\n " ,
32+ data : map [string ]interface {}{
33+ "alpha" : "John Smith" ,
34+ "beta" : "John Smith" ,
35+ "gamma" : "John Smith" ,
36+ },
37+ wantStr : "name = {{ .alpha }}\n " ,
38+ },
39+ {
40+ name : "nested_values" ,
2741 contentsStr : "email = hello@example.com\n " ,
2842 data : map [string ]interface {}{
2943 "personal" : map [string ]interface {}{
@@ -33,28 +47,116 @@ func TestAutoTemplate(t *testing.T) {
3347 wantStr : "email = {{ .personal.email }}\n " ,
3448 },
3549 {
50+ name : "only_replace_words" ,
3651 contentsStr : "darwinian evolution" ,
3752 data : map [string ]interface {}{
3853 "os" : "darwin" ,
3954 },
4055 wantStr : "darwinian evolution" , // not "{{ .os }}ian evolution"
4156 },
42- /*
43- // FIXME this test currently fails because we match on word
44- // boundaries and ^/ is not a word boundary.
45- {
46- contentsStr: "/home/user",
47- data: map[string]interface{}{
48- "homedir": "/home/user",
49- },
50- wantStr: "{{ .homedir }}",
57+ {
58+ name : "longest_match_first" ,
59+ contentsStr : "/home/user" ,
60+ data : map [string ]interface {}{
61+ "homedir" : "/home/user" ,
62+ },
63+ wantStr : "{{ .homedir }}" ,
64+ },
65+ {
66+ name : "longest_match_first_prefix" ,
67+ contentsStr : "HOME=/home/user" ,
68+ data : map [string ]interface {}{
69+ "homedir" : "/home/user" ,
70+ },
71+ wantStr : "HOME={{ .homedir }}" ,
72+ },
73+ {
74+ name : "longest_match_first_suffix" ,
75+ contentsStr : "/home/user/something" ,
76+ data : map [string ]interface {}{
77+ "homedir" : "/home/user" ,
78+ },
79+ wantStr : "{{ .homedir }}/something" ,
80+ },
81+ {
82+ name : "longest_match_first_prefix_and_suffix" ,
83+ contentsStr : "HOME=/home/user/something" ,
84+ data : map [string ]interface {}{
85+ "homedir" : "/home/user" ,
5186 },
52- */
87+ wantStr : "HOME={{ .homedir }}/something" ,
88+ },
89+ {
90+ name : "words_only" ,
91+ contentsStr : "aaa aa a aa aaa aa a aa aaa" ,
92+ data : map [string ]interface {}{
93+ "alpha" : "a" ,
94+ },
95+ wantStr : "aaa aa {{ .alpha }} aa aaa aa {{ .alpha }} aa aaa" ,
96+ },
97+ {
98+ name : "words_only_2" ,
99+ contentsStr : "aaa aa a aa aaa aa a aa aaa" ,
100+ data : map [string ]interface {}{
101+ "alpha" : "aa" ,
102+ },
103+ wantStr : "aaa {{ .alpha }} a {{ .alpha }} aaa {{ .alpha }} a {{ .alpha }} aaa" ,
104+ },
105+ {
106+ name : "words_only_3" ,
107+ contentsStr : "aaa aa a aa aaa aa a aa aaa" ,
108+ data : map [string ]interface {}{
109+ "alpha" : "aaa" ,
110+ },
111+ wantStr : "{{ .alpha }} aa a aa {{ .alpha }} aa a aa {{ .alpha }}" ,
112+ },
113+ } {
114+ t .Run (tc .name , func (t * testing.T ) {
115+ got , gotErr := autoTemplate ([]byte (tc .contentsStr ), tc .data )
116+ gotStr := string (got )
117+ if gotErr != nil || gotStr != tc .wantStr {
118+ t .Errorf ("autoTemplate([]byte(%q), %v) == %q, %v, want %q, <nil>" , tc .contentsStr , tc .data , gotStr , gotErr , tc .wantStr )
119+ }
120+ })
121+ }
122+ }
123+
124+ func TestInWord (t * testing.T ) {
125+ for _ , tc := range []struct {
126+ s string
127+ i int
128+ want bool
129+ }{
130+ {s : "" , i : 0 , want : false },
131+ {s : "a" , i : 0 , want : false },
132+ {s : "a" , i : 1 , want : false },
133+ {s : "ab" , i : 0 , want : false },
134+ {s : "ab" , i : 1 , want : true },
135+ {s : "ab" , i : 2 , want : false },
136+ {s : "abc" , i : 0 , want : false },
137+ {s : "abc" , i : 1 , want : true },
138+ {s : "abc" , i : 2 , want : true },
139+ {s : "abc" , i : 3 , want : false },
140+ {s : " abc " , i : 0 , want : false },
141+ {s : " abc " , i : 1 , want : false },
142+ {s : " abc " , i : 2 , want : true },
143+ {s : " abc " , i : 3 , want : true },
144+ {s : " abc " , i : 4 , want : false },
145+ {s : " abc " , i : 5 , want : false },
146+ {s : "/home/user" , i : 0 , want : false },
147+ {s : "/home/user" , i : 1 , want : false },
148+ {s : "/home/user" , i : 2 , want : true },
149+ {s : "/home/user" , i : 3 , want : true },
150+ {s : "/home/user" , i : 4 , want : true },
151+ {s : "/home/user" , i : 5 , want : false },
152+ {s : "/home/user" , i : 6 , want : false },
153+ {s : "/home/user" , i : 7 , want : true },
154+ {s : "/home/user" , i : 8 , want : true },
155+ {s : "/home/user" , i : 9 , want : true },
156+ {s : "/home/user" , i : 10 , want : false },
53157 } {
54- got := autoTemplate ([]byte (tc .contentsStr ), tc .data )
55- gotStr := string (got )
56- if gotStr != tc .wantStr {
57- t .Errorf ("autoTemplate([]byte(%q), %v) == %q, want %q" , tc .contentsStr , tc .data , gotStr , tc .wantStr )
158+ if got := inWord (tc .s , tc .i ); got != tc .want {
159+ t .Errorf ("inWord(%q, %d) == %v, want %v" , tc .s , tc .i , got , tc .want )
58160 }
59161 }
60162}
0 commit comments