fix(site-runtime): TraceCapturingLogger rejects double-wrapping; ScriptLogger clip keeps surrogate pairs (Task 4 review)
This commit is contained in:
@@ -112,6 +112,32 @@ public class ScriptLoggerTests
|
||||
Assert.Null(rows[1].StepEventId);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NestedStepScopes_Unwind_ToTheEnclosingStep()
|
||||
{
|
||||
// A helper calling another helper: the inner step owns its own lines, and the outer step
|
||||
// gets its attribution back the moment the inner scope closes.
|
||||
var (logger, _, rows) = MakeTraced();
|
||||
var outer = Guid.NewGuid();
|
||||
var inner = Guid.NewGuid();
|
||||
|
||||
using (TraceStepScope.Enter(outer))
|
||||
{
|
||||
using (TraceStepScope.Enter(inner))
|
||||
{
|
||||
Assert.Equal(inner, TraceStepScope.Current);
|
||||
logger.Info("inner");
|
||||
}
|
||||
|
||||
Assert.Equal(outer, TraceStepScope.Current);
|
||||
logger.Info("outer");
|
||||
}
|
||||
|
||||
Assert.Null(TraceStepScope.Current);
|
||||
Assert.Equal(inner, rows[0].StepEventId);
|
||||
Assert.Equal(outer, rows[1].StepEventId);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void PastThePerRunCap_LinesAreDropped_AndFlushDroppedNamesTheCount_Once()
|
||||
{
|
||||
@@ -164,6 +190,33 @@ public class ScriptLoggerTests
|
||||
Assert.EndsWith("…", message);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void AMessageExactlyAtTheCap_PassesThroughUnclipped()
|
||||
{
|
||||
var (logger, _, rows) = MakeTraced();
|
||||
var exact = new string('x', ScriptLogger.MaxMessageChars);
|
||||
|
||||
logger.Info(exact);
|
||||
|
||||
Assert.Equal(exact, Assert.Single(rows).Message);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ASurrogatePairStraddlingTheCap_IsDroppedWhole()
|
||||
{
|
||||
// Cutting between the halves would leave a lone surrogate, which breaks JSON serialization
|
||||
// of the audit row further down the pipe.
|
||||
var (logger, _, rows) = MakeTraced();
|
||||
var straddling = new string('x', ScriptLogger.MaxMessageChars - 1) + "🚀" + new string('y', 10);
|
||||
|
||||
logger.Info(straddling);
|
||||
|
||||
var message = Assert.Single(rows).Message;
|
||||
Assert.Equal(ScriptLogger.MaxMessageChars, message.Length);
|
||||
Assert.EndsWith("…", message);
|
||||
Assert.DoesNotContain(message, static c => char.IsSurrogate(c));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void AThrowingEmitter_NeverReachesTheScript_AndTheNodeLoggerStillGotTheLine()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user