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());

Reply via email to