github.com/web-platform-tests/wpt.fyi@v0.0.0-20240530210107-70cf978996f1/shared/errors_test.go (about) 1 // +build small 2 3 // Copyright 2019 The WPT Dashboard Project. All rights reserved. 4 // Use of this source code is governed by a BSD-style license that can be 5 // found in the LICENSE file. 6 7 package shared 8 9 import ( 10 "errors" 11 "testing" 12 13 "github.com/stretchr/testify/assert" 14 ) 15 16 func TestNewMultiErrorFromChan_non_empty(t *testing.T) { 17 errs := make(chan error, 2) 18 errs <- errors.New("test1") 19 errs <- errors.New("test2") 20 close(errs) 21 err := NewMultiErrorFromChan(errs, "testing") 22 assert.Equal(t, "2 error(s) occurred when testing:\ntest1\ntest2", err.Error()) 23 merr, ok := err.(MultiError) 24 assert.True(t, ok) 25 assert.Equal(t, 2, merr.Count()) 26 assert.Equal(t, 2, len(merr.Errors())) 27 } 28 29 func TestNewMultiErrorFromChan_nil(t *testing.T) { 30 errs := make(chan error) 31 close(errs) 32 // It is vital to pre-declare the type of err. 33 var err error 34 err = NewMultiErrorFromChan(errs, "testing") 35 // Do NOT use assert.Nil: we use the `nil` literal intentionally here. 36 // This is equivalent to `err == nil`. Since err is declared as error, 37 // so we are comparing err against (error)(nil), which will fail if 38 // NewMultiErrorFromChan incorrectly returns a concrete 39 // (*MultiError)(nil). 40 assert.Equal(t, nil, err) 41 _, ok := err.(MultiError) 42 assert.False(t, ok) 43 } 44 45 func TestNewMultiError_non_empty(t *testing.T) { 46 errs := []error{errors.New("test1"), errors.New("test2")} 47 err := NewMultiError(errs, "testing") 48 assert.Equal(t, "2 error(s) occurred when testing:\ntest1\ntest2", err.Error()) 49 merr, ok := err.(MultiError) 50 assert.True(t, ok) 51 assert.Equal(t, 2, merr.Count()) 52 assert.Equal(t, 2, len(merr.Errors())) 53 } 54 55 func TestNewMultiError_nil(t *testing.T) { 56 var err error 57 err = NewMultiError(nil, "testing") 58 assert.Equal(t, nil, err) 59 }