1240116Smarcel# Copyright (c) 2007 The NetBSD Foundation, Inc.
2240116Smarcel# All rights reserved.
3240116Smarcel#
4240116Smarcel# Redistribution and use in source and binary forms, with or without
5240116Smarcel# modification, are permitted provided that the following conditions
6240116Smarcel# are met:
7240116Smarcel# 1. Redistributions of source code must retain the above copyright
8240116Smarcel#    notice, this list of conditions and the following disclaimer.
9240116Smarcel# 2. Redistributions in binary form must reproduce the above copyright
10240116Smarcel#    notice, this list of conditions and the following disclaimer in the
11240116Smarcel#    documentation and/or other materials provided with the distribution.
12240116Smarcel#
13240116Smarcel# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND
14240116Smarcel# CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
15240116Smarcel# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
16240116Smarcel# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
17240116Smarcel# IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY
18240116Smarcel# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19240116Smarcel# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
20240116Smarcel# GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
21240116Smarcel# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
22240116Smarcel# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
23240116Smarcel# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
24240116Smarcel# IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25240116Smarcel
26240116Smarcelcheck_result() {
27240116Smarcel    file="${1}"; shift
28240116Smarcel
29240116Smarcel    atf_check -s eq:0 -o match:"${*}" -e empty cat "${file}"
30240116Smarcel    rm "${file}"
31240116Smarcel}
32240116Smarcel
33240116Smarcelatf_test_case expect_pass
34240116Smarcelexpect_pass_body() {
35240116Smarcel    for h in $(get_helpers); do
36240116Smarcel        atf_check -s eq:0 -e ignore "${h}" -r result expect_pass_and_pass
37240116Smarcel        check_result result "passed"
38240116Smarcel
39240116Smarcel        atf_check -s eq:1 -e ignore "${h}" -r result \
40240116Smarcel            expect_pass_but_fail_requirement
41240116Smarcel        check_result result "failed: Some reason"
42240116Smarcel
43240116Smarcel        # atf-sh does not support non-fatal failures yet; skip checks for
44240116Smarcel        # such conditions.
45240116Smarcel        case "${h}" in *sh_helpers*) continue ;; esac
46240116Smarcel
47240116Smarcel        atf_check -s eq:1 -o empty -e match:"Some reason" \
48240116Smarcel            "${h}" -r result expect_pass_but_fail_check
49240116Smarcel        check_result result "failed: 1 checks failed"
50240116Smarcel    done
51240116Smarcel}
52240116Smarcel
53240116Smarcelatf_test_case expect_fail
54240116Smarcelexpect_fail_body() {
55240116Smarcel    for h in $(get_helpers c_helpers cpp_helpers); do
56240116Smarcel        atf_check -s eq:0 "${h}" -r result expect_fail_and_fail_requirement
57240116Smarcel        check_result result "expected_failure: Fail reason: The failure"
58240116Smarcel
59240116Smarcel        atf_check -s eq:1 -e match:"Expected check failure: Fail first: abc" \
60240116Smarcel            -e not-match:"And fail again" "${h}" -r result expect_fail_but_pass
61240116Smarcel        check_result result "failed: .*expecting a failure"
62240116Smarcel
63240116Smarcel        # atf-sh does not support non-fatal failures yet; skip checks for
64240116Smarcel        # such conditions.
65240116Smarcel        case "${h}" in *sh_helpers*) continue ;; esac
66240116Smarcel
67240116Smarcel        atf_check -s eq:0 -e match:"Expected check failure: Fail first: abc" \
68240116Smarcel            -e match:"Expected check failure: And fail again: def" \
69240116Smarcel            "${h}" -r result expect_fail_and_fail_check
70240116Smarcel        check_result result "expected_failure: And fail again: 2 checks" \
71240116Smarcel            "failed as expected"
72240116Smarcel    done
73240116Smarcel
74240116Smarcel    # atf-sh does not support non-fatal failures yet; skip checks for
75240116Smarcel    # such conditions.
76240116Smarcel    for h in $(get_helpers sh_helpers); do
77240116Smarcel        atf_check -s eq:0 -e ignore "${h}" -r result \
78240116Smarcel            expect_fail_and_fail_requirement
79240116Smarcel        check_result result "expected_failure: Fail reason: The failure"
80240116Smarcel
81240116Smarcel        atf_check -s eq:1 -e ignore "${h}" -r result expect_fail_but_pass
82240116Smarcel        check_result result "failed: .*expecting a failure"
83240116Smarcel    done
84240116Smarcel}
85240116Smarcel
86240116Smarcelatf_test_case expect_exit
87240116Smarcelexpect_exit_body() {
88240116Smarcel    for h in $(get_helpers); do
89240116Smarcel        atf_check -s eq:0 -e ignore "${h}" -r result expect_exit_any_and_exit
90240116Smarcel        check_result result "expected_exit: Call will exit"
91240116Smarcel
92240116Smarcel        atf_check -s eq:123 -e ignore "${h}" -r result expect_exit_code_and_exit
93240116Smarcel        check_result result "expected_exit\(123\): Call will exit"
94240116Smarcel
95240116Smarcel        atf_check -s eq:1 -e ignore "${h}" -r result expect_exit_but_pass
96240116Smarcel        check_result result "failed: .*expected to exit"
97240116Smarcel    done
98240116Smarcel}
99240116Smarcel
100240116Smarcelatf_test_case expect_signal
101240116Smarcelexpect_signal_body() {
102240116Smarcel    for h in $(get_helpers); do
103240116Smarcel        atf_check -s signal:9 -e ignore "${h}" -r result \
104240116Smarcel            expect_signal_any_and_signal
105240116Smarcel        check_result result "expected_signal: Call will signal"
106240116Smarcel
107240116Smarcel        atf_check -s signal:hup -e ignore "${h}" -r result \
108240116Smarcel            expect_signal_no_and_signal
109240116Smarcel        check_result result "expected_signal\(1\): Call will signal"
110240116Smarcel
111240116Smarcel        atf_check -s eq:1 -e ignore "${h}" -r result \
112240116Smarcel            expect_signal_but_pass
113240116Smarcel        check_result result "failed: .*termination signal"
114240116Smarcel    done
115240116Smarcel}
116240116Smarcel
117240116Smarcelatf_test_case expect_death
118240116Smarcelexpect_death_body() {
119240116Smarcel    for h in $(get_helpers); do
120240116Smarcel        atf_check -s eq:123 -e ignore "${h}" -r result expect_death_and_exit
121240116Smarcel        check_result result "expected_death: Exit case"
122240116Smarcel
123240116Smarcel        atf_check -s signal:kill -e ignore "${h}" -r result \
124240116Smarcel            expect_death_and_signal
125240116Smarcel        check_result result "expected_death: Signal case"
126240116Smarcel
127240116Smarcel        atf_check -s eq:1 -e ignore "${h}" -r result expect_death_but_pass
128240116Smarcel        check_result result "failed: .*terminate abruptly"
129240116Smarcel    done
130240116Smarcel}
131240116Smarcel
132240116Smarcelatf_test_case expect_timeout
133240116Smarcelexpect_timeout_body() {
134240116Smarcel    for h in $(get_helpers); do
135240116Smarcel        atf_check -s eq:1 -e ignore "${h}" -r result expect_timeout_but_pass
136240116Smarcel        check_result result "failed: Test case was expected to hang but it" \
137240116Smarcel            "continued execution"
138240116Smarcel    done
139240116Smarcel}
140240116Smarcel
141240116Smarcelatf_init_test_cases()
142240116Smarcel{
143240116Smarcel    atf_add_test_case expect_pass
144240116Smarcel    atf_add_test_case expect_fail
145240116Smarcel    atf_add_test_case expect_exit
146240116Smarcel    atf_add_test_case expect_signal
147240116Smarcel    atf_add_test_case expect_death
148240116Smarcel    atf_add_test_case expect_timeout
149240116Smarcel}
150240116Smarcel
151240116Smarcel# vim: syntax=sh:expandtab:shiftwidth=4:softtabstop=4
152