fpspreadsheet: Modify numbertests, datetests and stringtests to avoid reopening the same test file again and again.

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@3123 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz
2014-06-01 19:38:10 +00:00
parent 976e037770
commit 85a12aad98
3 changed files with 105 additions and 53 deletions

View File

@@ -216,6 +216,11 @@ type
implementation
var
TestWorksheet: TsWorksheet = nil;
TestWorkbook: TsWorkbook = nil;
TestFileName: String = '';
const
DatesSheet = 'Dates'; //worksheet name
@@ -271,6 +276,7 @@ begin
SollDates[37]:=EncodeTime(3,45,12,0) + 1 // formatted as nfTimeDuration
end;
{ TSpreadWriteReadDateTests }
procedure TSpreadWriteReadDateTests.SetUp;
@@ -349,38 +355,48 @@ begin
TestWriteReadDates(sfExcel8);
end;
{ TSpreadReadDateTests }
procedure TSpreadReadDateTests.TestReadDate(FileName: string; Row: integer);
var
MyWorksheet: TsWorksheet;
MyWorkbook: TsWorkbook;
ActualDateTime: TDateTime;
begin
if Row>High(SollDates) then
fail('Error in test code: array bounds overflow. Check array size is correct.');
// Load the file only if is the file name changes.
if TestFileName <> FileName then begin
if TestWorkbook <> nil then
TestWorkbook.Free;
// Open the spreadsheet
MyWorkbook := TsWorkbook.Create;
TestWorkbook := TsWorkbook.Create;
case UpperCase(ExtractFileExt(FileName)) of
'.XLSX': MyWorkbook.ReadFromFile(FileName, sfOOXML);
'.ODS': MyWorkbook.ReadFromFile(FileName, sfOpenDocument);
'.XLSX': TestWorkbook.ReadFromFile(FileName, sfOOXML);
'.ODS': TestWorkbook.ReadFromFile(FileName, sfOpenDocument);
// Excel XLS/BIFF
else MyWorkbook.ReadFromFile(FileName, sfExcel8);
else TestWorkbook.ReadFromFile(FileName, sfExcel8);
end;
MyWorksheet:=GetWorksheetByName(MyWorkBook,DatesSheet);
if MyWorksheet=nil then
TestWorksheet := GetWorksheetByName(TestWorkBook, DatesSheet);
if TestWorksheet=nil then
fail('Error in test code. Failed to get named worksheet');
TestFileName := FileName;
end;
// We know these are valid time/date/datetime values....
// Just test for empty string; we'll probably end up in a maze of localized date/time stuff
// if we don't.
CheckNotEquals(MyWorkSheet.ReadAsUTF8Text(Row, 0), '','Could not read date time as string for cell '+CellNotation(MyWorkSheet,Row));
CheckNotEquals(TestWorkSheet.ReadAsUTF8Text(Row, 0), '',
'Could not read date time as string for cell '+CellNotation(TestWorkSheet,Row));
if not(MyWorkSheet.ReadAsDateTime(Row, 0, ActualDateTime)) then
Fail('Could not read date time for cell '+CellNotation(MyWorkSheet,Row));
CheckEquals(SollDates[Row],ActualDateTime,'Test date/time value mismatch '
+'cell '+CellNotation(MyWorksheet,Row));
if not(TestWorkSheet.ReadAsDateTime(Row, 0, ActualDateTime)) then
Fail('Could not read date time value for cell '+CellNotation(TestWorkSheet,Row));
CheckEquals(SollDates[Row],ActualDateTime,'Test date/time value mismatch, '
+'cell '+CellNotation(TestWorksheet,Row));
// Finalization
MyWorkbook.Free;
// Don't free the workbook here - it will be reused. It is destroyed at finalization.
end;
procedure TSpreadReadDateTests.SetUp;
@@ -1177,6 +1193,10 @@ initialization
RegisterTest(TSpreadReadDateTests);
RegisterTest(TSpreadWriteReadDateTests);
InitSollDates; //useful to have norm data if other code want to use this unit
finalization
FreeAndNil(TestWorkbook);
end.

View File

