| 
6 | 6 | using System.Globalization;  | 
7 | 7 | using System.Linq;  | 
8 | 8 | using System.Threading;  | 
9 |  | -using Microsoft.Extensions.Logging;  | 
10 |  | -using Microsoft.Extensions.Logging.Testing;  | 
11 | 9 | using Microsoft.Extensions.Time.Testing;  | 
12 | 10 | using Xunit;  | 
13 | 11 | 
 
  | 
@@ -283,4 +281,61 @@ public void Scopes()  | 
283 | 281 |         Assert.Equal(42, (int)logger.LatestRecord.Scopes[0]!);  | 
284 | 282 |         Assert.Equal("Hello World", (string)logger.LatestRecord.Scopes[1]!);  | 
285 | 283 |     }  | 
 | 284 | + | 
 | 285 | +    [Theory]  | 
 | 286 | +    [InlineData(false, 2)]  | 
 | 287 | +    [InlineData(true, 1)]  | 
 | 288 | +    public void FilterByCustomFilter(bool useErrorLevelFilter, int expectedRecordCount)  | 
 | 289 | +    {  | 
 | 290 | +        const string NotIgnoredMessage1 = "Not ignored message 1";  | 
 | 291 | +        const string NotIgnoredMessage2 = "Not ignored message 2";  | 
 | 292 | +        const string IgnoredMessage = "Ignored message";  | 
 | 293 | + | 
 | 294 | +        // Given  | 
 | 295 | +        var options = new FakeLogCollectorOptions  | 
 | 296 | +        {  | 
 | 297 | +            CustomFilter = r => r.Message != IgnoredMessage,  | 
 | 298 | +            FilteredLevels = useErrorLevelFilter ? [LogLevel.Error] : new HashSet<LogLevel>(),  | 
 | 299 | +        };  | 
 | 300 | + | 
 | 301 | +        var collector = FakeLogCollector.Create(options);  | 
 | 302 | +        var logger = new FakeLogger(collector);  | 
 | 303 | + | 
 | 304 | +        // When  | 
 | 305 | +        logger.LogInformation(NotIgnoredMessage1);  | 
 | 306 | +        logger.LogInformation(IgnoredMessage);  | 
 | 307 | +        logger.LogError(IgnoredMessage);  | 
 | 308 | +        logger.LogError(NotIgnoredMessage2);  | 
 | 309 | +        logger.LogCritical(IgnoredMessage);  | 
 | 310 | + | 
 | 311 | +        var records = logger.Collector.GetSnapshot();  | 
 | 312 | + | 
 | 313 | +        // Then  | 
 | 314 | +        Assert.Equal(expectedRecordCount, records.Count);  | 
 | 315 | +        Assert.Equal(expectedRecordCount, logger.Collector.Count);  | 
 | 316 | + | 
 | 317 | +        IList<(string message, LogLevel level, string prefix)> expectationsInOrder = useErrorLevelFilter  | 
 | 318 | +            ? [(NotIgnoredMessage2, LogLevel.Error, "error] ")]  | 
 | 319 | +            : [(NotIgnoredMessage1, LogLevel.Information, "info] "), (NotIgnoredMessage2, LogLevel.Error, "error] ")];  | 
 | 320 | + | 
 | 321 | +        for (var i = 0; i < expectedRecordCount; i++)  | 
 | 322 | +        {  | 
 | 323 | +            var (expectedMessage, expectedLevel, expectedPrefix) = expectationsInOrder[i];  | 
 | 324 | +            var record = records[i];  | 
 | 325 | + | 
 | 326 | +            Assert.Equal(expectedMessage, record.Message);  | 
 | 327 | +            Assert.Equal(expectedLevel, record.Level);  | 
 | 328 | +            Assert.Null(record.Exception);  | 
 | 329 | +            Assert.Null(record.Category);  | 
 | 330 | +            Assert.True(record.LevelEnabled);  | 
 | 331 | +            Assert.Empty(record.Scopes);  | 
 | 332 | +            Assert.Equal(0, record.Id.Id);  | 
 | 333 | +            Assert.EndsWith($"{expectedPrefix}{expectedMessage}", record.ToString());  | 
 | 334 | + | 
 | 335 | +            if (i == expectedRecordCount - 1)  | 
 | 336 | +            {  | 
 | 337 | +                Assert.Equivalent(record, logger.LatestRecord);  | 
 | 338 | +            }  | 
 | 339 | +        }  | 
 | 340 | +    }  | 
286 | 341 | }  | 
0 commit comments