mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-12 01:37:06 +02:00
Repris d'AJEAN 0.16.0 (chat_diff.go et son test, repris tels quels : le fichier n'avait pas bougé chez nous depuis la 0.13.5). - Un fichier de 500 lignes écrit par l'agent affichait « +500 » pendant la frappe puis retombait à « +120 » : le diff envoyé à l'UI est plafonné à 120 lignes, et l'UI recomptait sur la version tronquée. lineDiff et addedDiff rendent désormais les VRAIS totaux, calculés avant la coupe, et ils voyagent dans le journal (added/removed) — donc survivent au refresh. Repli sur l'ancien décompte pour les conversations d'avant. - Une retouche d'une ligne dans un bloc de plus de 400 lignes s'affichait en remplacement complet (le LCS n'y était pas tenté). Les lignes communes en tête et en queue sont écartées d'abord : on voit le vrai changement, avec trois lignes de contexte, et il n'est plus repoussé hors de la fenêtre. - Un contenu terminé par un saut de ligne ne compte plus une ligne de trop, côté serveur comme dans la bulle en cours de frappe (bodyLineCount). Le vérificateur du mode Code (code_verify.go) journalise les mêmes champs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
69 lines
1.9 KiB
Go
69 lines
1.9 KiB
Go
package loki
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func numbered(n int, suffix string) string {
|
|
var b strings.Builder
|
|
for i := 1; i <= n; i++ {
|
|
b.WriteString("ligne " + itoa(i) + suffix + "\n")
|
|
}
|
|
return b.String()
|
|
}
|
|
|
|
// Un fichier de 500 lignes : +500, même si l'UI n'en reçoit que 120.
|
|
func TestAddedDiffCountsBeyondCap(t *testing.T) {
|
|
lines, added := addedDiff(numbered(500, ""))
|
|
if added != 500 {
|
|
t.Fatalf("added = %d, attendu 500", added)
|
|
}
|
|
if len(lines) > diffMaxShown+1 {
|
|
t.Fatalf("%d lignes envoyées, plafond %d", len(lines), diffMaxShown)
|
|
}
|
|
}
|
|
|
|
// Le saut de ligne final ne compte pas pour une ligne.
|
|
func TestAddedDiffTrailingNewline(t *testing.T) {
|
|
if _, n := addedDiff("a\nb\n"); n != 2 {
|
|
t.Fatalf("n = %d, attendu 2", n)
|
|
}
|
|
if _, n := addedDiff("a\nb"); n != 2 {
|
|
t.Fatalf("n = %d, attendu 2", n)
|
|
}
|
|
}
|
|
|
|
// Une ligne changée au milieu d'un gros bloc : +1 -1, et le changement est
|
|
// bien dans les lignes affichées (pas noyé sous le contexte).
|
|
func TestLineDiffSmallChangeInBigBlock(t *testing.T) {
|
|
old := numbered(800, "")
|
|
neu := strings.Replace(old, "ligne 600\n", "ligne 600 modifiée\n", 1)
|
|
lines, add, del := lineDiff(old, neu)
|
|
if add != 1 || del != 1 {
|
|
t.Fatalf("+%d -%d, attendu +1 -1", add, del)
|
|
}
|
|
var sawAdd, sawDel bool
|
|
for _, l := range lines {
|
|
sawAdd = sawAdd || (l.Op == "+" && l.Text == "ligne 600 modifiée")
|
|
sawDel = sawDel || (l.Op == "-" && l.Text == "ligne 600")
|
|
}
|
|
if !sawAdd || !sawDel {
|
|
t.Fatalf("le changement n'est pas dans le diff affiché : %v", lines)
|
|
}
|
|
if len(lines) > 2*diffContext+4 {
|
|
t.Fatalf("trop de contexte : %d lignes", len(lines))
|
|
}
|
|
}
|
|
|
|
func TestLineDiffCountsAreExact(t *testing.T) {
|
|
_, add, del := lineDiff("a\nb\nc\n", "a\nx\ny\nc\n")
|
|
if add != 2 || del != 1 {
|
|
t.Fatalf("+%d -%d, attendu +2 -1", add, del)
|
|
}
|
|
_, add, del = lineDiff(numbered(300, ""), numbered(300, " bis"))
|
|
if add != 300 || del != 300 {
|
|
t.Fatalf("+%d -%d, attendu +300 -300", add, del)
|
|
}
|
|
}
|