1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski package testlib.uno; 24*b1cdbd2cSJim Jagielski 25*b1cdbd2cSJim Jagielski import java.util.Random; 26*b1cdbd2cSJim Jagielski 27*b1cdbd2cSJim Jagielski import com.sun.star.beans.Property; 28*b1cdbd2cSJim Jagielski import com.sun.star.beans.PropertyAttribute; 29*b1cdbd2cSJim Jagielski import com.sun.star.beans.XPropertySet; 30*b1cdbd2cSJim Jagielski import com.sun.star.beans.XPropertySetInfo; 31*b1cdbd2cSJim Jagielski import com.sun.star.uno.UnoRuntime; 32*b1cdbd2cSJim Jagielski 33*b1cdbd2cSJim Jagielski import testlib.uno.CellInfo; 34*b1cdbd2cSJim Jagielski 35*b1cdbd2cSJim Jagielski 36*b1cdbd2cSJim Jagielski /** 37*b1cdbd2cSJim Jagielski * Utilities for UNO automation testing 38*b1cdbd2cSJim Jagielski * 39*b1cdbd2cSJim Jagielski */ 40*b1cdbd2cSJim Jagielski 41*b1cdbd2cSJim Jagielski public class TestUtil { 42*b1cdbd2cSJim Jagielski 43*b1cdbd2cSJim Jagielski private static int colLimit = 1024; 44*b1cdbd2cSJim Jagielski private static int rowLimit = 1048576; 45*b1cdbd2cSJim Jagielski private static Random random = new Random(); 46*b1cdbd2cSJim Jagielski TestUtil()47*b1cdbd2cSJim Jagielski public TestUtil() { 48*b1cdbd2cSJim Jagielski 49*b1cdbd2cSJim Jagielski } 50*b1cdbd2cSJim Jagielski 51*b1cdbd2cSJim Jagielski /** 52*b1cdbd2cSJim Jagielski * Generate a random cell index 53*b1cdbd2cSJim Jagielski * @return cellIndex column: cellIndex[0] row: cellIndex[1] 54*b1cdbd2cSJim Jagielski * @throws Exception 55*b1cdbd2cSJim Jagielski */ randCell()56*b1cdbd2cSJim Jagielski public static CellInfo randCell() throws Exception { 57*b1cdbd2cSJim Jagielski CellInfo cInfo = new CellInfo(); 58*b1cdbd2cSJim Jagielski 59*b1cdbd2cSJim Jagielski cInfo.setCol(random.nextInt(colLimit)); 60*b1cdbd2cSJim Jagielski cInfo.setRow(random.nextInt(rowLimit)); 61*b1cdbd2cSJim Jagielski 62*b1cdbd2cSJim Jagielski return cInfo; 63*b1cdbd2cSJim Jagielski } 64*b1cdbd2cSJim Jagielski 65*b1cdbd2cSJim Jagielski /** 66*b1cdbd2cSJim Jagielski * Generate a random cell index, in the limited range 67*b1cdbd2cSJim Jagielski * @param colTop The max column limit 68*b1cdbd2cSJim Jagielski * @param rowTop The max row limit 69*b1cdbd2cSJim Jagielski * @return 70*b1cdbd2cSJim Jagielski * @throws Exception 71*b1cdbd2cSJim Jagielski */ randCell(int colTop, int rowTop)72*b1cdbd2cSJim Jagielski public static CellInfo randCell(int colTop, int rowTop) throws Exception { 73*b1cdbd2cSJim Jagielski CellInfo cInfo = new CellInfo(); 74*b1cdbd2cSJim Jagielski 75*b1cdbd2cSJim Jagielski cInfo.setCol(random.nextInt(colTop)); 76*b1cdbd2cSJim Jagielski cInfo.setRow(random.nextInt(rowTop)); 77*b1cdbd2cSJim Jagielski 78*b1cdbd2cSJim Jagielski return cInfo; 79*b1cdbd2cSJim Jagielski } 80*b1cdbd2cSJim Jagielski 81*b1cdbd2cSJim Jagielski /** 82*b1cdbd2cSJim Jagielski * Generate a font size number in limited range 83*b1cdbd2cSJim Jagielski * @param max The font size in Excel2003 is [1,409] 84*b1cdbd2cSJim Jagielski * @return 85*b1cdbd2cSJim Jagielski * @throws Exception 86*b1cdbd2cSJim Jagielski */ randFontSize(int max)87*b1cdbd2cSJim Jagielski public static double randFontSize(int max) throws Exception { 88*b1cdbd2cSJim Jagielski double basic = random.nextInt(max * 2); 89*b1cdbd2cSJim Jagielski double size = 1; 90*b1cdbd2cSJim Jagielski if (basic < 2) { 91*b1cdbd2cSJim Jagielski size = 1; 92*b1cdbd2cSJim Jagielski } 93*b1cdbd2cSJim Jagielski else { 94*b1cdbd2cSJim Jagielski size = basic / 2; 95*b1cdbd2cSJim Jagielski } 96*b1cdbd2cSJim Jagielski 97*b1cdbd2cSJim Jagielski return size; 98*b1cdbd2cSJim Jagielski } 99*b1cdbd2cSJim Jagielski 100*b1cdbd2cSJim Jagielski /** 101*b1cdbd2cSJim Jagielski * Generate a series of font size number 102*b1cdbd2cSJim Jagielski * @param listSize 103*b1cdbd2cSJim Jagielski * @param max 104*b1cdbd2cSJim Jagielski * @return 105*b1cdbd2cSJim Jagielski * @throws Exception 106*b1cdbd2cSJim Jagielski */ randFontSizeList(int listSize, int max)107*b1cdbd2cSJim Jagielski public static double[] randFontSizeList(int listSize, int max) throws Exception { 108*b1cdbd2cSJim Jagielski double[] sizeList = new double[listSize]; 109*b1cdbd2cSJim Jagielski for (int i =0; i < listSize; i++) { 110*b1cdbd2cSJim Jagielski sizeList[i] = randFontSize(max); 111*b1cdbd2cSJim Jagielski } 112*b1cdbd2cSJim Jagielski return sizeList; 113*b1cdbd2cSJim Jagielski } 114*b1cdbd2cSJim Jagielski 115*b1cdbd2cSJim Jagielski /** 116*b1cdbd2cSJim Jagielski * Generate a random decimal RGB color number 117*b1cdbd2cSJim Jagielski * @return 118*b1cdbd2cSJim Jagielski * @throws Exception 119*b1cdbd2cSJim Jagielski */ randColor()120*b1cdbd2cSJim Jagielski public static int randColor() throws Exception { 121*b1cdbd2cSJim Jagielski int r = random.nextInt(256); 122*b1cdbd2cSJim Jagielski int g = random.nextInt(256); 123*b1cdbd2cSJim Jagielski int b = random.nextInt(256); 124*b1cdbd2cSJim Jagielski 125*b1cdbd2cSJim Jagielski return r * 65536 + g * 256 + b; 126*b1cdbd2cSJim Jagielski } 127*b1cdbd2cSJim Jagielski 128*b1cdbd2cSJim Jagielski /** 129*b1cdbd2cSJim Jagielski * Generate a random decimal RGB color number in limited color space 130*b1cdbd2cSJim Jagielski * @param rMax The R value limit, get a value in [0, rMax] 131*b1cdbd2cSJim Jagielski * @param gMax The G value limit, get a value in [0, gMax] 132*b1cdbd2cSJim Jagielski * @param bMax The B value limit, get a value in [0, bMax] 133*b1cdbd2cSJim Jagielski * @return 134*b1cdbd2cSJim Jagielski * @throws Exception 135*b1cdbd2cSJim Jagielski */ randColor(int rMax, int gMax, int bMax)136*b1cdbd2cSJim Jagielski public static int randColor(int rMax, int gMax, int bMax) throws Exception { 137*b1cdbd2cSJim Jagielski int r = random.nextInt(rMax + 1) % 256; 138*b1cdbd2cSJim Jagielski int g = random.nextInt(gMax + 1) % 256; 139*b1cdbd2cSJim Jagielski int b = random.nextInt(bMax + 1) % 256; 140*b1cdbd2cSJim Jagielski 141*b1cdbd2cSJim Jagielski return r * 65536 + g * 256 + b; 142*b1cdbd2cSJim Jagielski } 143*b1cdbd2cSJim Jagielski 144*b1cdbd2cSJim Jagielski /** 145*b1cdbd2cSJim Jagielski * Generate a series of decimal RGB color number 146*b1cdbd2cSJim Jagielski * @param size Set the quantity of random color value generated into the array 147*b1cdbd2cSJim Jagielski * @return 148*b1cdbd2cSJim Jagielski * @throws Exception 149*b1cdbd2cSJim Jagielski */ randColorList(int size)150*b1cdbd2cSJim Jagielski public static int[] randColorList(int size) throws Exception { 151*b1cdbd2cSJim Jagielski int[] colorList = new int[size]; 152*b1cdbd2cSJim Jagielski for (int i = 0; i < size; i++) { 153*b1cdbd2cSJim Jagielski colorList[i] = randColor(); 154*b1cdbd2cSJim Jagielski } 155*b1cdbd2cSJim Jagielski 156*b1cdbd2cSJim Jagielski return colorList; 157*b1cdbd2cSJim Jagielski } 158*b1cdbd2cSJim Jagielski 159*b1cdbd2cSJim Jagielski /** 160*b1cdbd2cSJim Jagielski * Add "=" before a string 161*b1cdbd2cSJim Jagielski * @param expression 162*b1cdbd2cSJim Jagielski * @return 163*b1cdbd2cSJim Jagielski */ toFormula(String expression)164*b1cdbd2cSJim Jagielski public static String toFormula(String expression) { 165*b1cdbd2cSJim Jagielski return "=" + expression; 166*b1cdbd2cSJim Jagielski } 167*b1cdbd2cSJim Jagielski 168*b1cdbd2cSJim Jagielski /** 169*b1cdbd2cSJim Jagielski * Use specific operator to connect a series of number 170*b1cdbd2cSJim Jagielski * @param number 171*b1cdbd2cSJim Jagielski * @param operator 172*b1cdbd2cSJim Jagielski * @return 173*b1cdbd2cSJim Jagielski */ connectByOperator(double[] number, String operator)174*b1cdbd2cSJim Jagielski public static String connectByOperator(double[] number, String operator) throws Exception{ 175*b1cdbd2cSJim Jagielski StringBuffer buffer = new StringBuffer(); 176*b1cdbd2cSJim Jagielski 177*b1cdbd2cSJim Jagielski for (int i = 0; i < number.length; i++) { 178*b1cdbd2cSJim Jagielski buffer.append(number[i]); 179*b1cdbd2cSJim Jagielski if (i < number.length - 1) { 180*b1cdbd2cSJim Jagielski buffer.append(operator); 181*b1cdbd2cSJim Jagielski } 182*b1cdbd2cSJim Jagielski } 183*b1cdbd2cSJim Jagielski return buffer.toString(); 184*b1cdbd2cSJim Jagielski } 185*b1cdbd2cSJim Jagielski 186*b1cdbd2cSJim Jagielski /** 187*b1cdbd2cSJim Jagielski * Print the properties list of specific object to console 188*b1cdbd2cSJim Jagielski * @param obj The instance of the object of which the property list you want to get. e.g. instance of XCell. 189*b1cdbd2cSJim Jagielski * @throws Exception 190*b1cdbd2cSJim Jagielski */ printPropertiesList(Object obj)191*b1cdbd2cSJim Jagielski public static void printPropertiesList(Object obj) throws Exception { 192*b1cdbd2cSJim Jagielski // Get the property set of specific object 193*b1cdbd2cSJim Jagielski XPropertySet xPropertySet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, obj); 194*b1cdbd2cSJim Jagielski XPropertySetInfo xPropertySetInfo = xPropertySet.getPropertySetInfo(); 195*b1cdbd2cSJim Jagielski 196*b1cdbd2cSJim Jagielski // Get all properties info 197*b1cdbd2cSJim Jagielski Property[] aProps = xPropertySetInfo.getProperties(); 198*b1cdbd2cSJim Jagielski 199*b1cdbd2cSJim Jagielski for (int i = 0; i < aProps.length; i++) { 200*b1cdbd2cSJim Jagielski // Print name and type of each property 201*b1cdbd2cSJim Jagielski System.out.print("[" + (i + 1) + "]: Name=\"" + aProps[i].Name + "\" " + aProps[i].Type.toString() + " ("); 202*b1cdbd2cSJim Jagielski 203*b1cdbd2cSJim Jagielski // Get flag. pay attention to the READONLY properties 204*b1cdbd2cSJim Jagielski short nAttribs = aProps[i].Attributes; 205*b1cdbd2cSJim Jagielski if ((nAttribs & PropertyAttribute.MAYBEVOID) != 0) 206*b1cdbd2cSJim Jagielski System.out.print("MAYBEVOID|"); 207*b1cdbd2cSJim Jagielski if ((nAttribs & PropertyAttribute.BOUND) != 0) 208*b1cdbd2cSJim Jagielski System.out.print("BOUND|"); 209*b1cdbd2cSJim Jagielski if ((nAttribs & PropertyAttribute.CONSTRAINED) != 0) 210*b1cdbd2cSJim Jagielski System.out.print("CONSTRAINED|"); 211*b1cdbd2cSJim Jagielski if ((nAttribs & PropertyAttribute.READONLY) != 0) 212*b1cdbd2cSJim Jagielski System.out.print("READONLY|"); 213*b1cdbd2cSJim Jagielski if ((nAttribs & PropertyAttribute.TRANSIENT) != 0) 214*b1cdbd2cSJim Jagielski System.out.print("TRANSIENT|"); 215*b1cdbd2cSJim Jagielski if ((nAttribs & PropertyAttribute.MAYBEAMBIGUOUS ) != 0) 216*b1cdbd2cSJim Jagielski System.out.print("MAYBEAMBIGUOUS|"); 217*b1cdbd2cSJim Jagielski if ((nAttribs & PropertyAttribute.MAYBEDEFAULT) != 0) 218*b1cdbd2cSJim Jagielski System.out.print("MAYBEDEFAULT|"); 219*b1cdbd2cSJim Jagielski if ((nAttribs & PropertyAttribute.REMOVEABLE) != 0) 220*b1cdbd2cSJim Jagielski System.out.print("REMOVEABLE|"); 221*b1cdbd2cSJim Jagielski 222*b1cdbd2cSJim Jagielski System.out.println(")"); 223*b1cdbd2cSJim Jagielski } 224*b1cdbd2cSJim Jagielski 225*b1cdbd2cSJim Jagielski } 226*b1cdbd2cSJim Jagielski 227*b1cdbd2cSJim Jagielski } 228