ressa 0.8.2

An ECMAscript parser
Documentation
#![cfg(test)]
use env_logger;
use ressa::Parser;

mod libs_common;

use libs_common::Lib;

#[test]
fn angular1() {
    let (normal, min) = get_js(Lib::Angular).expect("Unable to get angular js");
    run_test("angular", normal, min);
}
#[test]
fn react_core() {
    let (normal, min) = get_js(Lib::React).expect("Unable to get react js");
    run_test("react", normal, min);
}

#[test]
fn react_dom() {
    let (normal, min) = get_js(Lib::ReactDom).expect("Unable to get react-dom js");
    run_test("react-dom", normal, min);
}

#[test]
fn vue() {
    let (normal, min) = get_js(Lib::Vue).expect("Unable to get vue js");
    run_test("vue", normal, min);
}
#[test]
fn vue_esm() {
    let js = ::std::fs::read_to_string("node_modules/vue/dist/vue.esm.js").unwrap();
    run_test("vue_module", js, String::new());
}

#[test]
fn jquery() {
    let (normal, min) = get_js(Lib::Jquery).expect("Unable to get jquery js");
    run_test("jquery", normal, min);
}

#[test]
fn moment() {
    let (normal, min) = get_js(Lib::Moment).expect("Unable to get moment js");
    run_test("moment", normal, min);
}

#[test]
fn dexie() {
    let (normal, min) = get_js(Lib::Dexie).expect("Unable to get dexie js");
    run_test("dexie", normal, min);
}

fn run_test(name: &str, normal: String, min: String) {
    let _ = env_logger::builder().is_test(true).try_init().ok();
    println!("parsing: {} chars", min.len());
    let mut p = Parser::builder()
        .js(&normal)
        .module(name.contains("module"))
        .build()
        .expect(&format!("Unable to create {} parser", name));
    let r = p.parse();
    handle_result(r, name);
    let mut p = Parser::builder()
        .js(&normal)
        .module(name.contains("module"))
        .build()
        .expect(&format!("Unable to create {}.min", name));
    let r = p.parse();
    handle_result(r, &format!("{}.min", name));
}

fn handle_result<'a>(
    result: Result<resast::Program<'a>, ressa::Error>,
    name: &str,
) -> resast::Program<'a> {
    match result {
        Ok(result) => result,
        Err(e) => panic!("Unable to parse {0}\n{1}\n{1:?}", name, e),
    }
}

fn get_js(l: Lib) -> Result<(String, String), ::std::io::Error> {
    Ok((get_normal_js(l)?, get_min_js(l)?))
}

fn get_normal_js(l: Lib) -> Result<String, ::std::io::Error> {
    libs_common::get_js_file(l.path())
}

fn get_min_js(l: Lib) -> Result<String, ::std::io::Error> {
    if let Some(p) = l.min_path() {
        libs_common::get_js_file(&p)
    } else {
        Err(::std::io::Error::new(
            ::std::io::ErrorKind::NotFound,
            format!("No min path for lib: {:?}", l),
        ))
    }
}