gtestutils: fix "-p" logic

If you had two tests "/foo/bar" and "/foo/bar/baz", and ran the test
program with "-p /foo/bar/baz", it would run "/foo/bar" too. Fix that.
And add a test to tests/testing for it.

https://bugzilla.gnome.org/show_bug.cgi?id=679683
This commit is contained in:
Dan Winship 2012-08-25 11:54:31 -04:00 committed by Matthias Clasen
parent ea06ec8063
commit 723a8f5588
2 changed files with 126 additions and 1 deletions

View File

@ -1835,7 +1835,7 @@ g_test_run_suite_internal (GTestSuite *suite,
{
GTestCase *tc = slist->data;
guint n = l ? strlen (tc->name) : 0;
if (l == n && strncmp (path, tc->name, n) == 0)
if (l == n && !rest && strncmp (path, tc->name, n) == 0)
{
if (!test_case_run (tc))
n_bad++;

View File

@ -450,6 +450,121 @@ test_expected_messages (void)
g_test_trap_assert_stderr ("*Did not see expected message CRITICAL*nope*");
}
static void
test_dash_p_colon (void)
{
if (!g_test_subprocess ())
g_assert_not_reached ();
g_print ("Test /misc/dash-p:colon ran\n");
}
/* The rest of the dash_p tests will get run by the toplevel test
* process, but they shouldn't do anything there.
*/
static void
test_dash_p_colon_sub (void)
{
if (!g_test_subprocess ())
return;
g_print ("Test /misc/dash-p:colon/sub ran\n");
}
static void
test_dash_p_colon_sub2 (void)
{
if (!g_test_subprocess ())
return;
g_print ("Test /misc/dash-p:colon/sub2 ran\n");
}
static void
test_dash_p_colon_sub_child (void)
{
if (!g_test_subprocess ())
return;
g_print ("Test /misc/dash-p:colon/sub:child ran\n");
}
static void
test_dash_p_slash (void)
{
if (!g_test_subprocess ())
return;
g_print ("Test /misc/dash-p/slash ran\n");
}
static void
test_dash_p_slash_sub (void)
{
if (!g_test_subprocess ())
return;
g_print ("Test /misc/dash-p/slash/sub ran\n");
}
static void
test_dash_p_slash_sub2 (void)
{
if (!g_test_subprocess ())
return;
g_print ("Test /misc/dash-p/slash/sub2 ran\n");
}
static void
test_dash_p_slash_sub_child (void)
{
if (!g_test_subprocess ())
return;
g_print ("Test /misc/dash-p/slash/sub:child ran\n");
}
static void
test_dash_p (void)
{
g_test_trap_subprocess ("/misc/dash-p:colon", 0,
G_TEST_TRAP_SILENCE_STDOUT | G_TEST_TRAP_SILENCE_STDERR);
g_test_trap_assert_passed ();
g_test_trap_assert_stdout ("*Test /misc/dash-p:colon ran*");
g_test_trap_assert_stdout ("*Test /misc/dash-p:colon/sub ran*");
g_test_trap_assert_stdout ("*Test /misc/dash-p:colon/sub2 ran*");
g_test_trap_assert_stdout_unmatched ("*Test /misc/dash-p:colon/sub:child ran*");
g_test_trap_assert_stdout_unmatched ("*Test /misc/dash-p/slash*");
g_test_trap_subprocess ("/misc/dash-p:colon/sub", 0,
G_TEST_TRAP_SILENCE_STDOUT | G_TEST_TRAP_SILENCE_STDERR);
g_test_trap_assert_passed ();
g_test_trap_assert_stdout ("*Test /misc/dash-p:colon/sub ran*");
g_test_trap_assert_stdout_unmatched ("*Test /misc/dash-p:colon ran*");
g_test_trap_assert_stdout_unmatched ("*Test /misc/dash-p:colon/sub2 ran*");
g_test_trap_assert_stdout_unmatched ("*Test /misc/dash-p:colon/sub:child ran*");
g_test_trap_assert_stdout_unmatched ("*Test /misc/dash-p/slash*");
g_test_trap_subprocess ("/misc/dash-p/slash", 0,
G_TEST_TRAP_SILENCE_STDOUT | G_TEST_TRAP_SILENCE_STDERR);
g_test_trap_assert_passed ();
g_test_trap_assert_stdout ("*Test /misc/dash-p/slash ran*");
g_test_trap_assert_stdout ("*Test /misc/dash-p/slash/sub ran*");
g_test_trap_assert_stdout ("*Test /misc/dash-p/slash/sub2 ran*");
g_test_trap_assert_stdout_unmatched ("*Test /misc/dash-p/slash/sub:child ran*");
g_test_trap_assert_stdout_unmatched ("*Test /misc/dash-p:colon*");
g_test_trap_subprocess ("/misc/dash-p/slash/sub", 0,
G_TEST_TRAP_SILENCE_STDOUT | G_TEST_TRAP_SILENCE_STDERR);
g_test_trap_assert_passed ();
g_test_trap_assert_stdout ("*Test /misc/dash-p/slash/sub ran*");
g_test_trap_assert_stdout_unmatched ("*Test /misc/dash-p/slash ran*");
g_test_trap_assert_stdout_unmatched ("*Test /misc/dash-p/slash/sub2 ran*");
g_test_trap_assert_stdout_unmatched ("*Test /misc/dash-p/slash/sub:child ran*");
g_test_trap_assert_stdout_unmatched ("*Test /misc/dash-p:colon*");
}
int
main (int argc,
char *argv[])
@ -499,5 +614,15 @@ main (int argc,
g_test_add_func ("/misc/expected-messages:extra-warning", test_expected_messages_extra_warning);
g_test_add_func ("/misc/expected-messages:unexpected-extra-warning", test_expected_messages_unexpected_extra_warning);
g_test_add_func ("/misc/dash-p", test_dash_p);
g_test_add_func ("/misc/dash-p:colon", test_dash_p_colon);
g_test_add_func ("/misc/dash-p:colon/sub", test_dash_p_colon_sub);
g_test_add_func ("/misc/dash-p:colon/sub:child", test_dash_p_colon_sub_child);
g_test_add_func ("/misc/dash-p:colon/sub2", test_dash_p_colon_sub2);
g_test_add_func ("/misc/dash-p/slash", test_dash_p_slash);
g_test_add_func ("/misc/dash-p/slash/sub", test_dash_p_slash_sub);
g_test_add_func ("/misc/dash-p/slash/sub:child", test_dash_p_slash_sub_child);
g_test_add_func ("/misc/dash-p/slash/sub2", test_dash_p_slash_sub2);
return g_test_run();
}