Blame tests/check_check_tags.c

Packit 0b5880
/*
Packit 0b5880
 * Check: a unit test framework for C
Packit 0b5880
 * Copyright (C) 2001, 2002 Arien Malec
Packit 0b5880
 *
Packit 0b5880
 * This library is free software; you can redistribute it and/or
Packit 0b5880
 * modify it under the terms of the GNU Lesser General Public
Packit 0b5880
 * License as published by the Free Software Foundation; either
Packit 0b5880
 * version 2.1 of the License, or (at your option) any later version.
Packit 0b5880
 *
Packit 0b5880
 * This library is distributed in the hope that it will be useful,
Packit 0b5880
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 0b5880
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit 0b5880
 * Lesser General Public License for more details.
Packit 0b5880
 *
Packit 0b5880
 * You should have received a copy of the GNU Lesser General Public
Packit 0b5880
 * License along with this library; if not, write to the
Packit 0b5880
 * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
Packit 0b5880
 * MA 02110-1301, USA.
Packit 0b5880
 */
Packit 0b5880
#include "../lib/libcompat.h"
Packit 0b5880
Packit 0b5880
#include <stdlib.h>
Packit 0b5880
#include <stdio.h>
Packit 0b5880
#include <string.h>
Packit 0b5880
#include <check.h>
Packit 0b5880
#include <assert.h>
Packit 0b5880
#include "check_check.h"
Packit 0b5880
Packit 0b5880
enum {
Packit 0b5880
    RED,
Packit 0b5880
    BLUE,
Packit 0b5880
    PURPLE,
Packit 0b5880
    YELLOW,
Packit 0b5880
    BLACK,
Packit 0b5880
    MAX_TESTS
Packit 0b5880
} test_ids;
Packit 0b5880
Packit 0b5880
/*
Packit 0b5880
 * Flag per test which is set true when that test runs
Packit 0b5880
 */
Packit 0b5880
unsigned int test_executed[MAX_TESTS];
Packit 0b5880
Packit 0b5880
static void reset_executed(void)
Packit 0b5880
{
Packit 0b5880
    memset(test_executed, 0, sizeof(test_executed));
Packit 0b5880
}
Packit 0b5880
Packit 0b5880
START_TEST(red_test1)
Packit 0b5880
{
Packit 0b5880
    test_executed[RED] = 1;
Packit 0b5880
}
Packit 0b5880
END_TEST
Packit 0b5880
Packit 0b5880
START_TEST(blue_test1)
Packit 0b5880
{
Packit 0b5880
    test_executed[BLUE] = 1;
Packit 0b5880
}
Packit 0b5880
END_TEST
Packit 0b5880
Packit 0b5880
START_TEST(purple_test1)
Packit 0b5880
{
Packit 0b5880
    test_executed[PURPLE] = 1;
Packit 0b5880
}
Packit 0b5880
END_TEST
Packit 0b5880
Packit 0b5880
START_TEST(yellow_test1)
Packit 0b5880
{
Packit 0b5880
    test_executed[YELLOW] = 1;
Packit 0b5880
}
Packit 0b5880
END_TEST
Packit 0b5880
Packit 0b5880
START_TEST(black_test1)
Packit 0b5880
{
Packit 0b5880
    test_executed[BLACK] = 1;
Packit 0b5880
}
Packit 0b5880
END_TEST
Packit 0b5880
Packit 0b5880
Packit 0b5880
static SRunner *make_tagged_testrunner(void)
Packit 0b5880
{
Packit 0b5880
Packit 0b5880
    SRunner *sr;
Packit 0b5880
    Suite *s1, *s2;
Packit 0b5880
Packit 0b5880
    TCase *red, *blue, *purple, *yellow, *black;
Packit 0b5880
Packit 0b5880
    s1 = suite_create("RedBlue Suite");
Packit 0b5880
Packit 0b5880
    red = tcase_create("Red");
Packit 0b5880
    tcase_set_tags(red, "Red");
Packit 0b5880
    suite_add_tcase (s1, red);
Packit 0b5880
    tcase_add_test(red, red_test1);
Packit 0b5880
Packit 0b5880
    blue = tcase_create("Blue");
Packit 0b5880
    tcase_set_tags(blue, "Blue");
Packit 0b5880
    suite_add_tcase (s1, blue);
Packit 0b5880
    tcase_add_test(blue, blue_test1);
Packit 0b5880
Packit 0b5880
    s2 = suite_create("PurpleYellowBlack Suite");
Packit 0b5880
Packit 0b5880
    purple = tcase_create("Purple");
Packit 0b5880
    tcase_set_tags(purple, "Red Blue");
Packit 0b5880
    suite_add_tcase (s2, purple);
Packit 0b5880
    tcase_add_test(purple, purple_test1);
Packit 0b5880
Packit 0b5880
    yellow = tcase_create("Yellow");
Packit 0b5880
    tcase_set_tags(yellow, "Yellow");
Packit 0b5880
    suite_add_tcase (s2, yellow);
Packit 0b5880
    tcase_add_test(yellow, yellow_test1);
Packit 0b5880
Packit 0b5880
    black = tcase_create("Black");
Packit 0b5880
    suite_add_tcase (s2, black);
Packit 0b5880
    tcase_add_test(black, black_test1);
Packit 0b5880
Packit 0b5880
    sr = srunner_create(s1);
Packit 0b5880
    srunner_add_suite(sr, s2);
Packit 0b5880
Packit 0b5880
    return sr;
Packit 0b5880
}
Packit 0b5880
Packit 0b5880
static   SRunner *sr = NULL;
Packit 0b5880
Packit 0b5880
static void tag_test_setup(void)
Packit 0b5880
{
Packit 0b5880
  sr = make_tagged_testrunner();
Packit 0b5880
  srunner_set_fork_status(sr, CK_NOFORK);
Packit 0b5880
}
Packit 0b5880
Packit 0b5880
static void tag_test_teardown (void)
Packit 0b5880
{
Packit 0b5880
    srunner_free (sr);
Packit 0b5880
}
Packit 0b5880
Packit 0b5880
/*
Packit 0b5880
 * Show that with no filter we run all the tests
Packit 0b5880
 */
