xref: /netbsd-src/tests/usr.bin/xlint/lint1/t_usage.sh (revision a8016b51bcf5204ff836e46c2432dc27e5b12586)
1*a8016b51Srillig# $NetBSD: t_usage.sh,v 1.27 2024/12/08 17:12:01 rillig Exp $
21d3cf26eSrillig#
31d3cf26eSrillig# Copyright (c) 2023 The NetBSD Foundation, Inc.
41d3cf26eSrillig# All rights reserved.
51d3cf26eSrillig#
61d3cf26eSrillig# Redistribution and use in source and binary forms, with or without
71d3cf26eSrillig# modification, are permitted provided that the following conditions
81d3cf26eSrillig# are met:
91d3cf26eSrillig# 1. Redistributions of source code must retain the above copyright
101d3cf26eSrillig#    notice, this list of conditions and the following disclaimer.
111d3cf26eSrillig# 2. Redistributions in binary form must reproduce the above copyright
121d3cf26eSrillig#    notice, this list of conditions and the following disclaimer in the
131d3cf26eSrillig#    documentation and/or other materials provided with the distribution.
141d3cf26eSrillig#
151d3cf26eSrillig# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
161d3cf26eSrillig# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
171d3cf26eSrillig# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
181d3cf26eSrillig# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
191d3cf26eSrillig# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
201d3cf26eSrillig# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
211d3cf26eSrillig# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
221d3cf26eSrillig# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
231d3cf26eSrillig# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
241d3cf26eSrillig# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
251d3cf26eSrillig# POSSIBILITY OF SUCH DAMAGE.
261d3cf26eSrillig#
271d3cf26eSrillig
281d3cf26eSrillig: "${lint1:=/usr/libexec/lint1}"
291d3cf26eSrillig
301d3cf26eSrillig
3186d9dbedSrilligatf_test_case 'suppress_messages'
321d3cf26eSrilligsuppress_messages_body()
331d3cf26eSrillig{
341d3cf26eSrillig	printf 'typedef int dummy;\n' > code.c
351d3cf26eSrillig
361d3cf26eSrillig	# Message IDs are 0-based.
371d3cf26eSrillig	atf_check \
381d3cf26eSrillig	    "$lint1" -X 0 code.c /dev/null
391d3cf26eSrillig
401d3cf26eSrillig	# The largest known message.
411d3cf26eSrillig	atf_check \
42*a8016b51Srillig	    "$lint1" -X 385 code.c /dev/null
431d3cf26eSrillig
441d3cf26eSrillig	# Larger than the largest known message.
451d3cf26eSrillig	atf_check \
461d3cf26eSrillig	    -s 'exit:1' \
47*a8016b51Srillig	    -e "inline:lint1: invalid message ID '386'\n" \
48*a8016b51Srillig	    "$lint1" -X 386 code.c /dev/null
491d3cf26eSrillig
50f0ae73e1Srillig	# Whitespace is not allowed before a message ID.
511d3cf26eSrillig	atf_check \
52f0ae73e1Srillig	    -s 'exit:1' \
53f0ae73e1Srillig	    -e "inline:lint1: invalid message ID ' 1'\n" \
541d3cf26eSrillig	    "$lint1" -X ' 1' code.c /dev/null
551d3cf26eSrillig
561d3cf26eSrillig	# Whitespace is not allowed after a message ID.
571d3cf26eSrillig	atf_check \
581d3cf26eSrillig	    -s 'exit:1' \
59f0ae73e1Srillig	    -e "inline:lint1: invalid message ID '1 '\n" \
601d3cf26eSrillig	    "$lint1" -X '1 ' code.c /dev/null
611d3cf26eSrillig
621d3cf26eSrillig	# Multiple message IDs can be comma-separated.
631d3cf26eSrillig	atf_check \
641d3cf26eSrillig	    "$lint1" -X '1,2,3,4' code.c /dev/null
651d3cf26eSrillig
66f0ae73e1Srillig	# Whitespace is not allowed after a comma.
671d3cf26eSrillig	atf_check \
68f0ae73e1Srillig	    -s 'exit:1' \
69f0ae73e1Srillig	    -e "inline:lint1: invalid message ID ' 2'\n" \
701d3cf26eSrillig	    "$lint1" -X '1, 2, 3, 4' code.c /dev/null
711d3cf26eSrillig
72f0ae73e1Srillig	# Trailing commas are not allowed.
731d3cf26eSrillig	atf_check \
74f0ae73e1Srillig	    -s 'exit:1' \
75f0ae73e1Srillig	    -e "inline:lint1: invalid message ID ''\n" \
761d3cf26eSrillig	    "$lint1" -X '1,,,,,,,' code.c /dev/null
771d3cf26eSrillig}
781d3cf26eSrillig
7986d9dbedSrilligatf_test_case 'enable_queries'
801d3cf26eSrilligenable_queries_body()
811d3cf26eSrillig{
821d3cf26eSrillig	printf 'typedef int dummy;\n' > code.c
831d3cf26eSrillig
841d3cf26eSrillig	# Query IDs are 1-based.
851d3cf26eSrillig	atf_check \
861d3cf26eSrillig	    -s 'exit:1' \
871d3cf26eSrillig	    -e "inline:lint1: invalid query ID '0'\n" \
881d3cf26eSrillig	    "$lint1" -q 0 code.c /dev/null
891d3cf26eSrillig
901d3cf26eSrillig	# The largest known query.
911d3cf26eSrillig	atf_check \
92b2ad51d9Srillig	    "$lint1" -q 24 code.c /dev/null
931d3cf26eSrillig
941d3cf26eSrillig	# Larger than the largest known query.
951d3cf26eSrillig	atf_check \
961d3cf26eSrillig	    -s 'exit:1' \
97b2ad51d9Srillig	    -e "inline:lint1: invalid query ID '25'\n" \
98b2ad51d9Srillig	    "$lint1" -q 25 code.c /dev/null
991d3cf26eSrillig
1001d3cf26eSrillig	# Whitespace is not allowed before a query ID.
1011d3cf26eSrillig	atf_check \
1021d3cf26eSrillig	    -s 'exit:1' \
1031d3cf26eSrillig	    -e "inline:lint1: invalid query ID ' 1'\n" \
1041d3cf26eSrillig	    "$lint1" -q ' 1' code.c /dev/null
1051d3cf26eSrillig
1061d3cf26eSrillig	# Whitespace is not allowed after a query ID.
1071d3cf26eSrillig	atf_check \
1081d3cf26eSrillig	    -s 'exit:1' \
1091d3cf26eSrillig	    -e "inline:lint1: invalid query ID '1 '\n" \
1101d3cf26eSrillig	    "$lint1" -q '1 ' code.c /dev/null
1111d3cf26eSrillig
1121d3cf26eSrillig	# Multiple query IDs can be comma-separated.
1131d3cf26eSrillig	atf_check \
1141d3cf26eSrillig	    "$lint1" -q '1,2,3,4' code.c /dev/null
1151d3cf26eSrillig
1161d3cf26eSrillig	# Whitespace is not allowed after a comma.
1171d3cf26eSrillig	atf_check \
1181d3cf26eSrillig	    -s 'exit:1' \
1191d3cf26eSrillig	    -e "inline:lint1: invalid query ID ' 2'\n" \
1201d3cf26eSrillig	    "$lint1" -q '1, 2, 3, 4' code.c /dev/null
1211d3cf26eSrillig
1221d3cf26eSrillig	# Trailing commas are not allowed.
1231d3cf26eSrillig	atf_check \
1241d3cf26eSrillig	    -s 'exit:1' \
1251d3cf26eSrillig	    -e "inline:lint1: invalid query ID ''\n" \
1261d3cf26eSrillig	    "$lint1" -q '1,,,,,,,' code.c /dev/null
1271d3cf26eSrillig}
1281d3cf26eSrillig
1291d3cf26eSrilligatf_init_test_cases()
1301d3cf26eSrillig{
1311d3cf26eSrillig	atf_add_test_case 'suppress_messages'
1321d3cf26eSrillig	atf_add_test_case 'enable_queries'
1331d3cf26eSrillig}
134