From a97a6a346815943a46273de43d07955d3c5b2ceb Mon Sep 17 00:00:00 2001 From: Raamakrishnan Date: Sun, 26 Jan 2020 22:22:39 +0530 Subject: [PATCH] add support for Filelists in file parser. --- src/file_parser.rs | 14 +++++++++++--- tests/integration_tests.rs | 23 +++++++++++++++++++++++ 2 files changed, 34 insertions(+), 3 deletions(-) create mode 100644 tests/integration_tests.rs diff --git a/src/file_parser.rs b/src/file_parser.rs index 79024e0..5bfd70f 100644 --- a/src/file_parser.rs +++ b/src/file_parser.rs @@ -5,12 +5,11 @@ use std::fs; use crate::line_parser; use crate::line_parser::LineType; -#[derive(Debug)] +#[derive(PartialEq, Debug, Default)] pub struct Filelist { pub files: Vec, pub incdirs: Vec, pub defines: HashMap, - pub comments_present: bool, } @@ -23,6 +22,13 @@ impl Filelist { comments_present: false, } } + + pub fn extend(&mut self, other: Filelist) { + self.files.extend(other.files); + self.incdirs.extend(other.incdirs); + self.defines.extend(other.defines); + self.comments_present |= other.comments_present; + } } pub fn parse_file(path: &str) -> Result> { @@ -44,7 +50,9 @@ pub fn parse_file(path: &str) -> Result> { } } LineType::Comment => filelist.comments_present = true, - _ => {} + LineType::Filelist(path) => { + filelist.extend(parse_file(path)?); + }, } } Ok(filelist) diff --git a/tests/integration_tests.rs b/tests/integration_tests.rs new file mode 100644 index 0000000..30c23e1 --- /dev/null +++ b/tests/integration_tests.rs @@ -0,0 +1,23 @@ +extern crate sv_filelist_parser; +use std::collections::HashMap; + +#[test] +fn simple_test() { + let mut defines = HashMap::new(); + defines.insert("a".to_string(), "bad".to_string()); + defines.insert("e".to_string(), "f".to_string()); + defines.insert("c".to_string(), "d".to_string()); + + let filelist_exp = sv_filelist_parser::file_parser::Filelist { + files : vec!["testcase/file1.sv".to_string(), + "testcase/file2.sv".to_string(), + "testcase/file3.sv".to_string(), + "testcase/file4.sv".to_string(),], + incdirs : vec!["testcase/".to_string()], + defines : defines, + comments_present : true + }; + let filelist = sv_filelist_parser::parse("testcase/files.f") + .expect("Error parsing"); + assert_eq!(filelist_exp, filelist); +} \ No newline at end of file