// Input text is excerpted from public domain books on gutenberg.org or wikisource.org use elasticlunr::*; use std::fs::File; use std::io::{BufRead, BufReader, Read, Write}; use std::path::Path; #[allow(dead_code)] fn write_output(lang: &dyn Language) { let code = lang.code(); 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 = File::create(&output).unwrap(); let pipeline = lang.make_pipeline(); let tokens = pipeline.run(lang.tokenize(&input_str)); for tok in tokens { writeln!(&mut output, "{}", tok).unwrap(); } } fn compare_to_fixture(lang: &dyn Language) { let code = lang.code(); 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(lang.tokenize(&input_str)); for tok in tokens { assert_eq!( tok, output.next().unwrap().unwrap(), "Comparing pipeline tokens to fixture for {}", lang.name() ); } } #[test] fn test_languages() { for lang in lang::languages() { //write_output(lang.as_ref()); compare_to_fixture(lang.as_ref()); } }