summaryrefslogtreecommitdiff
path: root/basic
diff options
context:
space:
mode:
authorAndreas Heinisch <andreas.heinisch@yahoo.de>2022-06-23 15:07:18 +0200
committerAndreas Heinisch <andreas.heinisch@yahoo.de>2022-06-24 09:20:45 +0200
commit522f5ad4d8c92624fffa869143aa869662a48589 (patch)
tree01a05cb1895c754cdaa599d7c9b3d99f9b2d9360 /basic
parent2413f213625253a9c2b1787b3b9fe859d724a9bd (diff)
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.heinisch@yahoo.de>
Diffstat (limited to 'basic')
-rwxr-xr-xbasic/qa/basic_coverage/test_tdf147529_optional_parameters_msgbox.bas38
-rw-r--r--basic/qa/cppunit/test_vba.cxx1
-rwxr-xr-xbasic/qa/vba_tests/tdf147529_optional_parameters_msgbox.vb39
-rw-r--r--basic/source/runtime/methods.cxx13
4 files changed, 90 insertions, 1 deletions
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());