open OUnit2 let u = UTF8.from_utf8string let _msg ~(expected:ScTypes.expression) ~(result:ScTypes.expression) = let b1 = UTF8.Buffer.create 16 and b2 = UTF8.Buffer.create 16 in ScTypes.show_expr b1 expected; ScTypes.show_expr b2 result; Printf.sprintf "Expected \n\t%s but got \n\t%s" (UTF8.raw_encode @@ UTF8.Buffer.contents b1) (UTF8.raw_encode @@ UTF8.Buffer.contents b2) let build_num value = ScTypes.number ( DataType.Num.of_int value ) let test_formula ctx = begin let test1 = "of:=CONCATENATE(SUM([.F16:.AJ16]);\"/\";8*NETWORKDAYS([.F6]; [.F6]+(ORG.OPENOFFICE.DAYSINMONTH([.F6])-1)))" in let line = Lexing.from_string test1 in let result = Odf_ExpressionParser.value Odf_ExpressionLexer.read line in let expected = ScTypes.( Call(u"CONCATENATE", [ Call (u"SUM", [ Ref (Range (((6, 16), (false, false)), (((36, 16), (false, false)))))]); Value (string (u"/")); Call(u"*", [ Value (build_num 8); Call(u"NETWORKDAYS", [ Ref (Cell ((6, 6), (false, false))); Call(u"+", [ Ref (Cell ((6, 6), (false, false))); Expression ( Call( u"-", [ Call(u"ORG.OPENOFFICE.DAYSINMONTH", [ Ref (Cell ((6, 6), (false, false)))]); Value (build_num 1); ]))])])])])) in assert_equal ~msg:(_msg ~expected ~result) expected result end let test_formula2 ctx = begin let value = "of:=+[.H51]*[.G52]" in let line = Lexing.from_string value in let result = Odf_ExpressionParser.value Odf_ExpressionLexer.read line in let expected = ScTypes.( Call (u"+", [ Call(u"*", [ Ref (Cell ((8, 51), (false, false))); Ref (Cell ((7, 52), (false, false))) ])])) in assert_equal ~msg:(_msg ~expected ~result) expected result end let tests = "odf_ExpressionParser_test">::: [ "test_formula" >:: test_formula; "test_formula2" >:: test_formula2; ]