docs(flows): DoD obligatorio con user-facing surface + abrir issues 0100-0103 (taxonomia, frontmatter migration, dev_console, work dashboard)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -2,11 +2,66 @@ package browser
|
||||
|
||||
import (
|
||||
"os"
|
||||
"regexp"
|
||||
"strings"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
// TestIsWSL2 verifica que isWSL2 detecta el entorno correctamente leyendo /proc/version.
|
||||
func TestIsWSL2(t *testing.T) {
|
||||
b, err := os.ReadFile("/proc/version")
|
||||
if err != nil {
|
||||
t.Skip("/proc/version no disponible (no es Linux)")
|
||||
}
|
||||
lower := strings.ToLower(string(b))
|
||||
expectWSL2 := strings.Contains(lower, "microsoft") || strings.Contains(lower, "wsl")
|
||||
got := isWSL2()
|
||||
if got != expectWSL2 {
|
||||
t.Errorf("isWSL2() = %v, want %v (contenido: %q)", got, expectWSL2, string(b)[:min(120, len(b))])
|
||||
}
|
||||
t.Logf("isWSL2() = %v (entorno: %s)", got, string(b)[:min(80, len(b))])
|
||||
}
|
||||
|
||||
// TestTranslateUserDataDirForWindows verifica la traduccion de rutas Linux a Windows.
|
||||
// Solo corre si wslpath esta disponible (WSL2).
|
||||
func TestTranslateUserDataDirForWindows(t *testing.T) {
|
||||
if !isWSL2() {
|
||||
t.Skip("solo aplica en WSL2")
|
||||
}
|
||||
result, err := translateUserDataDirForWindows("/tmp/test-chrome-profile")
|
||||
if err != nil {
|
||||
t.Fatalf("translateUserDataDirForWindows: %v", err)
|
||||
}
|
||||
// El resultado debe contener backslash (ruta Windows) o empezar con [A-Z]:
|
||||
reWin := regexp.MustCompile(`(?i)^[A-Z]:\\|\\`)
|
||||
if !reWin.MatchString(result) {
|
||||
t.Errorf("resultado no parece ruta Windows: %q", result)
|
||||
}
|
||||
t.Logf("translateUserDataDirForWindows('/tmp/test-chrome-profile') = %q", result)
|
||||
}
|
||||
|
||||
// TestIsWindowsExe verifica que isWindowsExe detecta ejecutables .exe.
|
||||
func TestIsWindowsExe(t *testing.T) {
|
||||
cases := []struct {
|
||||
path string
|
||||
want bool
|
||||
}{
|
||||
{"/mnt/c/Program Files/Google/Chrome/Application/chrome.exe", true},
|
||||
{"chrome.exe", true},
|
||||
{"CHROME.EXE", true},
|
||||
{"/usr/bin/google-chrome", false},
|
||||
{"chromium", false},
|
||||
{"/mnt/c/Windows/System32/cmd.exe", true},
|
||||
}
|
||||
for _, c := range cases {
|
||||
got := isWindowsExe(c.path)
|
||||
if got != c.want {
|
||||
t.Errorf("isWindowsExe(%q) = %v, want %v", c.path, got, c.want)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// TestFindChrome verifica que el ejecutable de Chrome es localizable.
|
||||
func TestFindChrome(t *testing.T) {
|
||||
path, err := findChrome()
|
||||
@@ -20,9 +75,10 @@ func TestFindChrome(t *testing.T) {
|
||||
}
|
||||
|
||||
// TestChromeLaunchAndConnect lanza Chrome, conecta CDP, navega a about:blank y cierra.
|
||||
// Requiere CHROME_E2E=1 (integración real con Chrome).
|
||||
func TestChromeLaunchAndConnect(t *testing.T) {
|
||||
if testing.Short() {
|
||||
t.Skip("skip: requiere Chrome real (use -short=false para ejecutar)")
|
||||
if os.Getenv("CHROME_E2E") != "1" {
|
||||
t.Skip("skip: requiere CHROME_E2E=1 y Chrome real")
|
||||
}
|
||||
|
||||
// Verificar que Chrome esta disponible
|
||||
@@ -67,9 +123,10 @@ func TestChromeLaunchAndConnect(t *testing.T) {
|
||||
}
|
||||
|
||||
// TestCdpEvaluate ejecuta JS simple en Chrome y verifica el resultado.
|
||||
// Requiere CHROME_E2E=1.
|
||||
func TestCdpEvaluate(t *testing.T) {
|
||||
if testing.Short() {
|
||||
t.Skip("skip: requiere Chrome real (use -short=false para ejecutar)")
|
||||
if os.Getenv("CHROME_E2E") != "1" {
|
||||
t.Skip("skip: requiere CHROME_E2E=1 y Chrome real")
|
||||
}
|
||||
|
||||
if _, err := findChrome(); err != nil {
|
||||
@@ -130,9 +187,10 @@ func TestCdpEvaluate(t *testing.T) {
|
||||
}
|
||||
|
||||
// TestCdpGetHTML obtiene el HTML de about:blank y verifica que contiene elementos basicos.
|
||||
// Requiere CHROME_E2E=1.
|
||||
func TestCdpGetHTML(t *testing.T) {
|
||||
if testing.Short() {
|
||||
t.Skip("skip: requiere Chrome real (use -short=false para ejecutar)")
|
||||
if os.Getenv("CHROME_E2E") != "1" {
|
||||
t.Skip("skip: requiere CHROME_E2E=1 y Chrome real")
|
||||
}
|
||||
|
||||
if _, err := findChrome(); err != nil {
|
||||
@@ -178,9 +236,10 @@ func TestCdpGetHTML(t *testing.T) {
|
||||
}
|
||||
|
||||
// TestCdpScreenshot toma un screenshot de about:blank y verifica que se crea el archivo PNG.
|
||||
// Requiere CHROME_E2E=1.
|
||||
func TestCdpScreenshot(t *testing.T) {
|
||||
if testing.Short() {
|
||||
t.Skip("skip: requiere Chrome real (use -short=false para ejecutar)")
|
||||
if os.Getenv("CHROME_E2E") != "1" {
|
||||
t.Skip("skip: requiere CHROME_E2E=1 y Chrome real")
|
||||
}
|
||||
|
||||
if _, err := findChrome(); err != nil {
|
||||
|
||||
Reference in New Issue
Block a user