Create unit tests for Calculator plugin (#6356)

* Refactored logic and made it unit testable

* Changes after code review

* Added to build steps, and modified bracket to new class with unittest. Validates complexer cases now.

Co-authored-by: p-storm <paul.de.man@gmail.com>
This commit is contained in:
P-Storm
2020-09-10 05:01:30 +02:00
committed by GitHub
parent cfda69a120
commit 3137aaa660
11 changed files with 519 additions and 85 deletions

View File

@@ -0,0 +1,68 @@
// Copyright (c) Microsoft Corporation
// The Microsoft Corporation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using System;
using System.Globalization;
using Mages.Core;
namespace Microsoft.Plugin.Calculator
{
public class CalculateEngine
{
private readonly Engine _magesEngine = new Engine();
public const int RoundingDigits = 10;
public CalculateResult Interpret(string input)
{
return Interpret(input, CultureInfo.CurrentCulture);
}
public CalculateResult Interpret(string input, CultureInfo cultureInfo)
{
if (!CalculateHelper.InputValid(input))
{
return default;
}
var result = _magesEngine.Interpret(input);
// This could happen for some incorrect queries, like pi(2)
if (result == null)
{
return default;
}
result = TransformResult(result);
if (string.IsNullOrEmpty(result?.ToString()))
{
return default;
}
var decimalResult = Convert.ToDecimal(result, cultureInfo);
var roundedResult = Math.Round(decimalResult, RoundingDigits, MidpointRounding.AwayFromZero);
return new CalculateResult()
{
Result = decimalResult,
RoundedResult = roundedResult,
};
}
private static object TransformResult(object result)
{
if (result.ToString() == "NaN")
{
return Properties.Resources.wox_plugin_calculator_not_a_number;
}
if (result is Function)
{
return Properties.Resources.wox_plugin_calculator_expression_not_complete;
}
return result;
}
}
}