public void FilteringBySource()
{
TestHelper.CleanupFolder(SystemActivityMonitor.RootLogPath + "FilteringBySource");
using (GrandOutput g = new GrandOutput())
{
GrandOutputConfiguration config = new GrandOutputConfiguration();
config.Load(XDocument.Parse(@"
<GrandOutputConfiguration>
<Channel MinimalFilter=""Debug"">
<Add Type=""BinaryFile"" Name=""All"" Path=""FilteringBySource"" />
<Channel Name=""HiddenTopic"" MinimalFilter=""Off"" TopicRegex=""(hidden\s+topic|hide\s+this\s+topic)"" MatchOptions=""CultureInvariant, ExplicitCapture, Compiled, Multiline"" />
</Channel>
<SourceOverrideFilter>
<Add File=""SourceFile-Debug.cs"" Filter=""Debug"" />
<Add File=""SourceFile-Off.cs"" Filter=""Off"" />
<Add File=""SourceFile-Strange.cs"" Filter=""{Trace,Fatal}"" />
</SourceOverrideFilter>
</GrandOutputConfiguration>", LoadOptions.SetLineInfo).Root, TestHelper.ConsoleMonitor);
Assert.That(g.SetConfiguration(config, TestHelper.ConsoleMonitor));
var m = new ActivityMonitor(false);
g.Register(m);
m.Fatal(fileName: "SourceFile-Off.cs").Send("NOSHOW");
m.SetTopic("This is a hidden topic...");
m.Trace(0, "SourceFile-Debug.cs").Send("Trace-1");
m.Trace().Send("NOSHOW");
m.SetTopic("Please, hide this topic!");
m.Trace(fileName: "SourceFile-Strange.cs").Send("NOSHOW");
using (m.OpenTrace(fileName: "SourceFile-Strange.cs").Send("Trace-2"))
{
m.Trace(fileName: "SourceFile-Strange.cs").Send("NOSHOW");
m.Fatal(fileName: "SourceFile-Strange.cs").Send("Fatal-1");
m.Fatal(fileName: "SourceFile-Off.cs").Send("NOSHOW");
}
m.SetTopic(null);
m.Trace(fileName: "SourceFile-Strange.cs").Send("NOSHOW");
m.Fatal(fileName: "SourceFile-Off.cs").Send("NOSHOW");
m.Trace().Send("Trace-3");
}
List <StupidStringClient> logs = TestHelper.ReadAllLogs(new DirectoryInfo(SystemActivityMonitor.RootLogPath + "FilteringBySource"), false);
Assert.That(logs.Count, Is.EqualTo(1));
Assert.That(logs[0].ToString(), Does.Not.Contain("NOSHOW"));
var texts = logs[0].Entries.Select(e => e.Text).ToArray();
CollectionAssert.AreEqual(new string[] {
"Trace-1",
"Trace-2",
"Fatal-1",
ActivityMonitor.SetTopicPrefix,
"Trace-3",
}, texts, StringComparer.Ordinal);
}