diff options
author | Daniel Vetter <daniel.vetter@ffwll.ch> | 2016-03-18 21:46:54 +0100 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2016-03-19 10:37:40 +0100 |
commit | 72d04b8453bf74b1fcd73f898c13398db4abc381 (patch) | |
tree | bd5089d4a99631e2a0bb8439dc1f46dc079bfafd /lib/igt_core.h | |
parent | f129ee8a39eaaa2b9a8c97d845309e372af00ce9 (diff) |
lib: Add igt_subtest_group
Useful for creating common setup code in igt_fixture which is only
needed by a subset of tests. And since I'm a good citizen it comes
with a library testcase/example included.
v2: Make testcase nastier to ensure a subtest group SKIPS when it's
parent is skipping already. I accidentally got this right, but let's
make sure.
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'lib/igt_core.h')
-rw-r--r-- | lib/igt_core.h | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/lib/igt_core.h b/lib/igt_core.h index 124ae0d9..b3fa7356 100644 --- a/lib/igt_core.h +++ b/lib/igt_core.h @@ -197,6 +197,30 @@ bool __igt_run_subtest(const char *subtest_name); const char *igt_subtest_name(void); bool igt_only_list_subtests(void); +void __igt_subtest_group_save(int *); +void __igt_subtest_group_restore(int); +/** + * igt_subtest_group: + * + * Group a set of subtests together with their common setup code + * + * Testcase with subtests often need to set up a bunch of shared state as the + * common test fixture. But if there are multiple with different requirements + * the commont setup code can't be extracted, since a test condition failure in + * e.g. igt_require() would result in all subsequent tests skipping. Even those + * from a different group. + * + * This macro allows to group together a set of #igt_fixture and #igt_subtest + * clauses. If any common setup in a fixture fails, only the subtests in this + * group will fail or skip. Subtest groups can be arbitrarily nested. + */ +#define igt_subtest_group for (int igt_tokencat(__tmpint,__LINE__) = 0, \ + igt_tokencat(__save,__LINE__) = 0; \ + igt_tokencat(__tmpint,__LINE__) < 1 && \ + (__igt_subtest_group_save(& igt_tokencat(__save,__LINE__) ), true); \ + igt_tokencat(__tmpint,__LINE__) ++, \ + __igt_subtest_group_restore(igt_tokencat(__save,__LINE__) )) + /** * igt_main: * |