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  }