Kaydet (Commit) f069fca6 authored tarafından Daniel Bankston's avatar Daniel Bankston Kaydeden (comit) Kohei Yoshida

Improve performance of data validity unit test

- Now using OStringBuffer instead of OString for multiple appends.
- Simplified logic.

Change-Id: I991c3e538439d68e242a7f97bab9c2d82631467e
üst cd2f8a1c
...@@ -825,31 +825,24 @@ void checkValiditationEntries( const ValDataTestParams& rVDTParams ) ...@@ -825,31 +825,24 @@ void checkValiditationEntries( const ValDataTestParams& rVDTParams )
//get actual data validation entry from document //get actual data validation entry from document
const ScValidationData* pValDataTest = pDoc->GetValidationEntry( rVDTParams.nExpectedIndex ); const ScValidationData* pValDataTest = pDoc->GetValidationEntry( rVDTParams.nExpectedIndex );
rtl::OString sCol( rtl::OString::valueOf(static_cast<sal_Int32>(rVDTParams.aPosition.Col())) ); sal_Int32 nCol( static_cast<sal_Int32>(rVDTParams.aPosition.Col()) );
rtl::OString sRow( rtl::OString::valueOf(static_cast<sal_Int32>(rVDTParams.aPosition.Row())) ); sal_Int32 nRow( static_cast<sal_Int32>(rVDTParams.aPosition.Row()) );
rtl::OString sTab( rtl::OString::valueOf(static_cast<sal_Int32>(rVDTParams.aPosition.Tab())) ); sal_Int32 nTab( static_cast<sal_Int32>(rVDTParams.aPosition.Tab()) );
rtl::OString msg( "Data Validation Entry with base-cell-address: (" + rtl::OStringBuffer sMsg("Data Validation Entry with base-cell-address: (");
sCol + "," + sRow + "," + sTab + ") was not imported correctly." ); sMsg.append(nCol).append(",").append(nRow).append(",").append(nTab).append(") was not imported correctly.");
//check if expected and actual data validation entries are equal //check if expected and actual data validation entries are equal
CPPUNIT_ASSERT_MESSAGE( msg.pData->buffer, pValDataTest && aValData.EqualEntries(*pValDataTest) ); CPPUNIT_ASSERT_MESSAGE( sMsg.getStr(), pValDataTest && aValData.EqualEntries(*pValDataTest) );
} }
bool checkCellValidity( const ScAddress& rValBaseAddr, const ScRange& rRange, const ScDocument* pDoc, rtl::OString& sMsg ) void checkCellValidity( const ScAddress& rValBaseAddr, const ScRange& rRange, const ScDocument* pDoc )
{ {
SCCOL nBCol( rValBaseAddr.Col() ); SCCOL nBCol( rValBaseAddr.Col() );
SCTAB nBRow( rValBaseAddr.Row() ); SCROW nBRow( rValBaseAddr.Row() );
SCTAB nTab( rValBaseAddr.Tab() ); SCTAB nTab( static_cast<const sal_Int32>(rValBaseAddr.Tab()) );
//get from the document the data validation entry we are checking against //get from the document the data validation entry we are checking against
const SfxUInt32Item* pItem = static_cast<const SfxUInt32Item*>(pDoc->GetAttr(nBCol, nBRow, nTab, ATTR_VALIDDATA) ); const SfxUInt32Item* pItem = static_cast<const SfxUInt32Item*>(pDoc->GetAttr(nBCol, nBRow, nTab, ATTR_VALIDDATA) );
const ScValidationData* pValData = pDoc->GetValidationEntry( pItem->GetValue() ); const ScValidationData* pValData = pDoc->GetValidationEntry( pItem->GetValue() );
rtl::OString sCol, sRow;
rtl::OString sBCol = rtl::OString::valueOf(static_cast<sal_Int32>(nBCol));
rtl::OString sBRow = rtl::OString::valueOf(static_cast<sal_Int32>(nBRow));
rtl::OString sTab = rtl::OString::valueOf(static_cast<sal_Int32>(nTab));
sMsg += "\nThe following cells failed to reference the data validation entry with base-cell-address: (" +
sBCol + "," + sBRow + "," + sTab + ")\n";
bool bPassed = true;
//check that each cell in the expected range is associated with the data validation entry //check that each cell in the expected range is associated with the data validation entry
for(SCCOL i = rRange.aStart.Col(); i <= rRange.aEnd.Col(); ++i) for(SCCOL i = rRange.aStart.Col(); i <= rRange.aEnd.Col(); ++i)
{ {
...@@ -857,27 +850,25 @@ bool checkCellValidity( const ScAddress& rValBaseAddr, const ScRange& rRange, co ...@@ -857,27 +850,25 @@ bool checkCellValidity( const ScAddress& rValBaseAddr, const ScRange& rRange, co
{ {
const SfxUInt32Item* pItemTest = static_cast<const SfxUInt32Item*>( pDoc->GetAttr(i, j, nTab, ATTR_VALIDDATA) ); const SfxUInt32Item* pItemTest = static_cast<const SfxUInt32Item*>( pDoc->GetAttr(i, j, nTab, ATTR_VALIDDATA) );
const ScValidationData* pValDataTest = pDoc->GetValidationEntry( pItemTest->GetValue() ); const ScValidationData* pValDataTest = pDoc->GetValidationEntry( pItemTest->GetValue() );
//prevent string operations for occurring unnecessarily
sCol = rtl::OString::valueOf(static_cast<sal_Int32>(i));
sRow = rtl::OString::valueOf(static_cast<sal_Int32>(j));
if(!(pValDataTest && pValData->GetKey() == pValDataTest->GetKey())) if(!(pValDataTest && pValData->GetKey() == pValDataTest->GetKey()))
{ {
bPassed = false; sal_Int32 nCol = static_cast<const sal_Int32>(i);
rtl::OString sEntryKey = rtl::OString::valueOf(static_cast<sal_Int32>(pValData->GetKey())); sal_Int32 nRow = static_cast<const sal_Int32>(j);
sMsg += "(" + sCol + "," + sRow + "," + sTab + "), expected key: " + sEntryKey + ", actual key: "; sal_Int32 nTab32 = static_cast<const sal_Int32>(nTab);
rtl::OStringBuffer sMsg("\nData validation entry base-cell-address: (");
sMsg.append( static_cast<const sal_Int32>(nBCol) ).append(",");
sMsg.append( static_cast<const sal_Int32>(nBRow) ).append(",");
sMsg.append( nTab32 ).append(")\n");
sMsg.append("Cell: (").append(nCol).append(",").append(nRow).append(",").append(nTab32).append(")");
sal_uInt32 expectedKey(pValData->GetKey());
sal_uInt32 actualKey(-1);
if(pValDataTest) if(pValDataTest)
{ actualKey = pValDataTest->GetKey();
rtl::OString sTestKey = rtl::OString::valueOf(static_cast<sal_Int32>(pValDataTest->GetKey())); CPPUNIT_ASSERT_EQUAL_MESSAGE(sMsg.getStr(), expectedKey, actualKey);
sMsg += sTestKey;
}
else sMsg += "none";
sMsg += "\n";
} }
} }
} }
if(bPassed) sMsg += "None failed.\n";
sMsg += "\n";
return bPassed;
} }
} }
...@@ -902,7 +893,7 @@ void ScFiltersTest::testDataValidityODS() ...@@ -902,7 +893,7 @@ void ScFiltersTest::testDataValidityODS()
//sheet2's expected Data Validation Entry values //sheet2's expected Data Validation Entry values
ValDataTestParams aVDTParams2( ValDataTestParams aVDTParams2(
SC_VALID_WHOLE, SC_COND_BETWEEN, String("1"), String("10"), pDoc, SC_VALID_WHOLE, SC_COND_BETWEEN, String("1"), String("10"), pDoc,
ScAddress(2,3,1), String("Error sheet 2"), aValBaseAddr2, String("Error sheet 2"),
String("Must be a whole number between 1 and 10."), String("Must be a whole number between 1 and 10."),
SC_VALERR_STOP, 2 SC_VALERR_STOP, 2
); );
...@@ -915,10 +906,8 @@ void ScFiltersTest::testDataValidityODS() ...@@ -915,10 +906,8 @@ void ScFiltersTest::testDataValidityODS()
ScRange aRange2( 2,3,1, 6,7,1 ); //sheet2 ScRange aRange2( 2,3,1, 6,7,1 ); //sheet2
//check each sheet's cells for data validity //check each sheet's cells for data validity
rtl::OString sMsg; checkCellValidity( aValBaseAddr1, aRange1, pDoc );
bool bPassed1 = checkCellValidity( aValBaseAddr1, aRange1, pDoc, sMsg ); checkCellValidity( aValBaseAddr2, aRange2, pDoc );
bool bPassed2 = checkCellValidity( aValBaseAddr2, aRange2, pDoc, sMsg );
CPPUNIT_ASSERT_MESSAGE( sMsg.pData->buffer, bPassed1 && bPassed2 );
//check each sheet's content //check each sheet's content
rtl::OUString aCSVFileName1; rtl::OUString aCSVFileName1;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment