1
1
extern crate data_url;
2
2
extern crate rustc_test;
3
+ #[ macro_use] extern crate serde;
3
4
extern crate serde_json;
4
5
5
6
fn run_data_url ( input : String , expected_mime : Option < String > , expected_body : Option < Vec < u8 > > ) {
@@ -40,20 +41,19 @@ fn collect_data_url<F>(add_test: &mut F)
40
41
"data:x/x;base64;charset=x;base64,WA" ,
41
42
] ;
42
43
43
- let json = include_str ! ( "data-urls.json" ) ;
44
- let v: serde_json:: Value = serde_json:: from_str ( json) . unwrap ( ) ;
45
- for test in v. as_array ( ) . unwrap ( ) {
46
- let input = test. get ( 0 ) . unwrap ( ) . as_str ( ) . unwrap ( ) . to_owned ( ) ;
47
-
48
- let expected_mime = test. get ( 1 ) . unwrap ( ) ;
49
- let expected_mime = if expected_mime. is_null ( ) {
50
- None
51
- } else {
52
- Some ( expected_mime. as_str ( ) . unwrap ( ) . to_owned ( ) )
44
+ #[ derive( Deserialize ) ]
45
+ #[ serde( untagged) ]
46
+ enum TestCase {
47
+ Two ( String , Option < String > ) ,
48
+ Three ( String , Option < String > , Vec < u8 > ) ,
49
+ } ;
50
+
51
+ let v: Vec < TestCase > = serde_json:: from_str ( include_str ! ( "data-urls.json" ) ) . unwrap ( ) ;
52
+ for test in v {
53
+ let ( input, expected_mime, expected_body) = match test {
54
+ TestCase :: Two ( i, m) => ( i, m, None ) ,
55
+ TestCase :: Three ( i, m, b) => ( i, m, Some ( b) ) ,
53
56
} ;
54
-
55
- let expected_body = test. get ( 2 ) . map ( json_byte_array) ;
56
-
57
57
let should_panic = known_failures. contains ( & & * input) ;
58
58
add_test (
59
59
format ! ( "data: URL {:?}" , input) ,
@@ -81,17 +81,9 @@ fn collect_base64<F>(add_test: &mut F)
81
81
{
82
82
let known_failures = [ ] ;
83
83
84
- let json = include_str ! ( "base64.json" ) ;
85
- let v: serde_json:: Value = serde_json:: from_str ( json) . unwrap ( ) ;
86
- for test in v. as_array ( ) . unwrap ( ) {
87
- let input = test. get ( 0 ) . unwrap ( ) . as_str ( ) . unwrap ( ) . to_owned ( ) ;
88
- let expected = test. get ( 1 ) . unwrap ( ) ;
89
- let expected = if expected. is_null ( ) {
90
- None
91
- } else {
92
- Some ( json_byte_array ( expected) )
93
- } ;
94
-
84
+ let v: Vec < ( String , Option < Vec < u8 > > ) > =
85
+ serde_json:: from_str ( include_str ! ( "base64.json" ) ) . unwrap ( ) ;
86
+ for ( input, expected) in v {
95
87
let should_panic = known_failures. contains ( & & * input) ;
96
88
add_test (
97
89
format ! ( "base64 {:?}" , input) ,
@@ -120,34 +112,35 @@ fn collect_mime<F>(add_test: &mut F)
120
112
// Many WPT tests fail with the mime crate’s parser,
121
113
// since that parser is not written for the same spec.
122
114
// Only run a few of them for now, since listing all the failures individually is not useful.
123
- let only_run_first_n_tests = 5 ;
115
+ let only_run_first_n_entries = 5 ;
124
116
let known_failures = [
125
117
"text/html;charset=gbk(" ,
126
118
] ;
127
119
128
- let json = include_str ! ( "mime-types.json" ) ;
129
- let json2 = include_str ! ( "generated-mime-types.json" ) ;
130
- let v: serde_json:: Value = serde_json:: from_str ( json) . unwrap ( ) ;
131
- let v2: serde_json:: Value = serde_json:: from_str ( json2) . unwrap ( ) ;
132
- let tests = v. as_array ( ) . unwrap ( ) . iter ( ) . chain ( v2. as_array ( ) . unwrap ( ) ) ;
120
+ #[ derive( Deserialize ) ]
121
+ #[ serde( untagged) ]
122
+ enum Entry {
123
+ Comment ( String ) ,
124
+ TestCase { input : String , output : Option < String > }
125
+ }
126
+
127
+ let v: Vec < Entry > = serde_json:: from_str ( include_str ! ( "mime-types.json" ) ) . unwrap ( ) ;
128
+ let v2: Vec < Entry > = serde_json:: from_str ( include_str ! ( "generated-mime-types.json" ) ) . unwrap ( ) ;
129
+ let entries = v. into_iter ( ) . chain ( v2) ;
133
130
134
131
let mut last_comment = None ;
135
- for test in tests. take ( only_run_first_n_tests) {
136
- if let Some ( s) = test. as_str ( ) {
137
- last_comment = Some ( s) ;
138
- continue
139
- }
140
- let input = test. get ( "input" ) . unwrap ( ) . as_str ( ) . unwrap ( ) . to_owned ( ) ;
141
- let expected = test. get ( "output" ) . unwrap ( ) ;
142
- let expected = if expected. is_null ( ) {
143
- None
144
- } else {
145
- Some ( expected. as_str ( ) . unwrap ( ) . to_owned ( ) )
132
+ for entry in entries. take ( only_run_first_n_entries) {
133
+ let ( input, expected) = match entry {
134
+ Entry :: TestCase { input, output } => ( input, output) ,
135
+ Entry :: Comment ( s) => {
136
+ last_comment = Some ( s) ;
137
+ continue
138
+ }
146
139
} ;
147
140
148
141
let should_panic = known_failures. contains ( & & * input) ;
149
142
add_test (
150
- if let Some ( s) = last_comment {
143
+ if let Some ( ref s) = last_comment {
151
144
format ! ( "MIME type {:?} {:?}" , s, input)
152
145
} else {
153
146
format ! ( "MIME type {:?}" , input)
@@ -160,14 +153,6 @@ fn collect_mime<F>(add_test: &mut F)
160
153
}
161
154
}
162
155
163
- fn json_byte_array ( j : & serde_json:: Value ) -> Vec < u8 > {
164
- j. as_array ( ) . unwrap ( ) . iter ( ) . map ( |byte| {
165
- let byte = byte. as_u64 ( ) . unwrap ( ) ;
166
- assert ! ( byte <= 0xFF ) ;
167
- byte as u8
168
- } ) . collect ( )
169
- }
170
-
171
156
fn main ( ) {
172
157
let mut tests = Vec :: new ( ) ;
173
158
{
0 commit comments