sc/qa/unit/copy_paste_test.cxx | 57 ++++++++++++++++--- sc/qa/unit/data/ods/tdf137621_autofillMergedBool.ods |binary sc/source/core/data/table4.cxx | 11 +++ 3 files changed, 59 insertions(+), 9 deletions(-)
New commits: commit ad3b553f2248acd564a9e9f7c0b8b7baf7e31ffd Author: Attila Szűcs <szucs.atti...@nisz.hu> AuthorDate: Thu Oct 22 12:47:16 2020 +0200 Commit: Gabor Kelemen <kelemen.gab...@nisz.hu> CommitDate: Thu Feb 25 15:37:11 2021 +0100 tdf#137621 sc: autofill bool sequences in merged cells Fixed FillAnalyse to not discover booleans as number sequences, rather as a pattern that can be repeated. Co-authored-by: Tibor Nagy (NISZ) Change-Id: I0a32e756461eb4101b77724129b745e23a658b1d Reviewed-on: https://gerrit.libreoffice.org/c/core/+/104655 Tested-by: Jenkins Tested-by: László Németh <nem...@numbertext.org> Reviewed-by: László Németh <nem...@numbertext.org> (cherry picked from commit 66c316cd4a703b4bc2e569b14888ea9e0d2ca9c9) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/111469 Tested-by: Gabor Kelemen <kelemen.gab...@nisz.hu> Reviewed-by: Gabor Kelemen <kelemen.gab...@nisz.hu> diff --git a/sc/qa/unit/copy_paste_test.cxx b/sc/qa/unit/copy_paste_test.cxx index 6dc5b574c4a7..d1836fe214b9 100644 --- a/sc/qa/unit/copy_paste_test.cxx +++ b/sc/qa/unit/copy_paste_test.cxx @@ -45,6 +45,7 @@ public: void testTdf40993_fillMergedCells(); void testTdf43958_clickSelectOnMergedCells(); void testTdf88782_autofillLinearNumbersInMergedCells(); + void tdf137621_autofillMergedBool(); void tdf137205_autofillDatesInMergedCells(); CPPUNIT_TEST_SUITE(ScCopyPasteTest); @@ -57,6 +58,7 @@ public: CPPUNIT_TEST(testTdf40993_fillMergedCells); CPPUNIT_TEST(testTdf43958_clickSelectOnMergedCells); CPPUNIT_TEST(testTdf88782_autofillLinearNumbersInMergedCells); + CPPUNIT_TEST(tdf137621_autofillMergedBool); CPPUNIT_TEST(tdf137205_autofillDatesInMergedCells); CPPUNIT_TEST_SUITE_END(); @@ -648,10 +650,12 @@ void ScCopyPasteTest::testTdf88782_autofillLinearNumbersInMergedCells() pView->FillAuto(FILL_TO_LEFT, 9, 30, 16, 35, 8); //J31:Q36 -> B31:Q36 // compare the results of fill-down with the reference stored in the test file - // this compare the whole area blindly, for concrete test cases, check the test file + // this compares the whole area blindly, for specific test cases, check the test file // the test file have instructions / explanations, so that is easy to understand - for (int nCol = 1; nCol <= 10; nCol++) { - for (int nRow = 8; nRow <= 27; nRow++) { + for (int nCol = 1; nCol <= 10; nCol++) + { + for (int nRow = 8; nRow <= 27; nRow++) + { CellType nType1 = rDoc.GetCellType(ScAddress(nCol, nRow, 0)); CellType nType2 = rDoc.GetCellType(ScAddress(nCol + 22, nRow, 0)); double* pValue1 = rDoc.GetValueCell(ScAddress(nCol, nRow, 0)); @@ -666,8 +670,10 @@ void ScCopyPasteTest::testTdf88782_autofillLinearNumbersInMergedCells() } // compare the results of fill-right and left with the reference stored in the test file - for (int nCol = 1; nCol <= 24; nCol++) { - for (int nRow = 30; nRow <= 35; nRow++) { + for (int nCol = 1; nCol <= 24; nCol++) + { + for (int nRow = 30; nRow <= 35; nRow++) + { CellType nType1 = rDoc.GetCellType(ScAddress(nCol, nRow, 0)); CellType nType2 = rDoc.GetCellType(ScAddress(nCol, nRow + 16, 0)); double* pValue1 = rDoc.GetValueCell(ScAddress(nCol, nRow, 0)); @@ -681,6 +687,39 @@ void ScCopyPasteTest::testTdf88782_autofillLinearNumbersInMergedCells() } } } + +void ScCopyPasteTest::tdf137621_autofillMergedBool() +{ + ScDocShellRef xDocSh = loadDocAndSetupModelViewController("tdf137621_autofillMergedBool.", FORMAT_ODS, true); + ScDocument& rDoc = xDocSh->GetDocument(); + + // Get the document controller + ScTabViewShell* pView = xDocSh->GetBestViewShell(false); + CPPUNIT_ASSERT(pView != nullptr); + + // fillauto booleans, these areas contain only merged cells + pView->FillAuto(FILL_TO_RIGHT, 0, 4, 3, 5, 8); //A5:D6 + + // compare the results of fill-right with the reference stored in the test file + // this compares the whole area blindly, for specific test cases, check the test file + for (int nCol = 4; nCol <= 11; nCol++) + { + for (int nRow = 4; nRow <= 5; nRow++) + { + CellType nType1 = rDoc.GetCellType(ScAddress(nCol, nRow, 0)); + CellType nType2 = rDoc.GetCellType(ScAddress(nCol, nRow + 3, 0)); + double* pValue1 = rDoc.GetValueCell(ScAddress(nCol, nRow, 0)); + double* pValue2 = rDoc.GetValueCell(ScAddress(nCol, nRow + 3, 0)); + + CPPUNIT_ASSERT_EQUAL(nType1, nType2); + if (pValue2 != nullptr) + CPPUNIT_ASSERT_EQUAL(*pValue1, *pValue2); //cells with boolean value + else + CPPUNIT_ASSERT_EQUAL(pValue1, pValue2); //empty cells + } + } +} + void ScCopyPasteTest::tdf137205_autofillDatesInMergedCells() { ScDocShellRef xDocSh = loadDocAndSetupModelViewController("tdf137205_AutofillDatesInMergedCells.", FORMAT_ODS, true); @@ -694,9 +733,11 @@ void ScCopyPasteTest::tdf137205_autofillDatesInMergedCells() pView->FillAuto(FILL_TO_RIGHT, 1, 5, 4, 7, 8); //B6:E8 // compare the results of fill-right with the reference stored in the test file - // this compare the whole area blindly, for concrete test cases, check the test file - for (int nCol = 5; nCol <= 12; nCol++) { - for (int nRow = 5; nRow <= 7; nRow++) { + // this compares the whole area blindly, for specific test cases, check the test file + for (int nCol = 5; nCol <= 12; nCol++) + { + for (int nRow = 5; nRow <= 7; nRow++) + { CellType nType1 = rDoc.GetCellType(ScAddress(nCol, nRow, 0)); CellType nType2 = rDoc.GetCellType(ScAddress(nCol, nRow + 5, 0)); double* pValue1 = rDoc.GetValueCell(ScAddress(nCol, nRow, 0)); diff --git a/sc/qa/unit/data/ods/tdf137621_autofillMergedBool.ods b/sc/qa/unit/data/ods/tdf137621_autofillMergedBool.ods new file mode 100644 index 000000000000..4f76017f49fc Binary files /dev/null and b/sc/qa/unit/data/ods/tdf137621_autofillMergedBool.ods differ diff --git a/sc/source/core/data/table4.cxx b/sc/source/core/data/table4.cxx index d23f1114bda1..a0dcb99602a7 100644 --- a/sc/source/core/data/table4.cxx +++ b/sc/source/core/data/table4.cxx @@ -299,8 +299,8 @@ void ScTable::FillAnalyse( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, CellType eCellType = aCurrCell.meType; if (eCellType == CELLTYPE_VALUE) { - // TODO: Check / handle special cases of number formats like boolean bool bVal = true; + double fVal; SvNumFormatType nCurrCellFormatType = pDocument->GetFormatTable()->GetType(GetNumberFormat(nColCurr, nRowCurr)); if (nCurrCellFormatType == SvNumFormatType::DATE) @@ -381,6 +381,10 @@ void ScTable::FillAnalyse( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, return; } } + else if (nCurrCellFormatType == SvNumFormatType::LOGICAL + && ((fVal = aCurrCell.mfValue) == 0.0 || fVal == 1.0)) + { + } else if (nValueCount >= 2) { for (SCSIZE i = 1; i < nValueCount && bVal; i++) @@ -396,6 +400,11 @@ void ScTable::FillAnalyse( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, rInc = nDiff; if (!::rtl::math::approxEqual(nDiff, rInc, 13)) bVal = false; + else if ((aCurrCell.mfValue == 0.0 || aCurrCell.mfValue == 1.0) + && (rDocument.GetFormatTable()->GetType( + GetNumberFormat(nColCurr, nRowCurr)) + == SvNumFormatType::LOGICAL)) + bVal = false; } else bVal = false; _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits