summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2013-03-01 10:50:11 +0000
committerCaolán McNamara <caolanm@redhat.com>2013-03-01 12:20:24 +0000
commita526370737099b57b399f2ca8de43e74e24ab794 (patch)
tree3e81a72060b06e5e3b5de1c9d0b249349906ca30
parent4a05ab1dd4c7da10810fec9948b2de76b7bdd0b6 (diff)
Related: fdo#55693 add regression tests for autocorrection
Change-Id: Ie9bbeb38ec9cc2fa0377709e75abb0338b20bab5
-rw-r--r--editeng/CppunitTest_editeng_core.mk1
-rw-r--r--editeng/qa/unit/core-test.cxx116
-rw-r--r--editeng/source/misc/svxacorr.cxx9
3 files changed, 123 insertions, 3 deletions
diff --git a/editeng/CppunitTest_editeng_core.mk b/editeng/CppunitTest_editeng_core.mk
index 6db6082ccfe7..d8ede2ea322d 100644
--- a/editeng/CppunitTest_editeng_core.mk
+++ b/editeng/CppunitTest_editeng_core.mk
@@ -81,6 +81,7 @@ $(eval $(call gb_CppunitTest_use_components,editeng_core,\
configmgr/source/configmgr \
framework/util/fwk \
i18npool/util/i18npool \
+ linguistic/source/lng \
sfx2/util/sfx \
ucb/source/core/ucb1 \
ucb/source/ucp/file/ucpfile1 \
diff --git a/editeng/qa/unit/core-test.cxx b/editeng/qa/unit/core-test.cxx
index a43dcaa46332..dd4711cac8fb 100644
--- a/editeng/qa/unit/core-test.cxx
+++ b/editeng/qa/unit/core-test.cxx
@@ -38,6 +38,7 @@
#include "editeng/eeitem.hxx"
#include "editeng/editids.hrc"
#include "editeng/editdoc.hxx"
+#include "editeng/svxacorr.hxx"
#include "editeng/unofield.hxx"
#include <com/sun/star/text/textfield/Type.hpp>
@@ -61,9 +62,15 @@ public:
*/
void testUnoTextFields();
+ /**
+ * AutoCorrect tests
+ */
+ void testAutocorrect();
+
CPPUNIT_TEST_SUITE(Test);
CPPUNIT_TEST(testConstruction);
CPPUNIT_TEST(testUnoTextFields);
+ CPPUNIT_TEST(testAutocorrect);
CPPUNIT_TEST_SUITE_END();
private:
@@ -221,6 +228,115 @@ void Test::testUnoTextFields()
}
}
+class TestAutoCorrDoc : public SvxAutoCorrDoc
+{
+public:
+ TestAutoCorrDoc(const OUString &rText, LanguageType eLang)
+ : m_sText(rText)
+ , m_eLang(eLang)
+ {
+ }
+ OUString getResult() const
+ {
+ return m_sText.toString();
+ }
+private:
+ OUStringBuffer m_sText;
+ LanguageType m_eLang;
+ virtual sal_Bool Delete( xub_StrLen nStt, xub_StrLen nEnd )
+ {
+ //fprintf(stderr, "TestAutoCorrDoc::Delete\n");
+ m_sText.remove(nStt, nEnd-nStt);
+ return true;
+ }
+ virtual sal_Bool Insert( xub_StrLen nPos, const String& rTxt )
+ {
+ //fprintf(stderr, "TestAutoCorrDoc::Insert\n");
+ m_sText.insert(nPos, rTxt);
+ return true;
+ }
+ virtual sal_Bool Replace( xub_StrLen nPos, const String& rTxt )
+ {
+ //fprintf(stderr, "TestAutoCorrDoc::Replace\n");
+ return ReplaceRange( nPos, rTxt.Len(), rTxt );
+ }
+ virtual sal_Bool ReplaceRange( xub_StrLen nPos, xub_StrLen nLen, const String& rTxt )
+ {
+ //fprintf(stderr, "TestAutoCorrDoc::ReplaceRange %d %d %s\n", nPos, nLen, OUStringToOString(rTxt, RTL_TEXTENCODING_UTF8).getStr());
+ m_sText.remove(nPos, nLen);
+ m_sText.insert(nPos, rTxt);
+ return true;
+ }
+ virtual sal_Bool SetAttr( xub_StrLen, xub_StrLen, sal_uInt16, SfxPoolItem& )
+ {
+ //fprintf(stderr, "TestAutoCorrDoc::SetAttr\n");
+ return true;
+ }
+ virtual sal_Bool SetINetAttr( xub_StrLen, xub_StrLen, const String& )
+ {
+ //fprintf(stderr, "TestAutoCorrDoc::SetINetAttr\n");
+ return true;
+ }
+ virtual const String* GetPrevPara( sal_Bool )
+ {
+ //fprintf(stderr, "TestAutoCorrDoc::GetPrevPara\n");
+ return NULL;
+ }
+ virtual sal_Bool ChgAutoCorrWord( sal_uInt16& rSttPos,
+ sal_uInt16 nEndPos, SvxAutoCorrect& rACorrect,
+ const String** ppPara )
+ {
+ //fprintf(stderr, "TestAutoCorrDoc::ChgAutoCorrWord\n");
+
+ if (m_sText.isEmpty())
+ return false;
+
+ const SvxAutocorrWord* pFnd = rACorrect.SearchWordsInList(m_sText.toString(), rSttPos, nEndPos, *this, m_eLang);
+ if (pFnd && pFnd->IsTextOnly())
+ {
+ m_sText.remove(rSttPos, nEndPos);
+ m_sText.insert(rSttPos, pFnd->GetLong());
+ if( ppPara )
+ *ppPara = NULL;//&pCurNode->GetString();
+ return true;
+ }
+
+ return false;
+ }
+};
+
+//https://bugs.freedesktop.org/show_bug.cgi?id=55693
+//Two capitalized letters are not corrected if dash or slash are directly
+//before the two letters
+void Test::testAutocorrect()
+{
+ OUString sShareAutocorrFile;
+ OUString sUserAutocorrFile;
+ SvxAutoCorrect aAutoCorrect(sShareAutocorrFile, sUserAutocorrFile);
+
+ {
+ OUString sInput("TEst-TEst");
+ sal_Unicode cNextChar(' ');
+ OUString sExpected("Test-Test ");
+
+ TestAutoCorrDoc aFoo(sInput, LANGUAGE_ENGLISH_US);
+ aAutoCorrect.AutoCorrect(aFoo, sInput, sInput.getLength(), cNextChar, true);
+
+ CPPUNIT_ASSERT_MESSAGE("autocorrect", aFoo.getResult() == sExpected);
+ }
+
+ {
+ OUString sInput("TEst/TEst");
+ sal_Unicode cNextChar(' ');
+ OUString sExpected("Test/Test ");
+
+ TestAutoCorrDoc aFoo(sInput, LANGUAGE_ENGLISH_US);
+ aAutoCorrect.AutoCorrect(aFoo, sInput, sInput.getLength(), cNextChar, true);
+
+ CPPUNIT_ASSERT_MESSAGE("autocorrect", aFoo.getResult() == sExpected);
+ }
+}
+
CPPUNIT_TEST_SUITE_REGISTRATION(Test);
}
diff --git a/editeng/source/misc/svxacorr.cxx b/editeng/source/misc/svxacorr.cxx
index e0a018029b04..fb05f4d7c078 100644
--- a/editeng/source/misc/svxacorr.cxx
+++ b/editeng/source/misc/svxacorr.cxx
@@ -1458,12 +1458,15 @@ sal_uLong SvxAutoCorrect::AutoCorrect( SvxAutoCorrDoc& rDoc, const String& rTxt,
if( nHelpId )
{
- nHelpId -= 1;
- Application::GetHelp()->OpenHelpAgent( aHelpIds[nHelpId] );
+ Help* pHelp = Application::GetHelp();
+ if (pHelp)
+ {
+ nHelpId -= 1;
+ Application::GetHelp()->OpenHelpAgent( aHelpIds[nHelpId] );
+ }
}
}
-
return nRet;
}