forked from mirrors/gecko-dev
		
	(Do not merge) Merge some test crates in their corresponding components Source-Repo: https://github.com/servo/servo Source-Revision: a4808a3649e6cb6e579e60b82d9979755643f711 --HG-- rename : servo/tests/unit/servo_config/opts.rs => servo/components/config/tests/opts.rs rename : servo/tests/unit/servo_config/prefs.rs => servo/components/config/tests/prefs.rs rename : servo/tests/unit/gfx/text_util.rs => servo/components/gfx/tests/text_util.rs rename : servo/tests/unit/layout/size_of.rs => servo/components/layout/tests/size_of.rs rename : servo/tests/unit/msg/size_of.rs => servo/components/msg/tests/size_of.rs rename : servo/tests/unit/net/chrome_loader.rs => servo/components/net/tests/chrome_loader.rs rename : servo/tests/unit/net/cookie.rs => servo/components/net/tests/cookie.rs rename : servo/tests/unit/net/cookie_http_state.rs => servo/components/net/tests/cookie_http_state.rs rename : servo/tests/unit/net/cookie_http_state_utils.py => servo/components/net/tests/cookie_http_state_utils.py rename : servo/tests/unit/net/data_loader.rs => servo/components/net/tests/data_loader.rs rename : servo/tests/unit/net/fetch.rs => servo/components/net/tests/fetch.rs rename : servo/tests/unit/net/file_loader.rs => servo/components/net/tests/file_loader.rs rename : servo/tests/unit/net/filemanager_thread.rs => servo/components/net/tests/filemanager_thread.rs rename : servo/tests/unit/net/hsts.rs => servo/components/net/tests/hsts.rs rename : servo/tests/unit/net/http_loader.rs => servo/components/net/tests/http_loader.rs rename : servo/tests/unit/net/lib.rs => servo/components/net/tests/main.rs rename : servo/tests/unit/net/mime_classifier.rs => servo/components/net/tests/mime_classifier.rs rename : servo/tests/unit/net/parsable_mime/application/font-woff/test.wof => servo/components/net/tests/parsable_mime/application/font-woff/test.wof rename : servo/tests/unit/net/parsable_mime/application/ogg/small.ogg => servo/components/net/tests/parsable_mime/application/ogg/small.ogg rename : servo/tests/unit/net/parsable_mime/application/pdf/test.pdf => servo/components/net/tests/parsable_mime/application/pdf/test.pdf rename : servo/tests/unit/net/parsable_mime/application/postscript/test.ps => servo/components/net/tests/parsable_mime/application/postscript/test.ps rename : servo/tests/unit/net/parsable_mime/application/vnd.ms-fontobject/vnd.ms-fontobject => servo/components/net/tests/parsable_mime/application/vnd.ms-fontobject/vnd.ms-fontobject rename : servo/tests/unit/net/parsable_mime/application/x-gzip/test.gz => servo/components/net/tests/parsable_mime/application/x-gzip/test.gz rename : servo/tests/unit/net/parsable_mime/application/x-rar-compressed/test.rar => servo/components/net/tests/parsable_mime/application/x-rar-compressed/test.rar rename : servo/tests/unit/net/parsable_mime/application/zip/test.zip => servo/components/net/tests/parsable_mime/application/zip/test.zip rename : servo/tests/unit/net/parsable_mime/audio/aiff/test.aif => servo/components/net/tests/parsable_mime/audio/aiff/test.aif rename : servo/tests/unit/net/parsable_mime/audio/basic/test.au => servo/components/net/tests/parsable_mime/audio/basic/test.au rename : servo/tests/unit/net/parsable_mime/audio/midi/test.mid => servo/components/net/tests/parsable_mime/audio/midi/test.mid rename : servo/tests/unit/net/parsable_mime/audio/mpeg/test.mp3 => servo/components/net/tests/parsable_mime/audio/mpeg/test.mp3 rename : servo/tests/unit/net/parsable_mime/audio/wave/test.wav => servo/components/net/tests/parsable_mime/audio/wave/test.wav rename : servo/tests/unit/net/parsable_mime/image/bmp/test.bmp => servo/components/net/tests/parsable_mime/image/bmp/test.bmp rename : servo/tests/unit/net/parsable_mime/image/gif/test87a => servo/components/net/tests/parsable_mime/image/gif/test87a rename : servo/tests/unit/net/parsable_mime/image/gif/test89a.gif => servo/components/net/tests/parsable_mime/image/gif/test89a.gif rename : servo/tests/unit/net/parsable_mime/image/jpeg/test.jpg => servo/components/net/tests/parsable_mime/image/jpeg/test.jpg rename : servo/tests/unit/net/parsable_mime/image/png/test.png => servo/components/net/tests/parsable_mime/image/png/test.png rename : servo/tests/unit/net/parsable_mime/image/webp/test.webp => servo/components/net/tests/parsable_mime/image/webp/test.webp rename : servo/tests/unit/net/parsable_mime/image/x-icon/test.ico => servo/components/net/tests/parsable_mime/image/x-icon/test.ico rename : servo/tests/unit/net/parsable_mime/image/x-icon/test_cursor.ico => servo/components/net/tests/parsable_mime/image/x-icon/test_cursor.ico rename : servo/tests/unit/net/parsable_mime/text/html/text_html_a_20.html => servo/components/net/tests/parsable_mime/text/html/text_html_a_20.html rename : servo/tests/unit/net/parsable_mime/text/html/text_html_a_20_u.html => servo/components/net/tests/parsable_mime/text/html/text_html_a_20_u.html rename : servo/tests/unit/net/parsable_mime/text/html/text_html_a_3e.html => servo/components/net/tests/parsable_mime/text/html/text_html_a_3e.html rename : servo/tests/unit/net/parsable_mime/text/html/text_html_a_3e_u.html => servo/components/net/tests/parsable_mime/text/html/text_html_a_3e_u.html rename : servo/tests/unit/net/parsable_mime/text/html/text_html_b_20.html => servo/components/net/tests/parsable_mime/text/html/text_html_b_20.html rename : servo/tests/unit/net/parsable_mime/text/html/text_html_b_20_u.html => servo/components/net/tests/parsable_mime/text/html/text_html_b_20_u.html rename : servo/tests/unit/net/parsable_mime/text/html/text_html_b_3e.html => servo/components/net/tests/parsable_mime/text/html/text_html_b_3e.html rename : servo/tests/unit/net/parsable_mime/text/html/text_html_b_3e_u.html => servo/components/net/tests/parsable_mime/text/html/text_html_b_3e_u.html rename : servo/tests/unit/net/parsable_mime/text/html/text_html_body_20.html => servo/components/net/tests/parsable_mime/text/html/text_html_body_20.html rename : servo/tests/unit/net/parsable_mime/text/html/text_html_body_20_u.html => servo/components/net/tests/parsable_mime/text/html/text_html_body_20_u.html rename : servo/tests/unit/net/parsable_mime/text/html/text_html_body_3e.html => servo/components/net/tests/parsable_mime/text/html/text_html_body_3e.html rename : servo/tests/unit/net/parsable_mime/text/html/text_html_body_3e_u.html => servo/components/net/tests/parsable_mime/text/html/text_html_body_3e_u.html rename : servo/tests/unit/net/parsable_mime/text/html/text_html_br_20.html => servo/components/net/tests/parsable_mime/text/html/text_html_br_20.html rename : servo/tests/unit/net/parsable_mime/text/html/text_html_br_20_u.html => servo/components/net/tests/parsable_mime/text/html/text_html_br_20_u.html rename : servo/tests/unit/net/parsable_mime/text/html/text_html_br_3e.html => servo/components/net/tests/parsable_mime/text/html/text_html_br_3e.html rename : servo/tests/unit/net/parsable_mime/text/html/text_html_br_3e_u.html => servo/components/net/tests/parsable_mime/text/html/text_html_br_3e_u.html rename : servo/tests/unit/net/parsable_mime/text/html/text_html_comment_20.html => servo/components/net/tests/parsable_mime/text/html/text_html_comment_20.html rename : servo/tests/unit/net/parsable_mime/text/html/text_html_comment_20_u.html => servo/components/net/tests/parsable_mime/text/html/text_html_comment_20_u.html rename : servo/tests/unit/net/parsable_mime/text/html/text_html_comment_3e.html => servo/components/net/tests/parsable_mime/text/html/text_html_comment_3e.html rename : servo/tests/unit/net/parsable_mime/text/html/text_html_comment_3e_u.html => servo/components/net/tests/parsable_mime/text/html/text_html_comment_3e_u.html rename : servo/tests/unit/net/parsable_mime/text/html/text_html_div_20.html => servo/components/net/tests/parsable_mime/text/html/text_html_div_20.html rename : servo/tests/unit/net/parsable_mime/text/html/text_html_div_20_u.html => servo/components/net/tests/parsable_mime/text/html/text_html_div_20_u.html rename : servo/tests/unit/net/parsable_mime/text/html/text_html_div_3e.html => servo/components/net/tests/parsable_mime/text/html/text_html_div_3e.html rename : servo/tests/unit/net/parsable_mime/text/html/text_html_div_3e_u.html => servo/components/net/tests/parsable_mime/text/html/text_html_div_3e_u.html rename : servo/tests/unit/net/parsable_mime/text/html/text_html_doctype_20.html => servo/components/net/tests/parsable_mime/text/html/text_html_doctype_20.html rename : servo/tests/unit/net/parsable_mime/text/html/text_html_doctype_20_u.html => servo/components/net/tests/parsable_mime/text/html/text_html_doctype_20_u.html rename : servo/tests/unit/net/parsable_mime/text/html/text_html_doctype_3e.html => servo/components/net/tests/parsable_mime/text/html/text_html_doctype_3e.html rename : servo/tests/unit/net/parsable_mime/text/html/text_html_doctype_3e_u.html => servo/components/net/tests/parsable_mime/text/html/text_html_doctype_3e_u.html rename : servo/tests/unit/net/parsable_mime/text/html/text_html_font_20.html => servo/components/net/tests/parsable_mime/text/html/text_html_font_20.html rename : servo/tests/unit/net/parsable_mime/text/html/text_html_font_20_u.html => servo/components/net/tests/parsable_mime/text/html/text_html_font_20_u.html rename : servo/tests/unit/net/parsable_mime/text/html/text_html_font_3e.html => servo/components/net/tests/parsable_mime/text/html/text_html_font_3e.html rename : servo/tests/unit/net/parsable_mime/text/html/text_html_font_3e_u.html => servo/components/net/tests/parsable_mime/text/html/text_html_font_3e_u.html rename : servo/tests/unit/net/parsable_mime/text/html/text_html_h1_20.html => servo/components/net/tests/parsable_mime/text/html/text_html_h1_20.html rename : servo/tests/unit/net/parsable_mime/text/html/text_html_h1_20_u.html => servo/components/net/tests/parsable_mime/text/html/text_html_h1_20_u.html rename : servo/tests/unit/net/parsable_mime/text/html/text_html_h1_3e.html => servo/components/net/tests/parsable_mime/text/html/text_html_h1_3e.html rename : servo/tests/unit/net/parsable_mime/text/html/text_html_h1_3e_u.html => servo/components/net/tests/parsable_mime/text/html/text_html_h1_3e_u.html rename : servo/tests/unit/net/parsable_mime/text/html/text_html_head_20.html => servo/components/net/tests/parsable_mime/text/html/text_html_head_20.html rename : servo/tests/unit/net/parsable_mime/text/html/text_html_head_20_u.html => servo/components/net/tests/parsable_mime/text/html/text_html_head_20_u.html rename : servo/tests/unit/net/parsable_mime/text/html/text_html_head_3e.html => servo/components/net/tests/parsable_mime/text/html/text_html_head_3e.html rename : servo/tests/unit/net/parsable_mime/text/html/text_html_head_3e_u.html => servo/components/net/tests/parsable_mime/text/html/text_html_head_3e_u.html rename : servo/tests/unit/net/parsable_mime/text/html/text_html_iframe_20.html => servo/components/net/tests/parsable_mime/text/html/text_html_iframe_20.html rename : servo/tests/unit/net/parsable_mime/text/html/text_html_iframe_20_u.html => servo/components/net/tests/parsable_mime/text/html/text_html_iframe_20_u.html rename : servo/tests/unit/net/parsable_mime/text/html/text_html_iframe_3e.html => servo/components/net/tests/parsable_mime/text/html/text_html_iframe_3e.html rename : servo/tests/unit/net/parsable_mime/text/html/text_html_iframe_3e_u.html => servo/components/net/tests/parsable_mime/text/html/text_html_iframe_3e_u.html rename : servo/tests/unit/net/parsable_mime/text/html/text_html_p_20.html => servo/components/net/tests/parsable_mime/text/html/text_html_p_20.html rename : servo/tests/unit/net/parsable_mime/text/html/text_html_p_20_u.html => servo/components/net/tests/parsable_mime/text/html/text_html_p_20_u.html rename : servo/tests/unit/net/parsable_mime/text/html/text_html_p_3e.html => servo/components/net/tests/parsable_mime/text/html/text_html_p_3e.html rename : servo/tests/unit/net/parsable_mime/text/html/text_html_p_3e_u.html => servo/components/net/tests/parsable_mime/text/html/text_html_p_3e_u.html rename : servo/tests/unit/net/parsable_mime/text/html/text_html_page_20.html => servo/components/net/tests/parsable_mime/text/html/text_html_page_20.html rename : servo/tests/unit/net/parsable_mime/text/html/text_html_page_20_u.html => servo/components/net/tests/parsable_mime/text/html/text_html_page_20_u.html rename : servo/tests/unit/net/parsable_mime/text/html/text_html_page_3e.html => servo/components/net/tests/parsable_mime/text/html/text_html_page_3e.html rename : servo/tests/unit/net/parsable_mime/text/html/text_html_page_3e_u.html => servo/components/net/tests/parsable_mime/text/html/text_html_page_3e_u.html rename : servo/tests/unit/net/parsable_mime/text/html/text_html_script_20.html => servo/components/net/tests/parsable_mime/text/html/text_html_script_20.html rename : servo/tests/unit/net/parsable_mime/text/html/text_html_script_20_u.html => servo/components/net/tests/parsable_mime/text/html/text_html_script_20_u.html rename : servo/tests/unit/net/parsable_mime/text/html/text_html_script_3e.html => servo/components/net/tests/parsable_mime/text/html/text_html_script_3e.html rename : servo/tests/unit/net/parsable_mime/text/html/text_html_script_3e_u.html => servo/components/net/tests/parsable_mime/text/html/text_html_script_3e_u.html rename : servo/tests/unit/net/parsable_mime/text/html/text_html_style_20.html => servo/components/net/tests/parsable_mime/text/html/text_html_style_20.html rename : servo/tests/unit/net/parsable_mime/text/html/text_html_style_20_u.html => servo/components/net/tests/parsable_mime/text/html/text_html_style_20_u.html rename : servo/tests/unit/net/parsable_mime/text/html/text_html_style_3e.html => servo/components/net/tests/parsable_mime/text/html/text_html_style_3e.html rename : servo/tests/unit/net/parsable_mime/text/html/text_html_style_3e_u.html => servo/components/net/tests/parsable_mime/text/html/text_html_style_3e_u.html rename : servo/tests/unit/net/parsable_mime/text/html/text_html_table_20.html => servo/components/net/tests/parsable_mime/text/html/text_html_table_20.html rename : servo/tests/unit/net/parsable_mime/text/html/text_html_table_20_u.html => servo/components/net/tests/parsable_mime/text/html/text_html_table_20_u.html rename : servo/tests/unit/net/parsable_mime/text/html/text_html_table_3e.html => servo/components/net/tests/parsable_mime/text/html/text_html_table_3e.html rename : servo/tests/unit/net/parsable_mime/text/html/text_html_table_3e_u.html => servo/components/net/tests/parsable_mime/text/html/text_html_table_3e_u.html rename : servo/tests/unit/net/parsable_mime/text/html/text_html_title_20.html => servo/components/net/tests/parsable_mime/text/html/text_html_title_20.html rename : servo/tests/unit/net/parsable_mime/text/html/text_html_title_20_u.html => servo/components/net/tests/parsable_mime/text/html/text_html_title_20_u.html rename : servo/tests/unit/net/parsable_mime/text/html/text_html_title_3e.html => servo/components/net/tests/parsable_mime/text/html/text_html_title_3e.html rename : servo/tests/unit/net/parsable_mime/text/html/text_html_title_3e_u.html => servo/components/net/tests/parsable_mime/text/html/text_html_title_3e_u.html rename : servo/tests/unit/net/parsable_mime/text/plain/utf16bebom.txt => servo/components/net/tests/parsable_mime/text/plain/utf16bebom.txt rename : servo/tests/unit/net/parsable_mime/text/plain/utf16lebom.txt => servo/components/net/tests/parsable_mime/text/plain/utf16lebom.txt rename : servo/tests/unit/net/parsable_mime/text/plain/utf8bom.txt => servo/components/net/tests/parsable_mime/text/plain/utf8bom.txt rename : servo/tests/unit/net/parsable_mime/text/xml/feed.atom => servo/components/net/tests/parsable_mime/text/xml/feed.atom rename : servo/tests/unit/net/parsable_mime/text/xml/feed.rss => servo/components/net/tests/parsable_mime/text/xml/feed.rss rename : servo/tests/unit/net/parsable_mime/text/xml/rdf_rss.xml => servo/components/net/tests/parsable_mime/text/xml/rdf_rss.xml rename : servo/tests/unit/net/parsable_mime/text/xml/rdf_rss_ko_1.xml => servo/components/net/tests/parsable_mime/text/xml/rdf_rss_ko_1.xml rename : servo/tests/unit/net/parsable_mime/text/xml/rdf_rss_ko_2.xml => servo/components/net/tests/parsable_mime/text/xml/rdf_rss_ko_2.xml rename : servo/tests/unit/net/parsable_mime/text/xml/rdf_rss_ko_3.xml => servo/components/net/tests/parsable_mime/text/xml/rdf_rss_ko_3.xml rename : servo/tests/unit/net/parsable_mime/text/xml/rdf_rss_ko_4.xml => servo/components/net/tests/parsable_mime/text/xml/rdf_rss_ko_4.xml rename : servo/tests/unit/net/parsable_mime/text/xml/test.xml => servo/components/net/tests/parsable_mime/text/xml/test.xml rename : servo/tests/unit/net/parsable_mime/unknown/binary_file => servo/components/net/tests/parsable_mime/unknown/binary_file rename : servo/tests/unit/net/parsable_mime/unknown/open_type => servo/components/net/tests/parsable_mime/unknown/open_type rename : servo/tests/unit/net/parsable_mime/unknown/true_type.ttf => servo/components/net/tests/parsable_mime/unknown/true_type.ttf rename : servo/tests/unit/net/parsable_mime/unknown/true_type_collection.ttc => servo/components/net/tests/parsable_mime/unknown/true_type_collection.ttc rename : servo/tests/unit/net/parsable_mime/video/avi/test.avi => servo/components/net/tests/parsable_mime/video/avi/test.avi rename : servo/tests/unit/net/parsable_mime/video/mp4/test.mp4 => servo/components/net/tests/parsable_mime/video/mp4/test.mp4 rename : servo/tests/unit/net/parsable_mime/video/webm/test.webm => servo/components/net/tests/parsable_mime/video/webm/test.webm rename : servo/tests/unit/net/resource_thread.rs => servo/components/net/tests/resource_thread.rs rename : servo/tests/unit/net/subresource_integrity.rs => servo/components/net/tests/subresource_integrity.rs rename : servo/tests/unit/net/test.jpeg => servo/components/net/tests/test.jpeg rename : servo/tests/unit/net_traits/image.rs => servo/components/net_traits/tests/image.rs rename : servo/tests/unit/net_traits/pub_domains.rs => servo/components/net_traits/tests/pub_domains.rs rename : servo/tests/unit/net_traits/lib.rs => servo/components/net_traits/tests/whitespace.rs rename : servo/tests/unit/servo_remutex/lib.rs => servo/components/remutex/tests/smoke.rs extra : subtree_source : https%3A//hg.mozilla.org/projects/converted-servo-linear extra : subtree_revision : ccaf67122c28522d622dcde39da197b3f2daf5b3
		
			
				
	
	
		
			560 lines
		
	
	
	
		
			18 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			560 lines
		
	
	
	
		
			18 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
