go.charczuk.com@v0.0.0-20240327042549-bc490516bd1a/sdk/errutil/append_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 errutil
     9  
    10  import (
    11  	"errors"
    12  	"testing"
    13  
    14  	"go.charczuk.com/sdk/assert"
    15  )
    16  
    17  func Test_Append(t *testing.T) {
    18  	original := Multi([]error{errors.New("foo")})
    19  
    20  	result := Append(original, errors.New("bar")).(Multi)
    21  	if len(result) != 2 {
    22  		t.Fatalf("wrong len: %d", len(result))
    23  	}
    24  
    25  	original = Multi{}
    26  	result = Append(original, errors.New("bar")).(Multi)
    27  	if len(result) != 1 {
    28  		t.Fatalf("wrong len: %d", len(result))
    29  	}
    30  
    31  	// Test when a typed nil is passed
    32  	var e Multi
    33  	result = Append(e, errors.New("baz")).(Multi)
    34  	if len(result) != 1 {
    35  		t.Fatalf("wrong len: %d", len(result))
    36  	}
    37  
    38  	// Test flattening
    39  	original = Multi([]error{errors.New("foo")})
    40  
    41  	result = Append(original, Append(nil, errors.New("foo"), errors.New("bar"))).(Multi)
    42  	if len(result) != 2 {
    43  		t.Fatalf("wrong len: %d", len(result))
    44  	}
    45  }
    46  
    47  func Test_Append_nil_error(t *testing.T) {
    48  	var err error
    49  	result := Append(err, errors.New("bar")).(Multi)
    50  	if len(result) != 1 {
    51  		t.Fatalf("wrong len: %d", len(result))
    52  	}
    53  }
    54  
    55  func Test_Append_nilErrorArg(t *testing.T) {
    56  	var err error
    57  	var nilErr error
    58  	result := Append(err, nilErr)
    59  	if result != nil {
    60  		t.Fatalf("expected nil, was: %v", result)
    61  	}
    62  }
    63  
    64  func Test_Append_nonMulti(t *testing.T) {
    65  	original := errors.New("foo")
    66  	result := Append(original, errors.New("bar")).(Multi)
    67  	if len(result) != 2 {
    68  		t.Fatalf("wrong len: %d", len(result))
    69  	}
    70  }
    71  
    72  func Test_Append_nonMulti_Multi(t *testing.T) {
    73  	original := errors.New("foo")
    74  	result := Append(original, Append(nil, errors.New("bar"))).(Multi)
    75  	if len(result) != 2 {
    76  		t.Fatalf("wrong len: %d", len(result))
    77  	}
    78  }
    79  
    80  func Test_AppendFlat(t *testing.T) {
    81  	root := errors.New("root")
    82  	err0 := errors.New("test error 0")
    83  	err1 := errors.New("test error 1")
    84  	err2 := errors.New("test error 2")
    85  
    86  	nested1 := Append(root, err0, err1)
    87  	nested2 := Append(root, err1, err2)
    88  
    89  	flat := AppendFlat(root, nested1, nested2)
    90  
    91  	assert.ItsLen(t, flat, 7)
    92  }
    93  
    94  func Test_AppendFlat_nils(t *testing.T) {
    95  	root := errors.New("root")
    96  	err0 := errors.New("test error 0")
    97  	err1 := errors.New("test error 1")
    98  	err2 := errors.New("test error 2")
    99  
   100  	nested1 := Append(root, err0, nil, err1)
   101  	nested2 := Append(root, nil, err1, err2)
   102  
   103  	flat := AppendFlat(root, nested1, nested2)
   104  
   105  	assert.ItsLen(t, flat, 7)
   106  }
   107  
   108  func Test_Append_notFlat(t *testing.T) {
   109  	root := errors.New("root")
   110  	err0 := errors.New("test error 0")
   111  	err1 := errors.New("test error 1")
   112  	err2 := errors.New("test error 2")
   113  
   114  	nested1 := Append(root, err0, err1)
   115  	nested2 := Append(root, err1, err2)
   116  
   117  	flat := Append(root, nested1, nested2)
   118  
   119  	assert.ItsLen(t, flat, 3)
   120  }