8742cb25be
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
56 lines
1.5 KiB
Go
56 lines
1.5 KiB
Go
package browser
|
|
|
|
import (
|
|
"sync"
|
|
"testing"
|
|
)
|
|
|
|
// TestCdpHandleDialog_nilConn cubre la precondición sin Chrome.
|
|
func TestCdpHandleDialog_nilConn(t *testing.T) {
|
|
_, _, err := CdpHandleDialog(nil, true, "")
|
|
if err == nil {
|
|
t.Fatal("esperaba error con conexion nula")
|
|
}
|
|
}
|
|
|
|
// TestDialogLog cubre el núcleo puro del registro de diálogos: contar, recordar
|
|
// el último, y la seguridad concurrente del mutex. No requiere Chrome.
|
|
func TestDialogLog(t *testing.T) {
|
|
t.Run("golden: cuenta y recuerda el ultimo", func(t *testing.T) {
|
|
l := &DialogLog{}
|
|
l.record("alert", "hola")
|
|
l.record("confirm", "¿seguro?")
|
|
count, lastType, lastMsg := l.Snapshot()
|
|
if count != 2 {
|
|
t.Errorf("count = %d, esperaba 2", count)
|
|
}
|
|
if lastType != "confirm" || lastMsg != "¿seguro?" {
|
|
t.Errorf("last = (%q,%q), esperaba (confirm, ¿seguro?)", lastType, lastMsg)
|
|
}
|
|
})
|
|
|
|
t.Run("edge: log vacio", func(t *testing.T) {
|
|
l := &DialogLog{}
|
|
count, lastType, lastMsg := l.Snapshot()
|
|
if count != 0 || lastType != "" || lastMsg != "" {
|
|
t.Errorf("log vacio = (%d,%q,%q), esperaba (0,\"\",\"\")", count, lastType, lastMsg)
|
|
}
|
|
})
|
|
|
|
t.Run("concurrencia: 100 records desde N goroutines no pierde cuentas", func(t *testing.T) {
|
|
l := &DialogLog{}
|
|
var wg sync.WaitGroup
|
|
for i := 0; i < 100; i++ {
|
|
wg.Add(1)
|
|
go func() {
|
|
defer wg.Done()
|
|
l.record("alert", "x")
|
|
}()
|
|
}
|
|
wg.Wait()
|
|
if count, _, _ := l.Snapshot(); count != 100 {
|
|
t.Errorf("count = %d, esperaba 100 (sin perder por race)", count)
|
|
}
|
|
})
|
|
}
|