Kaydet (Commit) 4d076d4c authored tarafından Kohei Yoshida's avatar Kohei Yoshida

Write some rudimentary tests for the new shared string pool class.

Change-Id: Ie66de46d69f664839aa0a2d056cd3b8df4d4989b
üst 5d3ea0cd
......@@ -34,11 +34,11 @@ class SVL_DLLPUBLIC StringPool
StrHashType maStrPool;
StrHashType maStrPoolUpper;
StrIdMapType maToUpperMap;
CharClass* mpCharClass;
const CharClass* mpCharClass;
public:
StringPool();
StringPool( CharClass* pCharClass );
StringPool( const CharClass* pCharClass );
/**
* Intern a string object into the shared string pool.
......@@ -60,6 +60,8 @@ public:
*/
const rtl_uString* getIdentifier( const OUString& rStr ) const;
const rtl_uString* getIdentifierIgnoreCase( const OUString& rStr ) const;
private:
InsertResultType findOrInsert( StrHashType& rPool, const OUString& rStr ) const;
};
......
......@@ -33,6 +33,8 @@
#include "svl/zforlist.hxx"
#include "svl/zformat.hxx"
#include "svl/stringpool.hxx"
#include "unotools/syslocale.hxx"
#define DEBUG_UNIT_TEST 0
......@@ -65,11 +67,13 @@ public:
virtual void tearDown();
void testNumberFormat();
void testStringPool();
void testFdo60915();
void testI116701();
CPPUNIT_TEST_SUITE(Test);
CPPUNIT_TEST(testNumberFormat);
CPPUNIT_TEST(testStringPool);
CPPUNIT_TEST(testFdo60915);
CPPUNIT_TEST(testI116701);
CPPUNIT_TEST_SUITE_END();
......@@ -288,6 +292,42 @@ void Test::testNumberFormat()
}
}
void Test::testStringPool()
{
SvtSysLocale aSysLocale;
svl::StringPool aPool(aSysLocale.GetCharClassPtr());
const rtl_uString* p1 = aPool.intern("Andy");
const rtl_uString* p2 = aPool.intern("Andy");
CPPUNIT_ASSERT_EQUAL(p1, p2);
p2 = aPool.intern("Bruce");
CPPUNIT_ASSERT_MESSAGE("They must differ.", p1 != p2);
OUString aAndy("Andy");
p2 = aPool.getIdentifier(aAndy);
CPPUNIT_ASSERT_EQUAL(p1, p2);
// Test case insensitive string ID's.
OUString aAndyLower("andy"), aAndyUpper("ANDY");
p1 = aPool.getIdentifier("Andy");
CPPUNIT_ASSERT_MESSAGE("This shouldn't be NULL.", p1);
p2 = aPool.intern(aAndyLower);
CPPUNIT_ASSERT_MESSAGE("They must differ.", p1 != p2);
p2 = aPool.intern(aAndyUpper);
CPPUNIT_ASSERT_MESSAGE("They must differ.", p1 != p2);
p1 = aPool.getIdentifierIgnoreCase("Andy");
CPPUNIT_ASSERT_MESSAGE("This shouldn't be NULL.", p1);
p2 = aPool.getIdentifierIgnoreCase("andy");
CPPUNIT_ASSERT_MESSAGE("This shouldn't be NULL.", p2);
CPPUNIT_ASSERT_EQUAL(p1, p2);
p2 = aPool.getIdentifierIgnoreCase("ANDY");
CPPUNIT_ASSERT_MESSAGE("This shouldn't be NULL.", p2);
CPPUNIT_ASSERT_EQUAL(p1, p2);
}
void Test::checkPreviewString(SvNumberFormatter& aFormatter,
const OUString& sCode,
double fPreviewNumber,
......
......@@ -13,7 +13,7 @@
namespace svl {
StringPool::StringPool() : mpCharClass(NULL) {}
StringPool::StringPool( CharClass* pCharClass ) : mpCharClass(pCharClass) {}
StringPool::StringPool( const CharClass* pCharClass ) : mpCharClass(pCharClass) {}
rtl_uString* StringPool::intern( const OUString& rStr )
{
......@@ -52,6 +52,16 @@ const rtl_uString* StringPool::getIdentifier( const OUString& rStr ) const
return (it == maStrPool.end()) ? NULL : it->pData;
}
const rtl_uString* StringPool::getIdentifierIgnoreCase( const OUString& rStr ) const
{
if (!mpCharClass)
return NULL;
OUString aUpper = mpCharClass->uppercase(rStr);
StrHashType::iterator it = maStrPoolUpper.find(aUpper);
return (it == maStrPool.end()) ? NULL : it->pData;
}
StringPool::InsertResultType StringPool::findOrInsert( StrHashType& rPool, const OUString& rStr ) const
{
StrHashType::iterator it = rPool.find(rStr);
......
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