/*
* QUANTCONNECT.COM - Democratizing Finance, Empowering Individuals.
* Lean Algorithmic Trading Engine v2.0. Copyright 2014 QuantConnect Corporation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
using System;
using QuantConnect.Exceptions;
namespace QuantConnect.Tests.Common.Exceptions
{
///
/// Provids a fake implementation that can be utilized in tests
///
///
/// Keep it internal so it doesn't get picked up when loading all exception interpreters from assemblies
///
internal class FakeExceptionInterpreter : IExceptionInterpreter
{
private readonly int _order = 0;
private readonly Func _canInterpret;
private readonly Func _interpret;
public int Order => _order;
public FakeExceptionInterpreter()
{
_canInterpret = e => true;
var count = 0;
_interpret = e =>
{
if (e == null)
{
return null;
}
return new Exception($"Projected {++count}: " + e.Message, _interpret(e.InnerException));
};
}
public FakeExceptionInterpreter(Func canInterpret, Func interpret, int order = 0)
{
_canInterpret = canInterpret;
_interpret = interpret;
_order = order;
}
public bool CanInterpret(Exception exception)
{
return _canInterpret(exception);
}
public Exception Interpret(Exception exception, IExceptionInterpreter innerInterpreter)
{
return _interpret(exception);
}
}
}