You've already forked lazarus-ccr
fpspreadsheet: Add a few test cases for conditional formatting
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@7531 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
213
components/fpspreadsheet/tests/conditionalformattests.pas
Normal file
213
components/fpspreadsheet/tests/conditionalformattests.pas
Normal file
@ -0,0 +1,213 @@
|
||||
{ Tests for conditional formatting
|
||||
These unit tests write out to and read back from files.
|
||||
}
|
||||
|
||||
unit conditionalformattests;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
{$modeswitch advancedrecords}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
// Not using Lazarus package as the user may be working with multiple versions
|
||||
// Instead, add .. to unit search path
|
||||
Classes, SysUtils, fpcunit, testutils, testregistry, testsutility,
|
||||
fpsTypes, fpsUtils, fpsAllFormats, fpSpreadsheet, fpsConditionalFormat;
|
||||
|
||||
type
|
||||
{ TSpreadWriteReadCFTests }
|
||||
//Write to xls/xml file and read back
|
||||
TSpreadWriteReadCFTests = class(TTestCase)
|
||||
private
|
||||
protected
|
||||
// Set up expected values:
|
||||
procedure SetUp; override;
|
||||
procedure TearDown; override;
|
||||
|
||||
// Test conditional cell format
|
||||
procedure TestWriteRead_CF_Number(AFormat: TsSpreadsheetFormat;
|
||||
ACondition: TsCFCondition; AValue1: Integer = MaxInt; AValue2: Integer = MaxInt);
|
||||
|
||||
published
|
||||
procedure TestWriteRead_CF_Number_XLSX_Equal_Const;
|
||||
procedure TestWriteRead_CF_Number_XLSX_NotEqual_Const;
|
||||
procedure TestWriteRead_CF_Number_XLSX_GreaterThan_Const;
|
||||
procedure TestWriteRead_CF_Number_XLSX_LessThan_Const;
|
||||
procedure TestWriteRead_CF_Number_XLSX_GreaterEqual_Const;
|
||||
procedure TestWriteRead_CF_Number_XLSX_LessEqual_Const;
|
||||
procedure TestWriteRead_CF_Number_XLSX_Between_Const;
|
||||
procedure TestWriteRead_CF_Number_XLSX_NotBetween_Const;
|
||||
end;
|
||||
|
||||
implementation
|
||||
|
||||
uses
|
||||
Math, TypInfo;
|
||||
|
||||
|
||||
{ TSpreadWriteReadCFTests }
|
||||
|
||||
procedure TSpreadWriteReadCFTests.SetUp;
|
||||
begin
|
||||
inherited SetUp;
|
||||
end;
|
||||
|
||||
procedure TSpreadWriteReadCFTests.TearDown;
|
||||
begin
|
||||
inherited TearDown;
|
||||
end;
|
||||
|
||||
|
||||
{ CFCellFormat tests. Detected cells get a red background. }
|
||||
|
||||
procedure TSpreadWriteReadCFTests.TestWriteRead_CF_Number(
|
||||
AFormat: TsSpreadsheetFormat; ACondition: TsCFCondition;
|
||||
AValue1: Integer = MaxInt; AValue2: Integer = MaxInt);
|
||||
var
|
||||
worksheet: TsWorksheet;
|
||||
workbook: TsWorkbook;
|
||||
row, col: Cardinal;
|
||||
tempFile: string;
|
||||
sollFMT: TsCellFormat;
|
||||
sollFmtIdx: Integer;
|
||||
sollRange: TsCellRange;
|
||||
actFMT: TsCellFormat;
|
||||
actFmtIdx: Integer;
|
||||
actRange: TsCellRange;
|
||||
actCondition: TsCFCondition;
|
||||
actValue1, actValue2: Variant;
|
||||
cf: TsConditionalFormat;
|
||||
begin
|
||||
// Write out all test values
|
||||
workbook := TsWorkbook.Create;
|
||||
try
|
||||
workSheet:= workBook.AddWorksheet('CF');
|
||||
|
||||
// Write test data: two rows with numbers 1..10
|
||||
for Row := 0 to 1 do
|
||||
for Col := 0 to 9 do
|
||||
worksheet.WriteNumber(row, col, col+1);
|
||||
|
||||
// Write format used by the cells detected by conditional formatting
|
||||
InitFormatRecord(sollFmt);
|
||||
sollFmt.SetBackgroundColor(scRed);
|
||||
sollFmtIdx := workbook.AddCellFormat(sollFmt);
|
||||
|
||||
// Write instruction for conditional formatting
|
||||
sollRange := Range(0, 0, 0, 8);
|
||||
if (AValue1 = MaxInt) and (AValue2 = MaxInt) then
|
||||
worksheet.WriteConditionalCellFormat(sollRange, ACondition, sollFmtIdx)
|
||||
else
|
||||
if (AValue2 = MaxInt) then
|
||||
worksheet.WriteConditionalCellFormat(sollRange, ACondition, AValue1, sollFmtIdx)
|
||||
else
|
||||
worksheet.WriteConditionalCellFormat(sollRange, ACondition, AValue1, AValue2, sollFmtIdx);
|
||||
|
||||
// Save to file
|
||||
tempFile := NewTempFile;
|
||||
workBook.WriteToFile(tempFile, AFormat, true);
|
||||
finally
|
||||
workbook.Free;
|
||||
end;
|
||||
|
||||
// Open the spreadsheet
|
||||
workbook := TsWorkbook.Create;
|
||||
try
|
||||
workbook.ReadFromFile(TempFile, AFormat);
|
||||
worksheet := GetWorksheetByName(workBook, 'CF');
|
||||
|
||||
if worksheet=nil then
|
||||
fail('Error in test code. Failed to get named worksheet');
|
||||
|
||||
// Check count of conditional formats
|
||||
CheckEquals(1, workbook.GetNumConditionalFormats, 'ConditionalFormat count mismatch.');
|
||||
|
||||
// Read conditional format
|
||||
cf := Workbook.GetConditionalFormat(0);
|
||||
|
||||
//Check range
|
||||
actRange := cf.CellRange;
|
||||
CheckEquals(sollRange.Row1, actRange.Row1, 'Conditional format range mismatch (Row1)');
|
||||
checkEquals(sollRange.Col1, actRange.Col1, 'Conditional format range mismatch (Col1)');
|
||||
CheckEquals(sollRange.Row2, actRange.Row2, 'Conditional format range mismatch (Row2)');
|
||||
checkEquals(sollRange.Col2, actRange.Col2, 'Conditional format range mismatch (Col2)');
|
||||
|
||||
// Check rules count
|
||||
CheckEquals(1, cf.RulesCount, 'Conditional format rules count mismatch');
|
||||
|
||||
// Check rules class
|
||||
CheckEquals(TsCFCellRule, cf.Rules[0].ClassType, 'Conditional format rule class mismatch');
|
||||
|
||||
// Check condition
|
||||
actCondition := TsCFCellRule(cf.Rules[0]).Condition;
|
||||
CheckEquals(
|
||||
GetEnumName(TypeInfo(TsCFCondition), integer(ACondition)),
|
||||
GetEnumName(typeInfo(TsCFCondition), integer(actCondition)),
|
||||
'Conditional format condition mismatch.'
|
||||
);
|
||||
|
||||
// Check 1st parameter
|
||||
actValue1 := TsCFCellRule(cf.Rules[0]).Operand1;
|
||||
if AValue1 <> MaxInt then
|
||||
CheckEquals(AValue1, Integer(actValue1), 'Conditional format parameter 1 mismatch')
|
||||
else
|
||||
CheckEquals(Integer(varEmpty), Integer(actValue1), 'Omitted parameter 1 detected.');
|
||||
|
||||
// Check 2nd parameter
|
||||
actValue2 := TsCFCellRule(cf.Rules[0]).Operand2;
|
||||
if AValue2 <> MaxInt then
|
||||
CheckEquals(AValue2, actValue2, 'Conditional format parameter 2 mismatch')
|
||||
else
|
||||
CheckEquals(Integer(varEmpty), Integer(actValue2), 'Omitted parameter 2 detected.');
|
||||
|
||||
finally
|
||||
workbook.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TSpreadWriteReadCFTests.TestWriteRead_CF_Number_XLSX_Equal_Const;
|
||||
begin
|
||||
TestWriteRead_CF_Number(sfOOXML, cfcEqual, 5);
|
||||
end;
|
||||
|
||||
procedure TSpreadWriteReadCFTests.TestWriteRead_CF_Number_XLSX_NotEqual_Const;
|
||||
begin
|
||||
TestWriteRead_CF_Number(sfOOXML, cfcNotEqual, 5);
|
||||
end;
|
||||
|
||||
procedure TSpreadWriteReadCFTests.TestWriteRead_CF_Number_XLSX_GreaterThan_Const;
|
||||
begin
|
||||
TestWriteRead_CF_Number(sfOOXML, cfcGreaterThan, 5);
|
||||
end;
|
||||
|
||||
procedure TSpreadWriteReadCFTests.TestWriteRead_CF_Number_XLSX_LessThan_Const;
|
||||
begin
|
||||
TestWriteRead_CF_Number(sfOOXML, cfcLessThan, 5);
|
||||
end;
|
||||
|
||||
procedure TSpreadWriteReadCFTests.TestWriteRead_CF_Number_XLSX_GreaterEqual_Const;
|
||||
begin
|
||||
TestWriteRead_CF_Number(sfOOXML, cfcGreaterEqual, 5);
|
||||
end;
|
||||
|
||||
procedure TSpreadWriteReadCFTests.TestWriteRead_CF_Number_XLSX_LessEqual_Const;
|
||||
begin
|
||||
TestWriteRead_CF_Number(sfOOXML, cfcLessEqual, 5);
|
||||
end;
|
||||
|
||||
procedure TSpreadWriteReadCFTests.TestWriteRead_CF_Number_XLSX_Between_Const;
|
||||
begin
|
||||
TestWriteRead_CF_Number(sfOOXML, cfcBetween, 3, 7);
|
||||
end;
|
||||
|
||||
procedure TSpreadWriteReadCFTests.TestWriteRead_CF_Number_XLSX_NotBetween_Const;
|
||||
begin
|
||||
TestWriteRead_CF_Number(sfOOXML, cfcNotBetween, 3, 7);
|
||||
end;
|
||||
|
||||
initialization
|
||||
RegisterTest(TSpreadWriteReadCFTests);
|
||||
|
||||
end.
|
||||
|
@ -40,7 +40,7 @@
|
||||
<PackageName Value="FCL"/>
|
||||
</Item4>
|
||||
</RequiredPackages>
|
||||
<Units Count="32">
|
||||
<Units Count="33">
|
||||
<Unit0>
|
||||
<Filename Value="spreadtestgui.lpr"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
@ -171,6 +171,10 @@
|
||||
<Filename Value="mathtests.pas"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
</Unit31>
|
||||
<Unit32>
|
||||
<Filename Value="conditionalformattests.pas"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
</Unit32>
|
||||
</Units>
|
||||
</ProjectOptions>
|
||||
<CompilerOptions>
|
||||
|
@ -11,6 +11,7 @@ uses
|
||||
Interfaces, Forms, GuiTestRunner, testsutility,
|
||||
datetests, stringtests, numberstests, manualtests, internaltests, mathtests,
|
||||
fileformattests, formattests, colortests, fonttests, optiontests,
|
||||
conditionalformattests,
|
||||
numformatparsertests, formulatests, rpnFormulaUnit, singleformulatests,
|
||||
exceltests, emptycelltests, errortests, virtualmodetests,
|
||||
colrowtests, ssttests, celltypetests, sortingtests, copytests,
|
||||
|
Reference in New Issue
Block a user