From 754f362da077b06420ab8350dfb62bd2d8d89d75 Mon Sep 17 00:00:00 2001 From: Lukasz Kasprzak Date: Mon, 14 Sep 2026 20:13:11 +0200 Subject: plan 8: enum values read from source must all be handled --- cmd/krino/enum_test.go | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 cmd/krino/enum_test.go (limited to 'cmd') diff --git a/cmd/krino/enum_test.go b/cmd/krino/enum_test.go new file mode 100644 index 0000000..144fec6 --- /dev/null +++ b/cmd/krino/enum_test.go @@ -0,0 +1,35 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +package main + +import ( + "slices" + "strings" + "testing" + + "krino/internal/enumtest" + "krino/internal/scan" +) + +// TestEverySkipReasonIsSummarised: every scan.Reason is counted in the +// "not acted on" line and reads as words. 0.0.4 added TooBig and only a +// hand check caught it missing from skipReasonOrder. scan.Reason is an iota +// block from 0, so the i-th constant is the value i. +func TestEverySkipReasonIsSummarised(t *testing.T) { + reasons, err := enumtest.Names("../../internal/scan/scan.go", "Reason") + if err != nil { + t.Fatal(err) + } + for i, name := range reasons { + r := scan.Reason(i) + if !slices.Contains(skipReasonOrder, r) { + t.Errorf("scan.%s is missing from skipReasonOrder", name) + } + if s := r.String(); s == "" || strings.ContainsAny(s, "0123456789") { + t.Errorf("scan.%s reads %q", name, s) + } + } + if len(skipReasonOrder) != len(reasons) { + t.Errorf("skipReasonOrder has %d reasons, scan declares %d", len(skipReasonOrder), len(reasons)) + } +} -- cgit v1.3