1de76a5adSDamjan Jovanovic /************************************************************** 2de76a5adSDamjan Jovanovic * 3de76a5adSDamjan Jovanovic * Licensed to the Apache Software Foundation (ASF) under one 4de76a5adSDamjan Jovanovic * or more contributor license agreements. See the NOTICE file 5de76a5adSDamjan Jovanovic * distributed with this work for additional information 6de76a5adSDamjan Jovanovic * regarding copyright ownership. The ASF licenses this file 7de76a5adSDamjan Jovanovic * to you under the Apache License, Version 2.0 (the 8de76a5adSDamjan Jovanovic * "License"); you may not use this file except in compliance 9de76a5adSDamjan Jovanovic * with the License. You may obtain a copy of the License at 10de76a5adSDamjan Jovanovic * 11de76a5adSDamjan Jovanovic * http://www.apache.org/licenses/LICENSE-2.0 12de76a5adSDamjan Jovanovic * 13de76a5adSDamjan Jovanovic * Unless required by applicable law or agreed to in writing, 14de76a5adSDamjan Jovanovic * software distributed under the License is distributed on an 15de76a5adSDamjan Jovanovic * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16de76a5adSDamjan Jovanovic * KIND, either express or implied. See the License for the 17de76a5adSDamjan Jovanovic * specific language governing permissions and limitations 18de76a5adSDamjan Jovanovic * under the License. 19de76a5adSDamjan Jovanovic * 20de76a5adSDamjan Jovanovic *************************************************************/ 21de76a5adSDamjan Jovanovic 22de76a5adSDamjan Jovanovic 23de76a5adSDamjan Jovanovic 242f709283SDamjan Jovanovic package api.i18n; 25de76a5adSDamjan Jovanovic 262f709283SDamjan Jovanovic import java.io.ByteArrayOutputStream; 272f709283SDamjan Jovanovic import java.io.File; 282f709283SDamjan Jovanovic import java.io.FileInputStream; 292f709283SDamjan Jovanovic import java.io.IOException; 302f709283SDamjan Jovanovic import java.util.ArrayList; 31de76a5adSDamjan Jovanovic import java.util.Vector; 32de76a5adSDamjan Jovanovic 332f709283SDamjan Jovanovic import com.sun.star.beans.PropertyState; 342f709283SDamjan Jovanovic import com.sun.star.beans.PropertyValue; 35de76a5adSDamjan Jovanovic import com.sun.star.i18n.Boundary; 36de76a5adSDamjan Jovanovic import com.sun.star.i18n.LineBreakHyphenationOptions; 37de76a5adSDamjan Jovanovic import com.sun.star.i18n.LineBreakResults; 38de76a5adSDamjan Jovanovic import com.sun.star.i18n.LineBreakUserOptions; 39de76a5adSDamjan Jovanovic import com.sun.star.i18n.ScriptType; 40de76a5adSDamjan Jovanovic import com.sun.star.i18n.WordType; 41de76a5adSDamjan Jovanovic import com.sun.star.i18n.XBreakIterator; 42de76a5adSDamjan Jovanovic import com.sun.star.lang.Locale; 432f709283SDamjan Jovanovic import com.sun.star.lang.XComponent; 442f709283SDamjan Jovanovic import com.sun.star.text.XTextDocument; 452f709283SDamjan Jovanovic import com.sun.star.text.XTextRange; 462f709283SDamjan Jovanovic import com.sun.star.uno.UnoRuntime; 472f709283SDamjan Jovanovic import com.sun.star.uno.XComponentContext; 482f709283SDamjan Jovanovic import org.junit.After; 492f709283SDamjan Jovanovic import org.junit.AfterClass; 502f709283SDamjan Jovanovic import org.junit.Before; 512f709283SDamjan Jovanovic import org.junit.BeforeClass; 522f709283SDamjan Jovanovic import org.junit.Assert; 532f709283SDamjan Jovanovic import org.junit.Test; 542f709283SDamjan Jovanovic import org.openoffice.test.common.Testspace; 552f709283SDamjan Jovanovic import org.openoffice.test.uno.UnoApp; 56de76a5adSDamjan Jovanovic 57de76a5adSDamjan Jovanovic /** 58de76a5adSDamjan Jovanovic * Testing <code>com.sun.star.i18n.XBreakIterator</code> 59de76a5adSDamjan Jovanovic * interface methods : 60de76a5adSDamjan Jovanovic * <ul> 61de76a5adSDamjan Jovanovic * <li><code> nextCharacters()</code></li> 62de76a5adSDamjan Jovanovic * <li><code> previousCharacters()</code></li> 63de76a5adSDamjan Jovanovic * <li><code> nextWord()</code></li> 64de76a5adSDamjan Jovanovic * <li><code> previousWord()</code></li> 65de76a5adSDamjan Jovanovic * <li><code> getWordBoundary()</code></li> 66de76a5adSDamjan Jovanovic * <li><code> getWordType()</code></li> 67de76a5adSDamjan Jovanovic * <li><code> isBeginWord()</code></li> 68de76a5adSDamjan Jovanovic * <li><code> isEndWord()</code></li> 69de76a5adSDamjan Jovanovic * <li><code> beginOfSentence()</code></li> 70de76a5adSDamjan Jovanovic * <li><code> endOfSentence()</code></li> 71de76a5adSDamjan Jovanovic * <li><code> getLineBreak()</code></li> 72de76a5adSDamjan Jovanovic * <li><code> beginOfScript()</code></li> 73de76a5adSDamjan Jovanovic * <li><code> endOfScript()</code></li> 74de76a5adSDamjan Jovanovic * <li><code> nextScript()</code></li> 75de76a5adSDamjan Jovanovic * <li><code> previousScript()</code></li> 76de76a5adSDamjan Jovanovic * <li><code> getScriptType()</code></li> 77de76a5adSDamjan Jovanovic * <li><code> beginOfCharBlock()</code></li> 78de76a5adSDamjan Jovanovic * <li><code> endOfCharBlock()</code></li> 79de76a5adSDamjan Jovanovic * <li><code> nextCharBlock()</code></li> 80de76a5adSDamjan Jovanovic * <li><code> previousCharBlock()</code></li> 81de76a5adSDamjan Jovanovic * </ul> <p> 82de76a5adSDamjan Jovanovic * This test needs the following object relations : 83de76a5adSDamjan Jovanovic * <ul> 84de76a5adSDamjan Jovanovic * <li> <code>'Locale'</code> 85de76a5adSDamjan Jovanovic * (of type <code>com.sun.star.lang.Locale</code>): 86de76a5adSDamjan Jovanovic * this locale is used as locale argument for tested methods. 87de76a5adSDamjan Jovanovic * </li> 88de76a5adSDamjan Jovanovic * <li> <code>'UnicodeString'</code> 89de76a5adSDamjan Jovanovic * (of type <code>String</code>): Unicode string which is passed 90de76a5adSDamjan Jovanovic * to methods except 'CharacterBlock' methods. 91de76a5adSDamjan Jovanovic * </li> 92de76a5adSDamjan Jovanovic * <ul> <p> 93de76a5adSDamjan Jovanovic * @see com.sun.star.i18n.XBreakIterator 94de76a5adSDamjan Jovanovic */ 952f709283SDamjan Jovanovic public class XBreakIteratorTest { 962f709283SDamjan Jovanovic private static final UnoApp app = new UnoApp(); 972f709283SDamjan Jovanovic private static final String iteratorPath = "api/i18n/Iterator.sxw"; 982f709283SDamjan Jovanovic private static String UnicodeString; 99de76a5adSDamjan Jovanovic 1002f709283SDamjan Jovanovic private XComponentContext xContext = null; 101de76a5adSDamjan Jovanovic public XBreakIterator oObj = null; 102de76a5adSDamjan Jovanovic 103de76a5adSDamjan Jovanovic Locale locale = null; 104de76a5adSDamjan Jovanovic 105de76a5adSDamjan Jovanovic short wordType = WordType.ANYWORD_IGNOREWHITESPACES; 106de76a5adSDamjan Jovanovic 1072f709283SDamjan Jovanovic // setup and close connections 1082f709283SDamjan Jovanovic @BeforeClass setUpConnection()1092f709283SDamjan Jovanovic public static void setUpConnection() throws Exception 1102f709283SDamjan Jovanovic { 1112f709283SDamjan Jovanovic app.start(); 1122f709283SDamjan Jovanovic UnicodeString = readFileContents(iteratorPath); 1132f709283SDamjan Jovanovic } 1142f709283SDamjan Jovanovic 1152f709283SDamjan Jovanovic @AfterClass tearDownConnection()1162f709283SDamjan Jovanovic public static void tearDownConnection() throws InterruptedException, com.sun.star.uno.Exception 1172f709283SDamjan Jovanovic { 1182f709283SDamjan Jovanovic app.close(); 1192f709283SDamjan Jovanovic } 1202f709283SDamjan Jovanovic 121de76a5adSDamjan Jovanovic /** 122de76a5adSDamjan Jovanovic * Retrieves object relations. 123de76a5adSDamjan Jovanovic * @throws StatusException If one of relations not found. 124de76a5adSDamjan Jovanovic */ 1252f709283SDamjan Jovanovic @Before before()1262f709283SDamjan Jovanovic public void before() throws Exception { 1272f709283SDamjan Jovanovic xContext = app.getComponentContext(); 1282f709283SDamjan Jovanovic oObj = UnoRuntime.queryInterface( 1292f709283SDamjan Jovanovic XBreakIterator.class, 1302f709283SDamjan Jovanovic xContext.getServiceManager().createInstanceWithContext("com.sun.star.i18n.BreakIterator", xContext) 1312f709283SDamjan Jovanovic ); 1322f709283SDamjan Jovanovic 1332f709283SDamjan Jovanovic locale = new Locale("en", "US", ""); 134de76a5adSDamjan Jovanovic } 135de76a5adSDamjan Jovanovic readFileContents(String path)1362f709283SDamjan Jovanovic private static String readFileContents(String path) throws Exception { 1372f709283SDamjan Jovanovic String sample = Testspace.prepareData(path); 1382f709283SDamjan Jovanovic PropertyValue[] properties = new PropertyValue[1]; 1392f709283SDamjan Jovanovic properties[0] = new PropertyValue("Hidden", -1, true, PropertyState.DIRECT_VALUE); 1402f709283SDamjan Jovanovic XComponent docComponent = app.loadDocument(sample, properties); 1412f709283SDamjan Jovanovic XTextDocument textDocument = (XTextDocument) UnoRuntime.queryInterface(XTextDocument.class, docComponent); 1422f709283SDamjan Jovanovic XTextRange xTextRange = (XTextRange)textDocument.getText(); 1432f709283SDamjan Jovanovic return xTextRange.getString(); 144de76a5adSDamjan Jovanovic } 145de76a5adSDamjan Jovanovic 146de76a5adSDamjan Jovanovic /** 147de76a5adSDamjan Jovanovic * Compares returned next character positions with expected values. <p> 148de76a5adSDamjan Jovanovic * 149de76a5adSDamjan Jovanovic * Has <b>OK</b> status if position after travel and traveled length 150de76a5adSDamjan Jovanovic * has expected values. 151de76a5adSDamjan Jovanovic */ 1522f709283SDamjan Jovanovic @Test _nextCharacters()153de76a5adSDamjan Jovanovic public void _nextCharacters() { 154de76a5adSDamjan Jovanovic short nCharacterIteratorMode = 155de76a5adSDamjan Jovanovic com.sun.star.i18n.CharacterIteratorMode.SKIPCHARACTER; 156de76a5adSDamjan Jovanovic 157de76a5adSDamjan Jovanovic int strLength = UnicodeString.length(); 158de76a5adSDamjan Jovanovic 159de76a5adSDamjan Jovanovic //Start from position : Travel ... chars : 160de76a5adSDamjan Jovanovic // Actual position after : How many chars traveled 161de76a5adSDamjan Jovanovic int[][] nextCharacters = { 162de76a5adSDamjan Jovanovic { 1, 5000, strLength , strLength - 1 }, 163de76a5adSDamjan Jovanovic { 10, 6, 16, 6}}; 164de76a5adSDamjan Jovanovic 165de76a5adSDamjan Jovanovic boolean bRes = true; 166de76a5adSDamjan Jovanovic 167de76a5adSDamjan Jovanovic for(int i = 0; i < nextCharacters.length; i++) { 168de76a5adSDamjan Jovanovic int[] lDone = new int[1]; 169de76a5adSDamjan Jovanovic long lRes = oObj.nextCharacters(UnicodeString, nextCharacters[i][0], 170de76a5adSDamjan Jovanovic locale, nCharacterIteratorMode, nextCharacters[i][1], lDone); 1712f709283SDamjan Jovanovic System.out.println("Expected result is: lRes = " + nextCharacters[i][2] + 172de76a5adSDamjan Jovanovic "; lDone = " + nextCharacters[i][3] ); 1732f709283SDamjan Jovanovic System.out.println("Actual result is: lRes = " + lRes + 174de76a5adSDamjan Jovanovic "; lDone = " + lDone[0] ); 175de76a5adSDamjan Jovanovic 176de76a5adSDamjan Jovanovic bRes = bRes && lRes == nextCharacters[i][2]; 177de76a5adSDamjan Jovanovic bRes = bRes && lDone[0] == nextCharacters[i][3]; 178de76a5adSDamjan Jovanovic } 179de76a5adSDamjan Jovanovic 1802f709283SDamjan Jovanovic Assert.assertTrue("nextCharacters()", bRes); 181de76a5adSDamjan Jovanovic } 182de76a5adSDamjan Jovanovic 183de76a5adSDamjan Jovanovic /** 184de76a5adSDamjan Jovanovic * Compares returned previous character positions with expected values. <p> 185de76a5adSDamjan Jovanovic * 186de76a5adSDamjan Jovanovic * Has <b>OK</b> status if position after travel and traveled length 187de76a5adSDamjan Jovanovic * has expected values. 188de76a5adSDamjan Jovanovic */ 1892f709283SDamjan Jovanovic @Test _previousCharacters()190de76a5adSDamjan Jovanovic public void _previousCharacters() { 191de76a5adSDamjan Jovanovic short nCharacterIteratorMode = 192de76a5adSDamjan Jovanovic com.sun.star.i18n.CharacterIteratorMode.SKIPCHARACTER; 193de76a5adSDamjan Jovanovic 194de76a5adSDamjan Jovanovic 195de76a5adSDamjan Jovanovic //Start from position : Travel ... chars : Actual position after : 196de76a5adSDamjan Jovanovic //How many chars traveled 197de76a5adSDamjan Jovanovic int[][] previousCharacters = { 198de76a5adSDamjan Jovanovic {5, 5000, 0, 5}, 199de76a5adSDamjan Jovanovic {10, 6, 4, 6}}; 200de76a5adSDamjan Jovanovic 201de76a5adSDamjan Jovanovic boolean bRes = true; 202de76a5adSDamjan Jovanovic for(int i = 0; i < previousCharacters.length; i++) { 203de76a5adSDamjan Jovanovic int[] lDone = new int[1]; 204de76a5adSDamjan Jovanovic int lRes = oObj.previousCharacters(UnicodeString, 205de76a5adSDamjan Jovanovic previousCharacters[i][0], 206de76a5adSDamjan Jovanovic locale, nCharacterIteratorMode, 207de76a5adSDamjan Jovanovic previousCharacters[i][1], lDone); 2082f709283SDamjan Jovanovic System.out.println("Expected result is: lRes = " + previousCharacters[i][2] 209de76a5adSDamjan Jovanovic + "; lDone = " + previousCharacters[i][3] ); 2102f709283SDamjan Jovanovic System.out.println("Actual result is: lRes = " + lRes 211de76a5adSDamjan Jovanovic + "; lDone = " + lDone[0]); 212de76a5adSDamjan Jovanovic 213de76a5adSDamjan Jovanovic bRes = bRes && lRes == previousCharacters[i][2]; 214de76a5adSDamjan Jovanovic bRes = bRes && lDone[0] == previousCharacters[i][3]; 215de76a5adSDamjan Jovanovic } 216de76a5adSDamjan Jovanovic 2172f709283SDamjan Jovanovic Assert.assertTrue("previousCharacters()", bRes); 218de76a5adSDamjan Jovanovic } 219de76a5adSDamjan Jovanovic 220de76a5adSDamjan Jovanovic /** 221de76a5adSDamjan Jovanovic * Saves bounds of all returned words for the future tests. <p> 222de76a5adSDamjan Jovanovic * Has <b>OK</b> status. 223de76a5adSDamjan Jovanovic */ 2242f709283SDamjan Jovanovic @Test _nextWord()225de76a5adSDamjan Jovanovic public void _nextWord() { 2262f709283SDamjan Jovanovic ArrayList<Boundary> vBounds = nextWord(); 2272f709283SDamjan Jovanovic Assert.assertTrue("nextWord()", vBounds != null && vBounds.size() > 0); 2282f709283SDamjan Jovanovic } 229de76a5adSDamjan Jovanovic nextWord()2302f709283SDamjan Jovanovic private ArrayList<Boundary> nextWord() { 2312f709283SDamjan Jovanovic int i = 0; 2322f709283SDamjan Jovanovic ArrayList<Boundary> vBounds = new ArrayList<>(); 233de76a5adSDamjan Jovanovic while( i < UnicodeString.length() - 1 ) { 234de76a5adSDamjan Jovanovic Boundary bounds = oObj.nextWord 235de76a5adSDamjan Jovanovic (UnicodeString, i, locale, wordType); 236de76a5adSDamjan Jovanovic if (bounds.endPos - bounds.startPos > 3) { 237de76a5adSDamjan Jovanovic vBounds.add( bounds ); 2382f709283SDamjan Jovanovic System.out.println("Word " + vBounds.size() + "(" 239de76a5adSDamjan Jovanovic + bounds.startPos + "," + bounds.endPos + "): '" + 240de76a5adSDamjan Jovanovic UnicodeString.substring(bounds.startPos, 241de76a5adSDamjan Jovanovic bounds.endPos) + "'"); 242de76a5adSDamjan Jovanovic } 243de76a5adSDamjan Jovanovic i = bounds.endPos - 1; 244de76a5adSDamjan Jovanovic } 2452f709283SDamjan Jovanovic System.out.println("In text there are " + vBounds.size() 246de76a5adSDamjan Jovanovic + " words, if count from left to right"); 2472f709283SDamjan Jovanovic return vBounds; 248de76a5adSDamjan Jovanovic } 249de76a5adSDamjan Jovanovic 250de76a5adSDamjan Jovanovic /** 251de76a5adSDamjan Jovanovic * Compares number of word bounds with number of word bounds saved 252de76a5adSDamjan Jovanovic * by the method _nextWord().<p> 253de76a5adSDamjan Jovanovic * Has <b>OK</b> status if number of word bounds are equal. 254de76a5adSDamjan Jovanovic */ 2552f709283SDamjan Jovanovic @Test _previousWord()256de76a5adSDamjan Jovanovic public void _previousWord() { 2572f709283SDamjan Jovanovic ArrayList<Boundary> vBounds = nextWord(); 258de76a5adSDamjan Jovanovic 259de76a5adSDamjan Jovanovic int i = UnicodeString.length() - 1; 2602f709283SDamjan Jovanovic ArrayList<Boundary> vPrevBounds = new ArrayList<>(); 261de76a5adSDamjan Jovanovic while( i > 0 ) { 262de76a5adSDamjan Jovanovic Boundary bounds = 263de76a5adSDamjan Jovanovic oObj.previousWord(UnicodeString, i, locale, wordType); 264de76a5adSDamjan Jovanovic if (bounds.endPos - bounds.startPos > 3) { 265de76a5adSDamjan Jovanovic vPrevBounds.add( bounds ); 2662f709283SDamjan Jovanovic System.out.println("Word " + vPrevBounds.size() + "(" 267de76a5adSDamjan Jovanovic + bounds.startPos + "," + bounds.endPos + "): '" 268de76a5adSDamjan Jovanovic + UnicodeString.substring(bounds.startPos, bounds.endPos) 269de76a5adSDamjan Jovanovic + "'"); 270de76a5adSDamjan Jovanovic } 271de76a5adSDamjan Jovanovic i = bounds.startPos; 272de76a5adSDamjan Jovanovic } 2732f709283SDamjan Jovanovic System.out.println("In text there are " + vPrevBounds.size() 274de76a5adSDamjan Jovanovic + " words, if count from right to left"); 2752f709283SDamjan Jovanovic Assert.assertTrue("previousWord()", vPrevBounds.size() == vBounds.size() ); 276de76a5adSDamjan Jovanovic } 277de76a5adSDamjan Jovanovic 278de76a5adSDamjan Jovanovic /** 279de76a5adSDamjan Jovanovic * For every word in array obtained by <code>nextWord</code> method test 280de76a5adSDamjan Jovanovic * computes bounds of the word, passing its internal character position.<p> 281de76a5adSDamjan Jovanovic * 282de76a5adSDamjan Jovanovic * Has <b>OK</b> status if bounds calculated by <code>getWordBoundary()</code> 283de76a5adSDamjan Jovanovic * method are the same as bounds obtained by <code>nextWord</code> method. 284de76a5adSDamjan Jovanovic */ 2852f709283SDamjan Jovanovic @Test _getWordBoundary()286de76a5adSDamjan Jovanovic public void _getWordBoundary() { 2872f709283SDamjan Jovanovic ArrayList<Boundary> vBounds = nextWord(); 288de76a5adSDamjan Jovanovic 289de76a5adSDamjan Jovanovic boolean bRes = true; 290de76a5adSDamjan Jovanovic 291de76a5adSDamjan Jovanovic for(int i = 0; i < vBounds.size(); i++) { 292de76a5adSDamjan Jovanovic // calculate middle of the word 293de76a5adSDamjan Jovanovic Boundary iBounds = (Boundary)vBounds.get(i); 294de76a5adSDamjan Jovanovic int iPos = (iBounds.endPos - iBounds.startPos) / 2 295de76a5adSDamjan Jovanovic + iBounds.startPos; 296de76a5adSDamjan Jovanovic Boundary bounds = oObj.getWordBoundary(UnicodeString, iPos, 297de76a5adSDamjan Jovanovic locale, wordType, true); 2982f709283SDamjan Jovanovic System.out.println("Expected result is: startPos = " + iBounds.startPos + 299de76a5adSDamjan Jovanovic "; endPos = " + iBounds.endPos); 3002f709283SDamjan Jovanovic System.out.println("Actual result is: startPos = " + bounds.startPos 301de76a5adSDamjan Jovanovic + "; endPos = " + bounds.endPos + " Word is: '" 302de76a5adSDamjan Jovanovic + UnicodeString.substring(bounds.startPos, bounds.endPos) + "'"); 303de76a5adSDamjan Jovanovic 304de76a5adSDamjan Jovanovic bRes = bRes && iBounds.startPos == bounds.startPos; 305de76a5adSDamjan Jovanovic bRes = bRes && iBounds.endPos == bounds.endPos; 306de76a5adSDamjan Jovanovic } 307de76a5adSDamjan Jovanovic 3082f709283SDamjan Jovanovic Assert.assertTrue("getWordBoundary()", bRes); 309de76a5adSDamjan Jovanovic } 310de76a5adSDamjan Jovanovic 311de76a5adSDamjan Jovanovic /** 312de76a5adSDamjan Jovanovic * For every word in array obtained by <code>nextWord</code> method test 313de76a5adSDamjan Jovanovic * get its type, passing its internal character position.<p> 314de76a5adSDamjan Jovanovic * 315de76a5adSDamjan Jovanovic * Has <b>OK</b> status if every word has type <code>WordType.ANY_WORD</code> 316de76a5adSDamjan Jovanovic */ 3172f709283SDamjan Jovanovic @Test _getWordType()318de76a5adSDamjan Jovanovic public void _getWordType() { 3192f709283SDamjan Jovanovic ArrayList<Boundary> vBounds = nextWord(); 320de76a5adSDamjan Jovanovic 321de76a5adSDamjan Jovanovic boolean bRes = true; 322de76a5adSDamjan Jovanovic 323de76a5adSDamjan Jovanovic for(int i = 0; i < vBounds.size(); i++) { 324de76a5adSDamjan Jovanovic // calculate middle of the word 325de76a5adSDamjan Jovanovic Boundary iBounds = (Boundary)vBounds.get(i); 326de76a5adSDamjan Jovanovic int iPos = (iBounds.endPos - iBounds.startPos) / 2 327de76a5adSDamjan Jovanovic + iBounds.startPos; 328de76a5adSDamjan Jovanovic 329de76a5adSDamjan Jovanovic short type = oObj.getWordType(UnicodeString, iPos, locale); 330de76a5adSDamjan Jovanovic 331de76a5adSDamjan Jovanovic bRes = bRes && type == WordType.ANY_WORD; 332de76a5adSDamjan Jovanovic } 333de76a5adSDamjan Jovanovic 3342f709283SDamjan Jovanovic Assert.assertTrue("getWordType()", bRes); 335de76a5adSDamjan Jovanovic } 336de76a5adSDamjan Jovanovic 337de76a5adSDamjan Jovanovic /** 338de76a5adSDamjan Jovanovic * For every word in array obtained by <code>nextWord</code> method test 339de76a5adSDamjan Jovanovic * tries to determine if the character at a position starts a word. 340de76a5adSDamjan Jovanovic * First word starting position is passed, then internal character 341de76a5adSDamjan Jovanovic * position is passed. <p> 342de76a5adSDamjan Jovanovic * Has <b>OK</b> status if in the first case <code>true</code> 343de76a5adSDamjan Jovanovic * returned and in the second - <code>false</code> for every word. 344de76a5adSDamjan Jovanovic */ 3452f709283SDamjan Jovanovic @Test _isBeginWord()346de76a5adSDamjan Jovanovic public void _isBeginWord() { 3472f709283SDamjan Jovanovic ArrayList<Boundary> vBounds = nextWord(); 348de76a5adSDamjan Jovanovic 349de76a5adSDamjan Jovanovic boolean bRes = true; 350de76a5adSDamjan Jovanovic 351de76a5adSDamjan Jovanovic for(int i = 0; i < vBounds.size(); i++) { 352de76a5adSDamjan Jovanovic Boundary iBounds = (Boundary)vBounds.get(i); 353de76a5adSDamjan Jovanovic boolean isBegin = oObj.isBeginWord(UnicodeString, iBounds.startPos, 35410a136b9SDamjan Jovanovic locale, wordType); 355de76a5adSDamjan Jovanovic bRes = bRes && isBegin; 356de76a5adSDamjan Jovanovic boolean isNotBegin = !oObj.isBeginWord(UnicodeString, 35710a136b9SDamjan Jovanovic iBounds.startPos + 1, locale, wordType); 358de76a5adSDamjan Jovanovic bRes = bRes && isNotBegin; 359de76a5adSDamjan Jovanovic 3602f709283SDamjan Jovanovic System.out.println("At position + " + iBounds.startPos 361de76a5adSDamjan Jovanovic + " isBeginWord? " + isBegin); 3622f709283SDamjan Jovanovic System.out.println("At position + " + (iBounds.startPos + 1) 363de76a5adSDamjan Jovanovic + " isBeginWord? " + !isNotBegin); 364de76a5adSDamjan Jovanovic } 365de76a5adSDamjan Jovanovic 3662f709283SDamjan Jovanovic Assert.assertTrue("isBeginWord()", bRes); 367de76a5adSDamjan Jovanovic } 368de76a5adSDamjan Jovanovic 369de76a5adSDamjan Jovanovic /** 370de76a5adSDamjan Jovanovic * For every word in array obtained by <code>nextWord</code> method test 371de76a5adSDamjan Jovanovic * tries to determine if the character at a position ends a word. 372de76a5adSDamjan Jovanovic * First word ending position is passed, then internal character 373de76a5adSDamjan Jovanovic * position is passed. <p> 374de76a5adSDamjan Jovanovic * 375de76a5adSDamjan Jovanovic * Has <b>OK</b> status if in the first case <code>true</code> 376de76a5adSDamjan Jovanovic * returned and in the second - <code>false</code> for every word. 377de76a5adSDamjan Jovanovic */ 3782f709283SDamjan Jovanovic @Test _isEndWord()379de76a5adSDamjan Jovanovic public void _isEndWord() { 3802f709283SDamjan Jovanovic ArrayList<Boundary> vBounds = nextWord(); 381de76a5adSDamjan Jovanovic 382de76a5adSDamjan Jovanovic boolean bRes = true; 383de76a5adSDamjan Jovanovic 384de76a5adSDamjan Jovanovic for(int i = 0; i < vBounds.size(); i++) { 385de76a5adSDamjan Jovanovic Boundary iBounds = (Boundary)vBounds.get(i); 386de76a5adSDamjan Jovanovic boolean isEnd = oObj.isEndWord(UnicodeString, iBounds.endPos, 38710a136b9SDamjan Jovanovic locale, wordType); 388de76a5adSDamjan Jovanovic bRes = bRes && isEnd; 389de76a5adSDamjan Jovanovic boolean isNotEnd = !oObj.isEndWord(UnicodeString, 39010a136b9SDamjan Jovanovic iBounds.endPos - 1, locale, wordType); 391de76a5adSDamjan Jovanovic bRes = bRes && isNotEnd; 392de76a5adSDamjan Jovanovic 3932f709283SDamjan Jovanovic System.out.println("At position + " + iBounds.endPos 394de76a5adSDamjan Jovanovic + " isEndWord? " + isEnd); 3952f709283SDamjan Jovanovic System.out.println("At position + " + (iBounds.endPos - 1) 396de76a5adSDamjan Jovanovic + " isEndWord? " + !isNotEnd); 397de76a5adSDamjan Jovanovic } 398de76a5adSDamjan Jovanovic 3992f709283SDamjan Jovanovic Assert.assertTrue("isEndWord()", bRes); 400de76a5adSDamjan Jovanovic } 401de76a5adSDamjan Jovanovic 402de76a5adSDamjan Jovanovic Vector vSentenceStart = new Vector(); 403de76a5adSDamjan Jovanovic /** 404de76a5adSDamjan Jovanovic * Tries to find all sentences starting positions passing every character 405de76a5adSDamjan Jovanovic * as position parameter and stores them. Then tries to pass invalid 406de76a5adSDamjan Jovanovic * position parameters. 407de76a5adSDamjan Jovanovic * 408de76a5adSDamjan Jovanovic * Has <b>OK</b> status if -1 is returned for wrong position arguments. 409de76a5adSDamjan Jovanovic */ 4102f709283SDamjan Jovanovic @Test _beginOfSentence()411de76a5adSDamjan Jovanovic public void _beginOfSentence() { 412de76a5adSDamjan Jovanovic int iPos = 0; 413de76a5adSDamjan Jovanovic while( iPos < UnicodeString.length() ) { 414de76a5adSDamjan Jovanovic Integer start = new Integer( oObj.beginOfSentence(UnicodeString, 415de76a5adSDamjan Jovanovic iPos, locale) ); 416de76a5adSDamjan Jovanovic if (start.intValue() >= 0 && !vSentenceStart.contains(start) ) { 417de76a5adSDamjan Jovanovic vSentenceStart.add( start ); 4182f709283SDamjan Jovanovic System.out.println("Sentence " + vSentenceStart.size() 419de76a5adSDamjan Jovanovic + " : start from position " + start); 420de76a5adSDamjan Jovanovic } 421de76a5adSDamjan Jovanovic iPos++; 422de76a5adSDamjan Jovanovic } 423de76a5adSDamjan Jovanovic 424de76a5adSDamjan Jovanovic //test for invalid nStartPosition 425de76a5adSDamjan Jovanovic boolean bRes = oObj.beginOfSentence(UnicodeString, -10, locale) == -1; 426de76a5adSDamjan Jovanovic bRes &= oObj.beginOfSentence(UnicodeString, 427de76a5adSDamjan Jovanovic UnicodeString.length() + 1, locale) == -1; 428de76a5adSDamjan Jovanovic 429de76a5adSDamjan Jovanovic if (!bRes) { 4302f709283SDamjan Jovanovic System.out.println("When invalid position, returned value isn't equal to -1"); 431de76a5adSDamjan Jovanovic } 432de76a5adSDamjan Jovanovic 4332f709283SDamjan Jovanovic Assert.assertTrue("beginOfSentence()", bRes); 434de76a5adSDamjan Jovanovic } 435de76a5adSDamjan Jovanovic 436de76a5adSDamjan Jovanovic /** 437de76a5adSDamjan Jovanovic * For every sentence starting position found in 438de76a5adSDamjan Jovanovic * <code>beginOfSentence()</code> test tries to compute end 439de76a5adSDamjan Jovanovic * position of a sentence and checks that the end position is 440de76a5adSDamjan Jovanovic * greater than starting. 441de76a5adSDamjan Jovanovic * Then wrong position arguments are passed. 442de76a5adSDamjan Jovanovic * 443de76a5adSDamjan Jovanovic * Has <b>OK</b> status if the end position of every sentence 444de76a5adSDamjan Jovanovic * greater than starting and -1 returned for invalid arguments. 445de76a5adSDamjan Jovanovic */ 4462f709283SDamjan Jovanovic @Test _endOfSentence()447de76a5adSDamjan Jovanovic public void _endOfSentence() { 448de76a5adSDamjan Jovanovic boolean bRes = true; 449de76a5adSDamjan Jovanovic for(int i = 0; i < vSentenceStart.size(); i++) { 450de76a5adSDamjan Jovanovic int start = ((Integer)vSentenceStart.get(i)).intValue(); 451de76a5adSDamjan Jovanovic int end = oObj.endOfSentence(UnicodeString, start, locale); 452de76a5adSDamjan Jovanovic bRes &= end > start; 4532f709283SDamjan Jovanovic System.out.println("Sentence " + i + " range is [" + start + ", " 454de76a5adSDamjan Jovanovic + end + "]"); 455de76a5adSDamjan Jovanovic } 456de76a5adSDamjan Jovanovic 457de76a5adSDamjan Jovanovic //test for invalid nStartPosition 458de76a5adSDamjan Jovanovic boolean bInvRes = oObj.endOfSentence(UnicodeString, -10, locale) == -1; 459de76a5adSDamjan Jovanovic bInvRes &= oObj.endOfSentence(UnicodeString, 460de76a5adSDamjan Jovanovic UnicodeString.length() + 1, locale) == -1; 461de76a5adSDamjan Jovanovic 462de76a5adSDamjan Jovanovic if (!bInvRes) { 4632f709283SDamjan Jovanovic System.out.println("When invalid position, returned value isn't equal to -1"); 464de76a5adSDamjan Jovanovic } 465de76a5adSDamjan Jovanovic 4662f709283SDamjan Jovanovic Assert.assertTrue("endOfSentence()", bRes && bInvRes); 467de76a5adSDamjan Jovanovic } 468de76a5adSDamjan Jovanovic 469de76a5adSDamjan Jovanovic /** 470de76a5adSDamjan Jovanovic * Tries to break a string in position other than 0 iterating characters 471de76a5adSDamjan Jovanovic * from the string beginning (Hyphenation is not used for a while). <p> 472de76a5adSDamjan Jovanovic * 473de76a5adSDamjan Jovanovic * Has <b>OK</b> status if non-zero break position was found and it is 474de76a5adSDamjan Jovanovic * less or equal than position we trying to break. 475de76a5adSDamjan Jovanovic */ 4762f709283SDamjan Jovanovic @Test _getLineBreak()477de76a5adSDamjan Jovanovic public void _getLineBreak() { 478de76a5adSDamjan Jovanovic boolean bRes = true; 479de76a5adSDamjan Jovanovic LineBreakResults lineBreakResults; 480de76a5adSDamjan Jovanovic LineBreakHyphenationOptions lineBreakHyphenationOptions = 481de76a5adSDamjan Jovanovic new LineBreakHyphenationOptions(); 482de76a5adSDamjan Jovanovic LineBreakUserOptions lineBreakUserOptions = new LineBreakUserOptions(); 483de76a5adSDamjan Jovanovic 484de76a5adSDamjan Jovanovic lineBreakUserOptions.applyForbiddenRules = false; 485de76a5adSDamjan Jovanovic lineBreakUserOptions.allowHyphenateEnglish = false; 486de76a5adSDamjan Jovanovic 487de76a5adSDamjan Jovanovic int breakPos = 0; 488de76a5adSDamjan Jovanovic int pos = 0; 489de76a5adSDamjan Jovanovic 490de76a5adSDamjan Jovanovic while(breakPos == 0 && pos < UnicodeString.length() ) { 491de76a5adSDamjan Jovanovic lineBreakResults = oObj.getLineBreak(UnicodeString, pos, 492de76a5adSDamjan Jovanovic locale, 0, lineBreakHyphenationOptions, lineBreakUserOptions); 493de76a5adSDamjan Jovanovic breakPos = lineBreakResults.breakIndex; 494de76a5adSDamjan Jovanovic pos++; 495de76a5adSDamjan Jovanovic } 496de76a5adSDamjan Jovanovic 497de76a5adSDamjan Jovanovic // finally the position of break must be found in the middle and 498de76a5adSDamjan Jovanovic // it must be before the break position specified 499de76a5adSDamjan Jovanovic bRes = breakPos <= pos && breakPos > 0; 500de76a5adSDamjan Jovanovic 501de76a5adSDamjan Jovanovic if (!bRes) { 5022f709283SDamjan Jovanovic System.out.println("The last position was: " + pos 503de76a5adSDamjan Jovanovic + ", and the break position was: " + breakPos); 504de76a5adSDamjan Jovanovic } 505de76a5adSDamjan Jovanovic 5062f709283SDamjan Jovanovic Assert.assertTrue("getLineBreak()", bRes); 507de76a5adSDamjan Jovanovic } 508de76a5adSDamjan Jovanovic 509de76a5adSDamjan Jovanovic // Asian type script 510de76a5adSDamjan Jovanovic private static String katakana = new String(new char[] {0x30A1, 0x30A2}) ; 511de76a5adSDamjan Jovanovic // Weak type script 512de76a5adSDamjan Jovanovic private static String arrows = new String(new char[] {0x2190, 0x2191}) ; 513de76a5adSDamjan Jovanovic // Complex type script 514de76a5adSDamjan Jovanovic private static String arabic = new String(new char[] {0x0641, 0x0642}) ; 515de76a5adSDamjan Jovanovic 516de76a5adSDamjan Jovanovic /** 517de76a5adSDamjan Jovanovic * Tries to find the beginning of the nearest script specified 518de76a5adSDamjan Jovanovic * relatively to position passed. <p> 519de76a5adSDamjan Jovanovic * Has <b>OK</b> status if the starting position of script is returned. 520de76a5adSDamjan Jovanovic */ 5212f709283SDamjan Jovanovic @Test _beginOfScript()522de76a5adSDamjan Jovanovic public void _beginOfScript() { 523de76a5adSDamjan Jovanovic String multiScript = "ab" + katakana ; 524de76a5adSDamjan Jovanovic 525de76a5adSDamjan Jovanovic int pos = oObj.beginOfScript(multiScript, 3, ScriptType.ASIAN) ; 526de76a5adSDamjan Jovanovic 5272f709283SDamjan Jovanovic System.out.println("Position = " + pos) ; 528de76a5adSDamjan Jovanovic 5292f709283SDamjan Jovanovic Assert.assertTrue("beginOfScript()", pos == 2) ; 530de76a5adSDamjan Jovanovic } 531de76a5adSDamjan Jovanovic 532de76a5adSDamjan Jovanovic /** 533de76a5adSDamjan Jovanovic * Tries to find the end of the nearest script specified 534de76a5adSDamjan Jovanovic * relatively to position passed. <p> 535de76a5adSDamjan Jovanovic * Has <b>OK</b> status if the end position of script is returned. 536de76a5adSDamjan Jovanovic */ 5372f709283SDamjan Jovanovic @Test _endOfScript()538de76a5adSDamjan Jovanovic public void _endOfScript() { 539de76a5adSDamjan Jovanovic String multiScript = "ab" + katakana + "cd" ; 540de76a5adSDamjan Jovanovic 541de76a5adSDamjan Jovanovic int pos = oObj.endOfScript(multiScript, 2, ScriptType.ASIAN) ; 542de76a5adSDamjan Jovanovic 5432f709283SDamjan Jovanovic System.out.println("Position = " + pos) ; 544de76a5adSDamjan Jovanovic 5452f709283SDamjan Jovanovic Assert.assertTrue("endOfScript()", pos == 4) ; 546de76a5adSDamjan Jovanovic } 547de76a5adSDamjan Jovanovic 548de76a5adSDamjan Jovanovic /** 549de76a5adSDamjan Jovanovic * Tries to find the next script starting position specified 550de76a5adSDamjan Jovanovic * relatively to position passed. <p> 551de76a5adSDamjan Jovanovic * Has <b>OK</b> status if the appropriate position is returned. 552de76a5adSDamjan Jovanovic */ 5532f709283SDamjan Jovanovic @Test _nextScript()554de76a5adSDamjan Jovanovic public void _nextScript() { 555de76a5adSDamjan Jovanovic String multiScript = "ab" + katakana + "cd" ; 556de76a5adSDamjan Jovanovic 557de76a5adSDamjan Jovanovic int pos = oObj.nextScript(multiScript, 0, ScriptType.LATIN) ; 558de76a5adSDamjan Jovanovic 5592f709283SDamjan Jovanovic System.out.println("Position = " + pos) ; 560de76a5adSDamjan Jovanovic 5612f709283SDamjan Jovanovic Assert.assertTrue("nextScript()", pos == 4) ; 562de76a5adSDamjan Jovanovic } 563de76a5adSDamjan Jovanovic 564de76a5adSDamjan Jovanovic /** 565de76a5adSDamjan Jovanovic * Tries to find the previous script starting position specified 566de76a5adSDamjan Jovanovic * relatively to position passed. <p> 567de76a5adSDamjan Jovanovic * Has <b>OK</b> status if the appropriate position is returned. 568de76a5adSDamjan Jovanovic */ 5692f709283SDamjan Jovanovic @Test _previousScript()570de76a5adSDamjan Jovanovic public void _previousScript() { 571de76a5adSDamjan Jovanovic String multiScript = "ab" + katakana + "cd" ; 572de76a5adSDamjan Jovanovic 573de76a5adSDamjan Jovanovic int pos = oObj.previousScript(multiScript, 5, ScriptType.ASIAN) ; 574de76a5adSDamjan Jovanovic 5752f709283SDamjan Jovanovic System.out.println("Position = " + pos) ; 576de76a5adSDamjan Jovanovic 5772f709283SDamjan Jovanovic Assert.assertTrue("previousScript()", pos == 2) ; 578de76a5adSDamjan Jovanovic } 579de76a5adSDamjan Jovanovic 580de76a5adSDamjan Jovanovic /** 581de76a5adSDamjan Jovanovic * Tries to determine script type (of all four types). <p> 582de76a5adSDamjan Jovanovic * Has <b>OK</b> status if <code>LATIN</code> type returned 583*141ed1b0SJohn Bampton * for ASCII character, <code>ASIAN</code> for Katakana Unicode 584de76a5adSDamjan Jovanovic * codepoints, <code>COMPLEX</code> for Arabic Unicode 585de76a5adSDamjan Jovanovic * codepoints and <code>WEAK</code> for codepoints from Arrows 586de76a5adSDamjan Jovanovic * Unicode block. 587de76a5adSDamjan Jovanovic */ 5882f709283SDamjan Jovanovic @Test _getScriptType()589de76a5adSDamjan Jovanovic public void _getScriptType() { 590de76a5adSDamjan Jovanovic boolean res = true ; 591de76a5adSDamjan Jovanovic 592de76a5adSDamjan Jovanovic res &= oObj.getScriptType("abcd", 0) == ScriptType.LATIN ; 593de76a5adSDamjan Jovanovic res &= oObj.getScriptType(katakana, 0) == ScriptType.ASIAN; 594de76a5adSDamjan Jovanovic res &= oObj.getScriptType(arabic, 0) == ScriptType.COMPLEX ; 595de76a5adSDamjan Jovanovic res &= oObj.getScriptType(arrows, 0) == ScriptType.WEAK ; 596de76a5adSDamjan Jovanovic 5972f709283SDamjan Jovanovic Assert.assertTrue("getScriptType()", res) ; 598de76a5adSDamjan Jovanovic } 599de76a5adSDamjan Jovanovic getCharBlockType(int pos)600de76a5adSDamjan Jovanovic protected short getCharBlockType(int pos) { 601de76a5adSDamjan Jovanovic short i = 1; 602de76a5adSDamjan Jovanovic short cType = 0; 603de76a5adSDamjan Jovanovic while (i < 31) { 604de76a5adSDamjan Jovanovic if (oObj.beginOfCharBlock(UnicodeString, pos, locale, i) != -1) { 605de76a5adSDamjan Jovanovic cType = i; 606de76a5adSDamjan Jovanovic i = 100; 607de76a5adSDamjan Jovanovic } 608de76a5adSDamjan Jovanovic i++; 609de76a5adSDamjan Jovanovic } 610de76a5adSDamjan Jovanovic 611de76a5adSDamjan Jovanovic return cType; 612de76a5adSDamjan Jovanovic } 613de76a5adSDamjan Jovanovic 614de76a5adSDamjan Jovanovic Vector vCharBlockBounds = new Vector(); 615de76a5adSDamjan Jovanovic Vector vCharBlockTypes = new Vector(); 616de76a5adSDamjan Jovanovic 617de76a5adSDamjan Jovanovic /** 618de76a5adSDamjan Jovanovic * Creates array of all char blocks with their boundaries and 619de76a5adSDamjan Jovanovic * types using <code>beginOfCharBlock()</code> and 620de76a5adSDamjan Jovanovic * <code>endOfCharBlock()</code> methods. <p> 621de76a5adSDamjan Jovanovic * 622de76a5adSDamjan Jovanovic * Has <b>OK</b> status if the end of each boundary is the same 623de76a5adSDamjan Jovanovic * as start of the next one and if the start of the first block 624de76a5adSDamjan Jovanovic * has position 0 and the end of the last block is at the end 625de76a5adSDamjan Jovanovic * of the whole string. 626de76a5adSDamjan Jovanovic */ 6272f709283SDamjan Jovanovic @Test _beginOfCharBlock()628de76a5adSDamjan Jovanovic public void _beginOfCharBlock() { 6292f709283SDamjan Jovanovic Assert.assertTrue("beginOfCharBlock()", beginOfCharBlock()); 6302f709283SDamjan Jovanovic } 6312f709283SDamjan Jovanovic beginOfCharBlock()6322f709283SDamjan Jovanovic private boolean beginOfCharBlock() { 6332f709283SDamjan Jovanovic boolean bCharBlockRes = true; 634de76a5adSDamjan Jovanovic int iPos = 0; 635de76a5adSDamjan Jovanovic 636de76a5adSDamjan Jovanovic while( iPos < UnicodeString.length() && iPos > -1) { 637de76a5adSDamjan Jovanovic short charType = getCharBlockType(iPos); 638de76a5adSDamjan Jovanovic int startPos = oObj.beginOfCharBlock(UnicodeString, iPos, 639de76a5adSDamjan Jovanovic locale, charType); 640de76a5adSDamjan Jovanovic int endPos = oObj.endOfCharBlock(UnicodeString, iPos, 641de76a5adSDamjan Jovanovic locale, charType); 642de76a5adSDamjan Jovanovic iPos = endPos; 643de76a5adSDamjan Jovanovic vCharBlockBounds.add(new Boundary(startPos, endPos)); 6442f709283SDamjan Jovanovic System.out.println("" + vCharBlockBounds.size() + "). Bounds: [" 645de76a5adSDamjan Jovanovic + startPos + "," + endPos + "]; Type = " + charType); 646de76a5adSDamjan Jovanovic vCharBlockTypes.add(new Short(charType)); 647de76a5adSDamjan Jovanovic } 648de76a5adSDamjan Jovanovic 649de76a5adSDamjan Jovanovic for(int i = 0; i < vCharBlockBounds.size() - 1; i++) { 650de76a5adSDamjan Jovanovic int endPos = ((Boundary)vCharBlockBounds.get(i)).endPos; 651de76a5adSDamjan Jovanovic int startPos = ((Boundary)vCharBlockBounds.get(i + 1)).startPos; 652de76a5adSDamjan Jovanovic bCharBlockRes &= endPos == startPos; 653de76a5adSDamjan Jovanovic } 654de76a5adSDamjan Jovanovic 6552f709283SDamjan Jovanovic System.out.println("Testing for no intersections : " + bCharBlockRes); 656de76a5adSDamjan Jovanovic int startPos = ((Boundary)vCharBlockBounds.get(0)).startPos; 657de76a5adSDamjan Jovanovic bCharBlockRes &= startPos == 0; 658de76a5adSDamjan Jovanovic int endPos = ((Boundary)vCharBlockBounds.get 659de76a5adSDamjan Jovanovic (vCharBlockBounds.size() - 1)).endPos; 660de76a5adSDamjan Jovanovic bCharBlockRes &= endPos == UnicodeString.length(); 6612f709283SDamjan Jovanovic System.out.println("Regions should starts with 0 and ends with " 662de76a5adSDamjan Jovanovic + UnicodeString.length()); 663de76a5adSDamjan Jovanovic 6642f709283SDamjan Jovanovic return bCharBlockRes; 665de76a5adSDamjan Jovanovic } 666de76a5adSDamjan Jovanovic 667de76a5adSDamjan Jovanovic /** 668de76a5adSDamjan Jovanovic * Testing of this method is performed in <code>beginOfCharBlock()</code> 669de76a5adSDamjan Jovanovic * method test. <p> 670de76a5adSDamjan Jovanovic * 671de76a5adSDamjan Jovanovic * Has the status same as <code>beginOfCharBlock()</code> method status. 672de76a5adSDamjan Jovanovic */ _endOfCharBlock()673de76a5adSDamjan Jovanovic public void _endOfCharBlock() { 6742f709283SDamjan Jovanovic Assert.assertTrue("endOfCharBlock()", beginOfCharBlock()); 675de76a5adSDamjan Jovanovic } 676de76a5adSDamjan Jovanovic 677de76a5adSDamjan Jovanovic /** 678de76a5adSDamjan Jovanovic * For every character block obtained in <code>beginOfCharBlock()</code> 679de76a5adSDamjan Jovanovic * method test (except the first) tries to find its starting position 680de76a5adSDamjan Jovanovic * by mean of <code>nextCharBlock()</code> method passing as position 681de76a5adSDamjan Jovanovic * argument the position before the start of a block. <p> 682de76a5adSDamjan Jovanovic * 683de76a5adSDamjan Jovanovic * Has <b>OK</b> status if the start of every block was found and it's 684de76a5adSDamjan Jovanovic * equal to this block boundary start. 685de76a5adSDamjan Jovanovic */ _nextCharBlock()686de76a5adSDamjan Jovanovic public void _nextCharBlock() { 6872f709283SDamjan Jovanovic beginOfCharBlock(); 688de76a5adSDamjan Jovanovic 689de76a5adSDamjan Jovanovic boolean bRes = true; 690de76a5adSDamjan Jovanovic for(int i = 0; i < vCharBlockBounds.size(); i++) { 691de76a5adSDamjan Jovanovic Boundary bounds = (Boundary)vCharBlockBounds.get(i); 692de76a5adSDamjan Jovanovic Short type = (Short)vCharBlockTypes.get(i); 693de76a5adSDamjan Jovanovic if (bounds.startPos - 1 < 0) continue; 694de76a5adSDamjan Jovanovic int iPos = oObj.nextCharBlock(UnicodeString, bounds.startPos - 1, 695de76a5adSDamjan Jovanovic locale, type.shortValue()); 696de76a5adSDamjan Jovanovic if (iPos != bounds.startPos) { 697de76a5adSDamjan Jovanovic bRes = false; 6982f709283SDamjan Jovanovic System.out.println("nextCharBlock(UnicodeString, " 699de76a5adSDamjan Jovanovic + (bounds.startPos - 1) + ", locale, " + type 700de76a5adSDamjan Jovanovic + ") should return " + bounds.startPos); 7012f709283SDamjan Jovanovic System.out.println("... and actual value is " + iPos); 702de76a5adSDamjan Jovanovic } 703de76a5adSDamjan Jovanovic } 704de76a5adSDamjan Jovanovic 7052f709283SDamjan Jovanovic Assert.assertTrue("nextCharBlock()", bRes); 706de76a5adSDamjan Jovanovic } 707de76a5adSDamjan Jovanovic 708de76a5adSDamjan Jovanovic /** 709de76a5adSDamjan Jovanovic * For every character block obtained in <code>beginOfCharBlock()</code> 710de76a5adSDamjan Jovanovic * method test (except the first) tries to find its starting position 711de76a5adSDamjan Jovanovic * by mean of <code>previousCharBlock()</code> method passing as position 712de76a5adSDamjan Jovanovic * argument the position after the end of a block. <p> 713de76a5adSDamjan Jovanovic * 714de76a5adSDamjan Jovanovic * Has <b>OK</b> status if the start of every block was found and it's 715de76a5adSDamjan Jovanovic * equal to this block boundary start. 716de76a5adSDamjan Jovanovic */ _previousCharBlock()717de76a5adSDamjan Jovanovic public void _previousCharBlock() { 7182f709283SDamjan Jovanovic beginOfCharBlock(); 719de76a5adSDamjan Jovanovic 720de76a5adSDamjan Jovanovic boolean bRes = true; 721de76a5adSDamjan Jovanovic for(int i = 0; i < vCharBlockBounds.size(); i++) { 722de76a5adSDamjan Jovanovic Boundary bounds = (Boundary)vCharBlockBounds.get(i); 723de76a5adSDamjan Jovanovic Short type = (Short)vCharBlockTypes.get(i); 724de76a5adSDamjan Jovanovic int iPos = oObj.previousCharBlock(UnicodeString, 725de76a5adSDamjan Jovanovic bounds.endPos + 1, locale, type.shortValue()); 726de76a5adSDamjan Jovanovic if (iPos != bounds.startPos) { 727de76a5adSDamjan Jovanovic bRes = false; 7282f709283SDamjan Jovanovic System.out.println("previousCharBlock(UnicodeString, " 729de76a5adSDamjan Jovanovic + (bounds.endPos + 1) + ", locale, " + type 730de76a5adSDamjan Jovanovic + ") should return " + bounds.startPos); 7312f709283SDamjan Jovanovic System.out.println("... and actual value is " + iPos); 732de76a5adSDamjan Jovanovic } 733de76a5adSDamjan Jovanovic } 734de76a5adSDamjan Jovanovic 7352f709283SDamjan Jovanovic Assert.assertTrue("previousCharBlock()", bRes); 736de76a5adSDamjan Jovanovic } 737de76a5adSDamjan Jovanovic 738de76a5adSDamjan Jovanovic } 739