Skip to content

Commit

Permalink
Fixes an issue where range in static strings were expanded. Adds unit…
Browse files Browse the repository at this point in the history
… tests
  • Loading branch information
ventsyv committed Nov 9, 2023
1 parent 6e6cd86 commit 83b4391
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 3 deletions.
13 changes: 11 additions & 2 deletions src/Expander.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -212,14 +212,23 @@ std::wstring Expander::expand(const std::wstring &pattern)
wstring result = pattern;
wstring expanded;

uint load = 0;
for (int i = 0; i < size; i++)
{
if (isEscSeq(pattern, i))
{
i++;
continue;
}
else if (pattern[i] == rangeSymbol) //range symbol reached
else if (pattern[i] == groupBegin)
{
load++;
}
else if (pattern[i] == groupEnd)
{
load--;
}
else if (pattern[i] == rangeSymbol && load > 0) //range symbol reached
{
expanded = L"";
if (i - 1 < 0 || i + 1 >= size)
Expand Down Expand Up @@ -257,7 +266,7 @@ std::wstring Expander::expand(const std::wstring &pattern)
return L""; //range does not seem valid
result = preStr + expanded + postStr;
size = pattern.length();
i += 2;
//i += 2;
}
}
//result = "";
Expand Down
46 changes: 45 additions & 1 deletion test/TestExpander.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -640,7 +640,7 @@ TEST_F(TestExpander, testGenerate_VariableBlock_EmbededVarBlock_Cyrilic)
EXPECT_EQ(data[8], L"");
}

TEST_F(TestExpander, testGenerate_VariableBlock_First)
TEST_F(TestExpander, testGenerate_VariableBlock_Beginning)
{

wstring pattern = L"[1-3]abc";
Expand All @@ -664,6 +664,50 @@ TEST_F(TestExpander, testGenerate_VariableBlock_Middle)
EXPECT_EQ(data[2], L"ab3cd");
}

TEST_F(TestExpander, testGenerate_Static_Range_Beginning)
{

wstring pattern = L"a-c[1-3]";
underTest.generate(pattern);
auto data = underTest.getData();
EXPECT_EQ(data.size(), 3);
EXPECT_EQ(data[0], L"a-c1");
EXPECT_EQ(data[1], L"a-c2");
EXPECT_EQ(data[2], L"a-c3");
}


TEST_F(TestExpander, testGenerate_Static_Range_Middle)
{

wstring pattern = L"[1-3]a-c[1-3]";
underTest.generate(pattern);
auto data = underTest.getData();
EXPECT_EQ(data.size(), 9);
EXPECT_EQ(data[0], L"1a-c1");
EXPECT_EQ(data[1], L"2a-c1");
EXPECT_EQ(data[2], L"3a-c1");
EXPECT_EQ(data[3], L"1a-c2");
EXPECT_EQ(data[4], L"2a-c2");
EXPECT_EQ(data[5], L"3a-c2");
EXPECT_EQ(data[6], L"1a-c3");
EXPECT_EQ(data[7], L"2a-c3");
EXPECT_EQ(data[8], L"3a-c3");
}

TEST_F(TestExpander, testGenerate_Static_Range_End)
{

wstring pattern = L"[1-3]a-c";
underTest.generate(pattern);
auto data = underTest.getData();
EXPECT_EQ(data.size(), 3);
EXPECT_EQ(data[0], L"1a-c");
EXPECT_EQ(data[1], L"2a-c");
EXPECT_EQ(data[2], L"3a-c");
}


int main(int argc, char **argv)
{
::testing::InitGoogleTest(&argc, argv);
Expand Down

0 comments on commit 83b4391

Please sign in to comment.