From 08f1e4a214163c98e47406e9e5574a9614daa37d Mon Sep 17 00:00:00 2001 From: "fosdick.io" <67963637+fosdickio@users.noreply.github.com> Date: Wed, 14 Feb 2024 11:45:21 -0700 Subject: [PATCH 1/3] Adding additional lexer unit tests --- .../src/expressions/lexer/test/test_common.rs | 36 +++++++++- .../src/expressions/lexer/test/test_ranges.rs | 69 ++++++++++++++----- 2 files changed, 84 insertions(+), 21 deletions(-) diff --git a/base/src/expressions/lexer/test/test_common.rs b/base/src/expressions/lexer/test/test_common.rs index a3884ee..66dd2f9 100644 --- a/base/src/expressions/lexer/test/test_common.rs +++ b/base/src/expressions/lexer/test/test_common.rs @@ -4,7 +4,7 @@ use crate::language::get_language; use crate::locale::get_locale; use crate::expressions::{ - lexer::{Lexer, LexerMode}, + lexer::{Lexer, LexerError, LexerMode}, token::TokenType::*, token::{Error, OpCompare, OpProduct, OpSum}, types::ParsedReference, @@ -411,6 +411,20 @@ fn test_name_r1c1p() { assert_eq!(lx.next_token(), EOF); } +#[test] +fn test_reference_r1c1_error() { + let mut lx = new_lexer("$A$4", false); + lx.mode = LexerMode::R1C1; + assert_eq!( + lx.next_token(), + Illegal(LexerError { + position: 1, + message: "Cannot parse A1 reference in R1C1 mode".to_string(), + }) + ); + assert_eq!(lx.next_token(), EOF); +} + #[test] fn test_name_wrong_ref() { let mut lx = new_lexer("Sheet1!2", false); @@ -563,13 +577,13 @@ fn test_range() { column: 1, row: 1, absolute_column: false, - absolute_row: false + absolute_row: false, }, right: ParsedReference { column: 2, row: 3, absolute_column: false, - absolute_row: false + absolute_row: false, }, } ); @@ -629,6 +643,22 @@ fn test_ampersand() { assert_eq!(lx.next_token(), EOF); } +#[test] +fn test_comma() { + // Used for testing locales where the comma is not a decimal separator + let mut lx = new_lexer("12,34", false); + assert_eq!(lx.next_token(), Number(12.0)); + assert_eq!(lx.next_token(), Comma); + assert_eq!(lx.next_token(), Number(34.0)); + assert_eq!(lx.next_token(), EOF); + + // Used for testing locales where the comma is the decimal separator + let mut lx = new_lexer("12,34", false); + lx.locale.numbers.symbols.decimal = ",".to_string(); + assert_eq!(lx.next_token(), Number(12.34)); + assert_eq!(lx.next_token(), EOF); +} + #[test] fn test_semicolon() { let mut lx = new_lexer("FALSE;", false); diff --git a/base/src/expressions/lexer/test/test_ranges.rs b/base/src/expressions/lexer/test/test_ranges.rs index 628a878..f85f59c 100644 --- a/base/src/expressions/lexer/test/test_ranges.rs +++ b/base/src/expressions/lexer/test/test_ranges.rs @@ -34,7 +34,7 @@ fn test_range() { row: 4, absolute_column: false, absolute_row: false, - } + }, } ); assert_eq!(lx.next_token(), EOF); @@ -58,7 +58,7 @@ fn test_range_absolute_column() { row: 4, absolute_column: false, absolute_row: true, - } + }, } ); assert_eq!(lx.next_token(), EOF); @@ -82,7 +82,7 @@ fn test_range_with_sheet() { row: 4, absolute_column: false, absolute_row: false, - } + }, } ); assert_eq!(lx.next_token(), EOF); @@ -106,12 +106,45 @@ fn test_range_with_sheet_with_space() { row: 44, absolute_column: false, absolute_row: false, - } + }, } ); assert_eq!(lx.next_token(), EOF); } +#[test] +fn test_range_error() { + let mut lx = new_lexer("'Sheet 1'!3.4:5"); + assert_eq!( + lx.next_token(), + Illegal(LexerError { + position: 10, + message: "Expecting reference in range".to_string(), + }) + ); + assert_eq!(lx.next_token(), EOF); + + let mut lx = new_lexer("'Sheet 1'!3:A2"); + assert_eq!( + lx.next_token(), + Illegal(LexerError { + position: 14, + message: "Error parsing Range".to_string() + }) + ); + assert_eq!(lx.next_token(), EOF); + + let mut lx = new_lexer("'Sheet 1'!3:"); + assert_eq!( + lx.next_token(), + Illegal(LexerError { + position: 12, + message: "Error parsing Range".to_string() + }) + ); + assert_eq!(lx.next_token(), EOF); +} + #[test] fn test_range_column() { let mut lx = new_lexer("C:D"); @@ -130,7 +163,7 @@ fn test_range_column() { row: LAST_ROW, absolute_column: false, absolute_row: true, - } + }, } ); assert_eq!(lx.next_token(), EOF); @@ -167,7 +200,7 @@ fn test_range_column_absolute1() { row: LAST_ROW, absolute_column: false, absolute_row: true, - } + }, } ); assert_eq!(lx.next_token(), EOF); @@ -191,7 +224,7 @@ fn test_range_column_absolute2() { row: LAST_ROW, absolute_column: true, absolute_row: true, - } + }, } ); assert_eq!(lx.next_token(), EOF); @@ -215,7 +248,7 @@ fn test_range_rows() { row: 5, absolute_column: true, absolute_row: false, - } + }, } ); assert_eq!(lx.next_token(), EOF); @@ -239,7 +272,7 @@ fn test_range_rows_absolute1() { row: 5, absolute_column: true, absolute_row: false, - } + }, } ); assert_eq!(lx.next_token(), EOF); @@ -263,7 +296,7 @@ fn test_range_rows_absolute2() { row: 55, absolute_column: true, absolute_row: true, - } + }, } ); assert_eq!(lx.next_token(), EOF); @@ -287,7 +320,7 @@ fn test_range_column_sheet() { row: LAST_ROW, absolute_column: false, absolute_row: true, - } + }, } ); assert_eq!(lx.next_token(), EOF); @@ -311,7 +344,7 @@ fn test_range_column_sheet_absolute() { row: LAST_ROW, absolute_column: true, absolute_row: true, - } + }, } ); assert_eq!(lx.next_token(), EOF); @@ -332,7 +365,7 @@ fn test_range_column_sheet_absolute() { row: LAST_ROW, absolute_column: true, absolute_row: true, - } + }, } ); assert_eq!(lx.next_token(), EOF); @@ -356,7 +389,7 @@ fn test_range_rows_sheet() { row: 5, absolute_column: true, absolute_row: false, - } + }, } ); assert_eq!(lx.next_token(), EOF); @@ -376,7 +409,7 @@ fn test_range_rows_sheet() { row: 5, absolute_column: true, absolute_row: false, - } + }, } ); assert_eq!(lx.next_token(), EOF); @@ -407,7 +440,7 @@ fn test_non_range_invalid_variable_name_a03() { row: 3, column: 1, absolute_column: false, - absolute_row: false + absolute_row: false, } ); assert_eq!(lx.next_token(), EOF); @@ -423,7 +456,7 @@ fn test_non_range_invalid_variable_name_sheet1_a03() { row: 3, column: 1, absolute_column: false, - absolute_row: false + absolute_row: false, } ); assert_eq!(lx.next_token(), EOF); @@ -447,7 +480,7 @@ fn test_range_rows_with_0() { row: 5, absolute_column: true, absolute_row: false, - } + }, } ); assert_eq!(lx.next_token(), EOF); From de23d717cba1b4cf2f36eb61ec802356373cfd26 Mon Sep 17 00:00:00 2001 From: "fosdick.io" <67963637+fosdickio@users.noreply.github.com> Date: Wed, 14 Feb 2024 12:12:23 -0700 Subject: [PATCH 2/3] Adding more error for testing error codes. --- base/src/expressions/test.rs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/base/src/expressions/test.rs b/base/src/expressions/test.rs index 2c61aac..6c58c96 100644 --- a/base/src/expressions/test.rs +++ b/base/src/expressions/test.rs @@ -10,6 +10,11 @@ fn test_error_codes() { Error::NA, Error::NUM, Error::ERROR, + Error::NIMPL, + Error::SPILL, + Error::CALC, + Error::CIRC, + Error::NULL ]; for (i, error) in errors.iter().enumerate() { let s = format!("{}", error); From ef8c5af236404c565a0aafd04300461af855647b Mon Sep 17 00:00:00 2001 From: "fosdick.io" <67963637+fosdickio@users.noreply.github.com> Date: Wed, 14 Feb 2024 14:39:22 -0700 Subject: [PATCH 3/3] Reverting trailing commas. --- .../src/expressions/lexer/test/test_common.rs | 4 +-- .../src/expressions/lexer/test/test_ranges.rs | 36 +++++++++---------- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/base/src/expressions/lexer/test/test_common.rs b/base/src/expressions/lexer/test/test_common.rs index 66dd2f9..4a46e03 100644 --- a/base/src/expressions/lexer/test/test_common.rs +++ b/base/src/expressions/lexer/test/test_common.rs @@ -577,13 +577,13 @@ fn test_range() { column: 1, row: 1, absolute_column: false, - absolute_row: false, + absolute_row: false }, right: ParsedReference { column: 2, row: 3, absolute_column: false, - absolute_row: false, + absolute_row: false }, } ); diff --git a/base/src/expressions/lexer/test/test_ranges.rs b/base/src/expressions/lexer/test/test_ranges.rs index f85f59c..df7b4c4 100644 --- a/base/src/expressions/lexer/test/test_ranges.rs +++ b/base/src/expressions/lexer/test/test_ranges.rs @@ -34,7 +34,7 @@ fn test_range() { row: 4, absolute_column: false, absolute_row: false, - }, + } } ); assert_eq!(lx.next_token(), EOF); @@ -58,7 +58,7 @@ fn test_range_absolute_column() { row: 4, absolute_column: false, absolute_row: true, - }, + } } ); assert_eq!(lx.next_token(), EOF); @@ -82,7 +82,7 @@ fn test_range_with_sheet() { row: 4, absolute_column: false, absolute_row: false, - }, + } } ); assert_eq!(lx.next_token(), EOF); @@ -106,7 +106,7 @@ fn test_range_with_sheet_with_space() { row: 44, absolute_column: false, absolute_row: false, - }, + } } ); assert_eq!(lx.next_token(), EOF); @@ -163,7 +163,7 @@ fn test_range_column() { row: LAST_ROW, absolute_column: false, absolute_row: true, - }, + } } ); assert_eq!(lx.next_token(), EOF); @@ -200,7 +200,7 @@ fn test_range_column_absolute1() { row: LAST_ROW, absolute_column: false, absolute_row: true, - }, + } } ); assert_eq!(lx.next_token(), EOF); @@ -224,7 +224,7 @@ fn test_range_column_absolute2() { row: LAST_ROW, absolute_column: true, absolute_row: true, - }, + } } ); assert_eq!(lx.next_token(), EOF); @@ -248,7 +248,7 @@ fn test_range_rows() { row: 5, absolute_column: true, absolute_row: false, - }, + } } ); assert_eq!(lx.next_token(), EOF); @@ -272,7 +272,7 @@ fn test_range_rows_absolute1() { row: 5, absolute_column: true, absolute_row: false, - }, + } } ); assert_eq!(lx.next_token(), EOF); @@ -296,7 +296,7 @@ fn test_range_rows_absolute2() { row: 55, absolute_column: true, absolute_row: true, - }, + } } ); assert_eq!(lx.next_token(), EOF); @@ -320,7 +320,7 @@ fn test_range_column_sheet() { row: LAST_ROW, absolute_column: false, absolute_row: true, - }, + } } ); assert_eq!(lx.next_token(), EOF); @@ -344,7 +344,7 @@ fn test_range_column_sheet_absolute() { row: LAST_ROW, absolute_column: true, absolute_row: true, - }, + } } ); assert_eq!(lx.next_token(), EOF); @@ -365,7 +365,7 @@ fn test_range_column_sheet_absolute() { row: LAST_ROW, absolute_column: true, absolute_row: true, - }, + } } ); assert_eq!(lx.next_token(), EOF); @@ -389,7 +389,7 @@ fn test_range_rows_sheet() { row: 5, absolute_column: true, absolute_row: false, - }, + } } ); assert_eq!(lx.next_token(), EOF); @@ -409,7 +409,7 @@ fn test_range_rows_sheet() { row: 5, absolute_column: true, absolute_row: false, - }, + } } ); assert_eq!(lx.next_token(), EOF); @@ -440,7 +440,7 @@ fn test_non_range_invalid_variable_name_a03() { row: 3, column: 1, absolute_column: false, - absolute_row: false, + absolute_row: false } ); assert_eq!(lx.next_token(), EOF); @@ -456,7 +456,7 @@ fn test_non_range_invalid_variable_name_sheet1_a03() { row: 3, column: 1, absolute_column: false, - absolute_row: false, + absolute_row: false } ); assert_eq!(lx.next_token(), EOF); @@ -480,7 +480,7 @@ fn test_range_rows_with_0() { row: 5, absolute_column: true, absolute_row: false, - }, + } } ); assert_eq!(lx.next_token(), EOF);