Merge pull request #122 from joeybloggs/v6-development
Split out assertions and put in external repo
Dean Karn
8 years ago
1 | 1 | |
2 | 2 | import ( |
3 | 3 | "fmt" |
4 | "path" | |
5 | 4 | "reflect" |
6 | "runtime" | |
7 | 5 | "testing" |
8 | 6 | "time" |
7 | ||
8 | . "gopkg.in/bluesuncorp/assert.v1" | |
9 | 9 | ) |
10 | 10 | |
11 | 11 | // NOTES: |
109 | 109 | |
110 | 110 | var validate = New(Config{TagName: "validate", ValidationFuncs: BakedInValidators}) |
111 | 111 | |
112 | func IsEqual(t *testing.T, val1, val2 interface{}) bool { | |
113 | v1 := reflect.ValueOf(val1) | |
114 | v2 := reflect.ValueOf(val2) | |
115 | ||
116 | if v1.Kind() == reflect.Ptr { | |
117 | v1 = v1.Elem() | |
118 | } | |
119 | ||
120 | if v2.Kind() == reflect.Ptr { | |
121 | v2 = v2.Elem() | |
122 | } | |
123 | ||
124 | if !v1.IsValid() && !v2.IsValid() { | |
125 | return true | |
126 | } | |
127 | ||
128 | switch v1.Kind() { | |
129 | case reflect.Chan, reflect.Func, reflect.Interface, reflect.Map, reflect.Ptr, reflect.Slice: | |
130 | if v1.IsNil() { | |
131 | v1 = reflect.ValueOf(nil) | |
132 | } | |
133 | } | |
134 | ||
135 | switch v2.Kind() { | |
136 | case reflect.Chan, reflect.Func, reflect.Interface, reflect.Map, reflect.Ptr, reflect.Slice: | |
137 | if v2.IsNil() { | |
138 | v2 = reflect.ValueOf(nil) | |
139 | } | |
140 | } | |
141 | ||
142 | v1Underlying := reflect.Zero(reflect.TypeOf(v1)).Interface() | |
143 | v2Underlying := reflect.Zero(reflect.TypeOf(v2)).Interface() | |
144 | ||
145 | if v1 == v1Underlying { | |
146 | if v2 == v2Underlying { | |
147 | goto CASE4 | |
148 | } else { | |
149 | goto CASE3 | |
150 | } | |
151 | } else { | |
152 | if v2 == v2Underlying { | |
153 | goto CASE2 | |
154 | } else { | |
155 | goto CASE1 | |
156 | } | |
157 | } | |
158 | ||
159 | CASE1: | |
160 | // fmt.Println("CASE 1") | |
161 | return reflect.DeepEqual(v1.Interface(), v2.Interface()) | |
162 | CASE2: | |
163 | // fmt.Println("CASE 2") | |
164 | return reflect.DeepEqual(v1.Interface(), v2) | |
165 | CASE3: | |
166 | // fmt.Println("CASE 3") | |
167 | return reflect.DeepEqual(v1, v2.Interface()) | |
168 | CASE4: | |
169 | // fmt.Println("CASE 4") | |
170 | return reflect.DeepEqual(v1, v2) | |
171 | } | |
172 | ||
173 | func Equal(t *testing.T, val1, val2 interface{}) { | |
174 | EqualSkip(t, 2, val1, val2) | |
175 | } | |
176 | ||
177 | func EqualSkip(t *testing.T, skip int, val1, val2 interface{}) { | |
178 | ||
179 | if !IsEqual(t, val1, val2) { | |
180 | ||
181 | _, file, line, _ := runtime.Caller(skip) | |
182 | fmt.Printf("%s:%d %v does not equal %v\n", path.Base(file), line, val1, val2) | |
183 | t.FailNow() | |
184 | } | |
185 | } | |
186 | ||
187 | func NotEqual(t *testing.T, val1, val2 interface{}) { | |
188 | NotEqualSkip(t, 2, val1, val2) | |
189 | } | |
190 | ||
191 | func NotEqualSkip(t *testing.T, skip int, val1, val2 interface{}) { | |
192 | ||
193 | if IsEqual(t, val1, val2) { | |
194 | _, file, line, _ := runtime.Caller(skip) | |
195 | fmt.Printf("%s:%d %v should not be equal %v\n", path.Base(file), line, val1, val2) | |
196 | t.FailNow() | |
197 | } | |
198 | } | |
199 | ||
200 | func PanicMatches(t *testing.T, fn func(), matches string) { | |
201 | PanicMatchesSkip(t, 2, fn, matches) | |
202 | } | |
203 | ||
204 | func PanicMatchesSkip(t *testing.T, skip int, fn func(), matches string) { | |
205 | ||
206 | _, file, line, _ := runtime.Caller(skip) | |
207 | ||
208 | defer func() { | |
209 | if r := recover(); r != nil { | |
210 | err := fmt.Sprintf("%s", r) | |
211 | ||
212 | if err != matches { | |
213 | fmt.Printf("%s:%d Panic... expected [%s] received [%s]", path.Base(file), line, matches, err) | |
214 | t.FailNow() | |
215 | } | |
216 | } | |
217 | }() | |
218 | ||
219 | fn() | |
220 | } | |
221 | ||
222 | 112 | func AssertError(t *testing.T, errs ValidationErrors, key, field, expectedTag string) { |
223 | 113 | |
224 | 114 | val, ok := errs[key] |
863 | 753 | errs := validate.Field(test.param, "ssn") |
864 | 754 | |
865 | 755 | if test.expected == true { |
866 | if !IsEqual(t, errs, nil) { | |
756 | if !IsEqual(errs, nil) { | |
867 | 757 | t.Fatalf("Index: %d SSN failed Error: %s", i, errs) |
868 | 758 | } |
869 | 759 | } else { |
870 | if IsEqual(t, errs, nil) { | |
760 | if IsEqual(errs, nil) { | |
871 | 761 | t.Fatalf("Index: %d SSN failed Error: %s", i, errs) |
872 | 762 | } else { |
873 | 763 | val := errs[""] |
897 | 787 | errs := validate.Field(test.param, "longitude") |
898 | 788 | |
899 | 789 | if test.expected == true { |
900 | if !IsEqual(t, errs, nil) { | |
790 | if !IsEqual(errs, nil) { | |
901 | 791 | t.Fatalf("Index: %d Longitude failed Error: %s", i, errs) |
902 | 792 | } |
903 | 793 | } else { |
904 | if IsEqual(t, errs, nil) { | |
794 | if IsEqual(errs, nil) { | |
905 | 795 | t.Fatalf("Index: %d Longitude failed Error: %s", i, errs) |
906 | 796 | } else { |
907 | 797 | val := errs[""] |
931 | 821 | errs := validate.Field(test.param, "latitude") |
932 | 822 | |
933 | 823 | if test.expected == true { |
934 | if !IsEqual(t, errs, nil) { | |
824 | if !IsEqual(errs, nil) { | |
935 | 825 | t.Fatalf("Index: %d Latitude failed Error: %s", i, errs) |
936 | 826 | } |
937 | 827 | } else { |
938 | if IsEqual(t, errs, nil) { | |
828 | if IsEqual(errs, nil) { | |
939 | 829 | t.Fatalf("Index: %d Latitude failed Error: %s", i, errs) |
940 | 830 | } else { |
941 | 831 | val := errs[""] |
971 | 861 | errs := validate.Field(test.param, "datauri") |
972 | 862 | |
973 | 863 | if test.expected == true { |
974 | if !IsEqual(t, errs, nil) { | |
864 | if !IsEqual(errs, nil) { | |
975 | 865 | t.Fatalf("Index: %d DataURI failed Error: %s", i, errs) |
976 | 866 | } |
977 | 867 | } else { |
978 | if IsEqual(t, errs, nil) { | |
868 | if IsEqual(errs, nil) { | |
979 | 869 | t.Fatalf("Index: %d DataURI failed Error: %s", i, errs) |
980 | 870 | } else { |
981 | 871 | val := errs[""] |
1009 | 899 | errs := validate.Field(test.param, "multibyte") |
1010 | 900 | |
1011 | 901 | if test.expected == true { |
1012 | if !IsEqual(t, errs, nil) { | |
902 | if !IsEqual(errs, nil) { | |
1013 | 903 | t.Fatalf("Index: %d Multibyte failed Error: %s", i, errs) |
1014 | 904 | } |
1015 | 905 | } else { |
1016 | if IsEqual(t, errs, nil) { | |
906 | if IsEqual(errs, nil) { | |
1017 | 907 | t.Fatalf("Index: %d Multibyte failed Error: %s", i, errs) |
1018 | 908 | } else { |
1019 | 909 | val := errs[""] |
1048 | 938 | errs := validate.Field(test.param, "printascii") |
1049 | 939 | |
1050 | 940 | if test.expected == true { |
1051 | if !IsEqual(t, errs, nil) { | |
941 | if !IsEqual(errs, nil) { | |
1052 | 942 | t.Fatalf("Index: %d Printable ASCII failed Error: %s", i, errs) |
1053 | 943 | } |
1054 | 944 | } else { |
1055 | if IsEqual(t, errs, nil) { | |
945 | if IsEqual(errs, nil) { | |
1056 | 946 | t.Fatalf("Index: %d Printable ASCII failed Error: %s", i, errs) |
1057 | 947 | } else { |
1058 | 948 | val := errs[""] |
1086 | 976 | errs := validate.Field(test.param, "ascii") |
1087 | 977 | |
1088 | 978 | if test.expected == true { |
1089 | if !IsEqual(t, errs, nil) { | |
979 | if !IsEqual(errs, nil) { | |
1090 | 980 | t.Fatalf("Index: %d ASCII failed Error: %s", i, errs) |
1091 | 981 | } |
1092 | 982 | } else { |
1093 | if IsEqual(t, errs, nil) { | |
983 | if IsEqual(errs, nil) { | |
1094 | 984 | t.Fatalf("Index: %d ASCII failed Error: %s", i, errs) |
1095 | 985 | } else { |
1096 | 986 | val := errs[""] |
1121 | 1011 | errs := validate.Field(test.param, "uuid5") |
1122 | 1012 | |
1123 | 1013 | if test.expected == true { |
1124 | if !IsEqual(t, errs, nil) { | |
1014 | if !IsEqual(errs, nil) { | |
1125 | 1015 | t.Fatalf("Index: %d UUID5 failed Error: %s", i, errs) |
1126 | 1016 | } |
1127 | 1017 | } else { |
1128 | if IsEqual(t, errs, nil) { | |
1018 | if IsEqual(errs, nil) { | |
1129 | 1019 | t.Fatalf("Index: %d UUID5 failed Error: %s", i, errs) |
1130 | 1020 | } else { |
1131 | 1021 | val := errs[""] |
1155 | 1045 | errs := validate.Field(test.param, "uuid4") |
1156 | 1046 | |
1157 | 1047 | if test.expected == true { |
1158 | if !IsEqual(t, errs, nil) { | |
1048 | if !IsEqual(errs, nil) { | |
1159 | 1049 | t.Fatalf("Index: %d UUID4 failed Error: %s", i, errs) |
1160 | 1050 | } |
1161 | 1051 | } else { |
1162 | if IsEqual(t, errs, nil) { | |
1052 | if IsEqual(errs, nil) { | |
1163 | 1053 | t.Fatalf("Index: %d UUID4 failed Error: %s", i, errs) |
1164 | 1054 | } else { |
1165 | 1055 | val := errs[""] |
1188 | 1078 | errs := validate.Field(test.param, "uuid3") |
1189 | 1079 | |
1190 | 1080 | if test.expected == true { |
1191 | if !IsEqual(t, errs, nil) { | |
1081 | if !IsEqual(errs, nil) { | |
1192 | 1082 | t.Fatalf("Index: %d UUID3 failed Error: %s", i, errs) |
1193 | 1083 | } |
1194 | 1084 | } else { |
1195 | if IsEqual(t, errs, nil) { | |
1085 | if IsEqual(errs, nil) { | |
1196 | 1086 | t.Fatalf("Index: %d UUID3 failed Error: %s", i, errs) |
1197 | 1087 | } else { |
1198 | 1088 | val := errs[""] |
1224 | 1114 | errs := validate.Field(test.param, "uuid") |
1225 | 1115 | |
1226 | 1116 | if test.expected == true { |
1227 | if !IsEqual(t, errs, nil) { | |
1117 | if !IsEqual(errs, nil) { | |
1228 | 1118 | t.Fatalf("Index: %d UUID failed Error: %s", i, errs) |
1229 | 1119 | } |
1230 | 1120 | } else { |
1231 | if IsEqual(t, errs, nil) { | |
1121 | if IsEqual(errs, nil) { | |
1232 | 1122 | t.Fatalf("Index: %d UUID failed Error: %s", i, errs) |
1233 | 1123 | } else { |
1234 | 1124 | val := errs[""] |
1262 | 1152 | errs := validate.Field(test.param, "isbn") |
1263 | 1153 | |
1264 | 1154 | if test.expected == true { |
1265 | if !IsEqual(t, errs, nil) { | |
1155 | if !IsEqual(errs, nil) { | |
1266 | 1156 | t.Fatalf("Index: %d ISBN failed Error: %s", i, errs) |
1267 | 1157 | } |
1268 | 1158 | } else { |
1269 | if IsEqual(t, errs, nil) { | |
1159 | if IsEqual(errs, nil) { | |
1270 | 1160 | t.Fatalf("Index: %d ISBN failed Error: %s", i, errs) |
1271 | 1161 | } else { |
1272 | 1162 | val := errs[""] |
1299 | 1189 | errs := validate.Field(test.param, "isbn13") |
1300 | 1190 | |
1301 | 1191 | if test.expected == true { |
1302 | if !IsEqual(t, errs, nil) { | |
1192 | if !IsEqual(errs, nil) { | |
1303 | 1193 | t.Fatalf("Index: %d ISBN13 failed Error: %s", i, errs) |
1304 | 1194 | } |
1305 | 1195 | } else { |
1306 | if IsEqual(t, errs, nil) { | |
1196 | if IsEqual(errs, nil) { | |
1307 | 1197 | t.Fatalf("Index: %d ISBN13 failed Error: %s", i, errs) |
1308 | 1198 | } else { |
1309 | 1199 | val := errs[""] |
1337 | 1227 | errs := validate.Field(test.param, "isbn10") |
1338 | 1228 | |
1339 | 1229 | if test.expected == true { |
1340 | if !IsEqual(t, errs, nil) { | |
1230 | if !IsEqual(errs, nil) { | |
1341 | 1231 | t.Fatalf("Index: %d ISBN10 failed Error: %s", i, errs) |
1342 | 1232 | } |
1343 | 1233 | } else { |
1344 | if IsEqual(t, errs, nil) { | |
1234 | if IsEqual(errs, nil) { | |
1345 | 1235 | t.Fatalf("Index: %d ISBN10 failed Error: %s", i, errs) |
1346 | 1236 | } else { |
1347 | 1237 | val := errs[""] |
2701 | 2591 | errs := validate.Field(test.param, "url") |
2702 | 2592 | |
2703 | 2593 | if test.expected == true { |
2704 | if !IsEqual(t, errs, nil) { | |
2594 | if !IsEqual(errs, nil) { | |
2705 | 2595 | t.Fatalf("Index: %d URL failed Error: %s", i, errs) |
2706 | 2596 | } |
2707 | 2597 | } else { |
2708 | if IsEqual(t, errs, nil) { | |
2598 | if IsEqual(errs, nil) { | |
2709 | 2599 | t.Fatalf("Index: %d URL failed Error: %s", i, errs) |
2710 | 2600 | } else { |
2711 | 2601 | val := errs[""] |
2765 | 2655 | errs := validate.Field(test.param, "uri") |
2766 | 2656 | |
2767 | 2657 | if test.expected == true { |
2768 | if !IsEqual(t, errs, nil) { | |
2658 | if !IsEqual(errs, nil) { | |
2769 | 2659 | t.Fatalf("Index: %d URI failed Error: %s", i, errs) |
2770 | 2660 | } |
2771 | 2661 | } else { |
2772 | if IsEqual(t, errs, nil) { | |
2662 | if IsEqual(errs, nil) { | |
2773 | 2663 | t.Fatalf("Index: %d URI failed Error: %s", i, errs) |
2774 | 2664 | } else { |
2775 | 2665 | val := errs[""] |