@@ -103,6 +103,11 @@ type
implementation
var
TestWorksheet: TsWorksheet = nil;
TestWorkbook: TsWorkbook = nil;
TestFileName: String = '';
const
TestFileBIFF8='testbiff8.xls'; //with 1904 numbermode number system
TestFileBIFF8_1899='testbiff8_1899.xls'; //with 1899/1900 numbermode number system
@@ -216,33 +221,41 @@ begin
TestWriteReadNumbers(sfExcel8);
end;
{ TSpreadReadNumberTests }
procedure TSpreadReadNumberTests.TestReadNumber(FileName: string; Row: integer);
var
MyWorksheet: TsWorksheet;
MyWorkbook: TsWorkbook;
ActualNumber: double;
begin
if Row>High(SollNumbers) then
fail('Error in test code: array bounds overflow. Check array size is correct.');
// Load the file only if is the file name changes.
if (FileName <> TestFileName) then begin
if TestWorkbook <> nil then
TestWorkbook.Free;
// Open the spreadsheet
MyWorkbook := TsWorkbook.Create;
TestWorkbook := TsWorkbook.Create;
case UpperCase(ExtractFileExt(FileName)) of
'.XLSX': MyWorkbook.ReadFromFile(FileName, sfOOXML);
'.ODS': MyWorkbook.ReadFromFile(FileName, sfOpenDocument);
'.XLSX': TestWorkbook.ReadFromFile(FileName, sfOOXML);
'.ODS': TestWorkbook.ReadFromFile(FileName, sfOpenDocument);
// Excel XLS/BIFF
else MyWorkbook.ReadFromFile(FileName, sfExcel8);
else TestWorkbook.ReadFromFile(FileName, sfExcel8);
end;
MyWorksheet:=GetWorksheetByName(MyWorkBook,NumbersSheet);
if MyWorksheet=nil then
TestWorksheet:=GetWorksheetByName(TestWorkBook,NumbersSheet);
if TestWorksheet=nil then
fail('Error in test code. Failed to get named worksheet');
ActualNumber:=MyWorkSheet.ReadAsNumber(Row, 0);
CheckEquals(SollNumbers[Row], ActualNumber,'Test value mismatch '
+'cell '+CellNotation(MyWorkSheet,Row));
TestFileName := FileName;
end;
// Finalization
MyWorkbook.Free;
ActualNumber := TestWorkSheet.ReadAsNumber(Row, 0);
CheckEquals(SollNumbers[Row], ActualNumber,'Test value mismatch, '
+'cell '+CellNotation(TestWorkSheet,Row));
// Don't free the workbook here - it will be reused. It is destroyed at finalization.
end;
procedure TSpreadReadNumberTests.SetUp;
@@ -462,6 +475,10 @@ initialization
RegisterTest(TSpreadReadNumberTests);
RegisterTest(TSpreadWriteReadNumberTests);
InitSollNumbers; //useful to have norm data if other code want to use this unit
finalization
FreeAndNil(TestWorkbook);
end.

View File

@@ -96,6 +96,11 @@ type
implementation
var
TestWorksheet: TsWorksheet = nil;
TestWorkbook: TsWorkbook = nil;
TestFileName: String = '';
// Initialize array with variables that represent the values
// we expect to be in the test spreadsheet files.
//
@@ -283,33 +288,39 @@ begin
DeleteFile(TempFile);
end;
{ TSpreadReadStringTests }
procedure TSpreadReadStringTests.TestReadString(FileName: string; Row: integer);
var
MyWorksheet: TsWorksheet;
MyWorkbook: TsWorkbook;
ActualString: string;
begin
if Row>High(SollStrings) then
fail('Error in test code: array bounds overflow. Check array size is correct.');
// Load the file only if is the file name changes.
if (FileName <> TestFileName) then begin
if TestWorkbook <> nil then
TestWorkbook.Free;
// Open the spreadsheet
MyWorkbook := TsWorkbook.Create;
TestWorkbook := TsWorkbook.Create;
case UpperCase(ExtractFileExt(FileName)) of
'.XLSX': MyWorkbook.ReadFromFile(FileName, sfOOXML);
'.ODS': MyWorkbook.ReadFromFile(FileName, sfOpenDocument);
'.XLSX': TestWorkbook.ReadFromFile(FileName, sfOOXML);
'.ODS': TestWorkbook.ReadFromFile(FileName, sfOpenDocument);
// Excel XLS/BIFF
else MyWorkbook.ReadFromFile(FileName, sfExcel8);
else TestWorkbook.ReadFromFile(FileName, sfExcel8);
end;
MyWorksheet:=GetWorksheetByName(MyWorkBook,StringsSheet);
if MyWorksheet=nil then
TestWorksheet := GetWorksheetByName(TestWorkBook, StringsSheet);
if TestWorksheet=nil then
fail('Error in test code: could not retrieve worksheet.');
end;
ActualString:=MyWorkSheet.ReadAsUTF8Text(Row,0);
CheckEquals(SollStrings[Row],ActualString,'Test value mismatch '
+'cell '+CellNotation(MyWorkSheet,Row));
ActualString := TestWorkSheet.ReadAsUTF8Text(Row,0);
CheckEquals(SollStrings[Row], ActualString, 'Test value mismatch, '
+'cell '+CellNotation(TestWorkSheet,Row));
// Finalization
MyWorkbook.Free;
// Don't free the workbook here - it will be reused. It is destroyed at finalization.
end;
procedure TSpreadReadStringTests.SetUp;
@@ -458,4 +469,8 @@ initialization
RegisterTest(TSpreadWriteReadStringTests);
// Initialize the norm variables in case other units want to use it:
InitSollStrings;
finalization
FreeAndNil(TestWorkbook);
end.