// Input text is excerpted from public domain books on gutenberg.org or wikisource.org extern crate elasticlunr; extern crate strum; use std::fs::File; use std::io::{BufRead, BufReader, Read, Write}; use std::path::Path; use elasticlunr::pipeline::tokenize; use elasticlunr::*; use strum::IntoEnumIterator; fn get_lang_code(lang: Language) -> &'static str { match lang { #[cfg(feature = "du")] Language::Dutch => "du", _ => lang.to_code(), } } #[allow(dead_code)] fn write_output(lang: Language) { let code = get_lang_code(lang); let base = Path::new(env!("CARGO_MANIFEST_DIR")) .join("tests") .join("data"); let input = base.join(&format!("{}.in.txt", code)); let mut input_str = String::new(); File::open(&input) .unwrap() .read_to_string(&mut input_str) .unwrap(); let output = base.join(&format!("{}.out.rs.txt", code)); let mut output = File::create(&output).unwrap(); let pipeline = lang.make_pipeline(); let tokens = pipeline.run(tokenize(&input_str)); for tok in tokens { writeln!(&mut output, "{}", tok).unwrap(); } } fn compare_to_fixture(lang: Language) { let code = get_lang_code(lang); let base = Path::new(env!("CARGO_MANIFEST_DIR")) .join("tests") .join("data"); let input = base.join(&format!("{}.in.txt", code)); let mut input_str = String::new(); File::open(&input) .unwrap() .read_to_string(&mut input_str) .unwrap(); let output = base.join(&format!("{}.out.txt", code)); let mut output = BufReader::new(File::open(&output).unwrap()).lines(); let pipeline = lang.make_pipeline(); let tokens = pipeline.run(tokenize(&input_str)); for tok in tokens { assert_eq!( tok, output.next().unwrap().unwrap(), "Comparing pipeline tokens to fixture for {:?}", lang ); } } #[test] fn test_languages() { for lang in Language::iter() { //write_output(lang); compare_to_fixture(lang); } }