| // Copyright 2019 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package proto |
| |
| import ( |
| "errors" |
| "testing" |
| ) |
| |
| type testErrorList []error |
| |
| func (e testErrorList) Error() string { |
| return "testErrorList" |
| } |
| |
| type invalidUTF8Error struct{} |
| |
| func (e invalidUTF8Error) Error() string { return "" } |
| func (e invalidUTF8Error) InvalidUTF8() bool { return true } |
| |
| type requiredNotSetError struct{} |
| |
| func (e requiredNotSetError) Error() string { return "" } |
| func (e requiredNotSetError) RequiredNotSet() bool { return true } |
| |
| func TestNonFatalErrors(t *testing.T) { |
| tests := []struct { |
| input error |
| want errorMask |
| }{{ |
| input: errors.New("not one of them"), |
| }, { |
| input: testErrorList{}, |
| }, { |
| input: testErrorList{ |
| invalidUTF8Error{}, |
| }, |
| want: errInvalidUTF8, |
| }, { |
| input: testErrorList{ |
| requiredNotSetError{}, |
| }, |
| want: errRequiredNotSet, |
| }, { |
| input: testErrorList{ |
| invalidUTF8Error{}, |
| requiredNotSetError{}, |
| }, |
| want: errInvalidUTF8 | errRequiredNotSet, |
| }} |
| |
| for _, tc := range tests { |
| tc := tc |
| t.Run("", func(t *testing.T) { |
| got := nonFatalErrors(tc.input) |
| if got != tc.want { |
| t.Errorf("got %v, want %v", got, tc.want) |
| } |
| }) |
| } |
| } |