1// Copyright 2016 Google Inc. All rights reserved. 2// Use of this source code is governed by a BSD-style 3// license that can be found in the LICENSE file. 4 5package uuid 6 7import ( 8 "strings" 9 "testing" 10) 11 12func TestScan(t *testing.T) { 13 stringTest := "f47ac10b-58cc-0372-8567-0e02b2c3d479" 14 badTypeTest := 6 15 invalidTest := "f47ac10b-58cc-0372-8567-0e02b2c3d4" 16 17 byteTest := make([]byte, 16) 18 byteTestUUID := Must(Parse(stringTest)) 19 copy(byteTest, byteTestUUID[:]) 20 21 // sunny day tests 22 23 var uuid UUID 24 err := (&uuid).Scan(stringTest) 25 if err != nil { 26 t.Fatal(err) 27 } 28 29 err = (&uuid).Scan([]byte(stringTest)) 30 if err != nil { 31 t.Fatal(err) 32 } 33 34 err = (&uuid).Scan(byteTest) 35 if err != nil { 36 t.Fatal(err) 37 } 38 39 // bad type tests 40 41 err = (&uuid).Scan(badTypeTest) 42 if err == nil { 43 t.Error("int correctly parsed and shouldn't have") 44 } 45 if !strings.Contains(err.Error(), "unable to scan type") { 46 t.Error("attempting to parse an int returned an incorrect error message") 47 } 48 49 // invalid/incomplete uuids 50 51 err = (&uuid).Scan(invalidTest) 52 if err == nil { 53 t.Error("invalid uuid was parsed without error") 54 } 55 if !strings.Contains(err.Error(), "invalid UUID") { 56 t.Error("attempting to parse an invalid UUID returned an incorrect error message") 57 } 58 59 err = (&uuid).Scan(byteTest[:len(byteTest)-2]) 60 if err == nil { 61 t.Error("invalid byte uuid was parsed without error") 62 } 63 if !strings.Contains(err.Error(), "invalid UUID") { 64 t.Error("attempting to parse an invalid byte UUID returned an incorrect error message") 65 } 66 67 // empty tests 68 69 uuid = UUID{} 70 var emptySlice []byte 71 err = (&uuid).Scan(emptySlice) 72 if err != nil { 73 t.Fatal(err) 74 } 75 76 for _, v := range uuid { 77 if v != 0 { 78 t.Error("UUID was not nil after scanning empty byte slice") 79 } 80 } 81 82 uuid = UUID{} 83 var emptyString string 84 err = (&uuid).Scan(emptyString) 85 if err != nil { 86 t.Fatal(err) 87 } 88 for _, v := range uuid { 89 if v != 0 { 90 t.Error("UUID was not nil after scanning empty byte slice") 91 } 92 } 93 94 uuid = UUID{} 95 err = (&uuid).Scan(nil) 96 if err != nil { 97 t.Fatal(err) 98 } 99 for _, v := range uuid { 100 if v != 0 { 101 t.Error("UUID was not nil after scanning nil") 102 } 103 } 104} 105 106func TestValue(t *testing.T) { 107 stringTest := "f47ac10b-58cc-0372-8567-0e02b2c3d479" 108 uuid := Must(Parse(stringTest)) 109 val, _ := uuid.Value() 110 if val != stringTest { 111 t.Error("Value() did not return expected string") 112 } 113} 114