/* * 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 ifc.accessibility; import lib.MultiMethodTest; import util.ValueComparer; import com.sun.star.accessibility.XAccessibleEditableText; import com.sun.star.beans.PropertyValue; /** * Testing com.sun.star.accessibility.XAccessibleEditableText * interface methods : *

* * This test needs the following object relations : *

* * @see com.sun.star.accessibility.XAccessibleEditableText */ public class _XAccessibleEditableText extends MultiMethodTest { public XAccessibleEditableText oObj = null; String pasteText = null; String initialText = ""; /** * Indicates whether or not the text has changeable attributes. * E.g. text within writer document have attributes which can * be changed, while the text within edit field has fixed * attributes. */ private boolean changeableAttr = true; /** * Retrieves object relation. Stores initial component text * for restoring it in after. */ @Override protected void before() { Boolean b = (Boolean) tEnv.getObjRelation("XAccessibleEditableText.hasAttr"); if (b != null) { changeableAttr = b.booleanValue(); } initialText = oObj.getText(); } /** * Calls the method with the wrong indexes and with the correct indexes. * Stores cutted text in the variable pasteText. * Has OK status if exceptions were thrown for the wrong indexes, * if exception wasn't thrown for the correct indexes. */ public void _cutText() { boolean res = true; boolean locRes = true; String curText = null; String oldText = oObj.getText(); log.println("Text: '" + oldText + "'"); int length = oObj.getCharacterCount(); log.println("Character count: " + length); try { log.print("cutText(-1," + (length-1) + "): "); locRes = oObj.cutText(-1, length - 1); log.println(locRes); log.println("exception was expected => FAILED"); res &= false; } catch(com.sun.star.lang.IndexOutOfBoundsException e) { log.println("expected exception => OK"); curText = oObj.getText(); log.println("Current text: '" + curText + "'"); res &= curText.equals(oldText); } try { log.print("cutText(0," + (length+1) + "): "); locRes = oObj.cutText(0, length + 1); log.println(locRes); log.println("exception was expected => FAILED"); res &= false; } catch(com.sun.star.lang.IndexOutOfBoundsException e) { log.println("expected exception => OK"); curText = oObj.getText(); log.println("Current text: '" + curText + "'"); res &= curText.equals(oldText); } try { pasteText = oldText; log.print("cutText(0," + length + "): "); locRes = oObj.cutText(0, length); log.println(locRes); curText = oObj.getText(); log.println("Current text: '" + curText + "'"); res &= curText.length() == 0 && locRes; } catch(com.sun.star.lang.IndexOutOfBoundsException e) { log.println("unexpected exception"); e.printStackTrace(log); res &= false; } tRes.tested("cutText()", res); } /** * Calls the method with the wrong indexes and with the correct indexes. * Has OK status if exceptions were thrown for the wrong indexes, * if exception wasn't thrown for the correct indexes and if cutted text was * pasted. * The following method tests are to be executed before: *

*/ public void _pasteText() { requiredMethod("cutText()"); boolean res = true; boolean locRes = true; String curText = null; String text = oObj.getText(); log.println("Text: '" + text + "'"); int length = oObj.getCharacterCount(); log.println("Character count: " + length); try { log.print("pasteText(-1): "); locRes = oObj.pasteText(-1); log.println(locRes); log.println("exception was expected => FAILED"); res &= false; } catch(com.sun.star.lang.IndexOutOfBoundsException e) { log.println("expected exception => OK"); curText = oObj.getText(); log.println("Current text: '" + curText + "'"); res &= curText.equals(text); } try { log.print("pasteText(" + (length+1) + "): "); locRes = oObj.pasteText(length + 1); log.println(locRes); log.println("exception was expected => FAILED"); res &= false; } catch(com.sun.star.lang.IndexOutOfBoundsException e) { log.println("expected exception => OK"); curText = oObj.getText(); log.println("Current text: '" + curText + "'"); res &= curText.equals(text); } try { log.print("pasteText(" + (length) + "): "); locRes = oObj.pasteText(length); log.println(locRes); curText = oObj.getText(); log.println("Current text: '" + curText + "'"); res &= curText.equals(text + pasteText) && locRes; log.println("Expected text: '" + text + pasteText + "'"); } catch(com.sun.star.lang.IndexOutOfBoundsException e) { log.println("unexpected exception"); e.printStackTrace(log); res &= false; } tRes.tested("pasteText()", res); } /** * Calls the method with the wrong indexes and with the correct indexes, * checks text after method call. * Has OK status if exceptions were thrown for the wrong indexes, * if exception wasn't thrown for the correct indexes and if deleted string * was really deleted from the text. * The following method tests are to be executed before: * */ public void _deleteText() { executeMethod("insertText()"); boolean res = true; boolean locRes = true; String curText = null; String text = oObj.getText(); log.println("Text: '" + text + "'"); int length = oObj.getCharacterCount(); log.println("Character count: " + length); try { log.print("deleteText(-1," + length + "): "); locRes = oObj.deleteText(-1, length); log.println(locRes); log.println("exception was expected => FAILED"); res &= false; } catch(com.sun.star.lang.IndexOutOfBoundsException e) { log.println("expected exception => OK"); curText = oObj.getText(); log.println("Current text: '" + curText + "'"); res &= curText.equals(text); } try { log.print("deleteText(0," + (length+1) + "): "); locRes = oObj.deleteText(0, length + 1); log.println(locRes); log.println("exception was expected => FAILED"); res &= false; } catch(com.sun.star.lang.IndexOutOfBoundsException e) { log.println("expected exception => OK"); curText = oObj.getText(); log.println("Current text: '" + curText + "'"); res &= curText.equals(text); } try { if (length >= 1) { log.print("deleteText(" + (length-1) + "," + (length) + "): "); locRes = oObj.deleteText(length - 1, length); log.println(locRes); String expStr = text.substring(0, length - 1); curText = oObj.getText(); log.println("Current text: '" + curText + "'"); res &= curText.equals(expStr); log.println("Expected text: '" + expStr + "'"); } } catch(com.sun.star.lang.IndexOutOfBoundsException e) { log.println("unexpected exception"); e.printStackTrace(log); res &= false; } tRes.tested("deleteText()", res); } /** * Calls the method with the wrong indexes and with the correct indexes, * checks text after method call. * Has OK status if exceptions were thrown for the wrong indexes, * if exception wasn't thrown for the correct indexes and if inserted string * was really inserted into the text. * The following method tests are to be executed before: * */ public void _insertText() { executeMethod("pasteText()"); boolean res = true; boolean locRes = true; String curText = null; String text = oObj.getText(); log.println("Text: '" + text + "'"); int length = oObj.getCharacterCount(); log.println("Character count: " + length); final String insStr = "Inserted string"; try { log.print("insertText(insStr, -1): "); locRes = oObj.insertText(insStr, -1); log.println(locRes); log.println("exception was expected=> FAILED"); res &= false; } catch(com.sun.star.lang.IndexOutOfBoundsException e) { log.println("expected exception => OK"); curText = oObj.getText(); log.println("Current text: '" + curText + "'"); res &= curText.equals(text); } try { log.print("insertText(insStr," + (length+1) + "): "); locRes = oObj.insertText(insStr, length+1); log.println(locRes); log.println("exception was expected => FAILED"); res &= false; } catch(com.sun.star.lang.IndexOutOfBoundsException e) { log.println("expected exception => OK"); curText = oObj.getText(); log.println("Current text: '" + curText + "'"); res &= curText.equals(text); } try { log.print("insertText(insStr," + length + "): "); locRes = oObj.insertText(insStr, length); log.println(locRes); curText = oObj.getText(); res &= curText.equals(text + insStr); log.println("Current text: '" + curText + "'"); log.println("Expected text: '" + text + insStr + "'"); } catch(com.sun.star.lang.IndexOutOfBoundsException e) { log.println("unexpected exception => FAILED"); e.printStackTrace(log); res &= false; } tRes.tested("insertText()", res); } /** * Calls the method with the wrong indexes and with the correct indexes, * checks text after method call. * Has OK status if exceptions were thrown for the wrong indexes, * if exception wasn't thrown for the correct indexes and if part of text * was really replaced by the specified replacement string. * The following method tests are to be executed before: * */ public void _replaceText() { executeMethod("deleteText()"); boolean res = true; boolean locRes = true; String curText = null; final String sReplacement = "String for replace"; String oldText = oObj.getText(); int startIndx = oldText.length(); oObj.setText(oldText + " part of string for replace"); String text = oObj.getText(); log.println("Text: '" + text + "'"); int length = oObj.getCharacterCount(); log.println("Character count: " + length); try { log.print("replaceText(-1," + length + "): "); locRes = oObj.replaceText(-1, length, sReplacement); log.println(locRes); log.println("exception was expected => FAILED"); res &= false; } catch(com.sun.star.lang.IndexOutOfBoundsException e) { log.println("expected exception => OK"); curText = oObj.getText(); log.println("Current text: '" + curText + "'"); res &= curText.equals(text); } try { log.print("replaceText(0," + (length+1) + "): "); locRes = oObj.replaceText(0, length + 1, sReplacement); log.println(locRes); log.println("exception was expected => FAILED"); res &= false; } catch(com.sun.star.lang.IndexOutOfBoundsException e) { log.println("expected exception => OK"); curText = oObj.getText(); log.println("Current text: '" + curText + "'"); res &= curText.equals(text); } try { log.print("replaceText(" + startIndx + "," + length + "): "); locRes = oObj.replaceText(startIndx, length, sReplacement); log.println(locRes); curText = oObj.getText(); log.println("Current text: '" + curText + "'"); log.println("Expected text: '" + oldText + sReplacement + "'"); res &= curText.equals(oldText + sReplacement); } catch(com.sun.star.lang.IndexOutOfBoundsException e) { log.println("unexpected exception"); e.printStackTrace(log); res &= false; } tRes.tested("replaceText()", res); } /** * Calls the method with the wrong indexes and with the correct indexes, * checks attributes after method call. * Has OK status if exceptions were thrown for the wrong indexes, * if exception wasn't thrown for the correct indexes and if attributes * of text was changed. * The following method tests are to be executed before: * */ public void _setAttributes() { executeMethod("replaceText()"); boolean res = true; boolean locRes = true; String text = oObj.getText(); log.println("Text: '" + text + "'"); int length = oObj.getCharacterCount(); log.println("Length: " + length); PropertyValue[] attrs = null; try { attrs = oObj.getCharacterAttributes(0, new String[]{""}); log.print("setAttributes(-1," + (length - 1) + "):"); locRes = oObj.setAttributes(-1, length - 1, attrs); log.println(locRes); log.println("exception was expected => FAILED"); res &= false; } catch(com.sun.star.lang.IndexOutOfBoundsException e) { log.println("expected exception => OK"); res &= true; } catch(com.sun.star.beans.UnknownPropertyException e) { log.println("unexpected exception => FAILED"); e.printStackTrace(log); res &= false; } try { log.print("setAttributes(0," + (length+1) + "):"); locRes = oObj.setAttributes(0, length + 1, attrs); log.println(locRes); log.println("exception was expected => FAILED"); res &= false; } catch(com.sun.star.lang.IndexOutOfBoundsException e) { log.println("expected exception => OK"); res &= true; } //change old attributes set for(int i = 0; i < attrs.length; i++) { if (attrs[i].Name.equals("CharColor")) { attrs[i].Value = Integer.valueOf(-2); } } try { log.print("setAttributes(0," + length + "):"); locRes = oObj.setAttributes(0, length, attrs); log.println(locRes); res &= (changeableAttr && locRes) || (!changeableAttr && !locRes); if (changeableAttr) { log.print("checking that new attributes was set..."); PropertyValue[] newAttrs = oObj.getCharacterAttributes(0, new String[]{""}); locRes = ValueComparer.equalValue(attrs, newAttrs); log.println(locRes); res &= locRes; } else { log.println("Text attributes can't be changed."); } } catch(com.sun.star.lang.IndexOutOfBoundsException e) { log.println("unexpected exception => FAILED"); e.printStackTrace(log); res &= false; } catch(com.sun.star.beans.UnknownPropertyException e) { log.println("unexpected exception => FAILED"); e.printStackTrace(log); res &= false; } tRes.tested("setAttributes()", res); } /** * Calls the method with different parameters and checks text. */ public void _setText() { executeMethod("setAttributes()"); boolean res = true; boolean locRes = true; String oldText = oObj.getText(); log.println("Current text: '" + oldText + "'"); String newText = "New text"; log.print("setText('" + newText + "'): "); locRes = oObj.setText(newText); log.println(locRes); String newCurText = oObj.getText(); log.println("getText(): '" + newCurText + "'"); res &= locRes && newCurText.equals(newText); newText = ""; log.print("setText('" + newText + "'): "); locRes = oObj.setText(newText); log.println(locRes); newCurText = oObj.getText(); log.println("getText(): '" + newCurText + "'"); res &= locRes && newCurText.equals(newText); log.print("setText('" + oldText + "'): "); locRes = oObj.setText(oldText); log.println(locRes); newCurText = oObj.getText(); log.println("getText(): '" + newCurText + "'"); res &= locRes && newCurText.equals(oldText); tRes.tested("setText()", res); } /** * Restores initial component text. */ @Override protected void after() { oObj.setText(initialText); } }