@@ -102,3 +102,69 @@ fn test_parse_error_eq() {
102102 assert_eq ! ( err_refine1, err_refine2) ;
103103 assert_ne ! ( err_decode1, err_refine1) ;
104104}
105+
106+ #[ test]
107+ fn test_parse_error_error_trait ( ) {
108+ let decode_err = "abc" . parse :: < i32 > ( ) . unwrap_err ( ) ;
109+ let parse_error_decode =
110+ TestParseError :: Decode ( decode_err. clone ( ) ) ;
111+ if let Some ( source_err) = parse_error_decode. source ( ) {
112+ if let Some ( parsed_int_err) =
113+ source_err
114+ . downcast_ref :: < std:: num:: ParseIntError > ( )
115+ {
116+ assert_eq ! ( parsed_int_err, & decode_err) ;
117+ } else {
118+ panic ! ( "Source error was not a ParseIntError" ) ;
119+ }
120+ } else {
121+ panic ! ( "Source was None" ) ;
122+ }
123+
124+ let refine_err = MyRefineError ;
125+ let parse_error_refine =
126+ TestParseError :: Refine ( refine_err. clone ( ) ) ;
127+ if let Some ( source_err) = parse_error_refine. source ( ) {
128+ if let Some ( my_refine_err) =
129+ source_err. downcast_ref :: < MyRefineError > ( )
130+ {
131+ assert_eq ! ( my_refine_err, & refine_err) ;
132+ } else {
133+ panic ! ( "Source error was not a MyRefineError" ) ;
134+ }
135+ } else {
136+ panic ! ( "Source was None" ) ;
137+ }
138+ }
139+
140+ #[ test]
141+ fn test_parse_error_eq_trait ( ) {
142+ let decode_err1 = "abc" . parse :: < i32 > ( ) . unwrap_err ( ) ;
143+ let refine_err1 = MyRefineError ;
144+
145+ let err_decode1 =
146+ TestParseError :: Decode ( decode_err1. clone ( ) ) ;
147+
148+ let err_refine1 =
149+ TestParseError :: Refine ( refine_err1. clone ( ) ) ;
150+
151+ assert_eq ! ( err_decode1, err_decode1) ;
152+ assert_eq ! ( err_refine1, err_refine1) ;
153+
154+ assert_ne ! ( err_decode1, err_refine1) ;
155+ }
156+
157+ #[ test]
158+ fn test_parse_error_clone_variants ( ) {
159+ let decode_err = "abc" . parse :: < i32 > ( ) . unwrap_err ( ) ;
160+ let parse_error_decode =
161+ TestParseError :: Decode ( decode_err. clone ( ) ) ;
162+ let cloned_decode = parse_error_decode. clone ( ) ;
163+ assert_eq ! ( parse_error_decode, cloned_decode) ;
164+
165+ let refine_err = MyRefineError ;
166+ let parse_error_refine =
167+ TestParseError :: Refine ( refine_err. clone ( ) ) ;
168+ let cloned_refine = parse_error_refine. clone ( ) ;
169+ assert_eq ! ( parse_error_refine, cloned_refine) ;
170+ }
0 commit comments