Files
Loki/internal/jean/chat_tools_write_test.go
T
nathaninline 7b0a5dbf75 v0.6.9 : l'IA écrit enfin les fichiers directement
Nouvel outil write : créer ou réécrire un fichier passe par le disque, plus
par le shell. Sous Windows le shell est cmd.exe et son quoting cassait tout
script contenant des guillemets imbriqués (echo, python -c, base64) ; l'IA
bouclait sans jamais y arriver. Signalé par Arnaud Hocquelet.

L'outil bash annonce désormais le vrai shell de la plateforme (cmd.exe sous
Windows) au lieu de dire bash partout, pour que le modèle arrête de générer
la syntaxe d'un autre shell.

Interface : le contenu d'une écriture se remplit ligne à ligne en direct dans
la bulle (diffusé à la ligne et pas au token, pour ne pas saturer le rendu
mobile), et les compteurs +N -N passent sur l'étiquette pour rester visibles
une fois la bulle repliée.
2026-08-03 15:12:18 +02:00

51 lines
1.3 KiB
Go

package jean
import (
"os"
"path/filepath"
"strings"
"testing"
)
// Le contenu doit arriver sur le disque à l'octet près : c'est tout l'intérêt de
// l'outil write (les guillemets imbriqués d'un script Python ne survivaient pas
// au passage par le shell).
func TestFileWriteVerbatim(t *testing.T) {
dir := t.TempDir()
path := filepath.Join(dir, "sub", "kpi.py")
content := "import sqlite3\nq = \"SELECT * FROM t WHERE n = 'a'\"\nprint(q)\n"
res := fileWrite(path, content)
if !strings.HasPrefix(res, "[ok]") {
t.Fatalf("write a échoué: %s", res)
}
got, err := os.ReadFile(path)
if err != nil {
t.Fatalf("relecture: %v", err)
}
if string(got) != content {
t.Fatalf("contenu altéré:\n%q\nattendu:\n%q", got, content)
}
}
func TestFileWriteOverwrites(t *testing.T) {
path := filepath.Join(t.TempDir(), "a.txt")
if res := fileWrite(path, "ancien"); !strings.HasPrefix(res, "[ok]") {
t.Fatalf("premier write: %s", res)
}
res := fileWrite(path, "nouveau")
if !strings.Contains(res, "réécrit") {
t.Fatalf("attendu « réécrit », obtenu: %s", res)
}
got, _ := os.ReadFile(path)
if string(got) != "nouveau" {
t.Fatalf("contenu = %q", got)
}
}
func TestFileWriteRejectsEmptyPath(t *testing.T) {
if res := fileWrite(" ", "x"); !strings.HasPrefix(res, "[erreur]") {
t.Fatalf("attendu une erreur, obtenu: %s", res)
}
}