dotproperties 0.1.0

Parser for the Java .properties file format
Documentation
extern crate dotproperties;

use std::path::{Path, PathBuf};
use std::collections::HashMap;

fn sample(s: &str) -> PathBuf {
    Path::new(file!()).with_file_name(s)
}

#[test]
fn test_parse_samples_from_slice() {
    assert!(dotproperties::parse_from_slice(include_bytes!("samples/a.properties")).is_ok());
    assert!(dotproperties::parse_from_slice(include_bytes!("samples/b.properties")).is_ok());
    assert!(dotproperties::parse_from_slice(include_bytes!("samples/c.properties")).is_ok());
    assert!(dotproperties::parse_from_slice(include_bytes!("samples/d.properties")).is_ok());
    assert!(dotproperties::parse_from_slice(include_bytes!("samples/e.properties")).is_ok());
    assert!(dotproperties::parse_from_slice(include_bytes!("samples/f.properties")).is_ok());
    assert!(dotproperties::parse_from_slice(include_bytes!("samples/g.properties")).is_ok());
    assert!(dotproperties::parse_from_slice(include_bytes!("samples/h.properties")).is_ok());
    assert!(dotproperties::parse_from_slice(include_bytes!("samples/i.properties")).is_ok());
    assert!(dotproperties::parse_from_slice(include_bytes!("samples/j.properties")).is_ok());
}

#[test]
fn test_parse_samples_from_file() {
    assert!(dotproperties::parse_from_file(sample("samples/a.properties")).is_ok());
    assert!(dotproperties::parse_from_file(sample("samples/b.properties")).is_ok());
    assert!(dotproperties::parse_from_file(sample("samples/c.properties")).is_ok());
    assert!(dotproperties::parse_from_file(sample("samples/d.properties")).is_ok());
    assert!(dotproperties::parse_from_file(sample("samples/e.properties")).is_ok());
    assert!(dotproperties::parse_from_file(sample("samples/f.properties")).is_ok());
    assert!(dotproperties::parse_from_file(sample("samples/g.properties")).is_ok());
    assert!(dotproperties::parse_from_file(sample("samples/h.properties")).is_ok());
    assert!(dotproperties::parse_from_file(sample("samples/i.properties")).is_ok());
    assert!(dotproperties::parse_from_file(sample("samples/j.properties")).is_ok());
}

macro_rules! assert_key_value {
    ($m:expr, $k:expr, $v:expr) => {assert_eq!($m.get($k).map(|v| &**v), Some($v));}
}

#[test]
fn test_parse_a() {
    let parsed = dotproperties::parse_from_file(sample("samples/a.properties")).unwrap();
    assert_eq!(parsed.len(), 180);
    let map : HashMap<_,_> = parsed.into_iter().collect();
    assert_key_value!(map, "config.unbind.ask", "Are you sure to unbind this configuration ?");
    assert_key_value!(map, "config.title.exists", "? ");
    assert_key_value!(map,
                      "404",
                      "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\
                       <html xmlns=\"http://www.w3.org/1999/xhtml\"><head><meta http-equiv=\"refresh\" content=\"3;URL={0}\" />\
                       <title>404 Not Found</title>\
                       </head><body>\
                       <p>The requested page was not found. If you are not forwarded in 3 seconds to the Web Console, please click <a href=\"{0}\">here</a></p>\
                       </body></html>");
}

#[test]
fn test_parse_b() {
    let parsed = dotproperties::parse_from_file(sample("samples/b.properties")).unwrap();
    assert_eq!(parsed.len(), 45);
    let map : HashMap<_,_> = parsed.into_iter().collect();
    assert_key_value!(map,
                      "framework.system.packages.extra.basic",
                      "com.sun.awt, \
                       com.sun.image.codec.jpeg, \
                       com.sun.imageio.spi, \
                       com.sun.xml.internal.bind, \
                       javax.accessibility, \
                       javax.imageio, \
                       javax.imageio.event, \
                       javax.imageio.metadata, \
                       javax.imageio.plugins.jpeg, \
                       javax.imageio.spi, \
                       javax.imageio.stream, \
                       javax.media, \
                       javax.swing, \
                       javax.swing.border, \
                       javax.swing.event, \
                       javax.swing.filechooser, \
                       javax.swing.plaf, \
                       javax.swing.plaf.basic, \
                       javax.swing.plaf.metal, \
                       javax.swing.table, \
                       javax.swing.text, \
                       javax.swing.tree, \
                       javax.xml.bind, \
                       javax.xml.parsers, \
                       javax.xml.namespace, \
                       javax.xml.stream, \
                       javax.xml.transform, \
                       javax.xml.transform.stax, \
                       javax.xml.validation, \
                       org.w3c.dom, \
                       org.xml.sax, \
                       org.xml.sax.ext, \
                       org.xml.sax.helpers, \
                       sun.awt, \
                       sun.awt.geom, \
                       sun.awt.image, \
                       sun.awt.image.codec, \
                       sun.java2d.opengl, \
                       sun.security.action, \
                       sun.misc, \
                       sun.net.www.protocol.file, \
                       sun.reflect");
    assert_key_value!(map,
                      "obr.repository.url",
                      "http://felix.apache.org/obr/releases.xml ${weasis.codebase.url}/bundle/repository.xml");
    assert_key_value!(map,
                      "weasis.copyrights",
                      "\u{00a9} 2009-2017 Weasis Team");
}

#[test]
fn test_parse_c() {
    let parsed = dotproperties::parse_from_file(sample("samples/c.properties")).unwrap();
    assert_eq!(parsed.len(), 149);
    let map : HashMap<_,_> = parsed.into_iter().collect();
    assert_key_value!(map,
                      "Actor_Label_self",
                      "Self \u{0020}\u{21e8}\u{0020} Self");
}

#[test]
fn test_parse_g() {
    let parsed = dotproperties::parse_from_file(sample("samples/g.properties")).unwrap();
    assert_eq!(parsed.len(), 0);
}

#[test]
fn test_parse_i() {
    let parsed = dotproperties::parse_from_file(sample("samples/i.properties")).unwrap();
    let map : HashMap<_,_> = parsed.into_iter().collect();
    assert_key_value!(map,
                      "AE",
                      "C\u{00e1}c Ti\u{1ec3}u V\u{01b0}\u{01a1}ng qu\u{1ed1}c A-r\u{1ead}p Th\u{1ed1}ng nh\u{1ea5}t");
}