basic/qa/basic_coverage/test_date_passed_to_uno.bas |   48 ++++++++++++++++++++
 basic/source/classes/sbunoobj.cxx                   |    4 -
 2 files changed, 50 insertions(+), 2 deletions(-)

New commits:
commit 014bd12ed01fbac87ca4698f48e3f6722e73e480
Author:     Mike Kaganski <mike.kagan...@collabora.com>
AuthorDate: Thu Jan 23 18:09:03 2025 +0500
Commit:     Adolfo Jayme Barrientos <fit...@ubuntu.com>
CommitDate: Thu Jan 23 21:52:33 2025 +0100

    tdf#164811: swap the "if IsCompatibility()" branches to match other places
    
    Commit 9cdb73ff28c4cd6380412468f34ff10e46292a07 (INTEGRATION: CWS jl5vba
    (1.25.94); FILE MERGED, 2004-03-17) has introduced handling of decimal,
    currency, and date for VBASupport mode in sbunoobj.cxx. However, in
    getUnoTypeForSbxBaseType, it changed the behavior for date type in the
    non-VBASupport mode, obviously by mistake. This change swaps the code
    in the 'if' branches, to what appears to be the original intention.
    
    Change-Id: I88cddf7cec1a980f56de96ae1c5e64d8e7630b77
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/180637
    Tested-by: Jenkins
    Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com>
    (cherry picked from commit 63e7a70ad1a6a8ec4190ab510f683d2fc9dea417)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/180674
    Reviewed-by: Adolfo Jayme Barrientos <fit...@ubuntu.com>

diff --git a/basic/qa/basic_coverage/test_date_passed_to_uno.bas 
b/basic/qa/basic_coverage/test_date_passed_to_uno.bas
new file mode 100644
index 000000000000..e056ab3b4b4d
--- /dev/null
+++ b/basic/qa/basic_coverage/test_date_passed_to_uno.bas
@@ -0,0 +1,48 @@
+'
+' 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_DatePassedToUno
+    doUnitTest = TestUtil.GetResult()
+End Function
+
+Sub verify_DatePassedToUno
+    On Error GoTo errorHandler
+
+    ' Given a date variable, and passing it to an UNO interface method (i.e., 
going through
+    ' the Basic-to-UNO conversion), in the absence of VBASupport mode, the 
date value must
+    ' be converted to a number, not to a struct / empty interface
+    Dim aDate as Date
+    aDate = #2025-01-23T12:00#
+
+    Dim aUnoObject as Object
+    aUnoObject = CreateUnoListener("XTypeConverter_", 
"com.sun.star.script.XTypeConverter")
+
+    Dim aConvResult
+    ' Without the fix, the following line would fail, triggering errorHandler 
reporting
+    ' "91: Object variable not set."
+    aConvResult = aUnoObject.convertToSimpleType(aDate, 
com.sun.star.uno.TypeClass.STRING)
+    ' If 'Option VBASupport 1' were used, the following line would fail with 
"Wrong input
+    ' type: Date", because the value would be marshalled using 
oleautomation::Date struct
+    TestUtil.AssertEqualStrict(aConvResult, "45680.5", "aConvResult")
+
+    Exit Sub
+errorHandler:
+    TestUtil.ReportErrorHandler("verify_DatePassedToUno", Err, Error$, Erl)
+End Sub
+
+Function XTypeConverter_convertToSimpleType(aFrom, aDestinationType)
+    If IsNumeric(aFrom) Then
+        XTypeConverter_convertToSimpleType = CStr(aFrom)
+    Else
+        XTypeConverter_convertToSimpleType = "Wrong input type: " & 
TypeName(aFrom)
+    End If
+End Function
diff --git a/basic/source/classes/sbunoobj.cxx 
b/basic/source/classes/sbunoobj.cxx
index 25a395e7a6bf..871e02e76f1f 100644
--- a/basic/source/classes/sbunoobj.cxx
+++ b/basic/source/classes/sbunoobj.cxx
@@ -831,9 +831,9 @@ static Type getUnoTypeForSbxBaseType( SbxDataType eType )
         case SbxDATE:       {
                             SbiInstance* pInst = GetSbData()->pInst;
                             if( pInst && pInst->IsCompatibility() )
-                                aRetType = cppu::UnoType<double>::get();
-                            else
                                 aRetType = 
cppu::UnoType<oleautomation::Date>::get();
+                            else
+                                aRetType = cppu::UnoType<double>::get();
                             }
                             break;
         case SbxSTRING:     aRetType = cppu::UnoType<OUString>::get(); break;

Reply via email to