[Libreoffice-commits] core.git: basic/qa basic/source
Andreas Heinisch (via logerrit)
logerrit at kemper.freedesktop.org
Thu Oct 7 06:22:31 UTC 2021
basic/qa/basic_coverage/test_split_method.bas | 45 +++++++++++++++-----
basic/qa/cppunit/test_vba.cxx | 1
basic/qa/vba_tests/split.vb | 57 ++++++++++++++++++++++++++
basic/source/runtime/methods1.cxx | 6 ++
4 files changed, 99 insertions(+), 10 deletions(-)
New commits:
commit e090afc29bdff4303f1235080fb169011220be4a
Author: Andreas Heinisch <andreas.heinisch at yahoo.de>
AuthorDate: Tue Oct 5 21:10:22 2021 +0200
Commit: Andreas Heinisch <andreas.heinisch at yahoo.de>
CommitDate: Thu Oct 7 08:21:58 2021 +0200
tdf#144924 - Change return type of array elements of the split function
If VBA is not enabled, allow the assignment of variables with different
data types to the individual array elements created by the split
function.
Change-Id: I7bdd432cdebbfded5f7fb3acc0216474eb6b6821
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/123122
Tested-by: Andreas Heinisch <andreas.heinisch at yahoo.de>
Reviewed-by: Andreas Heinisch <andreas.heinisch at yahoo.de>
diff --git a/basic/qa/basic_coverage/test_split_method.bas b/basic/qa/basic_coverage/test_split_method.bas
index 2742fcf52301..52ba91fe3a65 100644
--- a/basic/qa/basic_coverage/test_split_method.bas
+++ b/basic/qa/basic_coverage/test_split_method.bas
@@ -7,28 +7,53 @@
Option Explicit
-Function doUnitTest as String
+Function doUnitTest() As String
+ TestUtil.TestInit
+ verify_testSplit
+ doUnitTest = TestUtil.GetResult()
+End Function
- doUnitTest = "FAIL"
+Sub verify_testSplit
+ On Error GoTo errorHandler
' SPLIT
- If ( Split( "Hello world" )(1) <> "world" ) Then Exit Function
+ TestUtil.AssertEqual(Split( "Hello world" )(1), "world", "Split( ""Hello world"" )(1)")
' tdf#123025 - split function sets the datatype of the array to empty,
' preventing any subsequent assignments of values to the array and to the elements itself.
Dim arr(1) As String
arr = Split("a/b", "/")
- If ( arr(0) <> "a" Or arr(1) <> "b" ) Then Exit Function
+ TestUtil.AssertEqual(arr(0), "a", "Split(""a/b"", ""/"")(0)")
+ TestUtil.AssertEqual(arr(1), "b", "Split(""a/b"", ""/"")(1)")
ReDim Preserve arr(1)
- If ( arr(0) <> "a" Or arr(1) <> "b" ) Then Exit Function
+ TestUtil.AssertEqual(arr(0), "a", "ReDim Preserve arr(1)(0)")
+ TestUtil.AssertEqual(arr(1), "b", "ReDim Preserve arr(1)(1)")
ReDim arr(1)
- If ( arr(0) <> "" Or arr(1) <> "" ) Then Exit Function
+ TestUtil.AssertEqual(arr(0), "", "ReDim arr(1)(0)")
+ TestUtil.AssertEqual(arr(1), "", "ReDim arr(1)(1)")
+
arr(0) = "a"
arr(1) = "b"
- If ( arr(0) <> "a" Or arr(1) <> "b" ) Then Exit Function
+ TestUtil.AssertEqual(arr(0), "a", "arr(0)")
+ TestUtil.AssertEqual(arr(1), "b", "arr(1)")
ReDim Preserve arr(1)
- If ( arr(0) <> "a" Or arr(1) <> "b" ) Then Exit Function
+ TestUtil.AssertEqual(arr(0), "a", "ReDim Preserve arr(1)(0) after assignment")
+ TestUtil.AssertEqual(arr(1), "b", "ReDim Preserve arr(1)(1) after assignment")
- doUnitTest = "OK"
+ ' tdf#144924 - allow the assignment of different data types to the individual elements
+ Dim splitArr
+ splitArr = Split("a/b&&c/d", "&&")
+ Dim i As Integer
+ For i = 0 To UBound(splitArr)
+ ' Without the fix in place, this assignment would have failed
+ splitArr(i) = Split(splitArr(i), "/")
+ ' Without the fix in place, this test would have failed with:
+ ' - Expected: 8200 (8192 for Array and 8 for String)
+ ' - Actual : 8 (8 for String)
+ TestUtil.AssertEqual(VarType(splitArr(i)), 8200, "VarType(splitArr(i))")
+ Next
-End Function
+ Exit Sub
+errorHandler:
+ TestUtil.ReportErrorHandler("verify_testSplit", Err, Error$, Erl)
+End Sub
diff --git a/basic/qa/cppunit/test_vba.cxx b/basic/qa/cppunit/test_vba.cxx
index 036d3b52cfe4..9ea572201a30 100644
--- a/basic/qa/cppunit/test_vba.cxx
+++ b/basic/qa/cppunit/test_vba.cxx
@@ -125,6 +125,7 @@ void VBATest::testMiscVBAFunctions()
"sgn.vb",
"sin.vb",
"space.vb",
+ "split.vb",
"sqr.vb",
"str.vb",
"strcomp.vb",
diff --git a/basic/qa/vba_tests/split.vb b/basic/qa/vba_tests/split.vb
new file mode 100644
index 000000000000..56d4522180b0
--- /dev/null
+++ b/basic/qa/vba_tests/split.vb
@@ -0,0 +1,57 @@
+'
+' 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_testSplit
+ doUnitTest = TestUtil.GetResult()
+End Function
+
+Sub verify_testSplit
+ On Error GoTo errorHandler
+
+ ' SPLIT
+ TestUtil.AssertEqual(Split( "Hello world" )(1), "world", "Split( ""Hello world"" )(1)")
+
+ ' tdf#123025 - split function sets the datatype of the array to empty,
+ ' preventing any subsequent assignments of values to the array and to the elements itself.
+ Dim arr(1) As String
+ arr = Split("a/b", "/")
+ TestUtil.AssertEqual(arr(0), "a", "Split(""a/b"", ""/"")(0)")
+ TestUtil.AssertEqual(arr(1), "b", "Split(""a/b"", ""/"")(1)")
+ ReDim Preserve arr(1)
+ TestUtil.AssertEqual(arr(0), "a", "ReDim Preserve arr(1)(0)")
+ TestUtil.AssertEqual(arr(1), "b", "ReDim Preserve arr(1)(1)")
+ ReDim arr(1)
+ TestUtil.AssertEqual(arr(0), "", "ReDim arr(1)(0)")
+ TestUtil.AssertEqual(arr(1), "", "ReDim arr(1)(1)")
+
+ arr(0) = "a"
+ arr(1) = "b"
+ TestUtil.AssertEqual(arr(0), "a", "arr(0)")
+ TestUtil.AssertEqual(arr(1), "b", "arr(1)")
+ ReDim Preserve arr(1)
+ TestUtil.AssertEqual(arr(0), "a", "ReDim Preserve arr(1)(0) after assignment")
+ TestUtil.AssertEqual(arr(1), "b", "ReDim Preserve arr(1)(1) after assignment")
+
+ ' tdf#144924 - using VBASupport 1, the split function returns an array of substrings, hence no
+ ' assignment of different data types to the individual elements is possible
+ Dim splitArr
+ splitArr = Split("a/b&&c/d", "&&")
+ ' Without the fix in place, this test would have failed with:
+ ' - Expected: 8 (8 for String)
+ ' - Actual : 8200 (8192 for Array and 8 for String)
+ TestUtil.AssertEqual(VarType(splitArr(0)), 8, "VarType(splitArr(0))")
+
+ Exit Sub
+errorHandler:
+ TestUtil.ReportErrorHandler("verify_testSplit", Err, Error$, Erl)
+End Sub
diff --git a/basic/source/runtime/methods1.cxx b/basic/source/runtime/methods1.cxx
index b554f3f6c94e..e750627943d6 100644
--- a/basic/source/runtime/methods1.cxx
+++ b/basic/source/runtime/methods1.cxx
@@ -1629,11 +1629,17 @@ void SbRtl_Split(StarBASIC *, SbxArray & rPar, bool)
pArray->unoAddDim(0, nArraySize - 1);
// insert parameter(s) into the array
+ const bool bIsVBAInterOp = SbiRuntime::isVBAEnabled();
for(sal_Int32 i = 0 ; i < nArraySize ; i++ )
{
// tdf#123025 - split returns an array of substrings
SbxVariableRef xVar = new SbxVariable( SbxSTRING );
xVar->PutString( vRet[i] );
+ // tdf#144924 - allow the assignment of different data types to the individual elements
+ if (!bIsVBAInterOp)
+ {
+ xVar->ResetFlag(SbxFlagBits::Fixed);
+ }
pArray->Put(xVar.get(), &i);
}
More information about the Libreoffice-commits
mailing list