private void testCFRuleRecord(CFRuleRecord record) {
    FontFormatting fontFormatting = new FontFormatting();
    testFontFormattingAccessors(fontFormatting);
    assertFalse(record.containsFontFormattingBlock());
    record.setFontFormatting(fontFormatting);
    assertTrue(record.containsFontFormattingBlock());

    BorderFormatting borderFormatting = new BorderFormatting();
    testBorderFormattingAccessors(borderFormatting);
    assertFalse(record.containsBorderFormattingBlock());
    record.setBorderFormatting(borderFormatting);
    assertTrue(record.containsBorderFormattingBlock());

    assertFalse(record.isLeftBorderModified());
    record.setLeftBorderModified(true);
    assertTrue(record.isLeftBorderModified());

    assertFalse(record.isRightBorderModified());
    record.setRightBorderModified(true);
    assertTrue(record.isRightBorderModified());

    assertFalse(record.isTopBorderModified());
    record.setTopBorderModified(true);
    assertTrue(record.isTopBorderModified());

    assertFalse(record.isBottomBorderModified());
    record.setBottomBorderModified(true);
    assertTrue(record.isBottomBorderModified());

    assertFalse(record.isTopLeftBottomRightBorderModified());
    record.setTopLeftBottomRightBorderModified(true);
    assertTrue(record.isTopLeftBottomRightBorderModified());

    assertFalse(record.isBottomLeftTopRightBorderModified());
    record.setBottomLeftTopRightBorderModified(true);
    assertTrue(record.isBottomLeftTopRightBorderModified());

    PatternFormatting patternFormatting = new PatternFormatting();
    testPatternFormattingAccessors(patternFormatting);
    assertFalse(record.containsPatternFormattingBlock());
    record.setPatternFormatting(patternFormatting);
    assertTrue(record.containsPatternFormattingBlock());

    assertFalse(record.isPatternBackgroundColorModified());
    record.setPatternBackgroundColorModified(true);
    assertTrue(record.isPatternBackgroundColorModified());

    assertFalse(record.isPatternColorModified());
    record.setPatternColorModified(true);
    assertTrue(record.isPatternColorModified());

    assertFalse(record.isPatternStyleModified());
    record.setPatternStyleModified(true);
    assertTrue(record.isPatternStyleModified());
  }
  public void testWrite() {
    HSSFWorkbook workbook = new HSSFWorkbook();
    HSSFSheet sheet = workbook.createSheet();
    CFRuleRecord rr = CFRuleRecord.create(sheet, ComparisonOperator.BETWEEN, "5", "10");

    PatternFormatting patternFormatting = new PatternFormatting();
    patternFormatting.setFillPattern(PatternFormatting.BRICKS);
    rr.setPatternFormatting(patternFormatting);

    byte[] data = rr.serialize();
    assertEquals(26, data.length);
    assertEquals(3, LittleEndian.getShort(data, 6));
    assertEquals(3, LittleEndian.getShort(data, 8));

    int flags = LittleEndian.getInt(data, 10);
    assertEquals("unused flags should be 111", 0x00380000, flags & 0x00380000);
    assertEquals(
        "undocumented flags should be 0000", 0, flags & 0x03C00000); // Otherwise Excel gets unhappy
    // check all remaining flag bits (some are not well understood yet)
    assertEquals(0x203FFFFF, flags);
  }