internal string InternalMarkup(string src, ImmutableStack <string> parents) { LoggerFileScope fileScope = null; if (!parents.IsEmpty) { var path = parents.Peek().ToDisplayPath(); if (!string.IsNullOrEmpty(path)) { fileScope = new LoggerFileScope(path); } } using (fileScope) { return(InternalMarkup(src, Context.SetFilePathStack(parents))); } }
public void TestFileScope() { var listener = new TestLoggerListener("TestFileScope"); try { Logger.RegisterListener(listener); Action callback; Logger.LogInfo("Not in file scope.", listener.Phase); Assert.Null(listener.TakeAndRemove().File); using (new LoggerFileScope("A")) { Logger.LogInfo("In file A", listener.Phase); Assert.Equal("A", listener.TakeAndRemove().File); using (new LoggerFileScope("B")) { Logger.LogInfo("In file B", listener.Phase); Assert.Equal("B", listener.TakeAndRemove().File); var captured = LoggerFileScope.Capture(); callback = () => { using (LoggerFileScope.Restore(captured)) { Logger.LogInfo("In captured file B", listener.Phase); } }; } Logger.LogInfo("In file A", listener.Phase); Assert.Equal("A", listener.TakeAndRemove().File); callback(); Assert.Equal("B", listener.TakeAndRemove().File); Logger.LogInfo("In file A", listener.Phase); Assert.Equal("A", listener.TakeAndRemove().File); using (new LoggerFileScope("C")) { Logger.LogInfo("In file C", listener.Phase); Assert.Equal("C", listener.TakeAndRemove().File); callback(); Assert.Equal("B", listener.TakeAndRemove().File); } } Logger.LogInfo("Not in file scope.", listener.Phase); Assert.Null(listener.TakeAndRemove().File); callback(); Assert.Equal("B", listener.TakeAndRemove().File); Logger.LogInfo("Not in file scope.", listener.Phase); Assert.Null(listener.TakeAndRemove().File); } finally { Logger.UnregisterListener(listener); } }
public void TestFileScope() { const string PhaseName = "TestFileScope"; var listener = TestLoggerListener.CreateLoggerListenerWithPhaseEqualFilter(PhaseName, LogLevel.Info); try { Logger.RegisterListener(listener); Action callback; Logger.LogInfo("Not in file scope.", PhaseName); Assert.Null(TakeFirstLogItemAndRemove(listener.Items).File); using (new LoggerFileScope("A")) { Logger.LogInfo("In file A", PhaseName); Assert.Equal("A", TakeFirstLogItemAndRemove(listener.Items).File); using (new LoggerFileScope("B")) { Logger.LogInfo("In file B", PhaseName); Assert.Equal("B", TakeFirstLogItemAndRemove(listener.Items).File); var captured = LoggerFileScope.Capture(); callback = () => { using (LoggerFileScope.Restore(captured)) { Logger.LogInfo("In captured file B", PhaseName); } }; } Logger.LogInfo("In file A", PhaseName); Assert.Equal("A", TakeFirstLogItemAndRemove(listener.Items).File); callback(); Assert.Equal("B", TakeFirstLogItemAndRemove(listener.Items).File); Logger.LogInfo("In file A", PhaseName); Assert.Equal("A", TakeFirstLogItemAndRemove(listener.Items).File); using (new LoggerFileScope("C")) { Logger.LogInfo("In file C", PhaseName); Assert.Equal("C", TakeFirstLogItemAndRemove(listener.Items).File); callback(); Assert.Equal("B", TakeFirstLogItemAndRemove(listener.Items).File); } } Logger.LogInfo("Not in file scope.", PhaseName); Assert.Null(TakeFirstLogItemAndRemove(listener.Items).File); callback(); Assert.Equal("B", TakeFirstLogItemAndRemove(listener.Items).File); Logger.LogInfo("Not in file scope.", PhaseName); Assert.Null(TakeFirstLogItemAndRemove(listener.Items).File); } finally { Logger.UnregisterListener(listener); } }