You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openoffice.apache.org by wa...@apache.org on 2012/10/24 12:33:37 UTC

svn commit: r1401613 - /incubator/ooo/trunk/test/testuno/source/fvt/uno/sc/data/DataSort.java

Author: wanglf
Date: Wed Oct 24 10:33:37 2012
New Revision: 1401613

URL: http://svn.apache.org/viewvc?rev=1401613&view=rev
Log:
#121227 - [testUNO patch]Sort Criteria and Sort Options script 
patch by Terry Yang, reviewed by WangLifeng

Added:
    incubator/ooo/trunk/test/testuno/source/fvt/uno/sc/data/DataSort.java

Added: incubator/ooo/trunk/test/testuno/source/fvt/uno/sc/data/DataSort.java
URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/test/testuno/source/fvt/uno/sc/data/DataSort.java?rev=1401613&view=auto
==============================================================================
--- incubator/ooo/trunk/test/testuno/source/fvt/uno/sc/data/DataSort.java (added)
+++ incubator/ooo/trunk/test/testuno/source/fvt/uno/sc/data/DataSort.java Wed Oct 24 10:33:37 2012
@@ -0,0 +1,327 @@
+/**************************************************************
+ * 
+ * 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
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * 
+ *************************************************************/
+package fvt.uno.sc.data;
+import static org.junit.Assert.*;
+
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.openoffice.test.uno.UnoApp;
+import testlib.uno.SCUtil;
+import com.sun.star.beans.PropertyValue;
+import com.sun.star.lang.XComponent;
+import com.sun.star.sheet.XCellAddressable;
+import com.sun.star.sheet.XCellRangeData;
+import com.sun.star.sheet.XSpreadsheet;
+import com.sun.star.sheet.XSpreadsheetDocument;
+import com.sun.star.table.CellAddress;
+import com.sun.star.table.TableSortField;
+import com.sun.star.table.XCell;
+import com.sun.star.table.XCellRange;
+import com.sun.star.uno.UnoRuntime;
+import com.sun.star.util.XSortable;
+
+public class DataSort {
+	UnoApp unoApp = new UnoApp();
+	XSpreadsheetDocument scDocument = null;
+	XComponent scComponent = null;
+
+	@Before
+	public void setUpDocument() throws Exception {
+		unoApp.start();
+		// New a SC document
+		scComponent = unoApp.newDocument("scalc");
+	}
+
+	@After
+	public void tearDownDocument() {
+		unoApp.close();
+		unoApp.closeDocument(scComponent);
+
+	}
+
+	@BeforeClass
+	public static void setUpConnection() throws Exception {
+
+	}
+
+	@AfterClass
+	public static void tearDownConnection() throws InterruptedException,
+			Exception {
+
+	}
+
+	@Test
+	public void singleFiledSort() throws Exception {
+		scDocument = SCUtil.getSCDocument(scComponent);
+		XSpreadsheet currentsheet = SCUtil.getCurrentSheet(scDocument);
+		XCellRange sourceRange = currentsheet.getCellRangeByName("A1:E8");
+		XCellRangeData sourceData = (XCellRangeData) UnoRuntime.queryInterface(
+				XCellRangeData.class, sourceRange);
+		Object[][] Source = { { "Level", "Code", "No.", "Team", "Name" },
+				{ "BS", 20, 4, "B", "Elle" }, { "BS", 20, 6, "C", "Sweet" },
+				{ "BS", 20, 2, "A", "Chcomic" }, { "CS", 30, 5, "A", "Ally" },
+				{ "MS", 10, 1, "A", "Joker" }, { "MS", 10, 3, "B", "Kevin" },
+				{ "CS", 30, 7, "C", "Tom" } };
+		sourceData.setDataArray(Source);
+		
+		 // --- sort by second column, ascending ---
+		 
+		 // define the fields to sort
+		 TableSortField[] aSortFields = new TableSortField[1];
+		 aSortFields[0] = new TableSortField();
+		 aSortFields[0].Field = 1;
+		 aSortFields[0].IsAscending = true;
+		 aSortFields[0].IsCaseSensitive = false;
+		 
+		 // define the sort descriptor
+		 PropertyValue[] aSortDesc = new PropertyValue[2];
+		 aSortDesc[0] = new PropertyValue();
+		 aSortDesc[0].Name = "SortFields";
+		 aSortDesc[0].Value = aSortFields;
+		 aSortDesc[1] = new PropertyValue();
+		 aSortDesc[1].Name = "ContainsHeader";
+		 aSortDesc[1].Value = new Boolean(true);
+		 
+		 // perform the sorting
+		 XSortable xSort = (XSortable)
+		     UnoRuntime.queryInterface(XSortable.class, sourceRange);
+		 xSort.sort(aSortDesc); 
+		 
+		 //Verify the sorting result
+			String[][] expectResult = { { "Level", "Code", "No.", "Team", "Name" },{ "MS", "10", "1", "A", "Joker" }, { "MS", "10", "3", "B", "Kevin" },
+					{ "BS", "20", "4", "B", "Elle" }, { "BS", "20", "6", "C", "Sweet" },
+					{ "BS", "20", "2", "A", "Chcomic" }, { "CS", "30", "5", "A", "Ally" },
+					{ "CS", "30", "7", "C", "Tom" } };
+			String[][] actureResult = SCUtil.getTextFromCellRange(currentsheet, 0, 0, 4, 7);
+			assertArrayEquals(expectResult,actureResult);
+			
+		//Save and reload the document verify the sort result again
+			SCUtil.saveFileAs(scComponent, "SortSingleFiled", "ods");
+			XSpreadsheetDocument scDocumentTemp = SCUtil.reloadFile(unoApp,
+					scDocument, "SortSingleFiled.ods");
+			scDocument = scDocumentTemp;
+			currentsheet = SCUtil.getCurrentSheet(scDocument);
+			actureResult = SCUtil.getTextFromCellRange(currentsheet, 0, 0, 4, 7);
+			assertArrayEquals(expectResult,actureResult);
+			
+	}
+	
+	@Test
+	public void sortByTwoFields() throws Exception {
+		scDocument = SCUtil.getSCDocument(scComponent);
+		XSpreadsheet currentsheet = SCUtil.getCurrentSheet(scDocument);
+		XCellRange sourceRange = currentsheet.getCellRangeByName("A1:E8");
+		XCellRangeData sourceData = (XCellRangeData) UnoRuntime.queryInterface(
+				XCellRangeData.class, sourceRange);
+		Object[][] Source = { { "Level", "Code", "No.", "Team", "Name" },
+				{ "BS", 20, 4, "B", "Elle" }, { "BS", 20, 6, "C", "Sweet" },
+				{ "BS", 20, 2, "A", "Chcomic" }, { "CS", 30, 5, "A", "Ally" },
+				{ "MS", 10, 1, "A", "Joker" }, { "MS", 10, 3, "B", "Kevin" },
+				{ "CS", 30, 7, "C", "Tom" } };
+		sourceData.setDataArray(Source);
+		
+		 // --- sort by second column, ascending ---
+		 
+		 // define the fields to sort
+		 TableSortField[] aSortFields = new TableSortField[2];
+		 aSortFields[0] = new TableSortField();
+		 aSortFields[0].Field = 1;
+		 aSortFields[0].IsAscending = true;
+		 aSortFields[0].IsCaseSensitive = false;
+		 aSortFields[1] = new TableSortField();
+		 aSortFields[1].Field = 2;
+		 aSortFields[1].IsAscending = false;
+		 aSortFields[1].IsCaseSensitive = false;
+		 
+		 // define the sort descriptor
+		 PropertyValue[] aSortDesc = new PropertyValue[2];
+		 aSortDesc[0] = new PropertyValue();
+		 aSortDesc[0].Name = "SortFields";
+		 aSortDesc[0].Value = aSortFields;
+		 aSortDesc[1] = new PropertyValue();
+		 aSortDesc[1].Name = "ContainsHeader";
+		 aSortDesc[1].Value = new Boolean(true);
+		 
+		 // perform the sorting
+		 XSortable xSort = (XSortable)
+		     UnoRuntime.queryInterface(XSortable.class, sourceRange);
+		 xSort.sort(aSortDesc); 
+		 
+		 //Verify the sorting result
+			String[][] expectResult = { { "Level", "Code", "No.", "Team", "Name" },{ "MS", "10", "3", "B", "Kevin" },{ "MS", "10", "1", "A", "Joker" }, 
+					 { "BS", "20", "6", "C", "Sweet" },{ "BS", "20", "4", "B", "Elle" },
+					{ "BS", "20", "2", "A", "Chcomic" }, { "CS", "30", "7", "C", "Tom" },{ "CS", "30", "5", "A", "Ally" }
+					 };
+			String[][] actureResult = SCUtil.getTextFromCellRange(currentsheet, 0, 0, 4, 7);
+			assertArrayEquals(expectResult,actureResult);
+			
+		//Save and reload the document verify the sort result again
+			SCUtil.saveFileAs(scComponent, "SortTwoFileds", "xls");
+			XSpreadsheetDocument scDocumentTemp = SCUtil.reloadFile(unoApp,
+					scDocument, "SortTwoFileds.xls");
+			scDocument = scDocumentTemp;
+			currentsheet = SCUtil.getCurrentSheet(scDocument);
+			actureResult = SCUtil.getTextFromCellRange(currentsheet, 0, 0, 4, 7);
+			assertArrayEquals(expectResult,actureResult);
+	}
+	
+	@Test
+	public void sortByThreeField() throws Exception {
+		scDocument = SCUtil.getSCDocument(scComponent);
+		XSpreadsheet currentsheet = SCUtil.getCurrentSheet(scDocument);
+		XCellRange sourceRange = currentsheet.getCellRangeByName("A1:E8");
+		XCellRangeData sourceData = (XCellRangeData) UnoRuntime.queryInterface(
+				XCellRangeData.class, sourceRange);
+		Object[][] Source = { { "Level", "Code", "No.", "Team", "Name" },
+				{ "BS", 20, 4, "B", "Elle" }, { "MS", 20, 6, "C", "Sweet" },
+				{ "BS", 20, 2, "A", "Chcomic" }, { "CS", 30, 5, "A", "Ally" },
+				{ "MS", 10, 1, "A", "Joker" }, { "MS", 10, 3, "B", "Kevin" },
+				{ "CS", 30, 7, "C", "Tom" } };
+		sourceData.setDataArray(Source);
+		
+		 // --- sort by second column, ascending ---
+		 
+		 // define the fields to sort
+		 TableSortField[] aSortFields = new TableSortField[3];
+		 aSortFields[0] = new TableSortField();
+		 aSortFields[0].Field = 0;
+		 aSortFields[0].IsAscending = true;
+		 aSortFields[0].IsCaseSensitive = false;
+		 aSortFields[1] = new TableSortField();
+		 aSortFields[1].Field = 1;
+		 aSortFields[1].IsAscending = false;
+		 aSortFields[1].IsCaseSensitive = false;
+		 aSortFields[2] = new TableSortField();
+		 aSortFields[2].Field = 2;
+		 aSortFields[2].IsAscending = false;
+		 aSortFields[2].IsCaseSensitive = false;
+		 
+		 // define the sort descriptor
+		 PropertyValue[] aSortDesc = new PropertyValue[2];
+		 aSortDesc[0] = new PropertyValue();
+		 aSortDesc[0].Name = "SortFields";
+		 aSortDesc[0].Value = aSortFields;
+		 aSortDesc[1] = new PropertyValue();
+		 aSortDesc[1].Name = "ContainsHeader";
+		 aSortDesc[1].Value = new Boolean(true);
+		 
+		 // perform the sorting
+		 XSortable xSort = (XSortable)
+		     UnoRuntime.queryInterface(XSortable.class, sourceRange);
+		 xSort.sort(aSortDesc); 
+		 
+		 //Verify the sorting result
+			String[][] expectResult = { { "Level", "Code", "No.", "Team", "Name" },{ "BS", "20", "4", "B", "Elle" },
+					{ "BS", "20", "2", "A", "Chcomic" }, { "CS", "30", "7", "C", "Tom" },{ "CS", "30", "5", "A", "Ally" },{ "MS", "20", "6", "C", "Sweet" },{ "MS", "10", "3", "B", "Kevin" },{ "MS", "10", "1", "A", "Joker" }};
+			String[][] actureResult = SCUtil.getTextFromCellRange(currentsheet, 0, 0, 4, 7);
+			assertArrayEquals(expectResult,actureResult);
+			
+		//Save and reload the document verify the sort result again
+			SCUtil.saveFileAs(scComponent, "SortThreeFileds", "ods");
+			XSpreadsheetDocument scDocumentTemp = SCUtil.reloadFile(unoApp,
+					scDocument, "SortThreeFileds.ods");
+			scDocument = scDocumentTemp;
+			currentsheet = SCUtil.getCurrentSheet(scDocument);
+			actureResult = SCUtil.getTextFromCellRange(currentsheet, 0, 0, 4, 7);
+			assertArrayEquals(expectResult,actureResult);
+	}
+	
+	@Test
+	public void sortOption() throws Exception {
+		scDocument = SCUtil.getSCDocument(scComponent);
+		XSpreadsheet currentsheet = SCUtil.getCurrentSheet(scDocument);
+		XCellRange sourceRange = currentsheet.getCellRangeByName("A1:A8");
+		XCellRangeData sourceData = (XCellRangeData) UnoRuntime.queryInterface(
+				XCellRangeData.class, sourceRange);
+		Object[][] source = {{ "Fri" }, { "Mon"},
+				{ "Sun" }, { "Wed" },
+				{ "Thu"}, {"Sat"},
+				{ "Tue"},{ "SUN"} };
+		sourceData.setDataArray(source);
+		
+		XCell cell = currentsheet.getCellByPosition(1, 0);
+		XCellAddressable xCellAddr = (XCellAddressable) UnoRuntime.queryInterface(XCellAddressable.class, cell);
+		CellAddress copytoAddress = xCellAddr.getCellAddress();
+		
+		 // --- sort by second column, ascending ---
+		 
+		 // define the fields to sort Sort by column 1and sort Ascending and not case sensitive
+		 TableSortField[] aSortFields = new TableSortField[1];
+		 aSortFields[0] = new TableSortField();
+		 aSortFields[0].Field = 0;
+		 aSortFields[0].IsAscending = true;
+		 aSortFields[0].IsCaseSensitive = false;
+
+		 // define the sort descriptor
+		 //Range not contain label,Including formats,copy result to B1, and sort with custom sort order
+		 PropertyValue[] aSortDesc = new PropertyValue[7];
+		 aSortDesc[0] = new PropertyValue();
+		 aSortDesc[0].Name = "SortFields";
+		 aSortDesc[0].Value = aSortFields;
+		 aSortDesc[1] = new PropertyValue();
+		 aSortDesc[1].Name = "ContainsHeader";
+		 aSortDesc[1].Value = new Boolean(false);
+		 aSortDesc[2] = new PropertyValue();
+		 aSortDesc[2].Name = "BindFormatsToContent";
+		 aSortDesc[2].Value = new Boolean(true);
+		 aSortDesc[3] = new PropertyValue();
+		 aSortDesc[3].Name = "IsUserListEnabled";
+		 aSortDesc[3].Value = new Boolean(true);
+		 aSortDesc[4] = new PropertyValue();
+		 aSortDesc[4].Name = "UserListIndex";
+		 aSortDesc[4].Value = 0;
+		 aSortDesc[5] = new PropertyValue();
+		 aSortDesc[5].Name = "CopyOutputData";
+		 aSortDesc[5].Value = new Boolean(true);
+		 aSortDesc[6] = new PropertyValue();
+		 aSortDesc[6].Name = "OutputPosition";
+		 aSortDesc[6].Value = copytoAddress;
+		 
+		 // perform the sorting
+		 XSortable xSort = (XSortable)
+		     UnoRuntime.queryInterface(XSortable.class, sourceRange);
+		 xSort.sort(aSortDesc); 
+		 
+		 //Verify the sorting result
+			String[][] expectResult =  {{ "Sun" }, { "SUN"},
+					{ "Mon" }, { "Tue" },
+					{ "Wed"}, {"Thu"},
+					{ "Fri"},{ "Sat"} };
+			String[][] actureSortResult = SCUtil.getTextFromCellRange(currentsheet, 1, 0, 1, 7 );
+			String[][] sourceAfterSort = SCUtil.getTextFromCellRange(currentsheet, 0, 0, 0, 7 );
+			assertArrayEquals(source,sourceAfterSort);
+			assertArrayEquals(expectResult,actureSortResult);
+			
+		//Save and reload the document verify the sort result again
+			SCUtil.saveFileAs(scComponent, "SortOption", "xls");
+			XSpreadsheetDocument scDocumentTemp = SCUtil.reloadFile(unoApp,
+					scDocument, "SortOption.xls");
+			scDocument = scDocumentTemp;
+			currentsheet = SCUtil.getCurrentSheet(scDocument);
+			actureSortResult = SCUtil.getTextFromCellRange(currentsheet, 1, 0, 1, 7);
+			sourceAfterSort = SCUtil.getTextFromCellRange(currentsheet, 0, 0, 0, 7 );
+			assertArrayEquals(source,sourceAfterSort);
+			assertArrayEquals(expectResult,actureSortResult);
+	}
+}