aboutsummaryrefslogtreecommitdiffstats
path: root/internal/vlog
diff options
context:
space:
mode:
authorAdam Mathes <adam@adammathes.com>2026-02-14 08:58:38 -0800
committerAdam Mathes <adam@adammathes.com>2026-02-14 08:58:38 -0800
commite3c379d069ffa9661561d25cdbf2f5894a2f8ee8 (patch)
tree24d0e9f5610dd9c8f873c5b78e6bc1c88d32840a /internal/vlog
parent4b06155fbde91a1bef6361ef36efb28789861928 (diff)
downloadneko-e3c379d069ffa9661561d25cdbf2f5894a2f8ee8.tar.gz
neko-e3c379d069ffa9661561d25cdbf2f5894a2f8ee8.tar.bz2
neko-e3c379d069ffa9661561d25cdbf2f5894a2f8ee8.zip
Refactor: project structure, implement dependency injection, and align v2 UI with v1
Diffstat (limited to 'internal/vlog')
-rw-r--r--internal/vlog/vlog.go25
-rw-r--r--internal/vlog/vlog_test.go78
2 files changed, 103 insertions, 0 deletions
diff --git a/internal/vlog/vlog.go b/internal/vlog/vlog.go
new file mode 100644
index 0000000..ab48478
--- /dev/null
+++ b/internal/vlog/vlog.go
@@ -0,0 +1,25 @@
+// vlog -- verbose logger -- wraps log functions and only performs them if "verbose"
+package vlog
+
+import (
+ "fmt"
+)
+
+var VERBOSE bool
+
+func init() {
+ VERBOSE=false
+}
+
+func Printf(format string, v ...interface{}) {
+ if VERBOSE {
+ fmt.Printf(format, v...)
+ }
+}
+
+func Println(v ...interface{}) {
+ if VERBOSE {
+ fmt.Println(v...)
+ }
+}
+
diff --git a/internal/vlog/vlog_test.go b/internal/vlog/vlog_test.go
new file mode 100644
index 0000000..9def0f0
--- /dev/null
+++ b/internal/vlog/vlog_test.go
@@ -0,0 +1,78 @@
+package vlog
+
+import (
+ "bytes"
+ "fmt"
+ "os"
+ "testing"
+)
+
+func captureStdout(f func()) string {
+ old := os.Stdout
+ r, w, _ := os.Pipe()
+ os.Stdout = w
+
+ f()
+
+ w.Close()
+ os.Stdout = old
+
+ var buf bytes.Buffer
+ buf.ReadFrom(r)
+ return buf.String()
+}
+
+func TestPrintfVerbose(t *testing.T) {
+ VERBOSE = true
+ defer func() { VERBOSE = false }()
+
+ output := captureStdout(func() {
+ Printf("hello %s", "world")
+ })
+ expected := fmt.Sprintf("hello %s", "world")
+ if output != expected {
+ t.Errorf("expected %q, got %q", expected, output)
+ }
+}
+
+func TestPrintfSilent(t *testing.T) {
+ VERBOSE = false
+
+ output := captureStdout(func() {
+ Printf("hello %s", "world")
+ })
+ if output != "" {
+ t.Errorf("expected empty output when not verbose, got %q", output)
+ }
+}
+
+func TestPrintlnVerbose(t *testing.T) {
+ VERBOSE = true
+ defer func() { VERBOSE = false }()
+
+ output := captureStdout(func() {
+ Println("hello", "world")
+ })
+ expected := fmt.Sprintln("hello", "world")
+ if output != expected {
+ t.Errorf("expected %q, got %q", expected, output)
+ }
+}
+
+func TestPrintlnSilent(t *testing.T) {
+ VERBOSE = false
+
+ output := captureStdout(func() {
+ Println("hello", "world")
+ })
+ if output != "" {
+ t.Errorf("expected empty output when not verbose, got %q", output)
+ }
+}
+
+func TestInit(t *testing.T) {
+ // init() sets VERBOSE to false
+ if VERBOSE != false {
+ t.Error("VERBOSE should default to false")
+ }
+}