Packit 0b5880
START_TEST(null_filter)
Packit 0b5880
{
Packit 0b5880
    reset_executed();
Packit 0b5880
Packit 0b5880
    srunner_run_tagged(sr, NULL, NULL, NULL, NULL, CK_VERBOSE);
Packit 0b5880
Packit 0b5880
    ck_assert(test_executed[RED]);
Packit 0b5880
    ck_assert(test_executed[BLUE]);
Packit 0b5880
    ck_assert(test_executed[PURPLE]);
Packit 0b5880
    ck_assert(test_executed[YELLOW]);
Packit 0b5880
    ck_assert(test_executed[BLACK]);
Packit 0b5880
Packit 0b5880
} END_TEST
Packit 0b5880
Packit 0b5880
START_TEST(include_nothing)
Packit 0b5880
{
Packit 0b5880
    reset_executed();
Packit 0b5880
Packit 0b5880
    srunner_run_tagged(sr, NULL, NULL, "", NULL, CK_VERBOSE);
Packit 0b5880
Packit 0b5880
    ck_assert(!test_executed[RED]);
Packit 0b5880
    ck_assert(!test_executed[BLUE]);
Packit 0b5880
    ck_assert(!test_executed[PURPLE]);
Packit 0b5880
    ck_assert(!test_executed[YELLOW]);
Packit 0b5880
    ck_assert(!test_executed[BLACK]);
Packit 0b5880
Packit 0b5880
} END_TEST
Packit 0b5880
Packit 0b5880
START_TEST(exclude_nothing)
Packit 0b5880
{
Packit 0b5880
    reset_executed();
Packit 0b5880
Packit 0b5880
    srunner_run_tagged(sr, NULL, NULL, NULL, "", CK_VERBOSE);
Packit 0b5880
Packit 0b5880
    ck_assert(test_executed[RED]);
Packit 0b5880
    ck_assert(test_executed[BLUE]);
Packit 0b5880
    ck_assert(test_executed[PURPLE]);
Packit 0b5880
    ck_assert(test_executed[YELLOW]);
Packit 0b5880
    ck_assert(test_executed[BLACK]);
Packit 0b5880
Packit 0b5880
} END_TEST
Packit 0b5880
Packit 0b5880
START_TEST(include_nothing_exclude_nothing)
Packit 0b5880
{
Packit 0b5880
    reset_executed();
Packit 0b5880
Packit 0b5880
    srunner_run_tagged(sr, NULL, NULL, "", "", CK_VERBOSE);
Packit 0b5880
Packit 0b5880
    ck_assert(!test_executed[RED]);
Packit 0b5880
    ck_assert(!test_executed[BLUE]);
Packit 0b5880
    ck_assert(!test_executed[PURPLE]);
Packit 0b5880
    ck_assert(!test_executed[YELLOW]);
Packit 0b5880
    ck_assert(!test_executed[BLACK]);
Packit 0b5880
Packit 0b5880
} END_TEST
Packit 0b5880
Packit 0b5880
START_TEST(include_yellow)
Packit 0b5880
{
Packit 0b5880
    reset_executed();
Packit 0b5880
Packit 0b5880
    srunner_run_tagged(sr, NULL, NULL, "Yellow", NULL, CK_VERBOSE);
Packit 0b5880
Packit 0b5880
    ck_assert(!test_executed[RED]);
Packit 0b5880
    ck_assert(!test_executed[BLUE]);
Packit 0b5880
    ck_assert(!test_executed[PURPLE]);
Packit 0b5880
    ck_assert(test_executed[YELLOW]);
Packit 0b5880
    ck_assert(!test_executed[BLACK]);
Packit 0b5880
Packit 0b5880
} END_TEST
Packit 0b5880
Packit 0b5880
Packit 0b5880
START_TEST(include_red)
Packit 0b5880
{
Packit 0b5880
    reset_executed();
Packit 0b5880
Packit 0b5880
    srunner_run_tagged(sr, NULL, NULL, "Red", NULL, CK_VERBOSE);
Packit 0b5880
Packit 0b5880
    ck_assert(test_executed[RED]);
Packit 0b5880
    ck_assert(!test_executed[BLUE]);
Packit 0b5880
    ck_assert(test_executed[PURPLE]);
Packit 0b5880
    ck_assert(!test_executed[YELLOW]);
Packit 0b5880
    ck_assert(!test_executed[BLACK]);
Packit 0b5880
Packit 0b5880
} END_TEST
Packit 0b5880
Packit 0b5880
START_TEST(include_red_blue)
Packit 0b5880
{
Packit 0b5880
    reset_executed();
Packit 0b5880
Packit 0b5880
    srunner_run_tagged(sr, NULL, NULL, "Red Blue", NULL, CK_VERBOSE);
Packit 0b5880
Packit 0b5880
    ck_assert(test_executed[RED]);
Packit 0b5880
    ck_assert(test_executed[BLUE]);
Packit 0b5880
    ck_assert(test_executed[PURPLE]);
Packit 0b5880
    ck_assert(!test_executed[YELLOW]);
Packit 0b5880
    ck_assert(!test_executed[BLACK]);
Packit 0b5880
Packit 0b5880
} END_TEST
Packit 0b5880
Packit 0b5880
START_TEST(include_red_blue_yellow)
Packit 0b5880
{
Packit 0b5880
    reset_executed();
Packit 0b5880
Packit 0b5880
    srunner_run_tagged(sr, NULL, NULL, "Red Blue Yellow", NULL, CK_VERBOSE);
Packit 0b5880
Packit 0b5880
    ck_assert(test_executed[RED]);
Packit 0b5880
    ck_assert(test_executed[BLUE]);
Packit 0b5880
    ck_assert(test_executed[PURPLE]);
Packit 0b5880
    ck_assert(test_executed[YELLOW]);
Packit 0b5880
    ck_assert(!test_executed[BLACK]);
Packit 0b5880
Packit 0b5880
} END_TEST
Packit 0b5880
Packit 0b5880
START_TEST(exclude_yellow)
Packit 0b5880
{
Packit 0b5880
    reset_executed();
Packit 0b5880
Packit 0b5880
    srunner_run_tagged(sr, NULL, NULL, NULL, "Yellow", CK_VERBOSE);
Packit 0b5880
Packit 0b5880
    ck_assert(test_executed[RED]);
Packit 0b5880
    ck_assert(test_executed[BLUE]);
Packit 0b5880
    ck_assert(test_executed[PURPLE]);
Packit 0b5880
    ck_assert(!test_executed[YELLOW]);
Packit 0b5880
    ck_assert(test_executed[BLACK]);
Packit 0b5880
Packit 0b5880
} END_TEST
Packit 0b5880
Packit 0b5880
START_TEST(exclude_red)
Packit 0b5880
{
Packit 0b5880
    reset_executed();
Packit 0b5880
Packit 0b5880
    srunner_run_tagged(sr, NULL, NULL, NULL, "Red", CK_VERBOSE);
Packit 0b5880
Packit 0b5880
    ck_assert(!test_executed[RED]);
Packit 0b5880
    ck_assert(test_executed[BLUE]);
Packit 0b5880
    ck_assert(!test_executed[PURPLE]);
Packit 0b5880
    ck_assert(test_executed[YELLOW]);
Packit 0b5880
    ck_assert(test_executed[BLACK]);
Packit 0b5880
Packit 0b5880
} END_TEST
Packit 0b5880
Packit 0b5880
START_TEST(exclude_red_blue)
Packit 0b5880
{
Packit 0b5880
    reset_executed();
Packit 0b5880
Packit 0b5880
    srunner_run_tagged(sr, NULL, NULL, NULL, "Red Blue", CK_VERBOSE);
Packit 0b5880
Packit 0b5880
    ck_assert(!test_executed[RED]);
Packit 0b5880
    ck_assert(!test_executed[BLUE]);
Packit 0b5880
    ck_assert(!test_executed[PURPLE]);
Packit 0b5880
    ck_assert(test_executed[YELLOW]);
Packit 0b5880
    ck_assert(test_executed[BLACK]);
Packit 0b5880
Packit 0b5880
} END_TEST
Packit 0b5880
Packit 0b5880
START_TEST(exclude_red_blue_yellow)
Packit 0b5880
{
Packit 0b5880
    reset_executed();
Packit 0b5880
Packit 0b5880
    srunner_run_tagged(sr, NULL, NULL, NULL, "Red Blue Yellow", CK_VERBOSE);
Packit 0b5880
Packit 0b5880
    ck_assert(!test_executed[RED]);
Packit 0b5880
    ck_assert(!test_executed[BLUE]);
Packit 0b5880
    ck_assert(!test_executed[PURPLE]);
Packit 0b5880
    ck_assert(!test_executed[YELLOW]);
Packit 0b5880
    ck_assert(test_executed[BLACK]);
Packit 0b5880
Packit 0b5880
} END_TEST
Packit 0b5880
Packit 0b5880
#if HAVE_DECL_SETENV
Packit 0b5880
Packit 0b5880
/* env var driven tests */
Packit 0b5880
Packit 0b5880
START_TEST(include_yellow_env)
Packit 0b5880
{
Packit 0b5880
    reset_executed();
Packit 0b5880
Packit 0b5880
    setenv ("CK_INCLUDE_TAGS", "Yellow", 1);
Packit 0b5880
    srunner_run_all(sr, CK_VERBOSE);
Packit 0b5880
Packit 0b5880
    ck_assert(!test_executed[RED]);
Packit 0b5880
    ck_assert(!test_executed[BLUE]);
Packit 0b5880
    ck_assert(!test_executed[PURPLE]);
Packit 0b5880
    ck_assert(test_executed[YELLOW]);
Packit 0b5880
    ck_assert(!test_executed[BLACK]);
Packit 0b5880
Packit 0b5880
    unsetenv ("CK_INCLUDE_TAGS");
Packit 0b5880
Packit 0b5880
} END_TEST
Packit 0b5880
Packit 0b5880
Packit 0b5880
START_TEST(include_red_env)
Packit 0b5880
{
Packit 0b5880
    reset_executed();
Packit 0b5880
Packit 0b5880
    setenv ("CK_INCLUDE_TAGS", "Red", 1);
Packit 0b5880
    srunner_run_all(sr, CK_VERBOSE);
Packit 0b5880
Packit 0b5880
    ck_assert(test_executed[RED]);
Packit 0b5880
    ck_assert(!test_executed[BLUE]);
Packit 0b5880
    ck_assert(test_executed[PURPLE]);
Packit 0b5880
    ck_assert(!test_executed[YELLOW]);
Packit 0b5880
    ck_assert(!test_executed[BLACK]);
Packit 0b5880
Packit 0b5880
    unsetenv ("CK_INCLUDE_TAGS");
Packit 0b5880
Packit 0b5880
} END_TEST
Packit 0b5880
Packit 0b5880
START_TEST(include_red_blue_env)
Packit 0b5880
{
Packit 0b5880
    reset_executed();
Packit 0b5880
Packit 0b5880
    setenv ("CK_INCLUDE_TAGS", "Red  Blue", 1);
Packit 0b5880
    srunner_run_all(sr, CK_VERBOSE);
Packit 0b5880
Packit 0b5880
    ck_assert(test_executed[RED]);
Packit 0b5880
    ck_assert(test_executed[BLUE]);
Packit 0b5880
    ck_assert(test_executed[PURPLE]);
Packit 0b5880
    ck_assert(!test_executed[YELLOW]);
Packit 0b5880
    ck_assert(!test_executed[BLACK]);
Packit 0b5880
Packit 0b5880
    unsetenv ("CK_INCLUDE_TAGS");
Packit 0b5880
Packit 0b5880
} END_TEST
Packit 0b5880
Packit 0b5880
START_TEST(include_red_blue_yellow_env)
Packit 0b5880
{
Packit 0b5880
    reset_executed();
Packit 0b5880
Packit 0b5880
    setenv ("CK_INCLUDE_TAGS", "Red Blue Yellow", 1);
Packit 0b5880
    srunner_run_all(sr, CK_VERBOSE);
Packit 0b5880
Packit 0b5880
    ck_assert(test_executed[RED]);
Packit 0b5880
    ck_assert(test_executed[BLUE]);
Packit 0b5880
    ck_assert(test_executed[PURPLE]);
Packit 0b5880
    ck_assert(test_executed[YELLOW]);
Packit 0b5880
    ck_assert(!test_executed[BLACK]);
Packit 0b5880
Packit 0b5880
    unsetenv ("CK_INCLUDE_TAGS");
Packit 0b5880
Packit 0b5880
} END_TEST
Packit 0b5880
Packit 0b5880
START_TEST(exclude_yellow_env)
Packit 0b5880
{
Packit 0b5880
    reset_executed();
Packit 0b5880
Packit 0b5880
    setenv ("CK_EXCLUDE_TAGS", "Yellow", 1);
Packit 0b5880
    srunner_run_all(sr, CK_VERBOSE);
Packit 0b5880
Packit 0b5880
    ck_assert(test_executed[RED]);
Packit 0b5880
    ck_assert(test_executed[BLUE]);
Packit 0b5880
    ck_assert(test_executed[PURPLE]);
Packit 0b5880
    ck_assert(!test_executed[YELLOW]);
Packit 0b5880
    ck_assert(test_executed[BLACK]);
Packit 0b5880
Packit 0b5880
    unsetenv ("CK_EXCLUDE_TAGS");
Packit 0b5880
Packit 0b5880
} END_TEST
Packit 0b5880
Packit 0b5880
START_TEST(exclude_red_env)
Packit 0b5880
{
Packit 0b5880
    reset_executed();
Packit 0b5880
Packit 0b5880
    setenv ("CK_EXCLUDE_TAGS", "Red", 1);
Packit 0b5880
    srunner_run_all(sr, CK_VERBOSE);
Packit 0b5880
Packit 0b5880
    ck_assert(!test_executed[RED]);
Packit 0b5880
    ck_assert(test_executed[BLUE]);
Packit 0b5880
    ck_assert(!test_executed[PURPLE]);
Packit 0b5880
    ck_assert(test_executed[YELLOW]);
Packit 0b5880
    ck_assert(test_executed[BLACK]);
Packit 0b5880
Packit 0b5880
    unsetenv ("CK_EXCLUDE_TAGS");
Packit 0b5880
Packit 0b5880
} END_TEST
Packit 0b5880
Packit 0b5880
START_TEST(exclude_red_blue_env)
Packit 0b5880
{
Packit 0b5880
    reset_executed();
Packit 0b5880
Packit 0b5880
    setenv ("CK_EXCLUDE_TAGS", "Red Blue", 1);
Packit 0b5880
    srunner_run_all(sr, CK_VERBOSE);
Packit 0b5880
Packit 0b5880
    ck_assert(!test_executed[RED]);
Packit 0b5880
    ck_assert(!test_executed[BLUE]);
Packit 0b5880
    ck_assert(!test_executed[PURPLE]);
Packit 0b5880
    ck_assert(test_executed[YELLOW]);
Packit 0b5880
    ck_assert(test_executed[BLACK]);
Packit 0b5880
Packit 0b5880
    unsetenv ("CK_EXCLUDE_TAGS");
Packit 0b5880
Packit 0b5880
} END_TEST
Packit 0b5880
Packit 0b5880
START_TEST(exclude_red_blue_yellow_env)
Packit 0b5880
{
Packit 0b5880
    reset_executed();
Packit 0b5880
Packit 0b5880
    setenv ("CK_EXCLUDE_TAGS", "Red Blue Yellow", 1);
Packit 0b5880
    srunner_run_all(sr, CK_VERBOSE);
Packit 0b5880
Packit 0b5880
    ck_assert(!test_executed[RED]);
Packit 0b5880
    ck_assert(!test_executed[BLUE]);
Packit 0b5880
    ck_assert(!test_executed[PURPLE]);
Packit 0b5880
    ck_assert(!test_executed[YELLOW]);
Packit 0b5880
    ck_assert(test_executed[BLACK]);
Packit 0b5880
Packit 0b5880
    unsetenv ("CK_EXCLUDE_TAGS");
Packit 0b5880
Packit 0b5880
} END_TEST
Packit 0b5880
Packit 0b5880
START_TEST(include_red_case_red_env)
Packit 0b5880
{
Packit 0b5880
    reset_executed();
Packit 0b5880
Packit 0b5880
    setenv ("CK_INCLUDE_TAGS", "Red Yellow", 1);
Packit 0b5880
    setenv ("CK_RUN_CASE", "Red", 1);
Packit 0b5880
    srunner_run_all(sr, CK_VERBOSE);
Packit 0b5880
Packit 0b5880
    ck_assert(test_executed[RED]);
Packit 0b5880
    ck_assert(!test_executed[BLUE]);
Packit 0b5880
    ck_assert(!test_executed[PURPLE]);
Packit 0b5880
    ck_assert(!test_executed[YELLOW]);
Packit 0b5880
    ck_assert(!test_executed[BLACK]);
Packit 0b5880
Packit 0b5880
    unsetenv ("CK_INCLUDE_TAGS");
Packit 0b5880
    unsetenv ("CK_RUN_CASE");
Packit 0b5880
Packit 0b5880
} END_TEST
Packit 0b5880
Packit 0b5880
START_TEST(include_red_case_blue_env)
Packit 0b5880
{
Packit 0b5880
    reset_executed();
Packit 0b5880
Packit 0b5880
    setenv ("CK_INCLUDE_TAGS", "Red Yellow", 1);
Packit 0b5880
    setenv ("CK_RUN_CASE", "Blue", 1);
Packit 0b5880
    srunner_run_all(sr, CK_VERBOSE);
Packit 0b5880
Packit 0b5880
    ck_assert(!test_executed[RED]);
Packit 0b5880
    ck_assert(!test_executed[BLUE]);
Packit 0b5880
    ck_assert(!test_executed[PURPLE]);
Packit 0b5880
    ck_assert(!test_executed[YELLOW]);
Packit 0b5880
    ck_assert(!test_executed[BLACK]);
Packit 0b5880
Packit 0b5880
    unsetenv ("CK_INCLUDE_TAGS");
Packit 0b5880
    unsetenv ("CK_RUN_CASE");
Packit 0b5880
Packit 0b5880
} END_TEST
Packit 0b5880
Packit 0b5880
START_TEST(exclude_red_case_red_env)
Packit 0b5880
{
Packit 0b5880
    reset_executed();
Packit 0b5880
Packit 0b5880
    setenv ("CK_EXCLUDE_TAGS", "Red Yellow", 1);
Packit 0b5880
    setenv ("CK_RUN_CASE", "Red", 1);
Packit 0b5880
    srunner_run_all(sr, CK_VERBOSE);
Packit 0b5880
Packit 0b5880
    ck_assert(!test_executed[RED]);
Packit 0b5880
    ck_assert(!test_executed[BLUE]);
Packit 0b5880
    ck_assert(!test_executed[PURPLE]);
Packit 0b5880
    ck_assert(!test_executed[YELLOW]);
Packit 0b5880
    ck_assert(!test_executed[BLACK]);
Packit 0b5880
Packit 0b5880
    unsetenv ("CK_EXCLUDE_TAGS");
Packit 0b5880
    unsetenv ("CK_RUN_CASE");
Packit 0b5880
Packit 0b5880
} END_TEST
Packit 0b5880
Packit 0b5880
START_TEST(exclude_red_case_blue_env)
Packit 0b5880
{
Packit 0b5880
    reset_executed();
Packit 0b5880
Packit 0b5880
    setenv ("CK_EXCLUDE_TAGS", "Red Yellow", 1);
Packit 0b5880
    setenv ("CK_RUN_CASE", "Blue", 1);
Packit 0b5880
    srunner_run_all(sr, CK_VERBOSE);
Packit 0b5880
Packit 0b5880
    ck_assert(!test_executed[RED]);
Packit 0b5880
    ck_assert(test_executed[BLUE]);
Packit 0b5880
    ck_assert(!test_executed[PURPLE]);
Packit 0b5880
    ck_assert(!test_executed[YELLOW]);
Packit 0b5880
    ck_assert(!test_executed[BLACK]);
Packit 0b5880
Packit 0b5880
    unsetenv ("CK_EXCLUDE_TAGS");
Packit 0b5880
    unsetenv ("CK_RUN_CASE");
Packit 0b5880
Packit 0b5880
} END_TEST
Packit 0b5880
Packit 0b5880
START_TEST(include_red_suite_redblue_env)
Packit 0b5880
{
Packit 0b5880
    reset_executed();
Packit 0b5880
Packit 0b5880
    setenv ("CK_INCLUDE_TAGS", "Red Yellow", 1);
Packit 0b5880
    setenv ("CK_RUN_SUITE", "RedBlue Suite", 1);
Packit 0b5880
    srunner_run_all(sr, CK_VERBOSE);
Packit 0b5880
Packit 0b5880
    ck_assert(test_executed[RED]);
Packit 0b5880
    ck_assert(!test_executed[BLUE]);
Packit 0b5880
    ck_assert(!test_executed[PURPLE]);
Packit 0b5880
    ck_assert(!test_executed[YELLOW]);
Packit 0b5880
    ck_assert(!test_executed[BLACK]);
Packit 0b5880
Packit 0b5880
    unsetenv ("CK_INCLUDE_TAGS");
Packit 0b5880
    unsetenv ("CK_RUN_SUITE");
Packit 0b5880
Packit 0b5880
} END_TEST
Packit 0b5880
Packit 0b5880
START_TEST(include_red_suite_purpleyellowblack_env)
Packit 0b5880
{
Packit 0b5880
    reset_executed();
Packit 0b5880
Packit 0b5880
    setenv ("CK_INCLUDE_TAGS", "Red Yellow", 1);
Packit 0b5880
    setenv ("CK_RUN_SUITE", "PurpleYellowBlack Suite", 1);
Packit 0b5880
    srunner_run_all(sr, CK_VERBOSE);
Packit 0b5880
Packit 0b5880
    ck_assert(!test_executed[RED]);
Packit 0b5880
    ck_assert(!test_executed[BLUE]);
Packit 0b5880
    ck_assert(test_executed[PURPLE]);
Packit 0b5880
    ck_assert(test_executed[YELLOW]);
Packit 0b5880
    ck_assert(!test_executed[BLACK]);
Packit 0b5880
Packit 0b5880
    unsetenv ("CK_INCLUDE_TAGS");
Packit 0b5880
    unsetenv ("CK_RUN_SUITE");
Packit 0b5880
Packit 0b5880
} END_TEST
Packit 0b5880
Packit 0b5880
START_TEST(exclude_red_suite_redblue_env)
Packit 0b5880
{
Packit 0b5880
    reset_executed();
Packit 0b5880
Packit 0b5880
    setenv ("CK_EXCLUDE_TAGS", "Red Yellow", 1);
Packit 0b5880
    setenv ("CK_RUN_SUITE", "RedBlue Suite", 1);
Packit 0b5880
    srunner_run_all(sr, CK_VERBOSE);
Packit 0b5880
Packit 0b5880
    ck_assert(!test_executed[RED]);
Packit 0b5880
    ck_assert(test_executed[BLUE]);
Packit 0b5880
    ck_assert(!test_executed[PURPLE]);
Packit 0b5880
    ck_assert(!test_executed[YELLOW]);
Packit 0b5880
    ck_assert(!test_executed[BLACK]);
Packit 0b5880
Packit 0b5880
    unsetenv ("CK_EXCLUDE_TAGS");
Packit 0b5880
    unsetenv ("CK_RUN_SUITE");
Packit 0b5880
Packit 0b5880
} END_TEST
Packit 0b5880
Packit 0b5880
START_TEST(exclude_red_suite_purpleyellowblack_env)
Packit 0b5880
{
Packit 0b5880
    reset_executed();
Packit 0b5880
Packit 0b5880
    setenv ("CK_EXCLUDE_TAGS", "Red Yellow", 1);
Packit 0b5880
    setenv ("CK_RUN_SUITE", "PurpleYellowBlack Suite", 1);
Packit 0b5880
    srunner_run_all(sr, CK_VERBOSE);
Packit 0b5880
Packit 0b5880
    ck_assert(!test_executed[RED]);
Packit 0b5880
    ck_assert(!test_executed[BLUE]);
Packit 0b5880
    ck_assert(!test_executed[PURPLE]);
Packit 0b5880
    ck_assert(!test_executed[YELLOW]);
Packit 0b5880
    ck_assert(test_executed[BLACK]);
Packit 0b5880
Packit 0b5880
    unsetenv ("CK_EXCLUDE_TAGS");
Packit 0b5880
    unsetenv ("CK_RUN_SUITE");
Packit 0b5880
Packit 0b5880
} END_TEST
Packit 0b5880
Packit 0b5880
Packit 0b5880
#endif /* HAVE_DECL_SETENV */
Packit 0b5880
Packit 0b5880
Packit 0b5880
START_TEST(include_red_exclude_red)
Packit 0b5880
{
Packit 0b5880
    reset_executed();
Packit 0b5880
Packit 0b5880
    srunner_run_tagged(sr, NULL, NULL, "Red", "Red", CK_VERBOSE);
Packit 0b5880
Packit 0b5880
    ck_assert(!test_executed[RED]);
Packit 0b5880
    ck_assert(!test_executed[BLUE]);
Packit 0b5880
    ck_assert(!test_executed[PURPLE]);
Packit 0b5880
    ck_assert(!test_executed[YELLOW]);
Packit 0b5880
    ck_assert(!test_executed[BLACK]);
Packit 0b5880
Packit 0b5880
} END_TEST
Packit 0b5880
Packit 0b5880
START_TEST(include_red_exclude_blue)
Packit 0b5880
{
Packit 0b5880
    reset_executed();
Packit 0b5880
Packit 0b5880
    srunner_run_tagged(sr, NULL, NULL, "Red", "Blue", CK_VERBOSE);
Packit 0b5880
Packit 0b5880
    ck_assert(test_executed[RED]);
Packit 0b5880
    ck_assert(!test_executed[BLUE]);
Packit 0b5880
    ck_assert(!test_executed[PURPLE]);
Packit 0b5880
    ck_assert(!test_executed[YELLOW]);
Packit 0b5880
    ck_assert(!test_executed[BLACK]);
Packit 0b5880
Packit 0b5880
} END_TEST
Packit 0b5880
Packit 0b5880
START_TEST(include_red_include_red)
Packit 0b5880
{
Packit 0b5880
    reset_executed();
Packit 0b5880
Packit 0b5880
    srunner_run_tagged(sr, NULL, NULL, "Red Red Red", NULL, CK_VERBOSE);
Packit 0b5880
Packit 0b5880
    ck_assert(test_executed[RED]);
Packit 0b5880
    ck_assert(!test_executed[BLUE]);
Packit 0b5880
    ck_assert(test_executed[PURPLE]);
Packit 0b5880
    ck_assert(!test_executed[YELLOW]);
Packit 0b5880
    ck_assert(!test_executed[BLACK]);
Packit 0b5880
Packit 0b5880
} END_TEST
Packit 0b5880
Packit 0b5880
START_TEST(include_w_spaces)
Packit 0b5880
{
Packit 0b5880
    reset_executed();
Packit 0b5880
Packit 0b5880
    srunner_run_tagged(sr, NULL, NULL, "  Red    Blue ", NULL, CK_VERBOSE);
Packit 0b5880
Packit 0b5880
    ck_assert(test_executed[RED]);
Packit 0b5880
    ck_assert(test_executed[BLUE]);
Packit 0b5880
    ck_assert(test_executed[PURPLE]);
Packit 0b5880
    ck_assert(!test_executed[YELLOW]);
Packit 0b5880
    ck_assert(!test_executed[BLACK]);
Packit 0b5880
Packit 0b5880
} END_TEST
Packit 0b5880
Packit 0b5880
Suite *make_tag_suite(void)
Packit 0b5880
{
Packit 0b5880
    TCase *set_get_tags, *no_filters;
Packit 0b5880
    TCase *include_filters, *exclude_filters;
Packit 0b5880
#if HAVE_DECL_SETENV
Packit 0b5880
    TCase *include_filters_env, *exclude_filters_env;
Packit 0b5880
#endif /* HAVE_DECL_SETENV */
Packit 0b5880
    TCase *include_exclude_filters, *strange_filters;
Packit 0b5880
    TCase *tag_plus_suite_env, *tag_plus_case_env;
Packit 0b5880
    Suite *s;
Packit 0b5880
Packit 0b5880
    s = suite_create("Check Tag Filtering");
Packit 0b5880
Packit 0b5880
    no_filters = tcase_create("no tag filters");
Packit 0b5880
    suite_add_tcase (s, no_filters);
Packit 0b5880
    tcase_add_test(no_filters, null_filter);
Packit 0b5880
    tcase_add_test(no_filters, include_nothing);
Packit 0b5880
    tcase_add_test(no_filters, exclude_nothing);
Packit 0b5880
    tcase_add_unchecked_fixture (no_filters,
Packit 0b5880
				 tag_test_setup,
Packit 0b5880
				 tag_test_teardown);
Packit 0b5880
Packit 0b5880
    include_filters = tcase_create("include tags");
Packit 0b5880
    suite_add_tcase (s, include_filters);
Packit 0b5880
    tcase_add_test(include_filters, include_yellow);
Packit 0b5880
    tcase_add_test(include_filters, include_red);
Packit 0b5880
    tcase_add_test(include_filters, include_red_blue);
Packit 0b5880
    tcase_add_test(include_filters, include_red_blue_yellow);
Packit 0b5880
    tcase_add_unchecked_fixture (include_filters,
Packit 0b5880
				 tag_test_setup,
Packit 0b5880
				 tag_test_teardown);
Packit 0b5880
Packit 0b5880
    exclude_filters = tcase_create("exclude tags");
Packit 0b5880
    suite_add_tcase (s, exclude_filters);
Packit 0b5880
    tcase_add_test(exclude_filters, exclude_yellow);
Packit 0b5880
    tcase_add_test(exclude_filters, exclude_red);
Packit 0b5880
    tcase_add_test(exclude_filters, exclude_red_blue);
Packit 0b5880
    tcase_add_test(exclude_filters, exclude_red_blue_yellow);
Packit 0b5880
    tcase_add_unchecked_fixture (exclude_filters,
Packit 0b5880
				 tag_test_setup,
Packit 0b5880
				 tag_test_teardown);
Packit 0b5880
Packit 0b5880
#if HAVE_DECL_SETENV
Packit 0b5880
Packit 0b5880
    include_filters_env = tcase_create("include tags via env");
Packit 0b5880
    suite_add_tcase (s, include_filters_env);
Packit 0b5880
    tcase_add_test(include_filters_env, include_yellow_env);
Packit 0b5880
    tcase_add_test(include_filters_env, include_red_env);
Packit 0b5880
    tcase_add_test(include_filters_env, include_red_blue_env);
Packit 0b5880
    tcase_add_test(include_filters_env, include_red_blue_yellow_env);
Packit 0b5880
    tcase_add_unchecked_fixture (include_filters_env,
Packit 0b5880
				 tag_test_setup,
Packit 0b5880
				 tag_test_teardown);
Packit 0b5880
Packit 0b5880
    exclude_filters_env = tcase_create("exclude tags via env");
Packit 0b5880
    suite_add_tcase (s, exclude_filters_env);
Packit 0b5880
    tcase_add_test(exclude_filters_env, exclude_yellow_env);
Packit 0b5880
    tcase_add_test(exclude_filters_env, exclude_red_env);
Packit 0b5880
    tcase_add_test(exclude_filters_env, exclude_red_blue_env);
Packit 0b5880
    tcase_add_test(exclude_filters_env, exclude_red_blue_yellow_env);
Packit 0b5880
    tcase_add_unchecked_fixture (exclude_filters_env,
Packit 0b5880
				 tag_test_setup,
Packit 0b5880
				 tag_test_teardown);
Packit 0b5880
Packit 0b5880
    tag_plus_suite_env = tcase_create("combining tag filters with suite selection");
Packit 0b5880
    suite_add_tcase (s, tag_plus_suite_env);
Packit 0b5880
    tcase_add_test(tag_plus_suite_env, include_red_suite_redblue_env);
Packit 0b5880
    tcase_add_test(tag_plus_suite_env, include_red_suite_purpleyellowblack_env);
Packit 0b5880
    tcase_add_test(tag_plus_suite_env, exclude_red_suite_redblue_env);
Packit 0b5880
    tcase_add_test(tag_plus_suite_env, exclude_red_suite_purpleyellowblack_env);
Packit 0b5880
    tcase_add_unchecked_fixture (tag_plus_suite_env,
Packit 0b5880
				 tag_test_setup,
Packit 0b5880
				 tag_test_teardown);
Packit 0b5880
Packit 0b5880
    tag_plus_case_env = tcase_create("combining tag filters with case selection");
Packit 0b5880
    suite_add_tcase (s, tag_plus_case_env);
Packit 0b5880
    tcase_add_test(tag_plus_case_env, include_red_case_red_env);
Packit 0b5880
    tcase_add_test(tag_plus_case_env, include_red_case_blue_env);
Packit 0b5880
    tcase_add_test(tag_plus_case_env, exclude_red_case_red_env);
Packit 0b5880
    tcase_add_test(tag_plus_case_env, exclude_red_case_blue_env);
Packit 0b5880
    tcase_add_unchecked_fixture (tag_plus_case_env,
Packit 0b5880
				 tag_test_setup,
Packit 0b5880
				 tag_test_teardown);
Packit 0b5880
Packit 0b5880
#endif /* HAVE_DECL_SETENV  */
Packit 0b5880
Packit 0b5880
    include_exclude_filters = tcase_create("include and exclude tags");
Packit 0b5880
    suite_add_tcase (s, include_exclude_filters);
Packit 0b5880
    tcase_add_test(include_exclude_filters, include_nothing_exclude_nothing);
Packit 0b5880
    tcase_add_test(include_exclude_filters, include_red_exclude_blue);
Packit 0b5880
    tcase_add_test(include_exclude_filters, include_red_exclude_red);
Packit 0b5880
    tcase_add_unchecked_fixture (include_exclude_filters,
Packit 0b5880
				 tag_test_setup,
Packit 0b5880
				 tag_test_teardown);
Packit 0b5880
Packit 0b5880
    strange_filters = tcase_create("strange tag filters");
Packit 0b5880
    suite_add_tcase (s, strange_filters);
Packit 0b5880
    tcase_add_test(strange_filters, include_red_include_red);
Packit 0b5880
    tcase_add_test(strange_filters, include_w_spaces);
Packit 0b5880
    tcase_add_unchecked_fixture (strange_filters,
Packit 0b5880
				 tag_test_setup,
Packit 0b5880
				 tag_test_teardown);
Packit 0b5880
Packit 0b5880
    return s;
Packit 0b5880
}