summaryrefslogtreecommitdiff
path: root/svl
diff options
context:
space:
mode:
authorKohei Yoshida <kohei.yoshida@collabora.com>2013-10-02 19:11:28 -0400
committerKohei Yoshida <kohei.yoshida@collabora.com>2013-10-04 19:15:23 -0400
commit57bc9f7edf6ec33c7c81c856cf5a51ea41b67932 (patch)
tree4fe16ed65f59a0889f76686bf9277a7b7940a785 /svl
parent00d08001da8dceeb77f16dca523979aa8ccc3755 (diff)
A little more test on shared string pool's life cycle management.
Change-Id: Ic676dd875c27ce60a0707903d7f22207764829e0
Diffstat (limited to 'svl')
-rw-r--r--svl/qa/unit/svl.cxx44
1 files changed, 44 insertions, 0 deletions
diff --git a/svl/qa/unit/svl.cxx b/svl/qa/unit/svl.cxx
index 90f4c44571ad..11a52e6f2a2f 100644
--- a/svl/qa/unit/svl.cxx
+++ b/svl/qa/unit/svl.cxx
@@ -36,6 +36,8 @@
#include "svl/stringpool.hxx"
#include "unotools/syslocale.hxx"
+#include <boost/scoped_ptr.hpp>
+
#define DEBUG_UNIT_TEST 1
#if DEBUG_UNIT_TEST
@@ -353,6 +355,48 @@ void Test::testStringPoolPurge()
aPool.purge();
CPPUNIT_ASSERT_MESSAGE("Wrong string count.", aPool.getCount() == 0);
CPPUNIT_ASSERT_MESSAGE("Wrong case insensitive string count.", aPool.getCountIgnoreCase() == 0);
+
+ // Now, create string objects on the heap.
+ boost::scoped_ptr<OUString> pStr1(new OUString("Andy"));
+ boost::scoped_ptr<OUString> pStr2(new OUString("andy"));
+ boost::scoped_ptr<OUString> pStr3(new OUString("ANDY"));
+ boost::scoped_ptr<OUString> pStr4(new OUString("Bruce"));
+ aPool.intern(*pStr1);
+ aPool.intern(*pStr2);
+ aPool.intern(*pStr3);
+ aPool.intern(*pStr4);
+
+ CPPUNIT_ASSERT_MESSAGE("Wrong string count.", aPool.getCount() == 4);
+ CPPUNIT_ASSERT_MESSAGE("Wrong case insensitive string count.", aPool.getCountIgnoreCase() == 2);
+
+ // This shouldn't purge anything.
+ aPool.purge();
+ CPPUNIT_ASSERT_MESSAGE("Wrong string count.", aPool.getCount() == 4);
+ CPPUNIT_ASSERT_MESSAGE("Wrong case insensitive string count.", aPool.getCountIgnoreCase() == 2);
+
+ // Delete one heap string object, and purge. That should purge one string.
+ pStr1.reset();
+ aPool.purge();
+ CPPUNIT_ASSERT_MESSAGE("Wrong string count.", aPool.getCount() == 3);
+ CPPUNIT_ASSERT_MESSAGE("Wrong case insensitive string count.", aPool.getCountIgnoreCase() == 2);
+
+ // Ditto...
+ pStr3.reset();
+ aPool.purge();
+ CPPUNIT_ASSERT_MESSAGE("Wrong string count.", aPool.getCount() == 2);
+ CPPUNIT_ASSERT_MESSAGE("Wrong case insensitive string count.", aPool.getCountIgnoreCase() == 2);
+
+ // Again.
+ pStr2.reset();
+ aPool.purge();
+ CPPUNIT_ASSERT_MESSAGE("Wrong string count.", aPool.getCount() == 1);
+ CPPUNIT_ASSERT_MESSAGE("Wrong case insensitive string count.", aPool.getCountIgnoreCase() == 1);
+
+ // Delete 'Bruce' and purge.
+ pStr4.reset();
+ aPool.purge();
+ CPPUNIT_ASSERT_MESSAGE("Wrong string count.", aPool.getCount() == 0);
+ CPPUNIT_ASSERT_MESSAGE("Wrong case insensitive string count.", aPool.getCountIgnoreCase() == 0);
}
void Test::checkPreviewString(SvNumberFormatter& aFormatter,