The exact error messages returned by regerror() aren't standardized;
relying on them isn't portable. Thus, add a a prefix to make clear that
the subsequent message is a regexp parsing error, and only look for this
prefix in the test suite, ignoring the rest of the message.
if (err != 0) {
size_t len = regerror (err, ®exp, NULL, 0);
char *buffer = new char[len];
if (err != 0) {
size_t len = regerror (err, ®exp, NULL, 0);
char *buffer = new char[len];
+ std::string msg = "Regexp error: ";
(void) regerror (err, ®exp, buffer, len);
(void) regerror (err, ®exp, buffer, len);
- msg.assign (buffer, len);
+ msg.append (buffer, len);
delete[] buffer;
throw Xapian::QueryParserError (msg);
delete[] buffer;
throw Xapian::QueryParserError (msg);
test_expect_equal_file EXPECTED OUTPUT
test_begin_subtest "regexp error reporting"
test_expect_equal_file EXPECTED OUTPUT
test_begin_subtest "regexp error reporting"
-notmuch search 'from:/unbalanced[/' 1>OUTPUT 2>&1
+notmuch search 'from:/unbalanced[/' 2>&1 | sed -e '/^A Xapian/ s/[^:]*$//' > OUTPUT
cat <<EOF > EXPECTED
notmuch search: A Xapian exception occurred
cat <<EOF > EXPECTED
notmuch search: A Xapian exception occurred
-A Xapian exception occurred parsing query: Invalid regular expression
+A Xapian exception occurred parsing query: Regexp error:
Query string was: from:/unbalanced[/
EOF
test_expect_equal_file EXPECTED OUTPUT
Query string was: from:/unbalanced[/
EOF
test_expect_equal_file EXPECTED OUTPUT