use std::path::Path;

/// Check if given path has extension which in the given vector.
pub fn has_executable_extension<T: AsRef<Path>, S: AsRef<str>>(path: T, pathext: &[S]) -> bool {
    let ext = path.as_ref().extension().and_then(|e| e.to_str());
    match ext {
        Some(ext) => pathext
            .iter()
            .any(|e| ext.eq_ignore_ascii_case(&e.as_ref()[1..])),
        _ => false,
    }
}

#[cfg(test)]
mod test {
    use super::*;
    use std::path::PathBuf;

    #[test]
    fn test_extension_in_extension_vector() {
        // Case insensitive
        assert!(has_executable_extension(
            PathBuf::from("foo.exe"),
            &[".COM", ".EXE", ".CMD"]
        ));

        assert!(has_executable_extension(
            PathBuf::from("foo.CMD"),
            &[".COM", ".EXE", ".CMD"]
        ));
    }

    #[test]
    fn test_extension_not_in_extension_vector() {
        assert!(!has_executable_extension(
            PathBuf::from("foo.bar"),
            &[".COM", ".EXE", ".CMD"]
        ));
    }
}
