@@ -53,11 +53,11 @@ impl StdError for Error {
5353 fn description ( & self ) -> & str {
5454 match * self {
5555 Method => "Invalid Method specified" ,
56- Uri ( _) => "Invalid Request URI specified" ,
5756 Version => "Invalid HTTP version specified" ,
5857 Header => "Invalid Header provided" ,
5958 TooLarge => "Message head is too large" ,
6059 Status => "Invalid Status provided" ,
60+ Uri ( ref e) => e. description ( ) ,
6161 Io ( ref e) => e. description ( ) ,
6262 Ssl ( ref e) => e. description ( ) ,
6363 }
@@ -107,3 +107,51 @@ impl From<httparse::Error> for Error {
107107 }
108108 }
109109}
110+
111+ #[ cfg( test) ]
112+ mod tests {
113+ use std:: error:: Error as StdError ;
114+ use std:: io;
115+ use httparse;
116+ use openssl:: ssl:: error:: SslError ;
117+ use url;
118+ use super :: Error ;
119+ use super :: Error :: * ;
120+
121+ #[ test]
122+ fn test_cause ( ) {
123+ let orig = io:: Error :: new ( io:: ErrorKind :: Other , "other" ) ;
124+ let desc = orig. description ( ) . to_owned ( ) ;
125+ let e = Io ( orig) ;
126+ assert_eq ! ( e. cause( ) . unwrap( ) . description( ) , desc) ;
127+ }
128+
129+ macro_rules! from {
130+ ( $from: expr => $error: pat) => {
131+ match Error :: from( $from) {
132+ $error => ( ) ,
133+ _ => panic!( "{:?}" , $from)
134+ }
135+ }
136+ }
137+
138+ #[ test]
139+ fn test_from ( ) {
140+
141+ from ! ( io:: Error :: new( io:: ErrorKind :: Other , "other" ) => Io ( ..) ) ;
142+ from ! ( url:: ParseError :: EmptyHost => Uri ( ..) ) ;
143+
144+ from ! ( SslError :: StreamError ( io:: Error :: new( io:: ErrorKind :: Other , "ssl" ) ) => Io ( ..) ) ;
145+ from ! ( SslError :: SslSessionClosed => Ssl ( ..) ) ;
146+
147+
148+ from ! ( httparse:: Error :: HeaderName => Header ) ;
149+ from ! ( httparse:: Error :: HeaderName => Header ) ;
150+ from ! ( httparse:: Error :: HeaderValue => Header ) ;
151+ from ! ( httparse:: Error :: NewLine => Header ) ;
152+ from ! ( httparse:: Error :: Status => Status ) ;
153+ from ! ( httparse:: Error :: Token => Header ) ;
154+ from ! ( httparse:: Error :: TooManyHeaders => TooLarge ) ;
155+ from ! ( httparse:: Error :: Version => Version ) ;
156+ }
157+ }
0 commit comments