From 1ae3898f1bf4b2c4d0bdb7e44f17d9757b60079a Mon Sep 17 00:00:00 2001 From: "Jason A. Donenfeld" Date: Fri, 7 May 2021 12:56:10 +0200 Subject: [PATCH] main: check that code is formatted in unit test Signed-off-by: Jason A. Donenfeld --- Makefile | 2 +- format_test.go | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 format_test.go diff --git a/Makefile b/Makefile index 223766ba9..c86ffa32b 100644 --- a/Makefile +++ b/Makefile @@ -10,7 +10,7 @@ MAKEFLAGS += --no-print-directory generate-version-and-build: @export GIT_CEILING_DIRECTORIES="$(realpath $(CURDIR)/..)" && \ tag="$$(git describe --dirty 2>/dev/null)" && \ - ver="$$(printf 'package main\nconst Version = "%s"\n' "$$tag")" && \ + ver="$$(printf 'package main\n\nconst Version = "%s"\n' "$$tag")" && \ [ "$$(cat version.go 2>/dev/null)" != "$$ver" ] && \ echo "$$ver" > version.go && \ git update-index --assume-unchanged version.go || true diff --git a/format_test.go b/format_test.go new file mode 100644 index 000000000..14081aa7f --- /dev/null +++ b/format_test.go @@ -0,0 +1,64 @@ +/* SPDX-License-Identifier: MIT + * + * Copyright (C) 2021 WireGuard LLC. All Rights Reserved. + */ +package main + +import ( + "bytes" + "go/format" + "io/fs" + "os" + "path/filepath" + "runtime" + "sync" + "testing" +) + +func TestFormatting(t *testing.T) { + _, caller, _, ok := runtime.Caller(0) + if !ok { + t.Fatalf("unable to determine source location") + } + dir := filepath.Dir(caller) + if _, err := os.Stat(caller); err != nil { + wd, err := os.Getwd() + if err != nil { + t.Fatalf("unable to get working directory: %v", wd) + } + caller = filepath.Join(wd, filepath.Base(caller)) + if _, err := os.Stat(caller); err != nil { + t.Fatalf("unable to determine source location") + } + dir = filepath.Dir(caller) + } + var wg sync.WaitGroup + filepath.WalkDir(dir, func(path string, d fs.DirEntry, err error) error { + if err != nil { + t.Errorf("unable to walk %s: %v", path, err) + return nil + } + if d.IsDir() || filepath.Ext(path) != ".go" { + return nil + } + wg.Add(1) + go func(path string) { + defer wg.Done() + src, err := os.ReadFile(path) + if err != nil { + t.Errorf("unable to read %s: %v", path, err) + return + } + formatted, err := format.Source(src) + if err != nil { + t.Errorf("unable to format %s: %v", path, err) + return + } + if !bytes.Equal(src, formatted) { + t.Errorf("unformatted code: %s", path) + } + }(path) + return nil + }) + wg.Wait() +}