70 std::string expression;
75 const std::vector<TestCase> cases = {
77 {
"@{vcsidentifier()}", 40,
false },
78 {
"@{vcsidentifier(40)}", 40,
false },
79 {
"@{vcsidentifier(7)}", 7,
false },
80 {
"@{vcsidentifier(8)}", 8,
false },
81 {
"@{vcsidentifier(12)}", 12,
false },
82 {
"@{vcsidentifier(4)}", 4,
false },
85 {
"@{vcsfileidentifier(\".\")}", 40,
false },
86 {
"@{vcsfileidentifier(\".\", 8)}", 8,
false },
89 for(
const auto& testCase : cases )
91 auto result = evaluator.
Evaluate( wxString::FromUTF8( testCase.expression ) );
93 if( testCase.shouldError )
99 BOOST_CHECK_MESSAGE( !evaluator.
HasErrors(),
"Error in expression: " + testCase.expression +
" Errors: "
108 std::regex hexPattern(
"^[0-9a-f]+$" );
109 BOOST_CHECK( std::regex_match(
result.ToStdString(), hexPattern ) );
122 auto branch = evaluator.
Evaluate(
"@{vcsbranch()}" );
123 auto author = evaluator.
Evaluate(
"@{vcsauthor()}" );
124 auto authorEmail = evaluator.
Evaluate(
"@{vcsauthoremail()}" );
125 auto committer = evaluator.
Evaluate(
"@{vcscommitter()}" );
126 auto committerEmail = evaluator.
Evaluate(
"@{vcscommitteremail()}" );
131 if( !authorEmail.IsEmpty() )
133 BOOST_CHECK( authorEmail.Contains(
"@" ) );
136 if( !committerEmail.IsEmpty() )
138 BOOST_CHECK( committerEmail.Contains(
"@" ) );
142 auto fileAuthor = evaluator.
Evaluate(
"@{vcsfileauthor(\".\")}" );
143 auto fileAuthorEmail = evaluator.
Evaluate(
"@{vcsfileauthoremail(\".\")}" );
144 auto fileCommitter = evaluator.
Evaluate(
"@{vcsfilecommitter(\".\")}" );
145 auto fileCommitterEmail = evaluator.
Evaluate(
"@{vcsfilecommitteremail(\".\")}" );
150 if( !fileAuthorEmail.IsEmpty() )
152 BOOST_CHECK( fileAuthorEmail.Contains(
"@" ) );
155 if( !fileCommitterEmail.IsEmpty() )
157 BOOST_CHECK( fileCommitterEmail.Contains(
"@" ) );
247 std::string expression;
251 const std::vector<TestCase> cases = {
253 {
"@{vcsnearestlabel()}",
false },
254 {
"@{vcsnearestlabel(\"\")}",
false },
255 {
"@{vcsnearestlabel(\"v*\")}",
false },
256 {
"@{vcsnearestlabel(\"\", 0)}",
false },
257 {
"@{vcsnearestlabel(\"\", 1)}",
false },
260 {
"@{vcslabeldistance()}",
false },
261 {
"@{vcslabeldistance(\"v*\")}",
false },
262 {
"@{vcslabeldistance(\"\", 1)}",
false },
265 for(
const auto& testCase : cases )
267 auto result = evaluator.
Evaluate( wxString::FromUTF8( testCase.expression ) );
269 if( testCase.shouldError )
278 if( !
result.IsEmpty() && testCase.expression.find(
"distance" ) != std::string::npos )
280 std::regex numberPattern(
"^[0-9]+$" );
281 BOOST_CHECK( std::regex_match(
result.ToStdString(), numberPattern ) );
296 std::string expression;
301 const std::vector<TestCase> cases = {
303 {
"@{vcscommitdate()}", std::regex(
"^([0-9]{4}-[0-9]{2}-[0-9]{2}|)$" ),
false },
304 {
"@{vcscommitdate(\"ISO\")}", std::regex(
"^([0-9]{4}-[0-9]{2}-[0-9]{2}|)$" ),
false },
305 {
"@{vcscommitdate(\"US\")}", std::regex(
"^([0-9]{2}/[0-9]{2}/[0-9]{4}|)$" ),
false },
306 {
"@{vcscommitdate(\"EU\")}", std::regex(
"^([0-9]{2}/[0-9]{2}/[0-9]{4}|)$" ),
false },
309 {
"@{vcsfilecommitdate(\".\")}", std::regex(
"^([0-9]{4}-[0-9]{2}-[0-9]{2}|)$" ),
false },
312 for(
const auto& testCase : cases )
314 auto result = evaluator.
Evaluate( wxString::FromUTF8( testCase.expression ) );
316 if( testCase.shouldError )
322 BOOST_CHECK_MESSAGE( !evaluator.
HasErrors(),
"Error in expression: " + testCase.expression +
" Errors: "
326 BOOST_CHECK( std::regex_match(
result.ToStdString(), testCase.pattern ) );
wxString result
Test unit parsing edge cases and error handling.
BOOST_CHECK_EQUAL(result, "25.4")
BOOST_AUTO_TEST_CASE(VcsIdentifierFormatting)
Test VCS identifier functions with various lengths.