@@ -23,6 +23,23 @@ fn run_data_url(input: String, expected_mime: Option<String>, expected_body: Opt
23
23
fn collect_data_url < F > ( add_test : & mut F )
24
24
where F : FnMut ( String , bool , rustc_test:: TestFn )
25
25
{
26
+ let known_failures = [
27
+ "data://test:test/,X" ,
28
+ "data:;%62ase64,WA" ,
29
+ "data:;base 64,WA" ,
30
+ "data:;base64;,WA" ,
31
+ "data:;base64;base64,WA" ,
32
+ "data:;charset =x,X" ,
33
+ "data:;charset,X" ,
34
+ "data:;charset=,X" ,
35
+ "data:text/plain;,X" ,
36
+ "data:text/plain;a=\" ,\" ,X" ,
37
+ "data:x/x;base64;base64,WA" ,
38
+ "data:x/x;base64;base64x,WA" ,
39
+ "data:x/x;base64;charset=x,WA" ,
40
+ "data:x/x;base64;charset=x;base64,WA" ,
41
+ ] ;
42
+
26
43
let json = include_str ! ( "data-urls.json" ) ;
27
44
let v: serde_json:: Value = serde_json:: from_str ( json) . unwrap ( ) ;
28
45
for test in v. as_array ( ) . unwrap ( ) {
@@ -37,22 +54,7 @@ fn collect_data_url<F>(add_test: &mut F)
37
54
38
55
let expected_body = test. get ( 2 ) . map ( json_byte_array) ;
39
56
40
- let should_panic = [
41
- "data://test:test/,X" ,
42
- "data:;%62ase64,WA" ,
43
- "data:;base 64,WA" ,
44
- "data:;base64;,WA" ,
45
- "data:;base64;base64,WA" ,
46
- "data:;charset =x,X" ,
47
- "data:;charset,X" ,
48
- "data:;charset=,X" ,
49
- "data:text/plain;,X" ,
50
- "data:text/plain;a=\" ,\" ,X" ,
51
- "data:x/x;base64;base64,WA" ,
52
- "data:x/x;base64;base64x,WA" ,
53
- "data:x/x;base64;charset=x,WA" ,
54
- "data:x/x;base64;charset=x;base64,WA" ,
55
- ] . contains ( & & * input) ;
57
+ let should_panic = known_failures. contains ( & & * input) ;
56
58
add_test (
57
59
format ! ( "data: URL {:?}" , input) ,
58
60
should_panic,
@@ -77,6 +79,8 @@ fn run_base64(input: String, expected: Option<Vec<u8>>) {
77
79
fn collect_base64 < F > ( add_test : & mut F )
78
80
where F : FnMut ( String , bool , rustc_test:: TestFn )
79
81
{
82
+ let known_failures = [ ] ;
83
+
80
84
let json = include_str ! ( "base64.json" ) ;
81
85
let v: serde_json:: Value = serde_json:: from_str ( json) . unwrap ( ) ;
82
86
for test in v. as_array ( ) . unwrap ( ) {
@@ -88,7 +92,6 @@ fn collect_base64<F>(add_test: &mut F)
88
92
Some ( json_byte_array ( expected) )
89
93
} ;
90
94
91
- let known_failures = [ ] ;
92
95
let should_panic = known_failures. contains ( & & * input) ;
93
96
add_test (
94
97
format ! ( "base64 {:?}" , input) ,
@@ -100,6 +103,63 @@ fn collect_base64<F>(add_test: &mut F)
100
103
}
101
104
}
102
105
106
+ fn run_mime ( input : String , expected : Option < String > ) {
107
+ let result = input. parse :: < data_url:: mime:: Mime > ( ) ;
108
+ match ( result, expected) {
109
+ ( Ok ( bytes) , Some ( expected) ) => assert_eq ! ( bytes, & * expected) ,
110
+ ( Ok ( bytes) , None ) => panic ! ( "Expected error, got {:?}" , bytes) ,
111
+ ( Err ( e) , Some ( expected) ) => panic ! ( "Expected {:?}, got error {:?}" , expected, e) ,
112
+ ( Err ( _) , None ) => { }
113
+ }
114
+ }
115
+
116
+
117
+ fn collect_mime < F > ( add_test : & mut F )
118
+ where F : FnMut ( String , bool , rustc_test:: TestFn )
119
+ {
120
+ // Many WPT tests fail with the mime crate’s parser,
121
+ // since that parser is not written for the same spec.
122
+ // 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 ;
124
+ let known_failures = [
125
+ "text/html;charset=gbk(" ,
126
+ ] ;
127
+
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 ( ) ) ;
133
+
134
+ 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 ( ) )
146
+ } ;
147
+
148
+ let should_panic = known_failures. contains ( & & * input) ;
149
+ add_test (
150
+ if let Some ( s) = last_comment {
151
+ format ! ( "MIME type {:?} {:?}" , s, input)
152
+ } else {
153
+ format ! ( "MIME type {:?}" , input)
154
+ } ,
155
+ should_panic,
156
+ rustc_test:: TestFn :: dyn_test_fn ( move || {
157
+ run_mime ( input, expected)
158
+ } )
159
+ ) ;
160
+ }
161
+ }
162
+
103
163
fn json_byte_array ( j : & serde_json:: Value ) -> Vec < u8 > {
104
164
j. as_array ( ) . unwrap ( ) . iter ( ) . map ( |byte| {
105
165
let byte = byte. as_u64 ( ) . unwrap ( ) ;
@@ -120,6 +180,7 @@ fn main() {
120
180
} ;
121
181
collect_data_url ( & mut add_one) ;
122
182
collect_base64 ( & mut add_one) ;
183
+ collect_mime ( & mut add_one) ;
123
184
}
124
185
rustc_test:: test_main ( & std:: env:: args ( ) . collect :: < Vec < _ > > ( ) , tests)
125
186
}
0 commit comments