Files
rtsp-simple-server/internal/linters/docsorder/docsorder_test.go
T
2026-04-04 17:01:15 +02:00

92 lines
1.8 KiB
Go

//go:build enable_linters
package docsorder
import (
"fmt"
"os"
"regexp"
"sort"
"strconv"
"strings"
"testing"
"github.com/stretchr/testify/require"
)
const repoPath = "../../.."
var numberedFileRe = regexp.MustCompile(`^(\d+)-`)
type numberedFile struct {
name string
numStr string
num int
}
func TestDocsOrder(t *testing.T) {
entries, err := os.ReadDir(repoPath + "/docs")
require.NoError(t, err)
for _, entry := range entries {
if !entry.IsDir() {
continue
}
dirPath := fmt.Sprintf("%s/docs/%s", repoPath, entry.Name())
files, err := os.ReadDir(dirPath)
require.NoError(t, err)
var numbered []numberedFile
for _, f := range files {
if f.IsDir() {
continue
}
m := numberedFileRe.FindStringSubmatch(f.Name())
if m == nil {
continue
}
num, err2 := strconv.Atoi(m[1])
if err2 != nil {
t.Errorf("docs/%s/%s: cannot parse numeric prefix %q", entry.Name(), f.Name(), m[1])
continue
}
numbered = append(numbered, numberedFile{
name: f.Name(),
numStr: m[1],
num: num,
})
}
if len(numbered) == 0 {
continue
}
sort.Slice(numbered, func(i, j int) bool {
return numbered[i].num < numbered[j].num
})
usesPadding := len(numbered) >= 10
for i, nf := range numbered {
expected := i + 1
if nf.num != expected {
t.Errorf("docs/%s/%s: expected number %d, got %d", entry.Name(), nf.name, expected, nf.num)
}
if usesPadding {
expectedStr := fmt.Sprintf("%02d", expected)
if nf.numStr != expectedStr {
t.Errorf("docs/%s/%s: expected zero-padded prefix %q, got %q", entry.Name(), nf.name, expectedStr, nf.numStr)
}
} else {
if strings.HasPrefix(nf.numStr, "0") {
t.Errorf("docs/%s/%s: unexpected zero-padded prefix %q (directory has fewer than 10 files)", entry.Name(), nf.name, nf.numStr)
}
}
}
}
}