@@ -226,6 +226,104 @@ func AssertMapFieldError(t *testing.T, s map[string]*FieldError, field string, e
226226 EqualSkip (t , 2 , val .Tag , expectedTag )
227227}
228228
229+ func TestISBNValidation (t * testing.T ) {
230+ tests := []struct {
231+ param string
232+ expected bool
233+ }{
234+ {"" , false },
235+ {"foo" , false },
236+ {"3836221195" , true },
237+ {"1-61729-085-8" , true },
238+ {"3 423 21412 0" , true },
239+ {"3 401 01319 X" , true },
240+ {"9784873113685" , true },
241+ {"978-4-87311-368-5" , true },
242+ {"978 3401013190" , true },
243+ {"978-3-8362-2119-1" , true },
244+ }
245+
246+ for i , test := range tests {
247+
248+ err := validate .Field (test .param , "isbn" )
249+
250+ if test .expected == true {
251+ if ! IsEqual (t , err , nil ) {
252+ t .Fatalf ("Index: %d ISBN failed Error: %s" , i , err )
253+ }
254+ } else {
255+ if IsEqual (t , err , nil ) || ! IsEqual (t , err .Tag , "isbn" ) {
256+ t .Fatalf ("Index: %d ISBN failed Error: %s" , i , err )
257+ }
258+ }
259+ }
260+ }
261+
262+ func TestISBN13Validation (t * testing.T ) {
263+ tests := []struct {
264+ param string
265+ expected bool
266+ }{
267+ {"" , false },
268+ {"foo" , false },
269+ {"3-8362-2119-5" , false },
270+ {"01234567890ab" , false },
271+ {"978 3 8362 2119 0" , false },
272+ {"9784873113685" , true },
273+ {"978-4-87311-368-5" , true },
274+ {"978 3401013190" , true },
275+ {"978-3-8362-2119-1" , true },
276+ }
277+
278+ for i , test := range tests {
279+
280+ err := validate .Field (test .param , "isbn13" )
281+
282+ if test .expected == true {
283+ if ! IsEqual (t , err , nil ) {
284+ t .Fatalf ("Index: %d ISBN13 failed Error: %s" , i , err )
285+ }
286+ } else {
287+ if IsEqual (t , err , nil ) || ! IsEqual (t , err .Tag , "isbn13" ) {
288+ t .Fatalf ("Index: %d ISBN13 failed Error: %s" , i , err )
289+ }
290+ }
291+ }
292+ }
293+
294+ func TestISBN10Validation (t * testing.T ) {
295+ tests := []struct {
296+ param string
297+ expected bool
298+ }{
299+ {"" , false },
300+ {"foo" , false },
301+ {"3423214121" , false },
302+ {"978-3836221191" , false },
303+ {"3-423-21412-1" , false },
304+ {"3 423 21412 1" , false },
305+ {"3836221195" , true },
306+ {"1-61729-085-8" , true },
307+ {"3 423 21412 0" , true },
308+ {"3 401 01319 X" , true },
309+ }
310+
311+ for i , test := range tests {
312+
313+ err := validate .Field (test .param , "isbn10" )
314+
315+ if test .expected == true {
316+ if ! IsEqual (t , err , nil ) {
317+ t .Fatalf ("Index: %d ISBN10 failed Error: %s" , i , err )
318+ }
319+ } else {
320+ if IsEqual (t , err , nil ) || ! IsEqual (t , err .Tag , "isbn10" ) {
321+ t .Fatalf ("Index: %d ISBN10 failed Error: %s" , i , err )
322+ }
323+ }
324+ }
325+ }
326+
229327func TestExcludesRuneValidation (t * testing.T ) {
230328
231329 tests := []struct {
0 commit comments