diff options
Diffstat (limited to 'qadevOOo/tests/basic/ifc/i18n/XBreakIterator/i18n_XBreakIterator.xba')
-rw-r--r-- | qadevOOo/tests/basic/ifc/i18n/XBreakIterator/i18n_XBreakIterator.xba | 408 |
1 files changed, 408 insertions, 0 deletions
diff --git a/qadevOOo/tests/basic/ifc/i18n/XBreakIterator/i18n_XBreakIterator.xba b/qadevOOo/tests/basic/ifc/i18n/XBreakIterator/i18n_XBreakIterator.xba new file mode 100644 index 000000000000..caea03d8e837 --- /dev/null +++ b/qadevOOo/tests/basic/ifc/i18n/XBreakIterator/i18n_XBreakIterator.xba @@ -0,0 +1,408 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd"> +<script:module xmlns:script="http://openoffice.org/2000/script" script:name="i18n_XBreakIterator" script:language="StarBasic"> + + +'************************************************************************* +' +' DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +' +' Copyright 2000, 2010 Oracle and/or its affiliates. +' +' OpenOffice.org - a multi-platform office productivity suite +' +' This file is part of OpenOffice.org. +' +' OpenOffice.org is free software: you can redistribute it and/or modify +' it under the terms of the GNU Lesser General Public License version 3 +' only, as published by the Free Software Foundation. +' +' OpenOffice.org is distributed in the hope that it will be useful, +' but WITHOUT ANY WARRANTY; without even the implied warranty of +' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +' GNU Lesser General Public License version 3 for more details +' (a copy is included in the LICENSE file that accompanied this code). +' +' You should have received a copy of the GNU Lesser General Public License +' version 3 along with OpenOffice.org. If not, see +' <http://www.openoffice.org/license.html> +' for a copy of the LGPLv3 License. +' +'************************************************************************* +'************************************************************************* + + + +' Be sure that all variables are dimensioned: +option explicit + +'************************************************************************* +' This Interface/Service test depends on the following GLOBAL variables, +' which must be specified in the object creation: + +' - Global oLocale As Object +' - Global UnicodeString As String +' - Global ScriptType(2, 1) As Integer + +'************************************************************************* + + + + + +const arrSize = 300 + + +Sub RunTest() + +'************************************************************************* +' INTERFACE: +' com.sun.star.i18n.XBreakIterator +'************************************************************************* +On Error Goto ErrHndl + Dim bOK As Boolean + Dim i As Integer + Dim nCharacterIteratorMode As Integer + Dim lDone As Long + Dim lRes As Long + Dim wordType As Integer + Dim Boundary As Variant + Dim BoundsToTest(arrSize) As new com.sun.star.i18n.Boundary + Dim Types(arrSize) As Integer + Dim nBoundsToTest As Integer + Dim iPos As Integer + Dim iType As Integer + Dim bFound As Boolean + Dim j As Integer + Dim NextCharacters(2, 3) As Integer + Dim PreviousCharacters(2, 3) As Integer + + Test.StartMethod("nextCharacters()") + bOK = true + nCharacterIteratorMode = com.sun.star.i18n.CharacterIteratorMode.SKIPCHARACTER + + 'Start from position : Travel ... chars : Actual position after : How many chars traveled + NextCharacters(0, 0) = 1 : NextCharacters(0, 1) = 5000 : NextCharacters(0, 2) = len(UnicodeString) : NextCharacters(0, 3) = len(UnicodeString) - 1 + NextCharacters(1, 0) = 5 : NextCharacters(1, 1) = -5000 : NextCharacters(1, 2) = 0 : NextCharacters(1, 3) = -5 + NextCharacters(2, 0) = 10 : NextCharacters(2, 1) = 6 : NextCharacters(2, 2) = 16 : NextCharacters(2, 3) = 6 + + for i = 0 to 2 + lRes = oObj.nextCharacters(UnicodeString, NextCharacters(i, 0), _ + oLocale, nCharacterIteratorMode, NextCharacters(i, 1), lDone) + Out.Log("Expected result is: lRes = " + NextCharacters(i, 2) + _ + "; lDone = " + NextCharacters(i, 3)) + Out.Log("Actual result is: lRes = " + lRes + "; lDone = " + lDone) + + bOK = bOK AND lRes = NextCharacters(i, 2) + bOK = bOK AND lDone = NextCharacters(i, 3) + next i + + Test.MethodTested("nextCharacters()", bOK) + + Test.StartMethod("previousCharacters()") + bOK = true + nCharacterIteratorMode = com.sun.star.i18n.CharacterIteratorMode.SKIPCHARACTER + + 'Start from position : Travel ... chars : Actual position after : How many chars traveled + PreviousCharacters(0, 0) = 10 : PreviousCharacters(0, 1) = -5000 : PreviousCharacters(0, 2) = len(UnicodeString) : PreviousCharacters(0, 3) = len(UnicodeString) - 10 + PreviousCharacters(1, 0) = 5 : PreviousCharacters(1, 1) = 5000 : PreviousCharacters(1, 2) = 0 : PreviousCharacters(1, 3) = 5 + PreviousCharacters(2, 0) = 10 : PreviousCharacters(2, 1) = 6 : PreviousCharacters(2, 2) = 4 : PreviousCharacters(2, 3) = 6 + + for i = 0 to 2 + lRes = oObj.previousCharacters(UnicodeString, PreviousCharacters(i, 0), _ + oLocale, nCharacterIteratorMode, PreviousCharacters(i, 1), lDone) + Out.Log("Expected result is: lRes = " + PreviousCharacters(i, 2) + _ + "; lDone = " + PreviousCharacters(i, 3)) + Out.Log("Actual result is: lRes = " + lRes + "; lDone = " + lDone) + + bOK = bOK AND lRes = PreviousCharacters(i, 2) + bOK = bOK AND lDone = PreviousCharacters(i, 3) + next i + + Test.MethodTested("previousCharacters()", bOK) + + + Test.StartMethod("nextWord()") + Test.StartMethod("previousWord()") + bOK = true + wordType = com.sun.star.i18n.WordType.ANYWORD_IGNOREWHITESPACES + Dim wordCount1 As Integer + Dim wordCount2 As Integer + wordCount1 = 0 + wordCount2 = 0 + i = 0 + nBoundsToTest = 0 + + while i < len(UnicodeString) - 1 + Boundary = oObj.nextWord(UnicodeString, i, oLocale, wordType) + i = Boundary.endPos - 1 + wordCount1 = wordCount1 + 1 + if ((nBoundsToTest < arrSize) AND (Boundary.endPos - Boundary.startPos > 3)) then + BoundsToTest(nBoundsToTest).startPos = Boundary.startPos + BoundsToTest(nBoundsToTest).endPos = Boundary.endPos ' Here we find out some words and + nBoundsToTest = nBoundsToTest + 1 ' get their bounds to test in future + end if + Out.Log("Word " + wordCount1 + "(" + Boundary.startPos + "," + Boundary.endPos + "): '" + _ + mid(UnicodeString, Boundary.startPos + 1, Boundary.endPos - Boundary.startPos) + "'") + wend + Out.Log("In text there are " + wordCount1 + " words, if count from left to right") + + while i > 0 + Boundary = oObj.previousWord(UnicodeString, i, oLocale, wordType) + i = Boundary.startPos + wordCount2 = wordCount2 + 1 + Out.Log("Word " + wordCount2 + "(" + Boundary.startPos + "," + Boundary.endPos + "): '" + _ + mid(UnicodeString, Boundary.startPos + 1, Boundary.endPos - Boundary.startPos) + "'") + wend + Out.Log("In text there are " + wordCount2 + " words, if count from right to left") + + bOK = bOK AND wordCount1 = wordCount2 + Test.MethodTested("previousWord()", bOK) + Test.MethodTested("nextWord()", bOK) + + Test.StartMethod("getWordBoundary()") + bOK = true + if (nBoundsToTest = 0) then + Out.Log("Couldn't find words longer than 3 letters.") + bOK = false + end if + + for i = 0 to nBoundsToTest - 1 + iPos = (BoundsToTest(i).endPos - BoundsToTest(i).startPos) / 2 + BoundsToTest(i).startPos ' calculate middle of the word + Boundary = oObj.getWordBoundary(UnicodeString, iPos, oLocale, wordType, true) + Out.Log("Expected result is: startPos = " + BoundsToTest(i).startPos + _ + "; endPos = " + BoundsToTest(i).endPos) + Out.Log("Actual result is: startPos = " + Boundary.startPos + "; endPos = " + Boundary.endPos + _ + " Word is: '" + mid(UnicodeString, Boundary.startPos + 1, Boundary.endPos - Boundary.startPos) + "'") + + bOK = bOK AND BoundsToTest(i).startPos = Boundary.startPos + bOK = bOK AND BoundsToTest(i).endPos = Boundary.endPos + next i + + Test.MethodTested("getWordBoundary()", bOK) + + Test.StartMethod("getWordType()") + bOK = true + for i = 0 to nBoundsToTest - 1 + iPos = (BoundsToTest(i).endPos - BoundsToTest(i).startPos) / 2 + BoundsToTest(i).startPos ' calculate middle of the word + wordType = oObj.getWordType(UnicodeString, iPos, oLocale) + bOK = bOK AND wordType >= 0 AND wordType <= 2 + next i + Test.MethodTested("getWordType()", bOK) + + Test.StartMethod("isBeginWord()") + bOK = true + if (nBoundsToTest = 0) then + Out.Log("Couldn't find words longer than 3 letters.") + bOK = false + end if + + for i = 0 to nBoundsToTest - 1 + bOK = bOK AND oObj.isBeginWord(UnicodeString, BoundsToTest(i).startPos, oLocale, com.sun.star.i18n.WordType.ANY_WORD) + bOK = bOK AND NOT oObj.isBeginWord(UnicodeString, BoundsToTest(i).startPos + 1, oLocale, com.sun.star.i18n.WordType.ANY_WORD) + next i + Test.MethodTested("isBeginWord()", bOK) + + Test.StartMethod("isEndWord()") + bOK = true + if (nBoundsToTest = 0) then + Out.Log("Couldn't find words longer than 3 letters.") + bOK = false + end if + + for i = 0 to nBoundsToTest - 1 + bOK = bOK AND oObj.isEndWord(UnicodeString, BoundsToTest(i).endPos, oLocale, com.sun.star.i18n.WordType.ANY_WORD) + bOK = bOK AND NOT oObj.isEndWord(UnicodeString, BoundsToTest(i).endPos - 1, oLocale, com.sun.star.i18n.WordType.ANY_WORD) + next i + Test.MethodTested("isEndWord()", bOK) + + Test.StartMethod("beginOfSentence()") + Test.StartMethod("endOfSentence()") + Dim sStart As Integer + Dim sEnd As Integer + + bOK = true + iPos = 0 + while (iPos <= len(UnicodeString))' AND bOK) + sStart = oObj.beginOfSentence(UnicodeString, iPos, oLocale) + sEnd = oObj.endOfSentence(UnicodeString, iPos, oLocale) + if (iPos < sStart OR iPos > sEnd) then + bOK = false + Out.Log("From position " + iPos + " sentence range is [" + sStart + ", " + sEnd + "]") + Out.Log("'" + mid(UnicodeString, sStart + 1, sEnd - sStart) + "'") + end if + iPos = iPos + 1 + wend + + if (bOK) then + bOK = oObj.beginOfSentence(UnicodeString, -10, oLocale) = -1 + bOK = oObj.endOfSentence(UnicodeString, -10, oLocale) = -1 + bOK = oObj.beginOfSentence(UnicodeString, len(UnicodeString) + 1, oLocale) = -1 + bOK = oObj.endOfSentence(UnicodeString, len(UnicodeString) + 1, oLocale) = -1 + if (NOT bOK) then Out.Log("When invalid position, returned range is NOT [-1, -1]") + end if + + Test.MethodTested("beginOfSentence()", bOK) + Test.MethodTested("endOfSentence()", bOK) + + Test.StartMethod("getLineBreak()") + bOK = true + Dim LineBreakResults As Variant + Dim _LineBreakHyphenationOptions As new com.sun.star.i18n.LineBreakHyphenationOptions + Dim _LineBreakUserOptions As new com.sun.star.i18n.LineBreakUserOptions + Dim breakPos As Long, pos As Long + _LineBreakUserOptions.applyForbiddenRules = false + _LineBreakUserOptions.allowHyphenateEnglish = false + + breakPos = 0 : pos = 0 + + while breakPos = 0 AND pos < len(UnicodeString) + LineBreakResults = oObj.getLineBreak(UnicodeString, pos, oLocale, 0, _LineBreakHyphenationOptions, _LineBreakUserOptions) + breakPos = LineBreakResults.BreakIndex + pos = pos + 1 + wend + + ' finally the position of break must be found in the middle and + ' it must be before the break position specified + bOK = (breakPos <= pos AND breakPos > 0) + + if (NOT bOK) then + Out.Log("The last position was: " + pos + ", and the break position was: " + breakPos) + end if + + Test.MethodTested("getLineBreak()", bOK) + + + Test.StartMethod("beginOfScript()") + Test.StartMethod("endOfScript()") + bOK = true + Out.Log("Searching for scripts...") + iPos = 0 + nBoundsToTest = 0 + + while iPos < len(UnicodeString) AND iPos > -1 AND nBoundsToTest < arrSize + iType = oObj.getScriptType(UnicodeString, iPos) + BoundsToTest(nBoundsToTest).startPos = oObj.beginOfScript(UnicodeString, iPos, iType) + BoundsToTest(nBoundsToTest).endPos = oObj.endOfScript(UnicodeString, iPos, iType) + Types(nBoundsToTest) = iType + iPos = BoundsToTest(nBoundsToTest).endPos + Out.Log("Type: " + iType + "; Bounds: [" + BoundsToTest(nBoundsToTest).startPos + "," + BoundsToTest(nBoundsToTest).endPos + "]") + nBoundsToTest = nBoundsToTest + 1 + wend + bOK = bOK AND nBoundsToTest > 0 + + Test.MethodTested("beginOfScript()", bOK) + Test.MethodTested("endOfScript()", bOK) + + + Test.StartMethod("nextScript()") + bOK = true + i = 1 + iPos = -1 + while i < nBoundsToTest AND bOK + iPos = oObj.nextScript(UnicodeString, iPos, Types(i)) + Out.Log("Expected index for Type " + Types(i) + " for nextScript is " + BoundsToTest(i).startPos) + bOK = bOK AND iPos = BoundsToTest(i).startPos + Out.Log("NextScript returned " + iPos + ";") + i = i + 1 + wend + Test.MethodTested("nextScript()", bOK) + + Test.StartMethod("previousScript()") + bOK = true + i = nBoundsToTest - 2 + iPos = len(UnicodeString) + 1 + while i >= 0 AND bOK + iPos = oObj.previousScript(UnicodeString, iPos, Types(i)) + Out.Log("Expected index for Type " + Types(i) + " for previousScript is " + BoundsToTest(i).startPos) + bOK = bOK AND iPos = BoundsToTest(i).startPos + Out.Log("PreviousScript returned " + iPos + ";") + i = i - 1 + wend + Test.MethodTested("previousScript()", bOK) + + Test.StartMethod("getScriptType()") + bOK = true + for i = 0 to 2 + iPos = oObj.getScriptType(UnicodeString, ScriptType(i, 0)) + Out.Log("Expected result is: ScriptType = " + ScriptType(i, 1)) + Out.Log("Actual result is: ScriptType = " + iPos) + bOK = bOK AND iPos = ScriptType(i, 1) + next i + Test.MethodTested("getScriptType()", bOK) + + Test.StartMethod("beginOfCharBlock()") + Test.StartMethod("endOfCharBlock()") + bOK = true + Out.Log("getting CharBlocks bounds...") + iPos = 0 + nBoundsToTest = 0 + + while iPos < len(UnicodeString) AND iPos > -1 AND nBoundsToTest < arrSize + iType = getCharBlockType(iPos) + BoundsToTest(nBoundsToTest).startPos = oObj.beginOfCharBlock(UnicodeString, iPos, oLocale, iType) + BoundsToTest(nBoundsToTest).endPos = oObj.endOfCharBlock(UnicodeString, iPos, oLocale, iType) + iPos = BoundsToTest(nBoundsToTest).endPos + Out.Log("" + nBoundsToTest + "). Bounds: [" + BoundsToTest(nBoundsToTest).startPos + "," + BoundsToTest(nBoundsToTest).endPos + "]; Type = " + iType) + Types(nBoundsToTest) = iType + nBoundsToTest = nBoundsToTest + 1 + wend + + for i = 0 to nBoundsToTest - 2 + bOK = bOK AND BoundsToTest(i).endPos = BoundsToTest(i + 1).startPos + next + Out.Log("Testing for no intersections : " + bOK) + bOK = bOK AND BoundsToTest(0).startPos = 0 + bOK = bOK AND BoundsToTest(nBoundsToTest - 1).endPos = len(UnicodeString) + Out.Log("Regions should starts with 0 and ends with " + len(UnicodeString)) + + Test.MethodTested("beginOfCharBlock()", bOK) + Test.MethodTested("endOfCharBlock()", bOK) + + Test.StartMethod("nextCharBlock()") + bOK = true + for i = 0 to nBoundsToTest - 1 + iPos = oObj.nextCharBlock(UnicodeString, BoundsToTest(i).startPos - 1, oLocale, Types(i)) + if (iPos <> BoundsToTest(i).startPos) then + bOK = false + Out.Log("nextCharBlock(UnicodeString, " + BoundsToTest(i).startPos - 1 + ", oLocale, " + Types(i) + ") should return " + BoundsToTest(i).startPos) + Out.Log("... and actual value is " + iPos) + end if + next i + Test.MethodTested("nextCharBlock()", bOK) + + Test.StartMethod("previousCharBlock()") + bOK = true + for i = 0 to nBoundsToTest - 1 + iPos = oObj.previousCharBlock(UnicodeString, BoundsToTest(i).endPos + 1, oLocale, Types(i)) + if (iPos <> BoundsToTest(i).startPos) then + bOK = false + Out.Log("previousCharBlock(UnicodeString, " + BoundsToTest(i).startPos - 1 +", oLocale, " + Types(i) + ") should return " + BoundsToTest(i).startPos) + Out.Log("... and actual value is " + iPos) + end if + next i + Test.MethodTested("previousCharBlock()", bOK) + +Exit Sub +ErrHndl: + Test.Exception() + bOK = false + resume next +End Sub +Function getCharBlockType(pos As Integer) As Integer + Dim i As Integer + Dim cType As Integer + + cType = 0 + i = 1 + while (i < 31) + if (oObj.beginOfCharBlock(UnicodeString, pos, oLocale, i) <> -1) then + cType = i + i = 100 + end if + i = i + 1 + wend + + getCharBlockType = cType +End Function +</script:module> |