forked from Katenary/katenary
feat(logger): Add a Fatal logger
This commit is contained in:
@@ -1,6 +1,11 @@
|
||||
// Package logger provides simple logging functions with icons and colors.
|
||||
package logger
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
)
|
||||
|
||||
// Icon is a unicode icon
|
||||
type Icon string
|
||||
|
||||
@@ -49,3 +54,26 @@ func Failure(msg ...any) {
|
||||
func Log(icon Icon, msg ...any) {
|
||||
message("", icon, msg...)
|
||||
}
|
||||
|
||||
func fatal(red string, icon Icon, msg ...any) {
|
||||
fmt.Print(icon, " ", red)
|
||||
fmt.Print(msg...)
|
||||
fmt.Println(reset)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
func fatalf(red string, icon Icon, format string, msg ...any) {
|
||||
fatal(red, icon, fmt.Sprintf(format, msg...))
|
||||
}
|
||||
|
||||
// Fatal prints a fatal error message and exits with code 1.
|
||||
func Fatal(msg ...any) {
|
||||
red := "\033[38;5;196m"
|
||||
fatal(red, IconFailure, msg...)
|
||||
}
|
||||
|
||||
// Fatalf prints a fatal error message with formatting and exits with code 1.
|
||||
func Fatalf(format string, msg ...any) {
|
||||
red := "\033[38;5;196m"
|
||||
fatalf(red, IconFailure, format, msg...)
|
||||
}
|
||||
|
||||
79
internal/logger/logger_test.go
Normal file
79
internal/logger/logger_test.go
Normal file
@@ -0,0 +1,79 @@
|
||||
package logger
|
||||
|
||||
import (
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestIcons(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
got Icon
|
||||
expected Icon
|
||||
}{
|
||||
{"IconSuccess", IconSuccess, "✅"},
|
||||
{"IconFailure", IconFailure, "❌"},
|
||||
{"IconWarning", IconWarning, "❕"},
|
||||
{"IconNote", IconNote, "📝"},
|
||||
{"IconWorld", IconWorld, "🌐"},
|
||||
{"IconPlug", IconPlug, "🔌"},
|
||||
{"IconPackage", IconPackage, "📦"},
|
||||
{"IconCabinet", IconCabinet, "🗄️"},
|
||||
{"IconInfo", IconInfo, "🔵"},
|
||||
{"IconSecret", IconSecret, "🔒"},
|
||||
{"IconConfig", IconConfig, "🔧"},
|
||||
{"IconDependency", IconDependency, "🔗"},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
if tt.got != tt.expected {
|
||||
t.Errorf("got %q, want %q", tt.got, tt.expected)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestInfo(t *testing.T) {
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
t.Errorf("Info panicked: %v", r)
|
||||
}
|
||||
}()
|
||||
Info("test message")
|
||||
}
|
||||
|
||||
func TestWarn(t *testing.T) {
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
t.Errorf("Warn panicked: %v", r)
|
||||
}
|
||||
}()
|
||||
Warn("test warning")
|
||||
}
|
||||
|
||||
func TestSuccess(t *testing.T) {
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
t.Errorf("Success panicked: %v", r)
|
||||
}
|
||||
}()
|
||||
Success("test success")
|
||||
}
|
||||
|
||||
func TestFailure(t *testing.T) {
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
t.Errorf("Failure panicked: %v", r)
|
||||
}
|
||||
}()
|
||||
Failure("test failure")
|
||||
}
|
||||
|
||||
func TestLog(t *testing.T) {
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
t.Errorf("Log panicked: %v", r)
|
||||
}
|
||||
}()
|
||||
Log(IconInfo, "test log")
|
||||
}
|
||||
Reference in New Issue
Block a user