basic/qa/basic_coverage/test_tdf147529_optional_parameters_msgbox.bas | 38 +++++++++ basic/qa/cppunit/test_vba.cxx | 1 basic/qa/vba_tests/tdf147529_optional_parameters_msgbox.vb | 39 ++++++++++ basic/source/runtime/methods.cxx | 13 +++ 4 files changed, 90 insertions(+), 1 deletion(-)
New commits: commit 522f5ad4d8c92624fffa869143aa869662a48589 Author: Andreas Heinisch <andreas.heini...@yahoo.de> AuthorDate: Thu Jun 23 15:07:18 2022 +0200 Commit: Andreas Heinisch <andreas.heini...@yahoo.de> CommitDate: Fri Jun 24 09:20:45 2022 +0200 tdf#147529 - BASIC MsgBox: Check for missing optional parameters Change-Id: Iecb47e0005c609ee1117d6fb141e810c0166806a Reviewed-on: https://gerrit.libreoffice.org/c/core/+/136339 Tested-by: Jenkins Reviewed-by: Andreas Heinisch <andreas.heini...@yahoo.de> diff --git a/basic/qa/basic_coverage/test_tdf147529_optional_parameters_msgbox.bas b/basic/qa/basic_coverage/test_tdf147529_optional_parameters_msgbox.bas new file mode 100755 index 000000000000..dabb23c0faf1 --- /dev/null +++ b/basic/qa/basic_coverage/test_tdf147529_optional_parameters_msgbox.bas @@ -0,0 +1,38 @@ +' +' This file is part of the LibreOffice project. +' +' This Source Code Form is subject to the terms of the Mozilla Public +' License, v. 2.0. If a copy of the MPL was not distributed with this +' file, You can obtain one at http://mozilla.org/MPL/2.0/. +' + +Option Explicit + +Function doUnitTest() As String + TestUtil.TestInit + verify_testOptionalParametersMsgBox + doUnitTest = TestUtil.GetResult() +End Function + +Sub verify_testOptionalParametersMsgBox + On Error GoTo errorHandler + + ' tdf#147529 - check for missing optional parameters + TestUtil.AssertEqual(TestOptionalParametersMsgBox(), True, "TestOptionalParametersMsgBox()") + TestUtil.AssertEqual(TestOptionalParametersMsgBox("test"), True, "TestOptionalParametersMsgBox(""test"")") + TestUtil.AssertEqual(TestOptionalParametersMsgBox("test", 1), True, "TestOptionalParametersMsgBox(""test"", 1)") + + Exit Sub +errorHandler: + TestUtil.ReportErrorHandler("verify_testOptionalParametersMsgBox", Err, Error$, Erl) +End Sub + +Function TestOptionalParametersMsgBox(Optional text, Optional dialogType, Optional dialogTitle) As Boolean +On Error GoTo errorHandler + MsgBox(text, dialogType, dialogTitle) + TestOptionalParametersMsgBox = False + Exit Function +errorHandler: + TestUtil.AssertEqual(Err, 449, "Argument not optional (Error 449)") + TestOptionalParametersMsgBox = True +End Function diff --git a/basic/qa/cppunit/test_vba.cxx b/basic/qa/cppunit/test_vba.cxx index 07e4287e17b1..f048fee6dfda 100644 --- a/basic/qa/cppunit/test_vba.cxx +++ b/basic/qa/cppunit/test_vba.cxx @@ -136,6 +136,7 @@ void VBATest::testMiscVBAFunctions() "strreverse.vb", "switch.vb", "tdf147089_idiv.vb", + "tdf147529_optional_parameters_msgbox.vb", "tdf148358_non_ascii_names.vb", "timeserial.vb", "timevalue.vb", diff --git a/basic/qa/vba_tests/tdf147529_optional_parameters_msgbox.vb b/basic/qa/vba_tests/tdf147529_optional_parameters_msgbox.vb new file mode 100755 index 000000000000..dabe552a821b --- /dev/null +++ b/basic/qa/vba_tests/tdf147529_optional_parameters_msgbox.vb @@ -0,0 +1,39 @@ +' +' This file is part of the LibreOffice project. +' +' This Source Code Form is subject to the terms of the Mozilla Public +' License, v. 2.0. If a copy of the MPL was not distributed with this +' file, You can obtain one at http://mozilla.org/MPL/2.0/. +' + +Option VBASupport 1 +Option Explicit + +Function doUnitTest() As String + TestUtil.TestInit + verify_testOptionalParametersMsgBox + doUnitTest = TestUtil.GetResult() +End Function + +Sub verify_testOptionalParametersMsgBox + On Error GoTo errorHandler + + ' tdf#147529 - check for missing optional parameters + TestUtil.AssertEqual(TestOptionalParametersMsgBox(), True, "TestOptionalParametersMsgBox()") + TestUtil.AssertEqual(TestOptionalParametersMsgBox("test"), True, "TestOptionalParametersMsgBox(""test"")") + TestUtil.AssertEqual(TestOptionalParametersMsgBox("test", 1), True, "TestOptionalParametersMsgBox(""test"", 1)") + + Exit Sub +errorHandler: + TestUtil.ReportErrorHandler("verify_testOptionalParametersMsgBox", Err, Error$, Erl) +End Sub + +Function TestOptionalParametersMsgBox(Optional text, Optional dialogType, Optional dialogTitle) As Boolean +On Error GoTo errorHandler + MsgBox text, dialogType, dialogTitle + TestOptionalParametersMsgBox = False + Exit Function +errorHandler: + TestUtil.AssertEqual(Err, 449, "Argument not optional (Error 449)") + TestOptionalParametersMsgBox = True +End Function diff --git a/basic/source/runtime/methods.cxx b/basic/source/runtime/methods.cxx index 2761caba0309..fe654bbe6fd5 100644 --- a/basic/source/runtime/methods.cxx +++ b/basic/source/runtime/methods.cxx @@ -735,7 +735,7 @@ void SbRtl_FileLen(StarBASIC *, SbxArray & rPar, bool) { return StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT ); } - + SbxVariableRef pArg = rPar.Get(1); OUString aStr( pArg->GetOUString() ); sal_Int32 nLen = 0; @@ -4326,6 +4326,17 @@ void SbRtl_MsgBox(StarBASIC *, SbxArray & rPar, bool) StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT ); return; } + + // tdf#147529 - check for missing optional parameters + for (sal_uInt32 i = 2; i < nArgCount; i++) + { + if (rPar.Get(i)->GetType() == SbxERROR && SbiRuntime::IsMissing(rPar.Get(i), 1)) + { + StarBASIC::Error(ERRCODE_BASIC_NOT_OPTIONAL); + return; + } + } + WinBits nType = 0; // MB_OK if( nArgCount >= 3 ) nType = static_cast<WinBits>(rPar.Get(2)->GetInteger());