/* This Source Code Form is subject to the terms of the Mozilla Public
 | 
						|
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 | 
						|
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 | 
						|
 | 
						|
use net::mime_classifier::{ApacheBugFlag, MimeClassifier, Mp4Matcher, NoSniffFlag};
 | 
						|
use net::mime_classifier::as_string_option;
 | 
						|
use net_traits::LoadContext;
 | 
						|
use std::env;
 | 
						|
use std::fs::File;
 | 
						|
use std::io::{self, Read};
 | 
						|
use std::path::{self, PathBuf};
 | 
						|
 | 
						|
fn read_file(path: &path::Path) -> io::Result<Vec<u8>> {
 | 
						|
    let mut file = File::open(path)?;
 | 
						|
    let mut buffer = Vec::new();
 | 
						|
 | 
						|
    file.read_to_end(&mut buffer)?;
 | 
						|
 | 
						|
    Ok(buffer)
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn test_sniff_mp4_matcher() {
 | 
						|
    let matcher = Mp4Matcher;
 | 
						|
 | 
						|
    let p = PathBuf::from("tests/parsable_mime/video/mp4/test.mp4");
 | 
						|
    let read_result = read_file(&p);
 | 
						|
 | 
						|
    match read_result {
 | 
						|
        Ok(data) => {
 | 
						|
            println!("Data Length {:?}", data.len());
 | 
						|
            if !matcher.matches(&data) {
 | 
						|
                panic!("Didn't read mime type")
 | 
						|
            }
 | 
						|
        },
 | 
						|
        Err(e) => panic!("Couldn't read from file with error {}", e)
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn test_sniff_mp4_matcher_long() {
 | 
						|
    // Check that a multi-byte length is calculated correctly
 | 
						|
    let matcher = Mp4Matcher;
 | 
						|
 | 
						|
    let mut data: [u8; 260] = [0; 260];
 | 
						|
    &data[.. 11].clone_from_slice(
 | 
						|
        &[0x00, 0x00, 0x01, 0x04, 0x66, 0x74, 0x79, 0x70, 0x6D, 0x70, 0x34]
 | 
						|
    );
 | 
						|
 | 
						|
    assert!(matcher.matches(&data));
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn test_validate_classifier() {
 | 
						|
    let classifier = MimeClassifier::new();
 | 
						|
    classifier.validate().expect("Validation error")
 | 
						|
}
 | 
						|
 | 
						|
#[cfg(test)]
 | 
						|
fn test_sniff_with_flags(filename_orig: &path::Path,
 | 
						|
                                 type_string: &str,
 | 
						|
                                 subtype_string: &str,
 | 
						|
                                 supplied_type: Option<(&'static str, &'static str)>,
 | 
						|
                                 no_sniff_flag: NoSniffFlag,
 | 
						|
                                 apache_bug_flag: ApacheBugFlag) {
 | 
						|
    let current_working_directory = env::current_dir().unwrap();
 | 
						|
    println!("The current directory is {}", current_working_directory.display());
 | 
						|
 | 
						|
    let mut filename = PathBuf::from("tests/parsable_mime/");
 | 
						|
    filename.push(filename_orig);
 | 
						|
 | 
						|
    let classifier = MimeClassifier::new();
 | 
						|
 | 
						|
    let read_result = read_file(&filename);
 | 
						|
 | 
						|
    match read_result {
 | 
						|
        Ok(data) => {
 | 
						|
            let supplied_type = supplied_type.map(|(x, y)| (x.parse().unwrap(), y));
 | 
						|
            let (parsed_type, parsed_subtp) = classifier.classify(LoadContext::Browsing,
 | 
						|
                                                                  no_sniff_flag,
 | 
						|
                                                                  apache_bug_flag,
 | 
						|
                                                                  &as_string_option(supplied_type),
 | 
						|
                                                                  &data);
 | 
						|
            if (&parsed_type[..] != type_string) ||
 | 
						|
                (&parsed_subtp[..] != subtype_string) {
 | 
						|
                    panic!("File {:?} parsed incorrectly should be {}/{}, parsed as {}/{}",
 | 
						|
                            filename, type_string, subtype_string,
 | 
						|
                            parsed_type, parsed_subtp);
 | 
						|
            }
 | 
						|
        }
 | 
						|
        Err(e) => panic!("Couldn't read from file {:?} with error {}",
 | 
						|
                         filename, e),
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
#[cfg(test)]
 | 
						|
fn test_sniff_full(filename_orig: &path::Path, type_string: &str, subtype_string: &str,
 | 
						|
                   supplied_type: Option<(&'static str, &'static str)>) {
 | 
						|
    test_sniff_with_flags(filename_orig,
 | 
						|
                          type_string,
 | 
						|
                          subtype_string,
 | 
						|
                          supplied_type,
 | 
						|
                          NoSniffFlag::Off,
 | 
						|
                          ApacheBugFlag::Off)
 | 
						|
}
 | 
						|
 | 
						|
#[cfg(test)]
 | 
						|
fn test_sniff_classification(file: &str, type_string: &str, subtype_string: &str,
 | 
						|
                             supplied_type: Option<(&'static str, &'static str)>) {
 | 
						|
    let mut x = PathBuf::from("./");
 | 
						|
    x.push(type_string);
 | 
						|
    x.push(subtype_string);
 | 
						|
    x.push(file);
 | 
						|
    test_sniff_full(&x, type_string, subtype_string, supplied_type);
 | 
						|
}
 | 
						|
#[cfg(test)]
 | 
						|
fn test_sniff_classification_sup(file: &str, type_string: &'static str, subtype_string: &str) {
 | 
						|
    test_sniff_classification(file, type_string, subtype_string, None);
 | 
						|
    let class_type = Some((type_string, ""));
 | 
						|
    test_sniff_classification(file, type_string, subtype_string, class_type);
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn test_sniff_x_icon() {
 | 
						|
    test_sniff_classification_sup("test.ico", "image", "x-icon");
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn test_sniff_x_icon_cursor() {
 | 
						|
    test_sniff_classification_sup("test_cursor.ico", "image", "x-icon");
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn test_sniff_bmp() {
 | 
						|
    test_sniff_classification_sup("test.bmp", "image", "bmp");
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn test_sniff_gif87a() {
 | 
						|
    test_sniff_classification_sup("test87a", "image", "gif");
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn test_sniff_gif89a() {
 | 
						|
    test_sniff_classification_sup("test89a.gif", "image", "gif");
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn test_sniff_webp() {
 | 
						|
    test_sniff_classification_sup("test.webp", "image", "webp");
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn test_sniff_png() {
 | 
						|
    test_sniff_classification_sup("test.png", "image", "png");
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn test_sniff_jpg() {
 | 
						|
    test_sniff_classification_sup("test.jpg", "image", "jpeg");
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn test_sniff_webm() {
 | 
						|
    test_sniff_classification_sup("test.webm", "video", "webm");
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn test_sniff_mp4() {
 | 
						|
    test_sniff_classification_sup("test.mp4", "video", "mp4");
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn test_sniff_avi() {
 | 
						|
    test_sniff_classification_sup("test.avi", "video", "avi");
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn test_sniff_basic() {
 | 
						|
    test_sniff_classification_sup("test.au", "audio", "basic");
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn test_sniff_aiff() {
 | 
						|
    test_sniff_classification_sup("test.aif", "audio", "aiff");
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn test_sniff_mpeg() {
 | 
						|
    test_sniff_classification_sup("test.mp3", "audio", "mpeg");
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn test_sniff_midi() {
 | 
						|
    test_sniff_classification_sup("test.mid", "audio", "midi");
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn test_sniff_wave() {
 | 
						|
    test_sniff_classification_sup("test.wav", "audio", "wave");
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn test_sniff_ogg() {
 | 
						|
    test_sniff_classification("small.ogg", "application", "ogg", None);
 | 
						|
    test_sniff_classification("small.ogg", "application", "ogg", Some(("audio", "")));
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
#[should_panic]
 | 
						|
fn test_sniff_vsn_ms_fontobject() {
 | 
						|
    test_sniff_classification_sup("vnd.ms-fontobject", "application", "vnd.ms-fontobject");
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
#[should_panic]
 | 
						|
fn test_sniff_true_type() {
 | 
						|
    test_sniff_full(&PathBuf::from("unknown/true_type.ttf"), "(TrueType)", "", None);
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
#[should_panic]
 | 
						|
fn test_sniff_open_type() {
 | 
						|
    test_sniff_full(&PathBuf::from("unknown/open_type"), "(OpenType)", "", None);
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
#[should_panic]
 | 
						|
fn test_sniff_true_type_collection() {
 | 
						|
    test_sniff_full(&PathBuf::from("unknown/true_type_collection.ttc"), "(TrueType Collection)", "", None);
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
#[should_panic]
 | 
						|
fn test_sniff_woff() {
 | 
						|
    test_sniff_classification_sup("test.wof", "application", "font-woff");
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn test_sniff_gzip() {
 | 
						|
    test_sniff_classification("test.gz", "application", "x-gzip", None);
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn test_sniff_zip() {
 | 
						|
    test_sniff_classification("test.zip", "application", "zip", None);
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn test_sniff_rar() {
 | 
						|
    test_sniff_classification("test.rar", "application", "x-rar-compressed", None);
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn test_sniff_text_html_doctype_20() {
 | 
						|
    test_sniff_classification("text_html_doctype_20.html", "text", "html", None);
 | 
						|
    test_sniff_classification("text_html_doctype_20_u.html", "text", "html", None);
 | 
						|
}
 | 
						|
#[test]
 | 
						|
fn test_sniff_text_html_doctype_3e() {
 | 
						|
    test_sniff_classification("text_html_doctype_3e.html", "text", "html", None);
 | 
						|
    test_sniff_classification("text_html_doctype_3e_u.html", "text", "html", None);
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn test_sniff_text_html_page_20() {
 | 
						|
    test_sniff_classification("text_html_page_20.html", "text", "html", None);
 | 
						|
    test_sniff_classification("text_html_page_20_u.html", "text", "html", None);
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn test_sniff_text_html_page_3e() {
 | 
						|
    test_sniff_classification("text_html_page_3e.html", "text", "html", None);
 | 
						|
    test_sniff_classification("text_html_page_3e_u.html", "text", "html", None);
 | 
						|
}
 | 
						|
#[test]
 | 
						|
fn test_sniff_text_html_head_20() {
 | 
						|
    test_sniff_classification("text_html_head_20.html", "text", "html", None);
 | 
						|
    test_sniff_classification("text_html_head_20_u.html", "text", "html", None);
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn test_sniff_text_html_head_3e() {
 | 
						|
    test_sniff_classification("text_html_head_3e.html", "text", "html", None);
 | 
						|
    test_sniff_classification("text_html_head_3e_u.html", "text", "html", None);
 | 
						|
}
 | 
						|
#[test]
 | 
						|
fn test_sniff_text_html_script_20() {
 | 
						|
    test_sniff_classification("text_html_script_20.html", "text", "html", None);
 | 
						|
    test_sniff_classification("text_html_script_20_u.html", "text", "html", None);
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn test_sniff_text_html_script_3e() {
 | 
						|
    test_sniff_classification("text_html_script_3e.html", "text", "html", None);
 | 
						|
    test_sniff_classification("text_html_script_3e_u.html", "text", "html", None);
 | 
						|
}
 | 
						|
#[test]
 | 
						|
fn test_sniff_text_html_iframe_20() {
 | 
						|
    test_sniff_classification("text_html_iframe_20.html", "text", "html", None);
 | 
						|
    test_sniff_classification("text_html_iframe_20_u.html", "text", "html", None);
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn test_sniff_text_html_iframe_3e() {
 | 
						|
    test_sniff_classification("text_html_iframe_3e.html", "text", "html", None);
 | 
						|
    test_sniff_classification("text_html_iframe_3e_u.html", "text", "html", None);
 | 
						|
}
 | 
						|
#[test]
 | 
						|
fn test_sniff_text_html_h1_20() {
 | 
						|
    test_sniff_classification("text_html_h1_20.html", "text", "html", None);
 | 
						|
    test_sniff_classification("text_html_h1_20_u.html", "text", "html", None);
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn test_sniff_text_html_h1_3e() {
 | 
						|
    test_sniff_classification("text_html_h1_3e.html", "text", "html", None);
 | 
						|
    test_sniff_classification("text_html_h1_3e_u.html", "text", "html", None);
 | 
						|
}
 | 
						|
#[test]
 | 
						|
fn test_sniff_text_html_div_20() {
 | 
						|
    test_sniff_classification("text_html_div_20.html", "text", "html", None);
 | 
						|
    test_sniff_classification("text_html_div_20_u.html", "text", "html", None);
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn test_sniff_text_html_div_3e() {
 | 
						|
    test_sniff_classification("text_html_div_3e.html", "text", "html", None);
 | 
						|
    test_sniff_classification("text_html_div_3e_u.html", "text", "html", None);
 | 
						|
}
 | 
						|
#[test]
 | 
						|
fn test_sniff_text_html_font_20() {
 | 
						|
    test_sniff_classification("text_html_font_20.html", "text", "html", None);
 | 
						|
    test_sniff_classification("text_html_font_20_u.html", "text", "html", None);
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn test_sniff_text_html_font_3e() {
 | 
						|
    test_sniff_classification("text_html_font_3e.html", "text", "html", None);
 | 
						|
    test_sniff_classification("text_html_font_3e_u.html", "text", "html", None);
 | 
						|
}
 | 
						|
#[test]
 | 
						|
fn test_sniff_text_html_table_20() {
 | 
						|
    test_sniff_classification("text_html_table_20.html", "text", "html", None);
 | 
						|
    test_sniff_classification("text_html_table_20_u.html", "text", "html", None);
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn test_sniff_text_html_table_3e() {
 | 
						|
    test_sniff_classification("text_html_table_3e.html", "text", "html", None);
 | 
						|
    test_sniff_classification("text_html_table_3e_u.html", "text", "html", None);
 | 
						|
}
 | 
						|
#[test]
 | 
						|
fn test_sniff_text_html_a_20() {
 | 
						|
    test_sniff_classification("text_html_a_20.html", "text", "html", None);
 | 
						|
    test_sniff_classification("text_html_a_20_u.html", "text", "html", None);
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn test_sniff_text_html_a_3e() {
 | 
						|
    test_sniff_classification("text_html_a_3e.html", "text", "html", None);
 | 
						|
    test_sniff_classification("text_html_a_3e_u.html", "text", "html", None);
 | 
						|
}
 | 
						|
#[test]
 | 
						|
fn test_sniff_text_html_style_20() {
 | 
						|
    test_sniff_classification("text_html_style_20.html", "text", "html", None);
 | 
						|
    test_sniff_classification("text_html_style_20_u.html", "text", "html", None);
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn test_sniff_text_html_style_3e() {
 | 
						|
    test_sniff_classification("text_html_style_3e.html", "text", "html", None);
 | 
						|
    test_sniff_classification("text_html_style_3e_u.html", "text", "html", None);
 | 
						|
}
 | 
						|
#[test]
 | 
						|
fn test_sniff_text_html_title_20() {
 | 
						|
    test_sniff_classification("text_html_title_20.html", "text", "html", None);
 | 
						|
    test_sniff_classification("text_html_title_20_u.html", "text", "html", None);
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn test_sniff_text_html_title_3e() {
 | 
						|
    test_sniff_classification("text_html_title_3e.html", "text", "html", None);
 | 
						|
    test_sniff_classification("text_html_title_3e_u.html", "text", "html", None);
 | 
						|
}
 | 
						|
#[test]
 | 
						|
fn test_sniff_text_html_b_20() {
 | 
						|
    test_sniff_classification("text_html_b_20.html", "text", "html", None);
 | 
						|
    test_sniff_classification("text_html_b_20_u.html", "text", "html", None);
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn test_sniff_text_html_b_3e() {
 | 
						|
    test_sniff_classification("text_html_b_3e.html", "text", "html", None);
 | 
						|
    test_sniff_classification("text_html_b_3e_u.html", "text", "html", None);
 | 
						|
}
 | 
						|
#[test]
 | 
						|
fn test_sniff_text_html_body_20() {
 | 
						|
    test_sniff_classification("text_html_body_20.html", "text", "html", None);
 | 
						|
    test_sniff_classification("text_html_body_20_u.html", "text", "html", None);
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn test_sniff_text_html_body_3e() {
 | 
						|
    test_sniff_classification("text_html_body_3e.html", "text", "html", None);
 | 
						|
    test_sniff_classification("text_html_body_3e_u.html", "text", "html", None);
 | 
						|
}
 | 
						|
#[test]
 | 
						|
fn test_sniff_text_html_br_20() {
 | 
						|
    test_sniff_classification("text_html_br_20.html", "text", "html", None);
 | 
						|
    test_sniff_classification("text_html_br_20_u.html", "text", "html", None);
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn test_sniff_text_html_br_3e() {
 | 
						|
    test_sniff_classification("text_html_br_3e.html", "text", "html", None);
 | 
						|
    test_sniff_classification("text_html_br_3e_u.html", "text", "html", None);
 | 
						|
}
 | 
						|
#[test]
 | 
						|
fn test_sniff_text_html_p_20() {
 | 
						|
    test_sniff_classification("text_html_p_20.html", "text", "html", None);
 | 
						|
    test_sniff_classification("text_html_p_20_u.html", "text", "html", None);
 | 
						|
}
 | 
						|
#[test]
 | 
						|
fn test_sniff_text_html_p_3e() {
 | 
						|
    test_sniff_classification("text_html_p_3e.html", "text", "html", None);
 | 
						|
    test_sniff_classification("text_html_p_3e_u.html", "text", "html", None);
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn test_sniff_text_html_comment_20() {
 | 
						|
    test_sniff_classification("text_html_comment_20.html", "text", "html", None);
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn test_sniff_text_html_comment_3e() {
 | 
						|
    test_sniff_classification("text_html_comment_3e.html", "text", "html", None);
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn test_sniff_xml() {
 | 
						|
    test_sniff_classification("test.xml", "text", "xml", None);
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn test_sniff_pdf() {
 | 
						|
    test_sniff_classification("test.pdf", "application", "pdf", None);
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn test_sniff_postscript() {
 | 
						|
    test_sniff_classification("test.ps", "application", "postscript", None);
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn test_sniff_utf_16be_bom() {
 | 
						|
    test_sniff_classification("utf16bebom.txt", "text", "plain", None);
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn test_sniff_utf_16le_bom() {
 | 
						|
    test_sniff_classification("utf16lebom.txt", "text", "plain", None);
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn test_sniff_utf_8_bom() {
 | 
						|
    test_sniff_classification("utf8bom.txt", "text", "plain", None);
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn test_sniff_rss_feed() {
 | 
						|
    // RSS feeds
 | 
						|
    test_sniff_full(&PathBuf::from("text/xml/feed.rss"), "application", "rss+xml", Some(("text", "html")));
 | 
						|
    test_sniff_full(&PathBuf::from("text/xml/rdf_rss.xml"), "application", "rss+xml", Some(("text", "html")));
 | 
						|
    // Not RSS feeds
 | 
						|
    test_sniff_full(&PathBuf::from("text/xml/rdf_rss_ko_1.xml"), "text", "html", Some(("text", "html")));
 | 
						|
    test_sniff_full(&PathBuf::from("text/xml/rdf_rss_ko_2.xml"), "text", "html", Some(("text", "html")));
 | 
						|
    test_sniff_full(&PathBuf::from("text/xml/rdf_rss_ko_3.xml"), "text", "html", Some(("text", "html")));
 | 
						|
    test_sniff_full(&PathBuf::from("text/xml/rdf_rss_ko_4.xml"), "text", "html", Some(("text", "html")));
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn test_sniff_atom_feed() {
 | 
						|
    test_sniff_full(&PathBuf::from("text/xml/feed.atom"), "application", "atom+xml", Some(("text", "html")));
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn test_sniff_binary_file() {
 | 
						|
    test_sniff_full(&PathBuf::from("unknown/binary_file"), "application", "octet-stream", None);
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn test_sniff_atom_feed_with_no_sniff_flag_on() {
 | 
						|
    test_sniff_with_flags(&PathBuf::from("text/xml/feed.atom"),
 | 
						|
                                  "text",
 | 
						|
                                  "html",
 | 
						|
                                  Some(("text", "html")),
 | 
						|
                                  NoSniffFlag::On,
 | 
						|
                                  ApacheBugFlag::Off);
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn test_sniff_with_no_sniff_flag_on_and_apache_flag_on() {
 | 
						|
    test_sniff_with_flags(&PathBuf::from("text/xml/feed.atom"),
 | 
						|
                                  "text",
 | 
						|
                                  "html",
 | 
						|
                                  Some(("text", "html")),
 | 
						|
                                  NoSniffFlag::On,
 | 
						|
                                  ApacheBugFlag::On);
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn test_sniff_utf_8_bom_with_apache_flag_on() {
 | 
						|
    test_sniff_with_flags(&PathBuf::from("text/plain/utf8bom.txt"),
 | 
						|
                                  "text",
 | 
						|
                                  "plain",
 | 
						|
                                  Some(("dummy", "text")),
 | 
						|
                                  NoSniffFlag::Off,
 | 
						|
                                  ApacheBugFlag::On);
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn test_sniff_utf_16be_bom_with_apache_flag_on() {
 | 
						|
    test_sniff_with_flags(&PathBuf::from("text/plain/utf16bebom.txt"),
 | 
						|
                                  "text",
 | 
						|
                                  "plain",
 | 
						|
                                  Some(("dummy", "text")),
 | 
						|
                                  NoSniffFlag::Off,
 | 
						|
                                  ApacheBugFlag::On);
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn test_sniff_utf_16le_bom_with_apache_flag_on() {
 | 
						|
    test_sniff_with_flags(&PathBuf::from("text/plain/utf16lebom.txt"),
 | 
						|
                                  "text",
 | 
						|
                                  "plain",
 | 
						|
                                  Some(("dummy", "text")),
 | 
						|
                                  NoSniffFlag::Off,
 | 
						|
                                  ApacheBugFlag::On);
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn test_sniff_octet_stream_apache_flag_on() {
 | 
						|
    test_sniff_with_flags(&PathBuf::from("unknown/binary_file"),
 | 
						|
                                  "application",
 | 
						|
                                  "octet-stream",
 | 
						|
                                  Some(("dummy", "binary")),
 | 
						|
                                  NoSniffFlag::Off,
 | 
						|
                                  ApacheBugFlag::On);
 | 
						|
}
 | 
						|
 | 
						|
#[test]
 | 
						|
fn test_sniff_mp4_video_apache_flag_on() {
 | 
						|
    test_sniff_with_flags(&PathBuf::from("video/mp4/test.mp4"),
 | 
						|
                          "application",
 | 
						|
                          "octet-stream",
 | 
						|
                          Some(("video", "mp4")),
 | 
						|
                          NoSniffFlag::Off,
 | 
						|
                          ApacheBugFlag::On);
 | 
						|
}
 |