' 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_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 - 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 ' tdf#146873 - CoreReflection.getType() must not error after Split() elements are wrapped in Array() splitArr = Split("a-b-c", "-") For i = 0 To UBound(splitArr) splitArr(i) = Array(splitArr(i)) Next Dim oReflection As Object : oReflection = CreateUnoService("com.sun.star.reflection.CoreReflection") ' Without the fix in place, this assignment would have failed Dim oObject As Object : oObject = oReflection.GetType(splitArr) ' Without the fix in place, this test would have failed with: ' - Expected: 20 (20 for typelib_TypeClass_SEQUENCE) ' - Actual : Object variable not set TestUtil.AssertEqual(oObject.TypeClass, 20, "CoreReflection.getType() for oObject.TypeClass after Split() + Array()") ' cid#1700598 - guard the element probe against empty arrays Dim aEmpty() As Integer ' Without the fix in place, this assignment would have failed with ' "Inadmissible value or data type. Index out of defined range" oObject = oReflection.GetType(aEmpty) TestUtil.AssertEqual(oObject.Name, "[]short", "CoreReflection.getType() for an empty Integer array") ' cid#1700598 - the element probe must use the dimension and not the flat storage index Dim aNegative(-5 To -1) As Integer ' Without the fix in place, this assignment would have failed with ' "Inadmissible value or data type. Index out of defined range" oObject = oReflection.GetType(aNegative) TestUtil.AssertEqual(oObject.Name, "[]short", "CoreReflection.getType() for an array with a negative lower bound") ' tdf#141474 keyword names need to match that of VBA TestUtil.AssertEqual(Split(expression:="LibreOffice StarOffice")(1), "StarOffice", "Split with 1 keyword name" ) Dim txt As String : txt = "Libre_Office_Star_Office" TestUtil.AssertEqual(Split(delimiter:="_", expression:=txt)(2), "Star", "Split with 2 keyword names" ) TestUtil.AssertEqual(Split(limit:=3, delimiter:="_", expression:=txt)(2), "Star_Office", "Split with 3 keyword names" ) Exit Sub errorHandler: TestUtil.ReportErrorHandler("verify_testSplit", Err, Error$, Erl) End Sub