// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; using System.Collections.Generic; using Microsoft.Extensions.Logging.Testing; namespace Microsoft.AspNetCore.SignalR.Tests { public class FunctionalTestBase : VerifiableLoggedTest { private readonly Func _globalExpectedErrorsFilter; public FunctionalTestBase() { // Suppress errors globally here _globalExpectedErrorsFilter = (writeContext) => false; } private Func ResolveExpectedErrorsFilter(Func expectedErrorsFilter) { if (expectedErrorsFilter == null) { return _globalExpectedErrorsFilter; } return (writeContext) => { if (expectedErrorsFilter(writeContext)) { return true; } return _globalExpectedErrorsFilter(writeContext); }; } public IDisposable StartServer(out InProcessTestServer testServer, Func expectedErrorsFilter = null) where T : class { var disposable = base.StartVerifiableLog(ResolveExpectedErrorsFilter(expectedErrorsFilter)); testServer = new InProcessTestServer(LoggerFactory); return new MultiDisposable(testServer, disposable); } private class MultiDisposable : IDisposable { List _disposables; public MultiDisposable(params IDisposable[] disposables) { _disposables = new List(disposables); } public void Dispose() { foreach (var disposable in _disposables) { disposable.Dispose(); } } } } }