go.charczuk.com@v0.0.0-20240327042549-bc490516bd1a/sdk/uuid/parse_test.go (about) 1 /* 2 3 Copyright (c) 2023 - Present. Will Charczuk. All rights reserved. 4 Use of this source code is governed by a MIT license that can be found in the LICENSE file at the root of the repository. 5 6 */ 7 8 package uuid 9 10 import ( 11 "fmt" 12 "testing" 13 14 . "go.charczuk.com/sdk/assert" 15 ) 16 17 func Test_MustParse(t *testing.T) { 18 validShort := V4().String() 19 validParsedShort := MustParse(validShort) 20 ItsEqual(t, true, validParsedShort.IsV4()) 21 ItsEqual(t, validShort, validParsedShort.String()) 22 23 var invalidParsed UUID 24 var r interface{} 25 func() { 26 defer func() { 27 r = recover() 28 }() 29 invalidParsed = MustParse("foobarbaz") 30 }() 31 ItsEqual(t, false, r == nil) 32 ItsEqual(t, true, invalidParsed.IsZero()) 33 } 34 35 func Test_Parse_v4_valid(t *testing.T) { 36 validShort := V4().String() 37 validParsedShort, err := Parse(validShort) 38 ItsEqual(t, nil, err) 39 ItsEqual(t, true, validParsedShort.IsV4()) 40 ItsEqual(t, validShort, validParsedShort.String()) 41 42 validFull := fmt.Sprintf("%+v", V4()) 43 validParsedFull, err := Parse(validFull) 44 ItsEqual(t, nil, err) 45 ItsEqual(t, true, validParsedFull.IsV4()) 46 ItsEqual(t, validFull, fmt.Sprintf("%+v", validParsedFull)) 47 48 validBracedShort := fmt.Sprintf("{%s}", validShort) 49 validParsedBracedShort, err := Parse(validBracedShort) 50 ItsEqual(t, nil, err) 51 ItsEqual(t, true, validParsedBracedShort.IsV4()) 52 ItsEqual(t, validShort, validParsedBracedShort.String()) 53 54 validBracedFull := fmt.Sprintf("{%s}", validFull) 55 validParsedBracedFull, err := Parse(validBracedFull) 56 ItsEqual(t, nil, err) 57 ItsEqual(t, true, validParsedBracedFull.IsV4()) 58 ItsEqual(t, validFull, fmt.Sprintf("%+v", validParsedBracedFull)) 59 } 60 61 func Test_Parse_v4_invalid(t *testing.T) { 62 _, err := Parse("fcae3946f75d+3258678bb5e6795a6d3") 63 ItsNotNil(t, err, "should error for invalid characters") 64 65 _, err = Parse("4f2e28b7b8f94b9eba1d90c4452") 66 ItsNotNil(t, err, "should error for invalid length uuids") 67 } 68 69 func Test_ParseInto_invalid(t *testing.T) { 70 var uuid UUID 71 var err error 72 err = ParseInto(&uuid, "") 73 ItsEqual(t, nil, err) 74 75 err = ParseInto(&uuid, "earth") 76 ItsEqual(t, ErrParseInvalidLength, err.Error()) 77 78 err = ParseInto(&uuid, "{aaa{aaa") 79 ItsEqual(t, ErrParseIllegalCharacter, err.Error()) 80 81 err = ParseInto(&uuid, "{aa}aa") 82 ItsEqual(t, ErrParseIllegalCharacter, err.Error()) 83 84 err = ParseInto(&uuid, "ab-cde") 85 ItsEqual(t, ErrParseIllegalCharacter, err.Error()) 86 87 err = ParseInto(&uuid, "88888888-4444-qqqq-4444-121212121212") 88 ItsEqual(t, ErrParseIllegalCharacter, err.Error()) 89 90 err = ParseInto(&uuid, "88888888-4444-4444-4444-88888888") 91 ItsEqual(t, ErrParseInvalidLength, err.Error()) 92 93 err = ParseInto(&uuid, "88888888-4444-4444-4444-1616161616161616") 94 ItsEqual(t, ErrParseInvalidLength, err.Error()) 95 } 96 97 func Test_fromHexChar(t *testing.T) { 98 99 for x := '0'; x <= '9'; x++ { 100 c, ok := fromHexChar(byte(x)) 101 ItsEqual(t, true, ok) 102 ItsEqual(t, x-'0', c) 103 } 104 105 for x := 'a'; x <= 'f'; x++ { 106 c, ok := fromHexChar(byte(x)) 107 ItsEqual(t, true, ok) 108 ItsEqual(t, x-'a'+10, c) 109 } 110 111 for x := 'A'; x <= 'F'; x++ { 112 c, ok := fromHexChar(byte(x)) 113 ItsEqual(t, true, ok) 114 ItsEqual(t, x-'A'+10, c) 115 } 116 117 c, ok := fromHexChar('z') 118 ItsEqual(t, false, ok) 119 ItsEqual(t, 0, c) 120 }