#![cfg_attr(rustfmt, rustfmt_skip)]
use indoc::indoc;
use crate::kernel::Settings;
use crate::model::Transaction;
use crate::parser;
use super::*;
use tackler_rs::IndocUtils;
#[test]
#[allow(clippy::too_many_lines)]
fn err_timestamp_parse() {
let perr_strings: Vec<(String, &str, &str)> = vec![
(indoc!(
"|
|2017
| a 1
| e 1
|
|").strip_margin(),
"line: 2",
r"at input '2017'"
),
(indoc!(
"|
|2017-1
| a 1
| e 1
|
|").strip_margin(),
"line: 2",
r"at input '2017-1'"
),
(indoc!(
"|
|2017-01
| a 1
| e 1
|
|").strip_margin(),
"line: 2",
r"at input '2017-01'"
),
(indoc!(
"|
|2017-1-1
| a 1
| e 1
|
|").strip_margin(),
"line: 2",
r"at input '2017-1-1'"
),
(indoc!(
"|
|2017-01-1
| a 1
| e 1
|
|").strip_margin(),
"line: 2",
r"at input '2017-01-1'"
),
(indoc!(
"|
|2017-01-01+0200
| a 1
| e 1
|
|").strip_margin(),
"line: 2",
r"at input '+'"
),
(indoc!(
"|
|2017-01-01T14+02:00
| a 1
| e 1
|
|").strip_margin(),
"line: 2",
r"at input '2017-01-01T14'"
),
(indoc!(
"|
|2017-01-01T14:00+02:00
| a 1
| e 1
|
|").strip_margin(),
"line: 2",
r"at input '2017-01-01T14'"
),
(indoc!(
"|
|2017-01-01T14:00:00+0200
| a 1
| e 1
|
|").strip_margin(),
"line: 2",
r"at input '+'"
),
(indoc!(
"|
|2017-01-01-04:00
| a 1
| e 1
|
|").strip_margin(),
"line: 2",
r"at input '2017-01-01-04'"
),
(indoc!(
"|
|2017-01-01T14-04:00
| a 1
| e 1
|
|").strip_margin(),
"line: 2",
r"at input '2017-01-01T14-04'"
),
(indoc!(
"|
|2017-01-01T14:00-04:00
| a 1
| e 1
|
|").strip_margin(),
"line: 2",
r"at input '2017-01-01T14'"
),
(indoc!(
"|
|2017-01-01T14:00:00-0400
| a 1
| e 1
|
|").strip_margin(),
"line: 2",
r"at input '-0400'"
),
];
let mut count = 0;
for t in perr_strings {
let res = parser::string_to_txns(&mut t.0.as_str(), &mut Settings::default());
assert!(res.is_err(),
"Testing Error: Offending test vector item: {count}");
count += 1;
}
assert_eq!(count, 13);
}
#[test]
fn err_ts_format_v2_parse() {
let perr_strings: Vec<(String, &str, &str)> = vec![
(indoc!(
"|
|2017-01-01 Z
| a 1
| e 1
|
|").strip_margin(),
"line: 2",
r"at input ' Z'"
),
(indoc!(
"|
|2017-01-01 +02:00
| a 1
| e 1
|
|").strip_margin(),
"line: 2",
r"at input ' +'"
),
(indoc!(
"|
|2017-01-01 -04:00
| a 1
| e 1
|
|").strip_margin(),
"line: 2",
r"at input ' -04'"
),
(indoc!(
"|
|2017-01-01T14:00:00 Z
| a 1
| e 1
|
|").strip_margin(),
"line: 2",
r"at input ' Z'"
),
(indoc!(
"|
|2017-01-01T14:00:00 +02:00
| a 1
| e 1
|
|").strip_margin(),
"line: 2",
"at input ' +'"
),
(indoc!(
"|
|2017-01-01T14:00:00 -04:00
| a 1
| e 1
|
|").strip_margin(),
"line: 2",
r"at input ' -04'"
),
(indoc!(
"|
|2017-01-01 T 14:00:00+02:00
| a 1
| e 1
|
|").strip_margin(),
"line: 2",
r"at input ' T'"
),
(indoc!(
"|
|2017-01-01 T 14:00:00 +02:00
| a 1
| e 1
|
|").strip_margin(),
"line: 2",
r"at input ' T'"
),
];
let mut count = 0;
for t in perr_strings {
let res = parser::string_to_txns(&mut t.0.as_str(), &mut Settings::default());
assert!(res.is_err(),
"Testing Error: Offending test vector item: {count}");
count += 1;
}
assert_eq!(count, 8);
}
#[test]
#[allow(clippy::too_many_lines)]
fn ok_timestamp() {
let pok_strings: Vec<(String, &str)> = vec![
(indoc!(
"|
|2017-06-24
| a 1
| e -1
|
|").strip_margin(),
"2017-06-24T00:00:00+00:00"
),
(indoc!(
"|
|2017-06-24 \n\
| a 1
| e -1
|
|").strip_margin(),
"2017-06-24T00:00:00+00:00"
),
(indoc!(
"|
|2017-06-24\t \t \n\
| a 1
| e -1
|
|").strip_margin(),
"2017-06-24T00:00:00+00:00"
),
(indoc!(
"|
|2017-06-24T14:01:02
| a 1
| e -1
|
|").strip_margin(),
"2017-06-24T14:01:02+00:00"
),
(indoc!(
"|
|2017-06-24T14:01:02 \n\
| a 1
| e -1
|
|").strip_margin(),
"2017-06-24T14:01:02+00:00"
),
(indoc!(
"|
|2017-06-24T14:01:02\t \t \n\
| a 1
| e -1
|
|").strip_margin(),
"2017-06-24T14:01:02+00:00"
),
(indoc!(
"|
|2017-06-24T14:01:02Z
| a 1
| e -1
|
|").strip_margin(),
"2017-06-24T14:01:02+00:00"
),
(indoc!(
"|
|2017-06-24T14:01:02Z \n\
| a 1
| e -1
|
|").strip_margin(),
"2017-06-24T14:01:02+00:00"
),
(indoc!(
"|
|2017-06-24T14:01:02Z\t \t \n\
| a 1
| e -1
|
|").strip_margin(),
"2017-06-24T14:01:02+00:00"
),
(indoc!(
"|
|2017-06-24T14:01:10+02:00
| a 1
| e -1
|
|").strip_margin(),
"2017-06-24T14:01:10+02:00"
),
(indoc!(
"|
|2017-06-24T14:01:10+02:00 \n\
| a 1
| e -1
|
|").strip_margin(),
"2017-06-24T14:01:10+02:00"
),
(indoc!(
"|
|2017-06-24T14:01:10+02:00\t \t \n\
| a 1
| e -1
|
|").strip_margin(),
"2017-06-24T14:01:10+02:00"
),
(indoc!(
"|
|2017-06-24T14:01:10-04:00
| a 1
| e -1
|
|").strip_margin(),
"2017-06-24T14:01:10-04:00"
),
(indoc!(
"|
|2017-06-24T14:01:10-04:00 \n\
| a 1
| e -1
|
|").strip_margin(),
"2017-06-24T14:01:10-04:00"
),
(indoc!(
"|
|2017-06-24T14:01:10-04:00\t \t \n\
| a 1
| e -1
|
|").strip_margin(),
"2017-06-24T14:01:10-04:00"
),
(indoc!(
"|
|2017-06-24T14:01:02.123456789
| a 1
| e -1
|
|").strip_margin(),
"2017-06-24T14:01:02.123456789+00:00"
),
(indoc!(
"|
|2017-06-24T14:01:02.123456789 \n\
| a 1
| e -1
|
|").strip_margin(),
"2017-06-24T14:01:02.123456789+00:00"
),
(indoc!(
"|
|2017-06-24T14:01:02.123456789\t \t \n\
| a 1
| e -1
|
|").strip_margin(),
"2017-06-24T14:01:02.123456789+00:00"
),
(indoc!(
"|
|2017-06-24T14:01:02.123456789Z
| a 1
| e -1
|
|").strip_margin(),
"2017-06-24T14:01:02.123456789+00:00"
),
(indoc!(
"|
|2017-06-24T14:01:02.123456789Z \n\
| a 1
| e -1
|
|").strip_margin(),
"2017-06-24T14:01:02.123456789+00:00"
),
(indoc!(
"|
|2017-06-24T14:01:02.123456789Z \t \n\
| a 1
| e -1
|
|").strip_margin(),
"2017-06-24T14:01:02.123456789+00:00"
),
(indoc!(
"|
|2017-06-24T14:01:10.123456789+02:00
| a 1
| e -1
|
|").strip_margin(),
"2017-06-24T14:01:10.123456789+02:00"
),
(indoc!(
"|
|2017-06-24T14:01:10.123456789+02:00 \n\
| a 1
| e -1
|
|").strip_margin(),
"2017-06-24T14:01:10.123456789+02:00"
),
(indoc!(
"|
|2017-06-24T14:01:10.123456789+02:00\t \t \n\
| a 1
| e -1
|
|").strip_margin(),
"2017-06-24T14:01:10.123456789+02:00"
),
(indoc!(
"|
|2017-06-24T14:01:10.123456789-04:00
| a 1
| e -1
|
|").strip_margin(),
"2017-06-24T14:01:10.123456789-04:00"
),
(indoc!(
"|
|2017-06-24T14:01:10.123456789-04:00 \n\
| a 1
| e -1
|
|").strip_margin(),
"2017-06-24T14:01:10.123456789-04:00"
),
(indoc!(
"|
|2017-06-24T14:01:10.123456789-04:00\t \t \n\
| a 1
| e -1
|
|").strip_margin(),
"2017-06-24T14:01:10.123456789-04:00"
),
];
let mut count = 0;
for t in pok_strings {
let res = parser::string_to_txns(&mut t.0.as_str(), &mut Settings::default());
assert!(res.is_ok(), "is it ok: Offending test vector item: {count}");
let txn_data = res.unwrap();
let txns = txn_data.get_all().unwrap();
let txn: &Transaction = txns.txns[0];
assert_eq!(txn_ts_to_string(txn), t.1.to_string(), "Testing value: offending test vector item: {count}");
count += 1;
}
assert_eq!(count, 27);
}