11package tagexpr
22
33import (
4+ "fmt"
45 "reflect"
56 "testing"
67)
@@ -79,35 +80,46 @@ func TestReadDigitalExprNode(t *testing.T) {
7980}
8081
8182func TestFindSelector (t * testing.T ) {
83+ var falsePtr = new (bool )
84+ var truePtr = new (bool )
85+ * truePtr = true
8286 var cases = []struct {
8387 expr string
8488 field string
8589 name string
8690 subSelector []string
91+ boolPrefix * bool
8792 found bool
8893 last string
8994 }{
9095 {expr : "$" , field : "" , name : "$" , subSelector : nil , found : true , last : "" },
91- {expr : "()$" , field : "" , name : "" , subSelector : nil , found : false , last : "()$" },
92- {expr : "(0)$" , field : "" , name : "" , subSelector : nil , found : false , last : "(0)$" },
96+ {expr : "!!$" , field : "" , name : "$" , subSelector : nil , boolPrefix : truePtr , found : true , last : "" },
97+ {expr : "!$" , field : "" , name : "$" , subSelector : nil , boolPrefix : falsePtr , found : true , last : "" },
98+ {expr : "()$" , field : "" , name : "" , subSelector : nil , last : "()$" },
99+ {expr : "(0)$" , field : "" , name : "" , subSelector : nil , last : "(0)$" },
93100 {expr : "(A)$" , field : "A" , name : "$" , subSelector : nil , found : true , last : "" },
101+ {expr : "!(A)$" , field : "A" , name : "$" , subSelector : nil , boolPrefix : falsePtr , found : true , last : "" },
94102 {expr : "(A0)$" , field : "A0" , name : "$" , subSelector : nil , found : true , last : "" },
95- {expr : "(A0)$(A1)$" , field : "" , name : "" , subSelector : nil , found : false , last : "(A0)$(A1)$" },
103+ {expr : "!!(A0)$" , field : "A0" , name : "$" , subSelector : nil , boolPrefix : truePtr , found : true , last : "" },
104+ {expr : "(A0)$(A1)$" , field : "" , name : "" , subSelector : nil , last : "(A0)$(A1)$" },
96105 {expr : "(A0)$ $(A1)$" , field : "A0" , name : "$" , subSelector : nil , found : true , last : " $(A1)$" },
97- {expr : "$a" , field : "" , name : "" , subSelector : nil , found : false , last : "$a" },
106+ {expr : "$a" , field : "" , name : "" , subSelector : nil , last : "$a" },
98107 {expr : "$[1]['a']" , field : "" , name : "$" , subSelector : []string {"1" , "'a'" }, found : true , last : "" },
99- {expr : "$[1][]" , field : "" , name : "" , subSelector : nil , found : false , last : "$[1][]" },
100- {expr : "$[[]]" , field : "" , name : "" , subSelector : nil , found : false , last : "$[[]]" },
101- {expr : "$[[[]]]" , field : "" , name : "" , subSelector : nil , found : false , last : "$[[[]]]" },
108+ {expr : "$[1][]" , field : "" , name : "" , subSelector : nil , last : "$[1][]" },
109+ {expr : "$[[]]" , field : "" , name : "" , subSelector : nil , last : "$[[]]" },
110+ {expr : "$[[[]]]" , field : "" , name : "" , subSelector : nil , last : "$[[[]]]" },
102111 {expr : "$[(A)$[1]]" , field : "" , name : "$" , subSelector : []string {"(A)$[1]" }, found : true , last : "" },
103112 {expr : "$>0&&$<10" , field : "" , name : "$" , subSelector : nil , found : true , last : ">0&&$<10" },
104113 }
105114 for _ , c := range cases {
106115 last := c .expr
107- field , name , subSelector , found := findSelector (& last )
116+ field , name , subSelector , boolPrefix , found := findSelector (& last )
108117 if found != c .found {
109118 t .Fatalf ("%q found: got: %v, want: %v" , c .expr , found , c .found )
110119 }
120+ if printBoolPtr (boolPrefix ) != printBoolPtr (c .boolPrefix ) {
121+ t .Fatalf ("%q boolPrefix: got: %v, want: %v" , c .expr , printBoolPtr (boolPrefix ), printBoolPtr (c .boolPrefix ))
122+ }
111123 if field != c .field {
112124 t .Fatalf ("%q field: got: %q, want: %q" , c .expr , field , c .field )
113125 }
@@ -122,3 +134,10 @@ func TestFindSelector(t *testing.T) {
122134 }
123135 }
124136}
137+ func printBoolPtr (b * bool ) string {
138+ var v interface {} = b
139+ if b != nil {
140+ v = * b
141+ }
142+ return fmt .Sprint (v )
143+ }
0 commit comments