]> git.huck.website - metaforge.git/commitdiff
builder test
authorHuck Boles <huck@huck.website>
Fri, 5 May 2023 14:51:15 +0000 (09:51 -0500)
committerHuck Boles <huck@huck.website>
Fri, 5 May 2023 14:51:15 +0000 (09:51 -0500)
src/filetype/builder.rs
src/parser/parse.rs
src/tests/test_files/test_expand.meta [new file with mode: 0644]
src/tests/test_files/test_expanded [new file with mode: 0644]
src/tests/test_files/test_pattern.meta [moved from src/tests/test_pattern.meta with 100% similarity]
src/tests/test_files/test_source.meta [moved from src/tests/test_source.meta with 100% similarity]
src/tests/test_metafile.rs
src/tests/test_parser.rs

index 0ea4c552599aeb37c61458a9dc56506aa37782e9..a3edb3e8112cf1f6a4fc8048437b998b2df9c404 100644 (file)
@@ -12,7 +12,7 @@ pub fn build_metafile(file: &MetaFile, dirs: &RootDirs, path: &Path) -> Result<(
     )?)
 }
 
-fn metafile_to_string(file: &MetaFile, dirs: &RootDirs, name: Option<&str>) -> Result<String> {
+pub fn metafile_to_string(file: &MetaFile, dirs: &RootDirs, name: Option<&str>) -> Result<String> {
     let mut output = String::default();
 
     for section in file.source.iter() {
index 094c17aa0da1ab4d958d3a41d5d006bd6918e970..c50976049cda8c0477e718e23090ebca0aa5e9d5 100644 (file)
@@ -16,7 +16,7 @@ pub fn parse_file(file: &str) -> Result<MetaFile> {
     Ok(parse_pair(meta_source))
 }
 
-pub fn parse_pair(pair: Pair<Rule>) -> MetaFile {
+fn parse_pair(pair: Pair<Rule>) -> MetaFile {
     let mut meta_file = MetaFile::new();
 
     if Rule::file == pair.as_rule() {
@@ -26,7 +26,8 @@ pub fn parse_pair(pair: Pair<Rule>) -> MetaFile {
                 Rule::var_def => meta_file.variables = parse_defs(pair.into_inner()),
                 Rule::arr_def => meta_file.arrays = parse_array_defs(pair.into_inner()),
                 Rule::pat_def => meta_file.patterns = parse_defs(pair.into_inner()),
-                Rule::EOI => (),
+                // do nothing on end of file
+                Rule::EOI => continue,
                 // anything else is either hidden or children of previous nodes and will be dealt with
                 // in respective parse functions
                 _ => unreachable!(),
@@ -96,6 +97,7 @@ fn parse_sub(pair: Pair<Rule>) -> &'_ str {
 fn parse_assign(pair: Pair<Rule>) -> (&'_ str, &'_ str) {
     let mut key = "";
     let mut val = "";
+
     for pair in pair.into_inner() {
         if Rule::key == pair.as_rule() {
             key = pair.as_str();
@@ -103,7 +105,7 @@ fn parse_assign(pair: Pair<Rule>) -> (&'_ str, &'_ str) {
         if Rule::value == pair.as_rule() {
             let tmp = pair.as_str();
             // blank and default shoud be handled by whoever is getting the value
-            // set it to empty strings do remove it from the HashMap
+            // set it to empty strings to remove it from the HashMap
             if tmp == "BLANK" || tmp == "DEFAULT" {
                 return ("", "");
             }
@@ -121,6 +123,7 @@ fn parse_assign(pair: Pair<Rule>) -> (&'_ str, &'_ str) {
 fn parse_assign_array(pair: Pair<Rule>) -> (&str, Vec<&str>) {
     let mut key = "";
     let mut val = Vec::default();
+
     for pair in pair.into_inner() {
         if Rule::key == pair.as_rule() {
             key = pair.as_str();
@@ -140,9 +143,11 @@ fn parse_array(pairs: Pairs<Rule>) -> Vec<&str> {
         if Rule::string == pair.as_rule() {
             let tmp = pair.as_str();
             // remove surrounding quotes from values
+            // see parse_assign() for reasoning
             let val = &tmp[1..tmp.len() - 1];
             vec.push(val);
         }
     }
+
     vec
 }
diff --git a/src/tests/test_files/test_expand.meta b/src/tests/test_files/test_expand.meta
new file mode 100644 (file)
index 0000000..4e1db92
--- /dev/null
@@ -0,0 +1,37 @@
+${
+    var1 = "val1"
+    var2 = BLANK
+    var3 = 'value with spaces'
+}
+
+@{
+    arr1 = ['val1']
+    arr2 = []
+    pat1.arr = ["value", "value with spaces"]
+}
+
+&{
+    pat1 = "pattern"
+    pat2.sub_pat = 'sub_pattern'
+    pat2.default = DEFAULT
+    pat2.blank = BLANK
+}
+
+TESTS:
+
+var1 [val1]: ${var1}
+var2 [BLANK]: ${var2}
+var3 [value with spaces]: ${var3}
+
+arr1 [val1]: @{arr1}
+arr3 [BLANK]: @{arr2}
+
+Pattern subs:
+
+pat1 [with array]: &{pat1}
+pat2: 
+    .sub_pat: &{pat2.sub_pat}
+    .default: &{pat2.default}
+    .blank: &{pat2.blank}
+
+This comment should not be rendered: -{arr1}
diff --git a/src/tests/test_files/test_expanded b/src/tests/test_files/test_expanded
new file mode 100644 (file)
index 0000000..e69de29
index f6a30bede8a7f94feec85223beb5ec9e872663ac..4af6e593ca720e67f2debe329d590719f05ba9fe 100644 (file)
@@ -1,7 +1,10 @@
-use crate::parse_file;
+use crate::{metafile_to_string, parse_file, RootDirs};
 use color_eyre::Result;
+use std::path::PathBuf;
 
 static SOURCE: &str = include_str!("test_source.meta");
+static PRE_EXPAND: &str = include_str!("test_expand.meta");
+static POST_EXPAND: &str = include_str!("test_expanded");
 
 #[test]
 fn test_metafile_gets() -> Result<()> {
@@ -27,3 +30,19 @@ fn test_metafile_gets() -> Result<()> {
 
     Ok(())
 }
+
+#[test]
+fn test_metafile_to_str() -> Result<()> {
+    let metafile = parse_file(PRE_EXPAND)?;
+    let dirs = RootDirs {
+        source: PathBuf::new(),
+        build: PathBuf::new(),
+        pattern: PathBuf::new(),
+    };
+
+    let file = metafile_to_string(&metafile, &dirs, None)?;
+
+    assert_eq!(file, "");
+
+    Ok(())
+}
index 2e063f13ae73183c3d1cce16f78c52b057f2e7e2..ca32d62d33d9da1602799161c663521e4a1d2726 100644 (file)
@@ -5,7 +5,7 @@ static SOURCE: &str = include_str!("test_source.meta");
 static PATTERN: &str = include_str!("test_pattern.meta");
 
 #[test]
-fn build_meta_file() -> Result<()> {
+fn parse_meta_file() -> Result<()> {
     let source = parse_file(SOURCE)?;
 
     assert_eq!(source.variables.get("var").unwrap(), &"good");
@@ -35,7 +35,7 @@ fn build_meta_file() -> Result<()> {
 }
 
 #[test]
-fn build_pattern_file() -> Result<()> {
+fn parse_pattern_file() -> Result<()> {
     let mut pattern_src = parse_file(PATTERN)?.source.into_iter();
 
     pattern_src.next();