1+
12#include " stdafx.h"
3+
4+
25#include < gtest/gtest.h>
36#include " Replacer.h"
47#include " ReplaceEntry.h"
@@ -20,17 +23,67 @@ ReplaceEntry convert(const char *text, Match *match)
2023 return ReplaceEntry (fullMatch->start (), fullMatch->end (), " yyy" , 3 );
2124}
2225
26+
27+ void deleteEntry (ReplaceEntry* entry)
28+ {
29+ delete entry;
30+ }
31+
2332TEST_F (ReplacerTest, SimpleReplace) {
2433 NppPythonScript::Replacer replacer;
25- std::list<std::shared_ptr< NppPythonScript::ReplaceEntry> > entries;
26- bool moreEntries = replacer.startReplace (" aaabbbaaabbb " , 12 , " bbb " , convert , entries);
34+ std::list<NppPythonScript::ReplaceEntry* > entries;
35+ bool moreEntries = replacer.startReplace (" aaabbbaaabb " , 12 , " (b+) " , " x$1x " , entries);
2736 ASSERT_EQ (2 , entries.size ());
28- std::list<std::shared_ptr< NppPythonScript::ReplaceEntry> >::const_iterator it = entries.begin ();
37+ std::list<NppPythonScript::ReplaceEntry* >::const_iterator it = entries.begin ();
2938
3039 ASSERT_EQ (3 , (*it)->getStart ());
40+ ASSERT_STREQ (" xbbbx" , (*it)->getReplacement ());
41+ ASSERT_EQ (5 , (*it)->getReplacementLength ());
42+
3143 ++it;
44+
3245 ASSERT_EQ (9 , (*it)->getStart ());
46+ ASSERT_STREQ (" xbbx" , (*it)->getReplacement ());
47+ ASSERT_EQ (4 , (*it)->getReplacementLength ());
3348 ASSERT_EQ (false , moreEntries);
49+
50+ for_each (entries.begin (), entries.end (), deleteEntry);
3451}
3552
36- }
53+
54+ /* * Test ensures that the replacer is treating the text as UTF8, and not simply a byte sequence
55+ */
56+ TEST_F (ReplacerTest, ReplaceUtf8) {
57+ NppPythonScript::Replacer replacer;
58+ std::list<NppPythonScript::ReplaceEntry* > entries;
59+ bool moreEntries = replacer.startReplace (" aaa\xc3\xb4 " " bbbaaa\xc3\xbc " " bb" , 15 , " aaa([\xc3\xbc ])" , " x$1x" , entries);
60+ ASSERT_EQ (1 , entries.size ());
61+ std::list<NppPythonScript::ReplaceEntry*>::const_iterator it = entries.begin ();
62+
63+ ASSERT_EQ (8 , (*it)->getStart ());
64+ ASSERT_STREQ (" x\xC3\xBC x" , (*it)->getReplacement ());
65+ ASSERT_EQ (4 , (*it)->getReplacementLength ());
66+
67+
68+ for_each (entries.begin (), entries.end (), deleteEntry);
69+ }
70+
71+ /* * Test ensures characters outside of the BMP are matched correctly
72+ */
73+ TEST_F (ReplacerTest, ReplaceExtendedUtf8) {
74+ NppPythonScript::Replacer replacer;
75+ std::list<NppPythonScript::ReplaceEntry* > entries;
76+ bool moreEntries = replacer.startReplace (" aaa\xF0\x9F\x82\xB7 " " ZZZ" " bbbaaa\xF0\x9F\x82\xB8 " " ZZZ" , 23 , " aaa([\xF0\x9F\x82\xB8 ])" , " x$1x" , entries);
77+ ASSERT_EQ (1 , entries.size ());
78+ std::list<NppPythonScript::ReplaceEntry*>::const_iterator it = entries.begin ();
79+
80+ ASSERT_EQ (13 , (*it)->getStart ());
81+ ASSERT_STREQ (" x\xF0\x9F\x82\xB8 x" , (*it)->getReplacement ());
82+ ASSERT_EQ (6 , (*it)->getReplacementLength ());
83+
84+ for_each (entries.begin (), entries.end (), deleteEntry);
85+ }
86+
87+ }
88+
89+
0 commit comments