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 );
}