Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/tests/usr.bin/xlint tests/lint: move check-expect.lua to tes...
details: https://anonhg.NetBSD.org/src/rev/4d46433e1419
branches: trunk
changeset: 366834:4d46433e1419
user: rillig <rillig%NetBSD.org@localhost>
date: Fri Jun 17 20:31:56 2022 +0000
description:
tests/lint: move check-expect.lua to tests/lint1
It is only used for testing lint1, not for lint2 or xlint.
diffstat:
tests/usr.bin/xlint/check-expect.lua | 226 -----------------------------
tests/usr.bin/xlint/lint1/Makefile | 6 +-
tests/usr.bin/xlint/lint1/check-expect.lua | 226 +++++++++++++++++++++++++++++
3 files changed, 229 insertions(+), 229 deletions(-)
diffs (truncated from 487 to 300 lines):
diff -r 10ed83b164f4 -r 4d46433e1419 tests/usr.bin/xlint/check-expect.lua
--- a/tests/usr.bin/xlint/check-expect.lua Fri Jun 17 20:23:58 2022 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,226 +0,0 @@
-#! /usr/bin/lua
--- $NetBSD: check-expect.lua,v 1.23 2022/06/17 20:23:58 rillig Exp $
-
---[[
-
-usage: lua ./check-expect.lua *.c
-
-Check that the /* expect+-n: ... */ comments in the .c source files match the
-actual messages found in the corresponding .exp files. The .exp files are
-expected in the current working directory.
-
-The .exp files are generated on the fly during the ATF tests, see
-t_integration.sh. During development, they can be generated using
-lint1/accept.sh.
-]]
-
-
-local function test(func)
- func()
-end
-
-local function assert_equals(got, expected)
- if got ~= expected then
- assert(false, string.format("got %q, expected %q", got, expected))
- end
-end
-
-
-local had_errors = false
----@param fmt string
-function print_error(fmt, ...)
- print(fmt:format(...))
- had_errors = true
-end
-
-
-local function load_lines(fname)
- local lines = {}
-
- local f = io.open(fname, "r")
- if f == nil then return nil end
-
- for line in f:lines() do
- table.insert(lines, line)
- end
- f:close()
-
- return lines
-end
-
-
--- Load the 'expect:' comments from a C source file.
---
--- example return values:
--- {
--- ["file.c(18)"] = {"invalid argument 'a'", "invalid argument 'b'"},
--- ["file.c(23)"] = {"not a constant expression [123]"},
--- },
--- { "file.c(18)", "file.c(23)" }
-local function load_c(fname)
-
- local lines = load_lines(fname)
- if lines == nil then return nil, nil end
-
- local pp_fname = fname
- local pp_lineno = 0
- local comment_locations = {}
- local comments_by_location = {}
-
- local function add_expectation(offset, message)
- local location = ("%s(%d)"):format(pp_fname, pp_lineno + offset)
- if comments_by_location[location] == nil then
- table.insert(comment_locations, location)
- comments_by_location[location] = {}
- end
- local trimmed_msg = message:match("^%s*(.-)%s*$")
- table.insert(comments_by_location[location], trimmed_msg)
- end
-
- for phys_lineno, line in ipairs(lines) do
-
- for offset, comment in line:gmatch("/%* expect([+%-]%d+): (.-) %*/") do
- add_expectation(tonumber(offset), comment)
- end
-
- pp_lineno = pp_lineno + 1
-
- local ppl_lineno, ppl_fname = line:match("^#%s*(%d+)%s+\"([^\"]+)\"")
- if ppl_lineno ~= nil then
- if ppl_fname == fname and tonumber(ppl_lineno) ~= phys_lineno + 1 then
- print_error("error: %s:%d: preprocessor line number must be %d",
- fname, phys_lineno, phys_lineno + 1)
- end
- pp_fname = ppl_fname
- pp_lineno = ppl_lineno
- end
- end
-
- return comment_locations, comments_by_location
-end
-
-
--- Load the expected raw lint output from a .exp file.
---
--- example return value: {
--- {
--- exp_lineno = "18",
--- location = "file.c(18)",
--- message = "not a constant expression [123]",
--- }
--- }
-local function load_exp(exp_fname)
-
- local lines = load_lines(exp_fname)
- if lines == nil then return {} end
-
- local messages = {}
- for exp_lineno, line in ipairs(lines) do
- for location, message in line:gmatch("(%S+%(%d+%)): (.+)$") do
- table.insert(messages, {
- exp_lineno = exp_lineno,
- location = location,
- message = message
- })
- end
- end
-
- return messages
-end
-
-
----@param comment string
----@param pattern string
----@return boolean
-local function matches(comment, pattern)
- if comment == "" then return false end
-
- local any_prefix = pattern:sub(1, 3) == "..."
- if any_prefix then pattern = pattern:sub(4) end
- local any_suffix = pattern:sub(-3) == "..."
- if any_suffix then pattern = pattern:sub(1, -4) end
-
- if any_prefix and any_suffix then
- return comment:find(pattern, 1, true) ~= nil
- elseif any_prefix then
- return pattern ~= "" and comment:sub(-#pattern) == pattern
- elseif any_suffix then
- return comment:sub(1, #pattern) == pattern
- else
- return comment == pattern
- end
-end
-
-test(function()
- assert_equals(matches("a", "a"), true)
- assert_equals(matches("a", "b"), false)
- assert_equals(matches("a", "aaa"), false)
-
- assert_equals(matches("abc", "a..."), true)
- assert_equals(matches("abc", "c..."), false)
-
- assert_equals(matches("abc", "...c"), true)
- assert_equals(matches("abc", "...a"), false)
-
- assert_equals(matches("abc123xyz", "...a..."), true)
- assert_equals(matches("abc123xyz", "...b..."), true)
- assert_equals(matches("abc123xyz", "...c..."), true)
- assert_equals(matches("abc123xyz", "...1..."), true)
- assert_equals(matches("abc123xyz", "...2..."), true)
- assert_equals(matches("abc123xyz", "...3..."), true)
- assert_equals(matches("abc123xyz", "...x..."), true)
- assert_equals(matches("abc123xyz", "...y..."), true)
- assert_equals(matches("abc123xyz", "...z..."), true)
- assert_equals(matches("pattern", "...pattern..."), true)
-end)
-
-
-local function check_test(c_fname)
- local exp_fname = c_fname:gsub("%.c$", ".exp"):gsub(".+/", "")
-
- local c_comment_locations, c_comments_by_location = load_c(c_fname)
- if c_comment_locations == nil then return end
-
- local exp_messages = load_exp(exp_fname) or {}
-
- for _, exp_message in ipairs(exp_messages) do
- local c_comments = c_comments_by_location[exp_message.location] or {}
- local expected_message =
- exp_message.message:gsub("/%*", "**"):gsub("%*/", "**")
-
- local found = false
- for i, c_comment in ipairs(c_comments) do
- if c_comment ~= "" and matches(expected_message, c_comment) then
- c_comments[i] = ""
- found = true
- break
- end
- end
-
- if not found then
- print_error("error: %s: missing /* expect+1: %s */",
- exp_message.location, expected_message)
- end
- end
-
- for _, c_comment_location in ipairs(c_comment_locations) do
- for _, c_comment in ipairs(c_comments_by_location[c_comment_location]) do
- if c_comment ~= "" then
- print_error(
- "error: %s: declared message \"%s\" is not in the actual output",
- c_comment_location, c_comment)
- end
- end
- end
-end
-
-
-local function main(args)
- for _, name in ipairs(args) do
- check_test(name)
- end
-end
-
-
-main(arg)
-os.exit(not had_errors)
diff -r 10ed83b164f4 -r 4d46433e1419 tests/usr.bin/xlint/lint1/Makefile
--- a/tests/usr.bin/xlint/lint1/Makefile Fri Jun 17 20:23:58 2022 +0000
+++ b/tests/usr.bin/xlint/lint1/Makefile Fri Jun 17 20:31:56 2022 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.127 2022/06/17 20:23:58 rillig Exp $
+# $NetBSD: Makefile,v 1.128 2022/06/17 20:31:56 rillig Exp $
NOMAN= # defined
MAX_MESSAGE= 349 # see lint1/err.c
@@ -171,7 +171,7 @@
FILES+= stmt_goto.c
FILES+= stmt_if.c
-FILES+= ../check-expect.lua
+FILES+= check-expect.lua
MSG_IDS= ${:U0 ${:U:${:Urange=${MAX_MESSAGE}}}:C,^.$,0&,:C,^..$,0&,}
MSG_FILES= ${MSG_IDS:%=msg_%.c}
@@ -185,7 +185,7 @@
cvs update "$$mi"; \
fmt="./usr/tests/usr.bin/xlint/lint1/%s\ttests-usr.bin-tests\tcompattestfile,atf\n"; \
cat "$$mi" > "$$mi.tmp"; \
- printf "$$fmt" ${FILES:T} >> "$$mi.tmp"; \
+ printf "$$fmt" ${FILES} >> "$$mi.tmp"; \
distrib/sets/fmt-list "$$mi.tmp"; \
mv "$$mi.tmp" "$$mi"; \
cvs diff "$$mi" || true
diff -r 10ed83b164f4 -r 4d46433e1419 tests/usr.bin/xlint/lint1/check-expect.lua
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/usr.bin/xlint/lint1/check-expect.lua Fri Jun 17 20:31:56 2022 +0000
@@ -0,0 +1,226 @@
+#! /usr/bin/lua
+-- $NetBSD: check-expect.lua,v 1.1 2022/06/17 20:31:56 rillig Exp $
+
+--[[
+
+usage: lua ./check-expect.lua *.c
+
+Check that the /* expect+-n: ... */ comments in the .c source files match the
+actual messages found in the corresponding .exp files. The .exp files are
+expected in the current working directory.
+
+The .exp files are generated on the fly during the ATF tests, see
+t_integration.sh. During development, they can be generated using
+lint1/accept.sh.
+]]
+
+
+local function test(func)
+ func()
+end
+
+local function assert_equals(got, expected)
+ if got ~= expected then
+ assert(false, string.format("got %q, expected %q", got, expected))
+ end
+end
+
+
+local had_errors = false
+---@param fmt string
+function print_error(fmt, ...)
+ print(fmt:format(...))
+ had_errors = true
+end
+
+
+local function load_lines(fname)
+ local lines = {}
+
Home |
Main Index |
Thread Index |
Old Index