File: errors_test.go

package info (click to toggle)
rclone 1.60.1%2Bdfsg-4
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 34,832 kB
  • sloc: sh: 957; xml: 857; python: 655; javascript: 612; makefile: 269; ansic: 101; php: 74
file content (91 lines) | stat: -rw-r--r-- 2,388 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
package errors_test

import (
	"errors"
	"fmt"
	"testing"

	"github.com/stretchr/testify/assert"

	liberrors "github.com/rclone/rclone/lib/errors"
)

func TestWalk(t *testing.T) {
	origin := errors.New("origin")

	for _, test := range []struct {
		err   error
		calls int
		last  error
	}{
		{causerError{nil}, 1, causerError{nil}},
		{wrapperError{nil}, 1, wrapperError{nil}},
		{reflectError{nil}, 1, reflectError{nil}},
		{causerError{origin}, 2, origin},
		{wrapperError{origin}, 2, origin},
		{reflectError{origin}, 2, origin},
		{causerError{reflectError{origin}}, 3, origin},
		{wrapperError{causerError{origin}}, 3, origin},
		{reflectError{wrapperError{origin}}, 3, origin},
		{causerError{reflectError{causerError{origin}}}, 4, origin},
		{wrapperError{causerError{wrapperError{origin}}}, 4, origin},
		{reflectError{wrapperError{reflectError{origin}}}, 4, origin},

		{stopError{nil}, 1, stopError{nil}},
		{stopError{causerError{nil}}, 1, stopError{causerError{nil}}},
		{stopError{wrapperError{nil}}, 1, stopError{wrapperError{nil}}},
		{stopError{reflectError{nil}}, 1, stopError{reflectError{nil}}},
		{causerError{stopError{origin}}, 2, stopError{origin}},
		{wrapperError{stopError{origin}}, 2, stopError{origin}},
		{reflectError{stopError{origin}}, 2, stopError{origin}},
		{causerError{reflectError{stopError{nil}}}, 3, stopError{nil}},
		{wrapperError{causerError{stopError{nil}}}, 3, stopError{nil}},
		{reflectError{wrapperError{stopError{nil}}}, 3, stopError{nil}},
	} {
		var last error
		calls := 0
		liberrors.Walk(test.err, func(err error) bool {
			calls++
			last = err
			_, stop := err.(stopError)
			return stop
		})
		assert.Equal(t, test.calls, calls)
		assert.Equal(t, test.last, last)
	}
}

type causerError struct {
	err error
}
type wrapperError struct {
	err error
}
type reflectError struct {
	Err error
}
type stopError struct {
	err error
}

func (e causerError) Error() string {
	return fmt.Sprintf("causerError(%s)", e.err)
}
func (e causerError) Cause() error {
	return e.err
}
func (e wrapperError) Unwrap() error {
	return e.err
}
func (e wrapperError) Error() string {
	return fmt.Sprintf("wrapperError(%s)", e.err)
}
func (e reflectError) Error() string {
	return fmt.Sprintf("reflectError(%s)", e.Err)
}
func (e stopError) Error() string {
	return fmt.Sprintf("stopError(%s)", e.err)
}
func (e stopError) Cause() error {
	return e.err
}