diff --git a/base/src/expressions/lexer/test/test_common.rs b/base/src/expressions/lexer/test/test_common.rs index a3884ee..4a46e03 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); @@ -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..df7b4c4 100644 --- a/base/src/expressions/lexer/test/test_ranges.rs +++ b/base/src/expressions/lexer/test/test_ranges.rs @@ -112,6 +112,39 @@ fn test_range_with_sheet_with_space() { 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"); 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);