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;