summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2020-01-10 13:29:46 +0100
committerMatthias Beyer <mail@beyermatthias.de>2020-01-10 13:29:46 +0100
commitd2c25c5ca10207efcd90c66a6b205904707f8bc0 (patch)
treeca13e4cc2bcde287cd08e48bc405caf08cd85b25
parent6176f736e638129ec58bd0a77726501e45d76f1a (diff)
Add tests for reading of toml documents
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
-rw-r--r--tests/tests.rs2
-rw-r--r--tests/toml/mod.rs1
-rw-r--r--tests/toml/read.rs197
3 files changed, 200 insertions, 0 deletions
diff --git a/tests/tests.rs b/tests/tests.rs
new file mode 100644
index 0000000..9c7a9f3
--- /dev/null
+++ b/tests/tests.rs
@@ -0,0 +1,2 @@
+#[macro_use] extern crate is_match;
+mod toml;
diff --git a/tests/toml/mod.rs b/tests/toml/mod.rs
new file mode 100644
index 0000000..0bec210
--- /dev/null
+++ b/tests/toml/mod.rs
@@ -0,0 +1 @@
+mod read;
diff --git a/tests/toml/read.rs b/tests/toml/read.rs
new file mode 100644
index 0000000..6e90289
--- /dev/null
+++ b/tests/toml/read.rs
@@ -0,0 +1,197 @@
+use std::str::FromStr;
+
+use toml::from_str as toml_from_str;
+use toml::Value;
+
+use serde_select::read::Read;
+use serde_select::query::Query;
+use serde_select::error::Error;
+
+#[test]
+fn test_read_empty() {
+ let toml: Value = toml_from_str("").unwrap();
+
+ let query = Query::from_str("a").unwrap();
+ let val = toml.read(&query);
+
+ assert!(val.is_ok());
+ let val = val.unwrap();
+
+ assert!(val.is_none());
+}
+
+#[test]
+fn test_read_table() {
+ let toml: Value = toml_from_str(
+ r#"
+ [table]
+ "#,
+ )
+ .unwrap();
+
+ let query = Query::from_str("table").unwrap();
+ let val = toml.read(&query);
+
+ assert!(val.is_ok());
+ let val = val.unwrap();
+
+ assert!(val.is_some());
+ let val = val.unwrap();
+
+ assert!(is_match!(val, &Value::Table(_)));
+ match val {
+ Value::Table(ref t) => assert!(t.is_empty()),
+ _ => panic!("What just happened?"),
+ }
+}
+
+#[test]
+fn test_read_table_value() {
+ let toml: Value = toml_from_str(
+ r#"
+ [table]
+ a = 1
+ "#,
+ )
+ .unwrap();
+
+ let query = Query::from_str("table.a").unwrap();
+ let val = toml.read(&query);
+
+ assert!(val.is_ok());
+ let val = val.unwrap();
+
+ assert!(val.is_some());
+ let val = val.unwrap();
+
+ assert!(is_match!(val, &Value::Integer(1)));
+}
+
+#[test]
+fn test_read_empty_table_value() {
+ let toml: Value = toml_from_str(
+ r#"
+ [table]
+ "#,
+ )
+ .unwrap();
+
+ let query = Query::from_str("table.a").unwrap();
+ let val = toml.read(&query);
+ assert!(val.is_ok());
+ let val = val.unwrap();
+
+ assert!(val.is_none());
+}
+
+#[test]
+fn test_read_table_index() {
+ let toml: Value = toml_from_str(
+ r#"
+ [table]
+ "#,
+ )
+ .unwrap();
+
+ let query = Query::from_str("table.[0]").unwrap();
+ let val = toml.read(&query);
+ assert!(val.is_err());
+ let err = val.unwrap_err();
+
+ assert!(is_match!(err, Error::NoIndexInTable(_)));
+}
+
+///
+///
+/// Querying without specifying the seperator
+///
+///
+
+#[test]
+fn test_read_empty_without_seperator() {
+ let toml: Value = toml_from_str("").unwrap();
+
+ let val = toml.read(&Query::from_str("a").unwrap());
+ assert!(val.is_ok());
+ let val = val.unwrap();
+
+ assert!(val.is_none());
+}
+
+#[test]
+fn test_read_table_without_seperator() {
+ let toml: Value = toml_from_str(
+ r#"
+ [table]
+ "#,
+ )
+ .unwrap();
+
+ let val = toml.read(&Query::from_str("table").unwrap());
+
+ assert!(val.is_ok());
+ let val = val.unwrap();
+
+ assert!(val.is_some());
+ let val = val.unwrap();
+
+ assert!(is_match!(val, &Value::Table(_)));
+ match val {
+ Value::Table(ref t) => assert!(t.is_empty()),
+ _ => panic!("What just happened?"),
+ }
+}
+
+#[test]
+fn test_read_table_value_without_seperator() {
+ let toml: Value = toml_from_str(
+ r#"
+ [table]
+ a = 1
+ "#,
+ )
+ .unwrap();
+
+ let val = toml.read(&Query::from_str("table.a").unwrap());
+
+ assert!(val.is_ok());
+ let val = val.unwrap();
+
+ assert!(val.is_some());
+ let val = val.unwrap();
+
+ assert!(is_match!(val, &Value::Integer(1)));
+}
+
+#[test]
+fn test_read_empty_table_value_without_seperator() {
+ let toml: Value = toml_from_str(
+ r#"
+ [table]
+ "#,
+ )
+ .unwrap();
+
+ let val = toml.read(&Query::from_str("table.a").unwrap());
+ assert!(val.is_ok());
+ let val = val.unwrap();
+
+ assert!(val.is_none());
+}
+
+#[test]
+fn test_read_table_index_without_seperator() {
+ let toml: Value = toml_from_str(
+ r#"
+ [table]
+ "#,
+ )
+ .unwrap();
+
+ let val = toml.read(&Query::from_str("table.[0]").unwrap());
+ assert!(val.is_err());
+ let err = val.unwrap_err();
+
+ assert!(is_match!(err, Error::NoIndexInTable(_)));
+}
+