You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by jo...@apache.org on 2008/08/25 20:57:15 UTC

svn commit: r688825 - in /poi/trunk/src: java/org/apache/poi/hssf/record/CFHeaderRecord.java java/org/apache/poi/hssf/record/aggregates/CFRecordsAggregate.java testcases/org/apache/poi/hssf/record/aggregates/TestCFRecordsAggregate.java

Author: josh
Date: Mon Aug 25 11:57:14 2008
New Revision: 688825

URL: http://svn.apache.org/viewvc?rev=688825&view=rev
Log:
Fix for small bug introduced in c688655 - keep header field in sync with number of rules

Modified:
    poi/trunk/src/java/org/apache/poi/hssf/record/CFHeaderRecord.java
    poi/trunk/src/java/org/apache/poi/hssf/record/aggregates/CFRecordsAggregate.java
    poi/trunk/src/testcases/org/apache/poi/hssf/record/aggregates/TestCFRecordsAggregate.java

Modified: poi/trunk/src/java/org/apache/poi/hssf/record/CFHeaderRecord.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/CFHeaderRecord.java?rev=688825&r1=688824&r2=688825&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/record/CFHeaderRecord.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/record/CFHeaderRecord.java Mon Aug 25 11:57:14 2008
@@ -40,11 +40,11 @@
 	{
 		field_4_cell_ranges = new CellRangeAddressList();
 	}
-	public CFHeaderRecord(CellRangeAddress[] regions)
-	{
+	public CFHeaderRecord(CellRangeAddress[] regions, int nRules) {
 		CellRangeAddress[] unmergedRanges = regions;
 		CellRangeAddress[] mergeCellRanges = CellRangeUtil.mergeCellRanges(unmergedRanges);
 		setCellRanges(mergeCellRanges);
+		field_1_numcf = nRules;
 	}
 
 	public CFHeaderRecord(RecordInputStream in)

Modified: poi/trunk/src/java/org/apache/poi/hssf/record/aggregates/CFRecordsAggregate.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/aggregates/CFRecordsAggregate.java?rev=688825&r1=688824&r2=688825&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/record/aggregates/CFRecordsAggregate.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/record/aggregates/CFRecordsAggregate.java Mon Aug 25 11:57:14 2008
@@ -54,6 +54,9 @@
 			throw new IllegalArgumentException("No more than " 
 					+ MAX_CONDTIONAL_FORMAT_RULES + " rules may be specified");
 		}
+		if (pRules.length != pHeader.getNumberOfConditionalFormats()) {
+			throw new RuntimeException("Mismatch number of rules");
+		}
 		header = pHeader;
 		rules = new ArrayList(3);
 		for (int i = 0; i < pRules.length; i++) {
@@ -62,7 +65,7 @@
 	}
 
 	public CFRecordsAggregate(CellRangeAddress[] regions, CFRuleRecord[] rules) {
-		this(new CFHeaderRecord(regions), rules);
+		this(new CFHeaderRecord(regions, rules.length), rules);
 	}
 
 	/**

Modified: poi/trunk/src/testcases/org/apache/poi/hssf/record/aggregates/TestCFRecordsAggregate.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/hssf/record/aggregates/TestCFRecordsAggregate.java?rev=688825&r1=688824&r2=688825&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/hssf/record/aggregates/TestCFRecordsAggregate.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/hssf/record/aggregates/TestCFRecordsAggregate.java Mon Aug 25 11:57:14 2008
@@ -22,6 +22,7 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import junit.framework.AssertionFailedError;
 import junit.framework.TestCase;
 
 import org.apache.poi.hssf.model.RecordStream;
@@ -31,6 +32,7 @@
 import org.apache.poi.hssf.record.CFRuleRecord.ComparisonOperator;
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 import org.apache.poi.hssf.util.CellRangeAddress;
+import org.apache.poi.util.LittleEndian;
 
 /**
  * Tests the serialization and deserialization of the CFRecordsAggregate
@@ -99,4 +101,28 @@
 		assertEquals(2, cellRanges.length);
 		assertEquals(3, header.getNumberOfConditionalFormats());
 	}
+	
+	/**
+	 * Make sure that the CF Header record is properly updated with the number of rules
+	 */
+	public void testNRules() {
+		HSSFWorkbook workbook = new HSSFWorkbook();
+		CellRangeAddress[] cellRanges = {
+				new CellRangeAddress(0,1,0,0),
+				new CellRangeAddress(0,1,2,2),
+		};
+		CFRuleRecord[] rules = {
+			CFRuleRecord.create(workbook, "7"),
+			CFRuleRecord.create(workbook, ComparisonOperator.BETWEEN, "2", "5"),
+		};
+		CFRecordsAggregate agg = new CFRecordsAggregate(cellRanges, rules);
+		byte[] serializedRecord = new byte[agg.getRecordSize()];
+		agg.serialize(0, serializedRecord);
+		
+		int nRules = LittleEndian.getUShort(serializedRecord, 4);
+		if (nRules == 0) {
+			throw new AssertionFailedError("Identified bug 45682 b");
+		}
+		assertEquals(rules.length, nRules);
+	}
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org