@@ -53,11 +53,11 @@ impl StdError for Error {
53
53
fn description ( & self ) -> & str {
54
54
match * self {
55
55
Method => "Invalid Method specified" ,
56
- Uri ( _) => "Invalid Request URI specified" ,
57
56
Version => "Invalid HTTP version specified" ,
58
57
Header => "Invalid Header provided" ,
59
58
TooLarge => "Message head is too large" ,
60
59
Status => "Invalid Status provided" ,
60
+ Uri ( ref e) => e. description ( ) ,
61
61
Io ( ref e) => e. description ( ) ,
62
62
Ssl ( ref e) => e. description ( ) ,
63
63
}
@@ -107,3 +107,51 @@ impl From<httparse::Error> for Error {
107
107
}
108
108
}
109
109
}
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