package starlog import ( "bytes" "io" "testing" ) func TestNewProductionConfig(t *testing.T) { cfg := NewProductionConfig() if cfg.Level != LvInfo { t.Fatalf("production level should be info, got %d", cfg.Level) } if cfg.ShowColor { t.Fatalf("production should disable color") } if cfg.ShowStd { t.Fatalf("production should disable direct std output") } if cfg.Formatter == nil { t.Fatalf("production should set formatter") } if _, ok := cfg.Formatter.(*JSONFormatter); !ok { t.Fatalf("production formatter should be JSONFormatter") } } func TestNewDevelopmentConfig(t *testing.T) { cfg := NewDevelopmentConfig() if cfg.Level != LvDebug { t.Fatalf("development level should be debug, got %d", cfg.Level) } if !cfg.ShowColor || !cfg.OnlyColorLevel { t.Fatalf("development should enable level-only color mode") } if !cfg.ShowFuncName || !cfg.ShowOriginFile || !cfg.ShowFlag { t.Fatalf("development should keep rich source fields") } if cfg.Formatter != nil { t.Fatalf("development preset should use built-in text rendering") } } func TestApplyProductionConfigPreservesWriterAndName(t *testing.T) { var buf bytes.Buffer logger := NewStarlog(&buf) logger.SetName("svc") logger.ApplyProductionConfig() cfg := logger.GetConfig() if cfg.Name != "svc" { t.Fatalf("apply production should preserve logger name") } if cfg.Writer == nil { t.Fatalf("apply production should preserve writer") } if _, ok := cfg.Formatter.(*JSONFormatter); !ok { t.Fatalf("apply production should set JSON formatter") } } func TestPresetConstructors(t *testing.T) { prod := NewProduction(io.Discard) if prod == nil { t.Fatalf("NewProduction should return logger") } prodCfg := prod.GetConfig() if prodCfg.Level != LvInfo { t.Fatalf("NewProduction should apply production config") } if prodCfg.Writer == nil { t.Fatalf("NewProduction should keep output writer") } dev := NewDevelopment(io.Discard) if dev == nil { t.Fatalf("NewDevelopment should return logger") } devCfg := dev.GetConfig() if devCfg.Level != LvDebug { t.Fatalf("NewDevelopment should apply development config") } }