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 mod._sc; 24*b1cdbd2cSJim Jagielski import java.io.PrintWriter; 25*b1cdbd2cSJim Jagielski 26*b1cdbd2cSJim Jagielski import lib.StatusException; 27*b1cdbd2cSJim Jagielski import lib.TestCase; 28*b1cdbd2cSJim Jagielski import lib.TestEnvironment; 29*b1cdbd2cSJim Jagielski import lib.TestParameters; 30*b1cdbd2cSJim Jagielski import util.SOfficeFactory; 31*b1cdbd2cSJim Jagielski import util.ValueComparer; 32*b1cdbd2cSJim Jagielski 33*b1cdbd2cSJim Jagielski import com.sun.star.beans.XPropertySet; 34*b1cdbd2cSJim Jagielski import com.sun.star.container.XNameAccess; 35*b1cdbd2cSJim Jagielski import com.sun.star.lang.XComponent; 36*b1cdbd2cSJim Jagielski import com.sun.star.lang.XMultiServiceFactory; 37*b1cdbd2cSJim Jagielski import com.sun.star.sheet.XSpreadsheet; 38*b1cdbd2cSJim Jagielski import com.sun.star.sheet.XSpreadsheetDocument; 39*b1cdbd2cSJim Jagielski import com.sun.star.sheet.XSpreadsheets; 40*b1cdbd2cSJim Jagielski import com.sun.star.table.XCell; 41*b1cdbd2cSJim Jagielski import com.sun.star.table.XCellRange; 42*b1cdbd2cSJim Jagielski import com.sun.star.uno.AnyConverter; 43*b1cdbd2cSJim Jagielski import com.sun.star.uno.Type; 44*b1cdbd2cSJim Jagielski import com.sun.star.uno.UnoRuntime; 45*b1cdbd2cSJim Jagielski import com.sun.star.uno.XInterface; 46*b1cdbd2cSJim Jagielski import ifc.sheet._XCellRangesQuery; 47*b1cdbd2cSJim Jagielski 48*b1cdbd2cSJim Jagielski 49*b1cdbd2cSJim Jagielski /** 50*b1cdbd2cSJim Jagielski * Test for object which is represented by service 51*b1cdbd2cSJim Jagielski * <code>com.sun.star.sheet.SheetCellRange</code>. <p> 52*b1cdbd2cSJim Jagielski * Object implements the following interfaces : 53*b1cdbd2cSJim Jagielski * <ul> 54*b1cdbd2cSJim Jagielski * <li> <code>com::sun::star::table::CellProperties</code></li> 55*b1cdbd2cSJim Jagielski * <li> <code>com::sun::star::util::XMergeable</code></li> 56*b1cdbd2cSJim Jagielski * <li> <code>com::sun::star::sheet::XCellRangeAddressable</code></li> 57*b1cdbd2cSJim Jagielski * <li> <code>com::sun::star::sheet::XArrayFormulaRange</code></li> 58*b1cdbd2cSJim Jagielski * <li> <code>com::sun::star::chart::XChartData</code></li> 59*b1cdbd2cSJim Jagielski * <li> <code>com::sun::star::table::XColumnRowRange</code></li> 60*b1cdbd2cSJim Jagielski * <li> <code>com::sun::star::beans::XPropertySet</code></li> 61*b1cdbd2cSJim Jagielski * <li> <code>com::sun::star::style::CharacterProperties</code></li> 62*b1cdbd2cSJim Jagielski * <li> <code>com::sun::star::sheet::XSheetOperation</code></li> 63*b1cdbd2cSJim Jagielski * <li> <code>com::sun::star::table::XCellRange</code></li> 64*b1cdbd2cSJim Jagielski * <li> <code>com::sun::star::style::ParagraphProperties</code></li> 65*b1cdbd2cSJim Jagielski * <li> <code>com::sun::star::sheet::SheetCellRange</code></li> 66*b1cdbd2cSJim Jagielski * </ul> 67*b1cdbd2cSJim Jagielski * @see com.sun.star.sheet.SheetCellRange 68*b1cdbd2cSJim Jagielski * @see com.sun.star.table.CellProperties 69*b1cdbd2cSJim Jagielski * @see com.sun.star.util.XMergeable 70*b1cdbd2cSJim Jagielski * @see com.sun.star.sheet.XCellRangeAddressable 71*b1cdbd2cSJim Jagielski * @see com.sun.star.sheet.XArrayFormulaRange 72*b1cdbd2cSJim Jagielski * @see com.sun.star.chart.XChartData 73*b1cdbd2cSJim Jagielski * @see com.sun.star.table.XColumnRowRange 74*b1cdbd2cSJim Jagielski * @see com.sun.star.beans.XPropertySet 75*b1cdbd2cSJim Jagielski * @see com.sun.star.style.CharacterProperties 76*b1cdbd2cSJim Jagielski * @see com.sun.star.sheet.XSheetOperation 77*b1cdbd2cSJim Jagielski * @see com.sun.star.table.XCellRange 78*b1cdbd2cSJim Jagielski * @see com.sun.star.style.ParagraphProperties 79*b1cdbd2cSJim Jagielski * @see com.sun.star.sheet.SheetCellRange 80*b1cdbd2cSJim Jagielski * @see ifc.table._CellProperties 81*b1cdbd2cSJim Jagielski * @see ifc.util._XMergeable 82*b1cdbd2cSJim Jagielski * @see ifc.sheet._XCellRangeAddressable 83*b1cdbd2cSJim Jagielski * @see ifc.sheet._XArrayFormulaRange 84*b1cdbd2cSJim Jagielski * @see ifc.chart._XChartData 85*b1cdbd2cSJim Jagielski * @see ifc.table._XColumnRowRange 86*b1cdbd2cSJim Jagielski * @see ifc.beans._XPropertySet 87*b1cdbd2cSJim Jagielski * @see ifc.style._CharacterProperties 88*b1cdbd2cSJim Jagielski * @see ifc.sheet._XSheetOperation 89*b1cdbd2cSJim Jagielski * @see ifc.table._XCellRange 90*b1cdbd2cSJim Jagielski * @see ifc.style._ParagraphProperties 91*b1cdbd2cSJim Jagielski * @see ifc.sheet._SheetCellRange 92*b1cdbd2cSJim Jagielski */ 93*b1cdbd2cSJim Jagielski public class ScCellRangeObj extends TestCase { 94*b1cdbd2cSJim Jagielski XSpreadsheetDocument xSheetDoc = null; 95*b1cdbd2cSJim Jagielski 96*b1cdbd2cSJim Jagielski /** 97*b1cdbd2cSJim Jagielski * Creates Spreadsheet document. 98*b1cdbd2cSJim Jagielski */ initialize(TestParameters tParam, PrintWriter log)99*b1cdbd2cSJim Jagielski protected void initialize(TestParameters tParam, PrintWriter log) { 100*b1cdbd2cSJim Jagielski SOfficeFactory SOF = SOfficeFactory.getFactory( (XMultiServiceFactory) tParam.getMSF()); 101*b1cdbd2cSJim Jagielski 102*b1cdbd2cSJim Jagielski try { 103*b1cdbd2cSJim Jagielski log.println("creating a Spreadsheet document"); 104*b1cdbd2cSJim Jagielski xSheetDoc = SOF.createCalcDoc(null); 105*b1cdbd2cSJim Jagielski } catch (com.sun.star.uno.Exception e) { 106*b1cdbd2cSJim Jagielski // Some exception occures.FAILED 107*b1cdbd2cSJim Jagielski e.printStackTrace(log); 108*b1cdbd2cSJim Jagielski throw new StatusException("Couldn't create document", e); 109*b1cdbd2cSJim Jagielski } 110*b1cdbd2cSJim Jagielski } 111*b1cdbd2cSJim Jagielski 112*b1cdbd2cSJim Jagielski /** 113*b1cdbd2cSJim Jagielski * Disposes Spreadsheet document. 114*b1cdbd2cSJim Jagielski */ cleanup(TestParameters tParam, PrintWriter log)115*b1cdbd2cSJim Jagielski protected void cleanup(TestParameters tParam, PrintWriter log) { 116*b1cdbd2cSJim Jagielski log.println(" disposing xSheetDoc "); 117*b1cdbd2cSJim Jagielski 118*b1cdbd2cSJim Jagielski XComponent oComp = (XComponent) UnoRuntime.queryInterface( 119*b1cdbd2cSJim Jagielski XComponent.class, xSheetDoc); 120*b1cdbd2cSJim Jagielski util.DesktopTools.closeDoc(oComp); 121*b1cdbd2cSJim Jagielski } 122*b1cdbd2cSJim Jagielski 123*b1cdbd2cSJim Jagielski /** 124*b1cdbd2cSJim Jagielski * Creating a Testenvironment for the interfaces to be tested. 125*b1cdbd2cSJim Jagielski * Retrieves a collection of spreadsheets from a document, 126*b1cdbd2cSJim Jagielski * and takes one of them. Retrieves some cell range from the spreadsheet. 127*b1cdbd2cSJim Jagielski * The retrieved cell range is instance of the service 128*b1cdbd2cSJim Jagielski * <code>com.sun.star.sheet.SheetCellRange</code>. 129*b1cdbd2cSJim Jagielski * Object relations created : 130*b1cdbd2cSJim Jagielski * <ul> 131*b1cdbd2cSJim Jagielski * <li> <code>'SHEET'</code> for 132*b1cdbd2cSJim Jagielski * {@link ifc.sheet._XArrayFormulaRange} (the spreadsheet which the cell 133*b1cdbd2cSJim Jagielski * range was retrieved from)</li> 134*b1cdbd2cSJim Jagielski * </ul> 135*b1cdbd2cSJim Jagielski * @see com.sun.star.sheet.XSpreadsheet 136*b1cdbd2cSJim Jagielski */ createTestEnvironment(TestParameters Param, PrintWriter log)137*b1cdbd2cSJim Jagielski protected TestEnvironment createTestEnvironment(TestParameters Param, 138*b1cdbd2cSJim Jagielski PrintWriter log) { 139*b1cdbd2cSJim Jagielski XInterface oObj = null; 140*b1cdbd2cSJim Jagielski XCellRange testRange; 141*b1cdbd2cSJim Jagielski 142*b1cdbd2cSJim Jagielski 143*b1cdbd2cSJim Jagielski // creation of testobject here 144*b1cdbd2cSJim Jagielski // first we write what we are intend to do to log file 145*b1cdbd2cSJim Jagielski log.println("Creating a test environment"); 146*b1cdbd2cSJim Jagielski 147*b1cdbd2cSJim Jagielski XSpreadsheets oSpreadsheets = ((XSpreadsheetDocument) UnoRuntime.queryInterface( 148*b1cdbd2cSJim Jagielski XSpreadsheetDocument.class, 149*b1cdbd2cSJim Jagielski xSheetDoc)).getSheets(); 150*b1cdbd2cSJim Jagielski XNameAccess oNames = (XNameAccess) UnoRuntime.queryInterface( 151*b1cdbd2cSJim Jagielski XNameAccess.class, oSpreadsheets); 152*b1cdbd2cSJim Jagielski 153*b1cdbd2cSJim Jagielski XSpreadsheet oSheet = null; 154*b1cdbd2cSJim Jagielski 155*b1cdbd2cSJim Jagielski try { 156*b1cdbd2cSJim Jagielski oSheet = (XSpreadsheet) AnyConverter.toObject( 157*b1cdbd2cSJim Jagielski new Type(XSpreadsheet.class), 158*b1cdbd2cSJim Jagielski oNames.getByName(oNames.getElementNames()[0])); 159*b1cdbd2cSJim Jagielski 160*b1cdbd2cSJim Jagielski oObj = oSheet.getCellRangeByPosition(0, 0, 3, 4); 161*b1cdbd2cSJim Jagielski testRange = (XCellRange) UnoRuntime.queryInterface( 162*b1cdbd2cSJim Jagielski XCellRange.class, oObj); 163*b1cdbd2cSJim Jagielski } catch (com.sun.star.lang.WrappedTargetException e) { 164*b1cdbd2cSJim Jagielski e.printStackTrace(log); 165*b1cdbd2cSJim Jagielski throw new StatusException( 166*b1cdbd2cSJim Jagielski "Error getting cell object from spreadsheet document", e); 167*b1cdbd2cSJim Jagielski } catch (com.sun.star.lang.IndexOutOfBoundsException e) { 168*b1cdbd2cSJim Jagielski e.printStackTrace(log); 169*b1cdbd2cSJim Jagielski throw new StatusException( 170*b1cdbd2cSJim Jagielski "Error getting cell object from spreadsheet document", e); 171*b1cdbd2cSJim Jagielski } catch (com.sun.star.container.NoSuchElementException e) { 172*b1cdbd2cSJim Jagielski e.printStackTrace(log); 173*b1cdbd2cSJim Jagielski throw new StatusException( 174*b1cdbd2cSJim Jagielski "Error getting cell object from spreadsheet document", e); 175*b1cdbd2cSJim Jagielski } catch (com.sun.star.lang.IllegalArgumentException e) { 176*b1cdbd2cSJim Jagielski e.printStackTrace(log); 177*b1cdbd2cSJim Jagielski throw new StatusException( 178*b1cdbd2cSJim Jagielski "Error getting cell object from spreadsheet document", e); 179*b1cdbd2cSJim Jagielski } 180*b1cdbd2cSJim Jagielski 181*b1cdbd2cSJim Jagielski 182*b1cdbd2cSJim Jagielski TestEnvironment tEnv = new TestEnvironment(oObj); 183*b1cdbd2cSJim Jagielski 184*b1cdbd2cSJim Jagielski tEnv.addObjRelation("SHEET", oSheet); 185*b1cdbd2cSJim Jagielski // add expected results for the XCellRangesQuery interface test 186*b1cdbd2cSJim Jagielski String[]expectedResults = new String[7]; 187*b1cdbd2cSJim Jagielski expectedResults[_XCellRangesQuery.QUERYCOLUMNDIFFERENCES] = "Sheet1.B1:C1;Sheet1.B3"; 188*b1cdbd2cSJim Jagielski expectedResults[_XCellRangesQuery.QUERYCONTENTCELLS] = "Sheet1.B2:B3"; 189*b1cdbd2cSJim Jagielski expectedResults[_XCellRangesQuery.QUERYEMPTYCELLS] = "Sheet1.A1 ... Sheet1.B1 ... Sheet1.B5 ... Sheet1.C3 ... Sheet1.D1"; 190*b1cdbd2cSJim Jagielski expectedResults[_XCellRangesQuery.QUERYFORMULACELLS] = "Sheet1.C2"; 191*b1cdbd2cSJim Jagielski expectedResults[_XCellRangesQuery.QUERYINTERSECTION] = "Sheet1.D4"; 192*b1cdbd2cSJim Jagielski expectedResults[_XCellRangesQuery.QUERYROWDIFFERENCES] = "Sheet1.A2:A4;Sheet1.C2:D4"; 193*b1cdbd2cSJim Jagielski expectedResults[_XCellRangesQuery.QUERYVISIBLECELLS] = "Sheet1.A2"; 194*b1cdbd2cSJim Jagielski tEnv.addObjRelation("XCellRangesQuery.EXPECTEDRESULTS", expectedResults); 195*b1cdbd2cSJim Jagielski tEnv.addObjRelation("XCellRangesQuery.CREATEENTRIES", Boolean.TRUE); 196*b1cdbd2cSJim Jagielski 197*b1cdbd2cSJim Jagielski XPropertySet PropSet = (XPropertySet) UnoRuntime.queryInterface( 198*b1cdbd2cSJim Jagielski XPropertySet.class, oObj); 199*b1cdbd2cSJim Jagielski tEnv.addObjRelation("PropSet", PropSet); 200*b1cdbd2cSJim Jagielski 201*b1cdbd2cSJim Jagielski // XSearchable: Add a cell to make a seacrchable entry 202*b1cdbd2cSJim Jagielski try { 203*b1cdbd2cSJim Jagielski tEnv.addObjRelation("XSearchable.MAKEENTRYINCELL", new XCell[] { 204*b1cdbd2cSJim Jagielski testRange.getCellByPosition(0,0), testRange.getCellByPosition(0,1)}); 205*b1cdbd2cSJim Jagielski } 206*b1cdbd2cSJim Jagielski catch(com.sun.star.lang.IndexOutOfBoundsException e){ 207*b1cdbd2cSJim Jagielski e.printStackTrace((PrintWriter)log); 208*b1cdbd2cSJim Jagielski log.println("Cannot make required object relation 'XSearchable.MAKEENTRYINCELL'."); 209*b1cdbd2cSJim Jagielski } 210*b1cdbd2cSJim Jagielski 211*b1cdbd2cSJim Jagielski // XCellRangeData 212*b1cdbd2cSJim Jagielski /* Object[][] newData = new Object[5][4]; 213*b1cdbd2cSJim Jagielski for (int i=0; i<newData.length; i++) { 214*b1cdbd2cSJim Jagielski for (int j=0; j<newData[i].length; j++) { 215*b1cdbd2cSJim Jagielski newData[i][j] = new Double(i*10+j); 216*b1cdbd2cSJim Jagielski } 217*b1cdbd2cSJim Jagielski } 218*b1cdbd2cSJim Jagielski tEnv.addObjRelation("NewData", newData); */ 219*b1cdbd2cSJim Jagielski 220*b1cdbd2cSJim Jagielski //Adding relation for util.XSortable 221*b1cdbd2cSJim Jagielski final PrintWriter finalLog = log; 222*b1cdbd2cSJim Jagielski final XCellRange oTable = testRange; 223*b1cdbd2cSJim Jagielski tEnv.addObjRelation("SORTCHECKER", 224*b1cdbd2cSJim Jagielski new ifc.util._XSortable.XSortChecker() { 225*b1cdbd2cSJim Jagielski PrintWriter out = finalLog; 226*b1cdbd2cSJim Jagielski 227*b1cdbd2cSJim Jagielski public void setPrintWriter(PrintWriter log) { 228*b1cdbd2cSJim Jagielski out = log; 229*b1cdbd2cSJim Jagielski } 230*b1cdbd2cSJim Jagielski 231*b1cdbd2cSJim Jagielski public void prepareToSort() { 232*b1cdbd2cSJim Jagielski try { 233*b1cdbd2cSJim Jagielski oTable.getCellByPosition(0, 0).setValue(4); 234*b1cdbd2cSJim Jagielski oTable.getCellByPosition(0, 1).setFormula("b"); 235*b1cdbd2cSJim Jagielski oTable.getCellByPosition(0, 2).setValue(3); 236*b1cdbd2cSJim Jagielski oTable.getCellByPosition(0, 3).setValue(23); 237*b1cdbd2cSJim Jagielski } catch (com.sun.star.lang.IndexOutOfBoundsException e) { 238*b1cdbd2cSJim Jagielski out.println("Exception while checking sort"); 239*b1cdbd2cSJim Jagielski } 240*b1cdbd2cSJim Jagielski } 241*b1cdbd2cSJim Jagielski 242*b1cdbd2cSJim Jagielski public boolean checkSort(boolean isSortNumbering, 243*b1cdbd2cSJim Jagielski boolean isSortAscending) { 244*b1cdbd2cSJim Jagielski out.println("Sort checking..."); 245*b1cdbd2cSJim Jagielski 246*b1cdbd2cSJim Jagielski boolean res = false; 247*b1cdbd2cSJim Jagielski String[] value = new String[4]; 248*b1cdbd2cSJim Jagielski 249*b1cdbd2cSJim Jagielski for (int i = 0; i < 4; i++) { 250*b1cdbd2cSJim Jagielski try { 251*b1cdbd2cSJim Jagielski XCell cell = oTable.getCellByPosition(0, i); 252*b1cdbd2cSJim Jagielski value[i] = cell.getFormula(); 253*b1cdbd2cSJim Jagielski } catch (com.sun.star.lang.IndexOutOfBoundsException e) { 254*b1cdbd2cSJim Jagielski out.println("Exception while checking sort"); 255*b1cdbd2cSJim Jagielski } 256*b1cdbd2cSJim Jagielski } 257*b1cdbd2cSJim Jagielski 258*b1cdbd2cSJim Jagielski if (isSortNumbering) { 259*b1cdbd2cSJim Jagielski if (isSortAscending) { 260*b1cdbd2cSJim Jagielski out.println("Sorting ascending"); 261*b1cdbd2cSJim Jagielski 262*b1cdbd2cSJim Jagielski String[] rightVal = { "3", "4", "23", "b" }; 263*b1cdbd2cSJim Jagielski String[] vals = { value[0], value[1], value[2], value[3] }; 264*b1cdbd2cSJim Jagielski res = ValueComparer.equalValue(vals, rightVal); 265*b1cdbd2cSJim Jagielski out.println("Expected 3, 4, 23, b"); 266*b1cdbd2cSJim Jagielski out.println("getting: " + value[0] + ", " + 267*b1cdbd2cSJim Jagielski value[1] + ", " + value[2] + ", " + 268*b1cdbd2cSJim Jagielski value[3]); 269*b1cdbd2cSJim Jagielski } else { 270*b1cdbd2cSJim Jagielski String[] rightVal = { "b", "23", "4", "3" }; 271*b1cdbd2cSJim Jagielski String[] vals = { value[0], value[1], value[2], value[3] }; 272*b1cdbd2cSJim Jagielski res = ValueComparer.equalValue(vals, rightVal); 273*b1cdbd2cSJim Jagielski out.println("Expected b, 23, 4, 3"); 274*b1cdbd2cSJim Jagielski out.println("getting: " + value[0] + ", " + 275*b1cdbd2cSJim Jagielski value[1] + ", " + value[2] + ", " + 276*b1cdbd2cSJim Jagielski value[3]); 277*b1cdbd2cSJim Jagielski } 278*b1cdbd2cSJim Jagielski } else { 279*b1cdbd2cSJim Jagielski if (isSortAscending) { 280*b1cdbd2cSJim Jagielski String[] rightVal = { "3", "4", "23", "b" }; 281*b1cdbd2cSJim Jagielski res = ValueComparer.equalValue(value, rightVal); 282*b1cdbd2cSJim Jagielski out.println("Expected 3, 4, 23, b"); 283*b1cdbd2cSJim Jagielski out.println("getting: " + value[0] + ", " + 284*b1cdbd2cSJim Jagielski value[1] + ", " + value[2] + ", " + 285*b1cdbd2cSJim Jagielski value[3]); 286*b1cdbd2cSJim Jagielski } else { 287*b1cdbd2cSJim Jagielski String[] rightVal = { "b", "23", "4", "3" }; 288*b1cdbd2cSJim Jagielski res = ValueComparer.equalValue(value, rightVal); 289*b1cdbd2cSJim Jagielski out.println("Expected b, 23, 4, 3"); 290*b1cdbd2cSJim Jagielski out.println("getting: " + value[0] + ", " + 291*b1cdbd2cSJim Jagielski value[1] + ", " + value[2] + ", " + 292*b1cdbd2cSJim Jagielski value[3]); 293*b1cdbd2cSJim Jagielski } 294*b1cdbd2cSJim Jagielski } 295*b1cdbd2cSJim Jagielski 296*b1cdbd2cSJim Jagielski if (res) { 297*b1cdbd2cSJim Jagielski out.println("Sorted correctly"); 298*b1cdbd2cSJim Jagielski } else { 299*b1cdbd2cSJim Jagielski out.println("Sorted uncorrectly"); 300*b1cdbd2cSJim Jagielski } 301*b1cdbd2cSJim Jagielski 302*b1cdbd2cSJim Jagielski return res; 303*b1cdbd2cSJim Jagielski } 304*b1cdbd2cSJim Jagielski }); 305*b1cdbd2cSJim Jagielski 306*b1cdbd2cSJim Jagielski return tEnv; 307*b1cdbd2cSJim Jagielski } 308*b1cdbd2cSJim Jagielski } // finish class ScCellRangeObj 309