diff options
Diffstat (limited to 'linguistic/qa/complex/linguistic/HangulHanjaConversion.java')
-rw-r--r-- | linguistic/qa/complex/linguistic/HangulHanjaConversion.java | 344 |
1 files changed, 344 insertions, 0 deletions
diff --git a/linguistic/qa/complex/linguistic/HangulHanjaConversion.java b/linguistic/qa/complex/linguistic/HangulHanjaConversion.java new file mode 100644 index 000000000..b407c4642 --- /dev/null +++ b/linguistic/qa/complex/linguistic/HangulHanjaConversion.java @@ -0,0 +1,344 @@ +/* + * 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/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 . + */ +package complex.linguistic; + +import com.sun.star.beans.PropertyValue; +import com.sun.star.container.ElementExistException; +import com.sun.star.container.NoSuchElementException; +import com.sun.star.container.XNameContainer; +import com.sun.star.i18n.TextConversionOption; +import com.sun.star.lang.IllegalArgumentException; +import com.sun.star.lang.Locale; +import com.sun.star.lang.XComponent; +import com.sun.star.lang.XEventListener; +import com.sun.star.lang.XMultiServiceFactory; +import com.sun.star.linguistic2.ConversionDictionaryType; +import com.sun.star.linguistic2.ConversionDirection; +import com.sun.star.linguistic2.XConversionDictionary; +import com.sun.star.linguistic2.XConversionDictionaryList; +import com.sun.star.sheet.XSpreadsheet; +import com.sun.star.sheet.XSpreadsheetDocument; +import com.sun.star.table.XCell; + +import com.sun.star.uno.UnoRuntime; + + + +import util.DesktopTools; + +import org.junit.AfterClass; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; +import org.openoffice.test.OfficeConnection; +import static org.junit.Assert.*; + +public class HangulHanjaConversion { + XMultiServiceFactory xMSF = null; + boolean disposed = false; + Locale aLocale = new Locale("ko", "KR", ""); + short dictType = ConversionDictionaryType.HANGUL_HANJA; + + @Before public void before() { + xMSF = getMSF(); + } + + @Test public void ConversionDictionaryList() { + Object ConversionDictionaryList = null; + + try { + ConversionDictionaryList = xMSF.createInstance( + "com.sun.star.linguistic2.ConversionDictionaryList"); + } catch (com.sun.star.uno.Exception e) { + fail("Couldn't create ConversionDictionaryList"); + } + + if (ConversionDictionaryList == null) { + fail("Couldn't create ConversionDictionaryList"); + } + + boolean bList = checkXConversionDictionaryList( + ConversionDictionaryList); + assertTrue("XConversionDictionaryList doesn't work as expected", bList); + } + + private boolean checkXConversionDictionaryList(Object list) { + boolean res = true; + XConversionDictionaryList xCList = UnoRuntime.queryInterface(XConversionDictionaryList.class, list); + XConversionDictionary xDict = null; + + try { + xDict = xCList.addNewDictionary("addNewDictionary", aLocale, + dictType); + } catch (com.sun.star.lang.NoSupportException e) { + res = false; + fail("Couldn't add Dictionary"); + } catch (com.sun.star.container.ElementExistException e) { + res = false; + fail("Couldn't add Dictionary"); + } + + try { + xCList.addNewDictionary("addNewDictionary", aLocale, dictType); + res = false; + fail("wrong exception while adding Dictionary again"); + } catch (com.sun.star.lang.NoSupportException e) { + res = false; + fail("wrong exception while adding Dictionary again"); + } catch (com.sun.star.container.ElementExistException e) { + } + + boolean localRes = checkNameContainer(xCList.getDictionaryContainer()); + res &= localRes; + assertTrue("getDictionaryContainer didn't work as expected", localRes); + + String FileToLoad = TestDocument.getUrl("hangulhanja.sxc"); + +XComponent xDoc = DesktopTools.loadDoc(xMSF, FileToLoad, + new PropertyValue[] { }); + XSpreadsheet xSheet = getSheet(xDoc); + boolean done = false; + int counter = 0; + String wordToCheck = ""; + String expectedConversion = ""; + + while (!done) { + String[] HangulHanja = getLeftAndRight(counter, xSheet); + done = HangulHanja[0].equals(""); + counter++; + + if (!done) { + try { + xDict.addEntry(HangulHanja[0], HangulHanja[1]); + wordToCheck += HangulHanja[0]; + expectedConversion += HangulHanja[1]; + } catch (com.sun.star.lang.IllegalArgumentException e) { + e.printStackTrace(); + res = false; + fail("Exception while checking adding entry"); + } catch (com.sun.star.container.ElementExistException e) { + //ignored + } + } + } + + try { + xDict.addEntry(wordToCheck, expectedConversion); + } catch (com.sun.star.lang.IllegalArgumentException e) { + e.printStackTrace(); + res = false; + fail("Exception while checking adding entry"); + } catch (com.sun.star.container.ElementExistException e) { + //ignored + } + + localRes = xCList.queryMaxCharCount(aLocale, dictType, + ConversionDirection.FROM_LEFT) == 42; + res &= localRes; + assertTrue("queryMaxCharCount returned the wrong value", localRes); + + String[] conversion = null; + + try { + conversion = xCList.queryConversions(wordToCheck, 0, + wordToCheck.length(), aLocale, + dictType, + ConversionDirection.FROM_LEFT, + TextConversionOption.NONE); + } catch (com.sun.star.lang.IllegalArgumentException e) { + res = false; + fail("Exception while calling queryConversions"); + } catch (com.sun.star.lang.NoSupportException e) { + res = false; + fail("Exception while calling queryConversions"); + } + + localRes = conversion[0].equals(expectedConversion); + res &= localRes; + assertTrue("queryConversions didn't work as expected", localRes); + + try { + xCList.getDictionaryContainer().removeByName("addNewDictionary"); + } catch (com.sun.star.container.NoSuchElementException e) { + res = false; + fail("exception while removing Dictionary again"); + } catch (com.sun.star.lang.WrappedTargetException e) { + res = false; + fail("exception while removing Dictionary again"); + } + + localRes = !xCList.getDictionaryContainer() + .hasByName("addNewDictionary"); + res &= localRes; + assertTrue("Dictionary hasn't been removed properly", localRes); + + XComponent dicList = UnoRuntime.queryInterface(XComponent.class, xCList); + XEventListener listen = new EventListener(); + dicList.addEventListener(listen); + dicList.dispose(); + assertTrue("dispose didn't work", disposed); + dicList.removeEventListener(listen); + + DesktopTools.closeDoc(xDoc); + + return res; + } + + private boolean checkNameContainer(XNameContainer xNC) { + boolean res = true; + + try { + res &= xNC.hasByName("addNewDictionary"); + + XConversionDictionary myCD = new ConversionDictionary(); + xNC.insertByName("insertByName", myCD); + res &= xNC.hasByName("insertByName"); + xNC.removeByName("insertByName"); + res &= !(xNC.hasByName("insertByName")); + } catch (com.sun.star.lang.IllegalArgumentException e) { + res = false; + e.printStackTrace(); + } catch (com.sun.star.container.NoSuchElementException e) { + res = false; + e.printStackTrace(); + } catch (com.sun.star.container.ElementExistException e) { + res = false; + e.printStackTrace(); + } catch (com.sun.star.lang.WrappedTargetException e) { + res = false; + e.printStackTrace(); + } + + return res; + } + + private XSpreadsheet getSheet(XComponent xDoc) { + XSpreadsheetDocument xSheetDoc = UnoRuntime.queryInterface(XSpreadsheetDocument.class, xDoc); + XSpreadsheet xSheet = null; + + try { + xSheet = UnoRuntime.queryInterface(XSpreadsheet.class, xSheetDoc.getSheets().getByName(xSheetDoc.getSheets().getElementNames()[0])); + } catch (com.sun.star.container.NoSuchElementException e) { + System.out.println("Couldn't get sheet"); + e.printStackTrace(); + } catch (com.sun.star.lang.WrappedTargetException e) { + System.out.println("Couldn't get sheet"); + e.printStackTrace(); + } + + return xSheet; + } + + private String[] getLeftAndRight(int counter, XSpreadsheet xSpreadsheet) { + String[] re = new String[] { + getCell(0, counter, xSpreadsheet).getFormula().trim(), + getCell(1, counter, xSpreadsheet).getFormula().trim() }; + + return re; + } + + private XCell getCell(int x, int y, XSpreadsheet xSpreadsheet) { + XCell re = null; + + try { + re = xSpreadsheet.getCellByPosition(x, y); + } catch (com.sun.star.lang.IndexOutOfBoundsException e) { + System.out.println("Couldn't get word"); + e.printStackTrace(); + } + + return re; + } + + private class ConversionDictionary implements XConversionDictionary { + boolean active = false; + + public void addEntry(String str, String str1) + throws IllegalArgumentException, ElementExistException { + } + + public void clear() { + } + + public String[] getConversionEntries(ConversionDirection conversionDirection) { + return new String[] { "getConversionEntries" }; + } + + public short getConversionType() { + return ConversionDictionaryType.HANGUL_HANJA; + } + + public String[] getConversions(String str, int param, int param2, + ConversionDirection conversionDirection, + int param4) + throws IllegalArgumentException { + return new String[] { "getConversion" }; + } + + public com.sun.star.lang.Locale getLocale() { + return new Locale("de", "DE", ""); + } + + public short getMaxCharCount(ConversionDirection conversionDirection) { + return (short) 2; + } + + public String getName() { + return "insertByName"; + } + + public boolean isActive() { + return active; + } + + public void removeEntry(String str, String str1) + throws NoSuchElementException { + } + + public void setActive(boolean param) { + active = param; + } + } + + private class EventListener implements XEventListener { + public void disposing(com.sun.star.lang.EventObject eventObject) { + disposed = true; + } + } + + private XMultiServiceFactory getMSF() + { + return UnoRuntime.queryInterface(XMultiServiceFactory.class, connection.getComponentContext().getServiceManager()); + } + + // setup and close connections + @BeforeClass public static void setUpConnection() throws Exception { + System.out.println("setUpConnection()"); + connection.setUp(); + } + + @AfterClass public static void tearDownConnection() + throws InterruptedException, com.sun.star.uno.Exception + { + System.out.println("tearDownConnection()"); + connection.tearDown(); + } + + private static final OfficeConnection connection = new OfficeConnection(); + +} |