Files
yay/pkg/settings/lua/log_test.go
Jo 15057c8dab misc(ci): add modernize linter and update versioning (#2870)
* add modernize linter

* lint unused

* update imports

* ignore agent info
2026-06-17 21:09:53 +02:00

103 lines
2.6 KiB
Go

package lua
import (
"bytes"
"strings"
"testing"
"github.com/stretchr/testify/require"
"github.com/Jguer/yay/v13/pkg/text"
)
func withColorDisabled(t *testing.T) {
t.Helper()
original := text.UseColor
text.UseColor = false
t.Cleanup(func() { text.UseColor = original })
}
func newLogTestEngine(t *testing.T, debug bool) (*Engine, *bytes.Buffer, *bytes.Buffer) {
t.Helper()
withColorDisabled(t)
var stdout, stderr bytes.Buffer
logger := text.NewLogger(&stdout, &stderr, strings.NewReader(""), debug, "lua")
engine := NewWithLogger(logger)
t.Cleanup(engine.Close)
return engine, &stdout, &stderr
}
func TestLogInfoWarnAndErrorUseLoggerStreams(t *testing.T) {
engine, stdout, stderr := newLogTestEngine(t, false)
require.NoError(t, engine.L.DoString(`
yay.log.info("info message")
yay.log.warn("warn message")
yay.log.error("error message")
`))
require.Equal(t, "==> info message\n -> warn message\n", stdout.String())
require.Equal(t, " -> error message\n", stderr.String())
}
func TestLogDebugUsesLoggerDebugGate(t *testing.T) {
engine, stdout, stderr := newLogTestEngine(t, false)
require.NoError(t, engine.L.DoString(`yay.log.debug("hidden")`))
require.Empty(t, stdout.String())
require.Empty(t, stderr.String())
debugLogger := text.NewLogger(stdout, stderr, strings.NewReader(""), true, "lua")
engine.SetLogger(debugLogger)
require.NoError(t, engine.L.DoString(`yay.log.debug("visible")`))
require.Equal(t, "[DEBUG:lua] visible\n", stdout.String())
require.Empty(t, stderr.String())
}
func TestLogStringifiesLuaArgumentsInOrder(t *testing.T) {
engine, stdout, stderr := newLogTestEngine(t, false)
require.NoError(t, engine.L.DoString(`
local value = setmetatable({}, {
__tostring = function()
return "custom"
end,
})
yay.log.info("pkg", 12, true, nil, value)
`))
require.Equal(t, "==> pkg 12 true nil custom\n", stdout.String())
require.Empty(t, stderr.String())
}
func TestLogWithoutLoggerDoesNotPanic(t *testing.T) {
engine := New()
t.Cleanup(engine.Close)
require.NoError(t, engine.L.DoString(`
yay.log.debug("debug")
yay.log.info("info")
yay.log.warn("warn")
yay.log.error("error")
`))
}
func TestLoadUsesLuaChildLogger(t *testing.T) {
withColorDisabled(t)
path := writeLuaFile(t, `yay.log.debug("loaded")`)
var stdout, stderr bytes.Buffer
logger := text.NewLogger(&stdout, &stderr, strings.NewReader(""), true, "fallback")
engine, err := Load(logger, path, &testConfig{})
require.NoError(t, err)
t.Cleanup(engine.Close)
require.Equal(t, "[DEBUG:lua] loaded\n", stdout.String())
require.Empty(t, stderr.String())
}