Stufe 4c (#764): Kommentare in C#, WebUI-Skripten, CSS und HTML auf Englisch
Rund 2.600 Kommentarblöcke in 310 C#-Dateien übersetzt, Begründungen vollständig erhalten: blockweise gleiche Anzahl wie vorher, kein Block unter 60 % seiner Länge, der Code außerhalb der Kommentare per Tokenizer byte-identisch geprüft. Zitate deutscher Oberflächentexte und Testdaten bleiben deutsch. WebUI: Kommentare in JS/CSS/HTML übersetzt, JSDoc-@param an die in 4b umbenannten Parameter angeglichen. Dabei behoben: - 4b hatte "tag" (HTML-Tag) als deutsches "Tag" gelesen und zu "dayValue" gemacht (makeElement, svg, Tagesübersicht) - zurück auf tag/day. - Aufgaben "InProgress" bekamen die Plakettenart "laufend", für die es nie eine CSS-Klasse gab - jetzt "success" wie laufende Instanzen. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
da4ceac7d5
commit
837a634a22
@@ -5,12 +5,12 @@ using Shouldly;
|
||||
namespace ClawdDotNet.Manager.Tests;
|
||||
|
||||
/// <summary>
|
||||
/// Das Register aller Instanzen einer Maschine (#528, Stufe 3).
|
||||
/// The registry of all instances of a machine (#528, stage 3).
|
||||
///
|
||||
/// <para>Zwei Zusagen stehen hier über allem, und beide folgen aus E-M6: <b>Beim Start
|
||||
/// wird übernommen, nicht gestartet</b>, und <b>beim Beenden wird nichts beendet.</b>
|
||||
/// Fällt der Manager aus, laufen die Instanzen weiter — er darf nicht der Einzelpunkt
|
||||
/// sein, gegen den dieses ganze Vorhaben gebaut wird.</para>
|
||||
/// <para>Two promises stand above everything here, and both follow from E-M6: <b>at startup
|
||||
/// things are taken over, not started</b>, and <b>on exit nothing is ended.</b>
|
||||
/// If the manager fails, the instances keep running — it must not be the single point
|
||||
/// this whole project is built against.</para>
|
||||
/// </summary>
|
||||
public sealed class InstanceRegistryTests : IAsyncDisposable
|
||||
{
|
||||
@@ -34,8 +34,8 @@ public sealed class InstanceRegistryTests : IAsyncDisposable
|
||||
public InstanceRegistryTests()
|
||||
{
|
||||
_verzeichnisse = new InstanceDirectoryManager(Path.Combine(_root, "Instances"));
|
||||
// Der Socket antwortet nur, wenn wirklich ein Prozess laeuft - genau wie im
|
||||
// Betrieb (siehe FakeChannel.Launcher).
|
||||
// The socket only answers if a process is really running - exactly as in
|
||||
// operation (see FakeChannel.Launcher).
|
||||
_kanal.Launcher = _launcher;
|
||||
}
|
||||
|
||||
@@ -52,10 +52,10 @@ public sealed class InstanceRegistryTests : IAsyncDisposable
|
||||
{
|
||||
await Task.CompletedTask;
|
||||
try { Directory.Delete(_root, recursive: true); }
|
||||
catch { /* Ein liegengebliebener Testordner faerbt keinen Lauf rot. */ }
|
||||
catch { /* A leftover test folder does not turn a run red. */ }
|
||||
}
|
||||
|
||||
// ─── Was da ist ───
|
||||
// ─── What is there ───
|
||||
|
||||
[Fact]
|
||||
public async Task Ein_leeres_Instanzenverzeichnis_ergibt_ein_leeres_Register()
|
||||
@@ -80,8 +80,8 @@ public sealed class InstanceRegistryTests : IAsyncDisposable
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ein Manager, der beim Hochkommen alles startet, was er findet, würde nach einem
|
||||
/// Neustart der Maschine auch das starten, was jemand mit Absicht angehalten hat.
|
||||
/// A manager that starts everything it finds when coming up would, after a
|
||||
/// restart of the machine, also start what someone stopped on purpose.
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public async Task Beim_Nachsehen_wird_nichts_von_selbst_gestartet()
|
||||
@@ -110,7 +110,7 @@ public sealed class InstanceRegistryTests : IAsyncDisposable
|
||||
register.Instances.ShouldBeEmpty();
|
||||
}
|
||||
|
||||
// ─── Anlegen, starten, anhalten ───
|
||||
// ─── Create, start, stop ───
|
||||
|
||||
[Fact]
|
||||
public async Task Eine_neu_angelegte_Instanz_ist_sofort_im_Register_und_laeuft_nicht()
|
||||
@@ -138,7 +138,7 @@ public sealed class InstanceRegistryTests : IAsyncDisposable
|
||||
(await register.StartAsync(pfad)).ShouldBeTrue();
|
||||
register.Instances.Single().Condition.ShouldBe(InstanceCondition.Running);
|
||||
|
||||
// Die Instanz endet auf die Bitte hin.
|
||||
// The instance ends upon the request.
|
||||
var prozess = _launcher.Last!;
|
||||
_kanal.OnStopRequest = _ => { _kanal.Answer = null; prozess.Exit(0); };
|
||||
|
||||
@@ -162,15 +162,15 @@ public sealed class InstanceRegistryTests : IAsyncDisposable
|
||||
{
|
||||
string pfad;
|
||||
|
||||
// Erster Manager legt zwei an und startet nur eine.
|
||||
// The first manager creates two and starts only one.
|
||||
await using (var erster = Register())
|
||||
{
|
||||
pfad = erster.Create("Alpha");
|
||||
erster.Create("Beta");
|
||||
|
||||
// Nur Alpha antwortet. Eine Auskunft, die fuer jedes Verzeichnis dieselbe
|
||||
// Instanz nennt, wuerde hier gruen werden und im Betrieb zwei Instanzen
|
||||
// verwechseln.
|
||||
// Only Alpha answers. Information that names the same instance for every
|
||||
// directory would turn green here and in operation mix up two
|
||||
// instances.
|
||||
_kanal.AnswerFor[Path.GetFullPath(pfad)] =
|
||||
new InstanceIdentity("i-1", "Alpha", "0.1.2");
|
||||
|
||||
@@ -179,7 +179,7 @@ public sealed class InstanceRegistryTests : IAsyncDisposable
|
||||
|
||||
_ereignisse.Clear();
|
||||
|
||||
// Zweiter Manager, derselbe Rechner.
|
||||
// Second manager, the same machine.
|
||||
await using var zweiter = Register();
|
||||
await zweiter.RefreshAsync();
|
||||
|
||||
@@ -187,17 +187,17 @@ public sealed class InstanceRegistryTests : IAsyncDisposable
|
||||
alpha.Condition.ShouldBe(InstanceCondition.Running);
|
||||
alpha.ProcessId.ShouldBe(_launcher.Last!.Id);
|
||||
|
||||
// Beta antwortet nicht und bleibt aus - sie wird nicht mit hochgezogen.
|
||||
// Beta does not answer and stays off - it is not pulled up along with it.
|
||||
zweiter.Instances.Single(i => i.Name == "Beta").Condition
|
||||
.ShouldBe(InstanceCondition.Stopped);
|
||||
|
||||
// Uebernehmen ist kein Starten.
|
||||
// Taking over is not starting.
|
||||
_launcher.Starts.ShouldBe(1);
|
||||
_ereignisse.ShouldBeEmpty();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Wer den Manager schließt, will den Manager schließen — nicht seine Instanzen.
|
||||
/// Whoever closes the manager wants to close the manager — not its instances.
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public async Task Das_Beenden_des_Managers_beendet_keine_Instanz()
|
||||
@@ -214,12 +214,12 @@ public sealed class InstanceRegistryTests : IAsyncDisposable
|
||||
_launcher.Last!.WasKilled.ShouldBeFalse();
|
||||
_launcher.Last.HasExited.ShouldBeFalse();
|
||||
|
||||
// Und die Zustandsdatei bleibt liegen - sie ist der Hinweis fuer den naechsten.
|
||||
// And the state file stays behind - it is the hint for the next one.
|
||||
InstanceStateStore.Read(pfad).ShouldNotBeNull();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Die eine Ausnahme: Ein Lizenzwiderruf ist kein Ausfall, sondern ein Urteil.
|
||||
/// The one exception: a license revocation is not an outage, but a verdict.
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public async Task Bei_einem_Grund_der_alle_betrifft_werden_alle_angehalten()
|
||||
@@ -239,7 +239,7 @@ public sealed class InstanceRegistryTests : IAsyncDisposable
|
||||
_kanal.StopRequests.ShouldBe(1);
|
||||
}
|
||||
|
||||
// ─── Vorkommnisse ───
|
||||
// ─── Occurrences ───
|
||||
|
||||
[Fact]
|
||||
public async Task Vorkommnisse_einzelner_Instanzen_kommen_beim_Register_an()
|
||||
|
||||
Reference in New Issue
Block a user