Stufe 4c (#764): Bezeichner auf Englisch - Typen, Methoden, Felder, Parameter, Locals, Testnamen

Mit Roslyn umbenannt (Verweise folgen, Zeichenketten bleiben unberuehrt).
Nicht umbenannt, weil gespeichert oder ueber die API gebunden (Stufe 4e):
Properties, Record-Parameter, Enum-Member sowie die Parameter der
Endpunkt-Handler (Routen-/Query-Bindung ueber den Namen). Die JSON-Felder
anonymer Objekte bleiben ausdruecklich benannt (JsonFilter: pfad).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Richard
2026-10-04 13:18:43 +02:00
co-authored by Claude Opus 5.5
parent 837a634a22
commit 77062facc9
190 changed files with 4813 additions and 4813 deletions
@@ -33,82 +33,82 @@ public sealed class MemoryToolTests : IDisposable
catch { /* Cleaning up is secondary */ }
}
private Task<ToolResult> Aufruf(object eingabe) => _tool.ExecuteAsync(
JsonSerializer.SerializeToElement(eingabe),
private Task<ToolResult> Call(object input) => _tool.ExecuteAsync(
JsonSerializer.SerializeToElement(input),
new AgentToolContext("nachrichten", "inst", new Dictionary<string, object?>(), new NullStateStore(),
NullLogger.Instance, CancellationToken.None, Memory: _repository),
CancellationToken.None);
private static string Linkliste(int anzahl)
=> string.Join("\n", Enumerable.Range(1, anzahl).Select(i => $"https://www.tagesschau.de/inland/meldung-{i:D4}.html"));
private static string LinkList(int count)
=> string.Join("\n", Enumerable.Range(1, count).Select(i => $"https://www.tagesschau.de/inland/meldung-{i:D4}.html"));
[Fact]
public async Task Ein_einzelner_uebergrosser_Eintrag_wird_gekuerzt_statt_weggelassen()
public async Task A_single_oversized_entry_is_shortened_instead_of_dropped()
{
var liste = Linkliste(250); // ~11,500 characters
(await Aufruf(new { action = "remember", subject = "gemeldet", content = liste })).Success.ShouldBeTrue();
var list = LinkList(250); // ~11,500 characters
(await Call(new { action = "remember", subject = "gemeldet", content = list })).Success.ShouldBeTrue();
var abruf = await Aufruf(new { action = "recall", query = "gemeldet" });
var fetch = await Call(new { action = "recall", query = "gemeldet" });
abruf.Success.ShouldBeTrue();
abruf.Content.ShouldContain("meldung-0001.html", customMessage: "der Anfang bleibt sichtbar");
abruf.Content.ShouldContain("meldung-0250.html", customMessage: "das Ende - die neuesten Links - bleibt sichtbar");
abruf.Content.ShouldContain("truncated");
abruf.Content.ShouldNotContain("more results omitted");
abruf.Content.Length.ShouldBeLessThanOrEqualTo(8_000);
fetch.Success.ShouldBeTrue();
fetch.Content.ShouldContain("meldung-0001.html", customMessage: "der Anfang bleibt sichtbar");
fetch.Content.ShouldContain("meldung-0250.html", customMessage: "das Ende - die neuesten Links - bleibt sichtbar");
fetch.Content.ShouldContain("truncated");
fetch.Content.ShouldNotContain("more results omitted");
fetch.Content.Length.ShouldBeLessThanOrEqualTo(8_000);
}
[Fact]
public async Task Ist_der_neueste_von_mehreren_Eintraegen_zu_gross_bleibt_er_teilweise_sichtbar()
public async Task If_the_newest_of_several_entries_is_too_large_it_stays_partly_visible()
{
await Aufruf(new { action = "remember", subject = "gemeldet", content = Linkliste(100) });
await Call(new { action = "remember", subject = "gemeldet", content = LinkList(100) });
await Task.Delay(20);
await Aufruf(new { action = "remember", subject = "gemeldet", content = Linkliste(220) });
await Call(new { action = "remember", subject = "gemeldet", content = LinkList(220) });
var abruf = await Aufruf(new { action = "recall", query = "gemeldet" });
var fetch = await Call(new { action = "recall", query = "gemeldet" });
abruf.Content.ShouldContain("meldung-0220.html");
abruf.Content.ShouldContain("1 more results omitted");
abruf.Content.Length.ShouldBeLessThanOrEqualTo(8_000);
fetch.Content.ShouldContain("meldung-0220.html");
fetch.Content.ShouldContain("1 more results omitted");
fetch.Content.Length.ShouldBeLessThanOrEqualTo(8_000);
}
[Fact]
public async Task Was_passt_bleibt_ungekuerzt()
public async Task What_fits_stays_unshortened()
{
await Aufruf(new { action = "remember", subject = "gemeldet", content = Linkliste(20) });
await Call(new { action = "remember", subject = "gemeldet", content = LinkList(20) });
var abruf = await Aufruf(new { action = "recall", query = "gemeldet" });
var fetch = await Call(new { action = "recall", query = "gemeldet" });
abruf.Content.ShouldNotContain("truncated");
abruf.Content.ShouldContain("meldung-0010.html");
fetch.Content.ShouldNotContain("truncated");
fetch.Content.ShouldContain("meldung-0010.html");
}
[Fact]
public async Task Erneutes_Merken_ohne_Schluessel_unter_demselben_Betreff_weist_auf_key_hin()
public async Task Remembering_again_without_key_under_the_same_subject_points_to_key()
{
var erster = await Aufruf(new { action = "remember", subject = "gemeldet", content = Linkliste(3) });
var zweiter = await Aufruf(new { action = "remember", subject = "gemeldet", content = Linkliste(5) });
var firstOne = await Call(new { action = "remember", subject = "gemeldet", content = LinkList(3) });
var secondOne = await Call(new { action = "remember", subject = "gemeldet", content = LinkList(5) });
erster.Content.ShouldNotContain("Note:");
zweiter.Content.ShouldContain("2 entries without a key");
zweiter.Content.ShouldContain("key");
firstOne.Content.ShouldNotContain("Note:");
secondOne.Content.ShouldContain("2 entries without a key");
secondOne.Content.ShouldContain("key");
}
[Fact]
public async Task Mit_Schluessel_wird_fortgeschrieben_und_nicht_gewarnt()
public async Task With_key_it_is_updated_and_not_warned()
{
await Aufruf(new { action = "remember", subject = "gemeldet", key = "gemeldete-links", content = Linkliste(3) });
var zweiter = await Aufruf(new { action = "remember", subject = "gemeldet", key = "gemeldete-links", content = Linkliste(5) });
await Call(new { action = "remember", subject = "gemeldet", key = "gemeldete-links", content = LinkList(3) });
var secondOne = await Call(new { action = "remember", subject = "gemeldet", key = "gemeldete-links", content = LinkList(5) });
zweiter.Content.ShouldNotContain("Note:");
secondOne.Content.ShouldNotContain("Note:");
(await _repository.CountAsync(MemoryScope.Agent, "nachrichten", CancellationToken.None)).ShouldBe(1);
}
[Fact]
public async Task Ein_Eintrag_nahe_der_Abrufgrenze_wird_beim_Merken_angemahnt()
public async Task An_entry_near_the_recall_limit_is_flagged_when_remembering()
{
var ergebnis = await Aufruf(new { action = "remember", subject = "gemeldet", key = "links", content = Linkliste(120) });
var result = await Call(new { action = "remember", subject = "gemeldet", key = "links", content = LinkList(120) });
ergebnis.Content.ShouldContain("characters long");
result.Content.ShouldContain("characters long");
}
}