csvpp 0.7.0

Compile csv++ source code to a target spreadsheet format
Documentation
//! CSV is nice for testing certain language features because we can compare the output easily and
//! don't have to deal with things like APIs or binary formats.
//!
mod common;
use common::*;

#[test]
fn write_no_code_section() {
    assert_eq!(
        Setup::from_str(
            "write_no_code_section",
            "csv",
            r#"
---
foo,bar,baz
"#,
        )
        .compile()
        .unwrap()
        .read_output(),
        "foo,bar,baz\n"
    );
}

#[test]
fn write_string() {
    assert_eq!(
        Setup::from_str(
            "write_string",
            "csv",
            r#"
foo := "1"
bar := "quoted ""string"""
---
foo,bar,baz,=foo,=bar
"#,
        )
        .compile()
        .unwrap()
        .read_output(),
        r#"foo,bar,baz,"=""1""","=""quoted ""string"""""
"#
    );
}

#[test]
fn write_variable() {
    assert_eq!(
        Setup::from_str(
            "write_variable",
            "csv",
            r#"
foo := 1
---
foo,bar,baz,=foo
"#,
        )
        .compile()
        .unwrap()
        .read_output(),
        r"foo,bar,baz,=1
"
    );
}

#[test]
fn write_expand() {
    assert_eq!(
        Setup::from_str(
            "write_expand",
            "csv",
            r#"
commission_charge := 0.65 # the broker charges $0.65 a contract/share

fees := commission_charge * D
profit := (B * C) - fees

---
![[text=bold/halign=center]]Date   ,[[t=b]] Purchase ,Price  ,Quantity ,Profit     ,Fees
![[fill=2]]                        ,[[text=bold]]    ,       ,         ,"=profit"  ,"=fees"
"#,
        )
        .compile()
        .unwrap()
        .read_output(),
        "Date,Purchase,Price,Quantity,Profit,Fees
,,,,=((B * C) - (0.65 * D)),=(0.65 * D)
,,,,=((B * C) - (0.65 * D)),=(0.65 * D)
"
    );
}

#[test]
fn odd_row_widths() {
    assert_eq!(
        Setup::from_str(
            "odd_row_widths",
            "csv",
            r#"
var1 := 42

var2 := var1 + 5

fn funky_fun(a, b) a + b

---
[[var=a1]]A1,foo,bar
![[fill=10]],bar,=var2
foo
[[lock]]test,
![[lock]]test1,test2,test3,
"#,
        )
        .compile()
        .unwrap()
        .read_output(),
        "A1,foo,bar,
,bar,=(42 + 5),
,bar,=(42 + 5),
,bar,=(42 + 5),
,bar,=(42 + 5),
,bar,=(42 + 5),
,bar,=(42 + 5),
,bar,=(42 + 5),
,bar,=(42 + 5),
,bar,=(42 + 5),
,bar,=(42 + 5),
foo,,,
test,,,
test1,test2,test3,
"
    );
}