csvpp 0.4.1

Compile csvpp source code to a target spreadsheet format
Documentation
use super::Template;
use std::fmt;

impl fmt::Display for Template<'_> {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        writeln!(f, "# Variables")?;
        for ast in self.variables.values() {
            writeln!(f, "{ast}")?;
        }

        writeln!(f, "\n# Functions")?;
        for ast in self.functions.values() {
            writeln!(f, "fn {ast}")?;
        }

        writeln!(f, "\n# Spreadsheet")?;
        write!(f, "{}", self.spreadsheet.borrow())
    }
}

#[cfg(test)]
mod tests {
    use crate::test_utils::TestFile;
    use crate::{Runtime, Spreadsheet, Template};
    use std::cell;
    use std::collections;

    fn build_template(runtime: &Runtime) -> Template {
        Template {
            csv_line_number: 5,
            functions: collections::HashMap::new(),
            variables: collections::HashMap::new(),
            runtime,
            spreadsheet: cell::RefCell::new(Spreadsheet::default()),
        }
    }

    #[test]
    fn display() {
        let test_file = TestFile::new("csv", "");
        let runtime = test_file.into();
        let template_str = build_template(&runtime).to_string();

        assert!(template_str.contains("# Variables"));
        assert!(template_str.contains("# Functions"));
        assert!(template_str.contains("# Spreadsheet"));
    }
}