summaryrefslogtreecommitdiff
path: root/qadevOOo/tests/basic/ifc/i18n/XBreakIterator/i18n_XBreakIterator.xba
diff options
context:
space:
mode:
Diffstat (limited to 'qadevOOo/tests/basic/ifc/i18n/XBreakIterator/i18n_XBreakIterator.xba')
-rw-r--r--qadevOOo/tests/basic/ifc/i18n/XBreakIterator/i18n_XBreakIterator.xba442
1 files changed, 442 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..aea4a03aec30
--- /dev/null
+++ b/qadevOOo/tests/basic/ifc/i18n/XBreakIterator/i18n_XBreakIterator.xba
@@ -0,0 +1,442 @@
+<?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">
+
+
+'*************************************************************************
+'*
+'* $RCSfile: i18n_XBreakIterator.xba,v $
+'*
+'* $Revision: 1.1 $
+'*
+'* last change:$Date: 2003-01-27 17:50:20 $
+'*
+'* The Contents of this file are made available subject to the terms of
+'* either of the following licenses
+'*
+'* - GNU Lesser General Public License Version 2.1
+'* - Sun Industry Standards Source License Version 1.1
+'*
+'* Sun Microsystems Inc., October, 2000
+'*
+'* GNU Lesser General Public License Version 2.1
+'* =============================================
+'* Copyright 2000 by Sun Microsystems, Inc.
+'* 901 San Antonio Road, Palo Alto, CA 94303, USA
+'*
+'* This library is free software; you can redistribute it and/or
+'* modify it under the terms of the GNU Lesser General Public
+'* License version 2.1, as published by the Free Software Foundation.
+'*
+'* This library 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 for more details.
+'*
+'* You should have received a copy of the GNU Lesser General Public
+'* License along with this library; if not, write to the Free Software
+'* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+'* MA 02111-1307 USA
+'*
+'*
+'* Sun Industry Standards Source License Version 1.1
+'* =================================================
+'* The contents of this file are subject to the Sun Industry Standards
+'* Source License Version 1.1 (the "License"); You may not use this file
+'* except in compliance with the License. You may obtain a copy of the
+'* License at http://www.openoffice.org/license.html.
+'*
+'* Software provided under this License is provided on an "AS IS" basis,
+'* WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+'* WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
+'* MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
+'* See the License for the specific provisions governing your rights and
+'* obligations concerning the Software.
+'*
+'* The Initial Developer of the Original Code is: Sun Microsystems, Inc.
+'*
+'* Copyright: 2000 by Sun Microsystems, Inc.
+'*
+'* All Rights Reserved.
+'*
+'* Contributor(s): _______________________________________
+'*
+'*
+'*************************************************************************
+'*************************************************************************
+
+
+
+' 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 &lt; len(UnicodeString) - 1
+ Boundary = oObj.nextWord(UnicodeString, i, oLocale, wordType)
+ i = Boundary.endPos - 1
+ wordCount1 = wordCount1 + 1
+ if ((nBoundsToTest &lt; arrSize) AND (Boundary.endPos - Boundary.startPos &gt; 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 &gt; 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 &gt;= 0 AND wordType &lt;= 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 &lt;= len(UnicodeString))' AND bOK)
+ sStart = oObj.beginOfSentence(UnicodeString, iPos, oLocale)
+ sEnd = oObj.endOfSentence(UnicodeString, iPos, oLocale)
+ if (iPos &lt; sStart OR iPos &gt; 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 &lt; 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 &lt;= 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 &lt; len(UnicodeString) AND iPos &gt; -1 AND nBoundsToTest &lt; 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 &gt; 0
+
+ Test.MethodTested("beginOfScript()", bOK)
+ Test.MethodTested("endOfScript()", bOK)
+
+
+ Test.StartMethod("nextScript()")
+ bOK = true
+ i = 1
+ iPos = -1
+ while i &lt; 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 &gt;= 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 &lt; len(UnicodeString) AND iPos &gt; -1 AND nBoundsToTest &lt; 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 &lt;&gt; 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 &lt;&gt; 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 &lt; 31)
+ if (oObj.beginOfCharBlock(UnicodeString, pos, oLocale, i) &lt;&gt; -1) then
+ cType = i
+ i = 100
+ end if
+ i = i + 1
+ wend
+
+ getCharBlockType = cType
+End Function
+</script:module>