summaryrefslogtreecommitdiff
path: root/sw/qa/core/swdoc-test.cxx
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2012-08-28 17:10:35 +0100
committerCaolán McNamara <caolanm@redhat.com>2012-08-29 09:02:50 +0100
commit42a15f45ff4e02f98229de02efd0d8c19f10bcd5 (patch)
tree67031948d50d251825c1d05d5547a499a1c5e51b /sw/qa/core/swdoc-test.cxx
parent02f6e55231c8b1646cbafc0e3e591da8122e2bf1 (diff)
Resolves: fdo#38983 allow extra word boundary characters
i.e. word overrides emdash and endash to be word boundary characters for the purposes of counting words. And there are some who want to treat =,- etc similarly. Default to a configuration that gives the same results as Word for word counting. Change-Id: Ia8ce6ac12011a1d6e547f11644c76163c4c993c5
Diffstat (limited to 'sw/qa/core/swdoc-test.cxx')
-rw-r--r--sw/qa/core/swdoc-test.cxx110
1 files changed, 110 insertions, 0 deletions
diff --git a/sw/qa/core/swdoc-test.cxx b/sw/qa/core/swdoc-test.cxx
index 54a1cffcd4cd..2f1bf8668824 100644
--- a/sw/qa/core/swdoc-test.cxx
+++ b/sw/qa/core/swdoc-test.cxx
@@ -567,6 +567,116 @@ void SwDocTest::testSwScanner()
CPPUNIT_ASSERT_EQUAL(aDocStat.nWord, static_cast<sal_uLong>(0));
CPPUNIT_ASSERT_EQUAL(aDocStat.nChar, static_cast<sal_uLong>(0));
}
+
+ //See https://bugs.freedesktop.org/show_bug.cgi?id=38983
+ {
+ SwDocStat aDocStat;
+
+ rtl::OUString sTemplate("ThisXis a test.");
+
+ m_pDoc->AppendTxtNode(*aPaM.GetPoint());
+ m_pDoc->InsertString(aPaM, sTemplate.replace('X', ' '));
+ pTxtNode = aPaM.GetNode()->GetTxtNode();
+ pTxtNode->CountWords(aDocStat, 0, pTxtNode->Len());
+ CPPUNIT_ASSERT(aDocStat.nWord == 4 &&
+ aDocStat.nCharExcludingSpaces == 12 &&
+ aDocStat.nChar == 15);
+ aDocStat.Reset();
+
+ m_pDoc->AppendTxtNode(*aPaM.GetPoint());
+ m_pDoc->InsertString(aPaM, sTemplate.replaceAll(rtl::OUString('X'), rtl::OUString(" = ")));
+ pTxtNode = aPaM.GetNode()->GetTxtNode();
+ pTxtNode->CountWords(aDocStat, 0, pTxtNode->Len());
+ CPPUNIT_ASSERT(aDocStat.nWord == 5 &&
+ aDocStat.nCharExcludingSpaces == 13 &&
+ aDocStat.nChar == 17);
+ aDocStat.Reset();
+
+ m_pDoc->AppendTxtNode(*aPaM.GetPoint());
+ m_pDoc->InsertString(aPaM, sTemplate.replaceAll(rtl::OUString('X'), rtl::OUString(" _ ")));
+ pTxtNode = aPaM.GetNode()->GetTxtNode();
+ pTxtNode->CountWords(aDocStat, 0, pTxtNode->Len());
+ CPPUNIT_ASSERT(aDocStat.nWord == 5 &&
+ aDocStat.nCharExcludingSpaces == 13 &&
+ aDocStat.nChar == 17);
+ aDocStat.Reset();
+
+ m_pDoc->AppendTxtNode(*aPaM.GetPoint());
+ m_pDoc->InsertString(aPaM, sTemplate.replaceAll(rtl::OUString('X'), rtl::OUString(" -- ")));
+ pTxtNode = aPaM.GetNode()->GetTxtNode();
+ pTxtNode->CountWords(aDocStat, 0, pTxtNode->Len());
+ CPPUNIT_ASSERT(aDocStat.nWord == 5 &&
+ aDocStat.nCharExcludingSpaces == 14 &&
+ aDocStat.nChar == 18);
+ aDocStat.Reset();
+
+ m_pDoc->AppendTxtNode(*aPaM.GetPoint());
+ m_pDoc->InsertString(aPaM, sTemplate.replace('X', '_'));
+ pTxtNode = aPaM.GetNode()->GetTxtNode();
+ pTxtNode->CountWords(aDocStat, 0, pTxtNode->Len());
+ CPPUNIT_ASSERT(aDocStat.nWord == 3 &&
+ aDocStat.nCharExcludingSpaces == 13 &&
+ aDocStat.nChar == 15);
+ aDocStat.Reset();
+
+ m_pDoc->AppendTxtNode(*aPaM.GetPoint());
+ m_pDoc->InsertString(aPaM, sTemplate.replace('X', '-'));
+ pTxtNode = aPaM.GetNode()->GetTxtNode();
+ pTxtNode->CountWords(aDocStat, 0, pTxtNode->Len());
+ CPPUNIT_ASSERT(aDocStat.nWord == 3 &&
+ aDocStat.nCharExcludingSpaces == 13 &&
+ aDocStat.nChar == 15);
+ aDocStat.Reset();
+
+ m_pDoc->AppendTxtNode(*aPaM.GetPoint());
+ m_pDoc->InsertString(aPaM, sTemplate.replace('X', 0x2012));
+ pTxtNode = aPaM.GetNode()->GetTxtNode();
+ pTxtNode->CountWords(aDocStat, 0, pTxtNode->Len());
+ CPPUNIT_ASSERT(aDocStat.nWord == 3 &&
+ aDocStat.nCharExcludingSpaces == 13 &&
+ aDocStat.nChar == 15);
+ aDocStat.Reset();
+
+ m_pDoc->AppendTxtNode(*aPaM.GetPoint());
+ m_pDoc->InsertString(aPaM, sTemplate.replace('X', 0x2015));
+ pTxtNode = aPaM.GetNode()->GetTxtNode();
+ pTxtNode->CountWords(aDocStat, 0, pTxtNode->Len());
+ CPPUNIT_ASSERT(aDocStat.nWord == 3 &&
+ aDocStat.nCharExcludingSpaces == 13 &&
+ aDocStat.nChar == 15);
+ aDocStat.Reset();
+
+ //But default configuration should, msword-alike treak emdash
+ //and endash as word seperators for word-counting
+ m_pDoc->AppendTxtNode(*aPaM.GetPoint());
+ m_pDoc->InsertString(aPaM, sTemplate.replace('X', 0x2013));
+ pTxtNode = aPaM.GetNode()->GetTxtNode();
+ pTxtNode->CountWords(aDocStat, 0, pTxtNode->Len());
+ CPPUNIT_ASSERT(aDocStat.nWord == 4 &&
+ aDocStat.nCharExcludingSpaces == 13 &&
+ aDocStat.nChar == 15);
+ aDocStat.Reset();
+
+ m_pDoc->AppendTxtNode(*aPaM.GetPoint());
+ m_pDoc->InsertString(aPaM, sTemplate.replace('X', 0x2014));
+ pTxtNode = aPaM.GetNode()->GetTxtNode();
+ pTxtNode->CountWords(aDocStat, 0, pTxtNode->Len());
+ CPPUNIT_ASSERT(aDocStat.nWord == 4 &&
+ aDocStat.nCharExcludingSpaces == 13 &&
+ aDocStat.nChar == 15);
+ aDocStat.Reset();
+
+ const sal_Unicode aChunk[] = {' ', 0x2013, ' '};
+ rtl::OUString sChunk(aChunk, SAL_N_ELEMENTS(aChunk));
+ m_pDoc->AppendTxtNode(*aPaM.GetPoint());
+ m_pDoc->InsertString(aPaM, sTemplate.replaceAll(rtl::OUString('X'), sChunk));
+ pTxtNode = aPaM.GetNode()->GetTxtNode();
+ pTxtNode->CountWords(aDocStat, 0, pTxtNode->Len());
+ CPPUNIT_ASSERT(aDocStat.nWord == 4 &&
+ aDocStat.nCharExcludingSpaces == 13 &&
+ aDocStat.nChar == 17);
+ aDocStat.Reset();
+ }
}
//See https://bugs.freedesktop.org/show_bug.cgi?id=40599