8
8
9
9
//! Data-driven tests
10
10
11
- extern crate rustc_serialize ;
11
+ extern crate serde_json ;
12
12
extern crate rustc_test as test;
13
13
extern crate url;
14
14
15
- use rustc_serialize :: json :: { self , Json } ;
15
+ use serde_json :: Value ;
16
16
use url:: { Url , quirks} ;
17
+ use std:: str:: FromStr ;
17
18
18
19
fn check_invariants ( url : & Url ) {
19
20
url. check_invariants ( ) . unwrap ( ) ;
20
21
#[ cfg( feature="serde" ) ] {
21
- extern crate serde_json;
22
22
let bytes = serde_json:: to_vec ( url) . unwrap ( ) ;
23
23
let new_url: Url = serde_json:: from_slice ( & bytes) . unwrap ( ) ;
24
24
assert_eq ! ( url, & new_url) ;
@@ -84,46 +84,42 @@ struct ExpectedAttributes {
84
84
}
85
85
86
86
trait JsonExt {
87
- fn take ( & mut self , key : & str ) -> Option < Json > ;
88
- fn object ( self ) -> json:: Object ;
87
+ fn take_key ( & mut self , key : & str ) -> Option < Value > ;
89
88
fn string ( self ) -> String ;
90
89
fn take_string ( & mut self , key : & str ) -> String ;
91
90
}
92
91
93
- impl JsonExt for Json {
94
- fn take ( & mut self , key : & str ) -> Option < Json > {
92
+ impl JsonExt for Value {
93
+ fn take_key ( & mut self , key : & str ) -> Option < Value > {
95
94
self . as_object_mut ( ) . unwrap ( ) . remove ( key)
96
95
}
97
96
98
- fn object ( self ) -> json:: Object {
99
- if let Json :: Object ( o) = self { o } else { panic ! ( "Not a Json::Object" ) }
100
- }
101
-
102
97
fn string ( self ) -> String {
103
- if let Json :: String ( s) = self { s } else { panic ! ( "Not a Json ::String" ) }
98
+ if let Value :: String ( s) = self { s } else { panic ! ( "Not a Value ::String" ) }
104
99
}
105
100
106
101
fn take_string ( & mut self , key : & str ) -> String {
107
- self . take ( key) . unwrap ( ) . string ( )
102
+ self . take_key ( key) . unwrap ( ) . string ( )
108
103
}
109
104
}
110
105
111
106
fn collect_parsing < F : FnMut ( String , test:: TestFn ) > ( add_test : & mut F ) {
112
107
// Copied form https://github.com/w3c/web-platform-tests/blob/master/url/
113
- let mut json = Json :: from_str ( include_str ! ( "urltestdata.json" ) )
108
+ let mut json = Value :: from_str ( include_str ! ( "urltestdata.json" ) )
114
109
. expect ( "JSON parse error in urltestdata.json" ) ;
115
110
for entry in json. as_array_mut ( ) . unwrap ( ) {
116
111
if entry. is_string ( ) {
117
112
continue // ignore comments
118
113
}
119
114
let base = entry. take_string ( "base" ) ;
120
115
let input = entry. take_string ( "input" ) ;
121
- let expected = if entry. find ( "failure" ) . is_some ( ) {
116
+ let expected = if entry. take_key ( "failure" ) . is_some ( ) {
122
117
Err ( ( ) )
123
118
} else {
124
119
Ok ( ExpectedAttributes {
125
120
href : entry. take_string ( "href" ) ,
126
- origin : entry. take ( "origin" ) . map ( Json :: string) ,
121
+ origin : entry. take_key ( "origin" )
122
+ . map ( |s| s. string ( ) ) ,
127
123
protocol : entry. take_string ( "protocol" ) ,
128
124
username : entry. take_string ( "username" ) ,
129
125
password : entry. take_string ( "password" ) ,
@@ -141,18 +137,20 @@ fn collect_parsing<F: FnMut(String, test::TestFn)>(add_test: &mut F) {
141
137
}
142
138
143
139
fn collect_setters < F > ( add_test : & mut F ) where F : FnMut ( String , test:: TestFn ) {
144
- let mut json = Json :: from_str ( include_str ! ( "setters_tests.json" ) )
140
+ let mut json = Value :: from_str ( include_str ! ( "setters_tests.json" ) )
145
141
. expect ( "JSON parse error in setters_tests.json" ) ;
146
142
147
143
macro_rules! setter {
148
144
( $attr: expr, $setter: ident) => { {
149
- let mut tests = json. take ( $attr) . unwrap( ) ;
145
+ let mut tests = json. take_key ( $attr) . unwrap( ) ;
150
146
for mut test in tests. as_array_mut( ) . unwrap( ) . drain( ..) {
151
- let comment = test. take( "comment" ) . map( Json :: string) . unwrap_or( String :: new( ) ) ;
147
+ let comment = test. take_key( "comment" )
148
+ . map( |s| s. string( ) )
149
+ . unwrap_or( String :: new( ) ) ;
152
150
let href = test. take_string( "href" ) ;
153
151
let new_value = test. take_string( "new_value" ) ;
154
152
let name = format!( "{:?}.{} = {:?} {}" , href, $attr, new_value, comment) ;
155
- let mut expected = test. take ( "expected" ) . unwrap( ) ;
153
+ let mut expected = test. take_key ( "expected" ) . unwrap( ) ;
156
154
add_test( name, test:: TestFn :: dyn_test_fn( move || {
157
155
let mut url = Url :: parse( & href) . unwrap( ) ;
158
156
check_invariants( & url) ;
@@ -167,7 +165,7 @@ fn collect_setters<F>(add_test: &mut F) where F: FnMut(String, test::TestFn) {
167
165
macro_rules! assert_attributes {
168
166
( $url: expr, $expected: expr, $( $attr: ident) +) => {
169
167
$(
170
- if let Some ( value) = $expected. take ( stringify!( $attr) ) {
168
+ if let Some ( value) = $expected. take_key ( stringify!( $attr) ) {
171
169
assert_eq!( quirks:: $attr( & $url) , value. string( ) )
172
170
}
173
171
) +
@@ -184,7 +182,7 @@ fn collect_setters<F>(add_test: &mut F) where F: FnMut(String, test::TestFn) {
184
182
setter ! ( "hash" , set_hash) ;
185
183
}
186
184
187
- fn main ( ) {
185
+ pub fn main ( ) {
188
186
let mut tests = Vec :: new ( ) ;
189
187
{
190
188
let mut add_one = |name : String , run : test:: TestFn | {
0 commit comments