2021-01-25 10:51:32 +01:00
|
|
|
// 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;
|
2021-08-16 15:25:06 +02:00
|
|
|
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
2021-01-25 10:51:32 +01:00
|
|
|
|
|
|
|
|
namespace Microsoft.PowerToys.Run.Plugin.Calculator.UnitTests
|
|
|
|
|
{
|
2021-08-16 15:25:06 +02:00
|
|
|
[TestClass]
|
2021-01-25 10:51:32 +01:00
|
|
|
public class NumberTranslatorTests
|
|
|
|
|
{
|
2021-08-16 15:25:06 +02:00
|
|
|
[DataTestMethod]
|
|
|
|
|
[DataRow(null, "en-US")]
|
|
|
|
|
[DataRow("de-DE", null)]
|
2021-01-25 10:51:32 +01:00
|
|
|
public void Create_ThrowError_WhenCalledNullOrEmpty(string sourceCultureName, string targetCultureName)
|
|
|
|
|
{
|
|
|
|
|
// Arrange
|
|
|
|
|
CultureInfo sourceCulture = sourceCultureName != null ? new CultureInfo(sourceCultureName) : null;
|
|
|
|
|
CultureInfo targetCulture = targetCultureName != null ? new CultureInfo(targetCultureName) : null;
|
|
|
|
|
|
|
|
|
|
// Act
|
2021-08-16 15:25:06 +02:00
|
|
|
Assert.ThrowsException<ArgumentNullException>(() => NumberTranslator.Create(sourceCulture, targetCulture));
|
2021-01-25 10:51:32 +01:00
|
|
|
}
|
|
|
|
|
|
2021-08-16 15:25:06 +02:00
|
|
|
[DataTestMethod]
|
|
|
|
|
[DataRow("en-US", "en-US")]
|
|
|
|
|
[DataRow("en-EN", "en-US")]
|
|
|
|
|
[DataRow("de-DE", "en-US")]
|
2021-01-25 10:51:32 +01:00
|
|
|
public void Create_WhenCalled(string sourceCultureName, string targetCultureName)
|
|
|
|
|
{
|
|
|
|
|
// Arrange
|
|
|
|
|
CultureInfo sourceCulture = new CultureInfo(sourceCultureName);
|
|
|
|
|
CultureInfo targetCulture = new CultureInfo(targetCultureName);
|
|
|
|
|
|
|
|
|
|
// Act
|
|
|
|
|
var translator = NumberTranslator.Create(sourceCulture, targetCulture);
|
|
|
|
|
|
|
|
|
|
// Assert
|
|
|
|
|
Assert.IsNotNull(translator);
|
|
|
|
|
}
|
|
|
|
|
|
2021-08-16 15:25:06 +02:00
|
|
|
[DataTestMethod]
|
|
|
|
|
[DataRow(null)]
|
2021-01-25 10:51:32 +01:00
|
|
|
public void Translate_ThrowError_WhenCalledNull(string input)
|
|
|
|
|
{
|
|
|
|
|
// Arrange
|
|
|
|
|
var translator = NumberTranslator.Create(new CultureInfo("de-DE"), new CultureInfo("en-US"));
|
|
|
|
|
|
|
|
|
|
// Act
|
2021-08-16 15:25:06 +02:00
|
|
|
Assert.ThrowsException<ArgumentNullException>(() => translator.Translate(input));
|
2021-01-25 10:51:32 +01:00
|
|
|
}
|
|
|
|
|
|
2021-08-16 15:25:06 +02:00
|
|
|
[DataTestMethod]
|
|
|
|
|
[DataRow("")]
|
|
|
|
|
[DataRow(" ")]
|
2021-01-25 10:51:32 +01:00
|
|
|
public void Translate_WhenCalledEmpty(string input)
|
|
|
|
|
{
|
|
|
|
|
// Arrange
|
|
|
|
|
var translator = NumberTranslator.Create(new CultureInfo("de-DE"), new CultureInfo("en-US"));
|
|
|
|
|
|
|
|
|
|
// Act
|
|
|
|
|
var result = translator.Translate(input);
|
|
|
|
|
|
|
|
|
|
// Assert
|
|
|
|
|
Assert.AreEqual(input, result);
|
|
|
|
|
}
|
|
|
|
|
|
2021-08-16 15:25:06 +02:00
|
|
|
[DataTestMethod]
|
|
|
|
|
[DataRow("2,0 * 2", "2.0 * 2")]
|
|
|
|
|
[DataRow("4 * 3,6 + 9", "4 * 3.6 + 9")]
|
|
|
|
|
[DataRow("5,2+6", "5.2+6")]
|
|
|
|
|
[DataRow("round(2,5)", "round(2.5)")]
|
|
|
|
|
[DataRow("3,3333", "3.3333")]
|
2021-01-25 10:51:32 +01:00
|
|
|
public void Translate_NoErrors_WhenCalled(string input, string expectedResult)
|
|
|
|
|
{
|
|
|
|
|
// Arrange
|
|
|
|
|
var translator = NumberTranslator.Create(new CultureInfo("de-DE"), new CultureInfo("en-US"));
|
|
|
|
|
|
|
|
|
|
// Act
|
|
|
|
|
var result = translator.Translate(input);
|
|
|
|
|
|
|
|
|
|
// Assert
|
|
|
|
|
Assert.IsNotNull(result);
|
|
|
|
|
Assert.AreEqual(expectedResult, result);
|
|
|
|
|
}
|
|
|
|
|
|
2021-08-16 15:25:06 +02:00
|
|
|
[DataTestMethod]
|
|
|
|
|
[DataRow("2.0 * 2", "2,0 * 2")]
|
|
|
|
|
[DataRow("4 * 3.6 + 9", "4 * 3,6 + 9")]
|
|
|
|
|
[DataRow("5.2+6", "5,2+6")]
|
|
|
|
|
[DataRow("round(2.5)", "round(2,5)")]
|
|
|
|
|
[DataRow("3.3333", "3,3333")]
|
2021-01-25 10:51:32 +01:00
|
|
|
public void TranslateBack_NoErrors_WhenCalled(string input, string expectedResult)
|
|
|
|
|
{
|
|
|
|
|
// Arrange
|
|
|
|
|
var translator = NumberTranslator.Create(new CultureInfo("de-DE"), new CultureInfo("en-US"));
|
|
|
|
|
|
|
|
|
|
// Act
|
|
|
|
|
var result = translator.TranslateBack(input);
|
|
|
|
|
|
|
|
|
|
// Assert
|
|
|
|
|
Assert.IsNotNull(result);
|
|
|
|
|
Assert.AreEqual(expectedResult, result);
|
|
|
|
|
}
|
|
|
|
|
|
2021-08-16 15:25:06 +02:00
|
|
|
[DataTestMethod]
|
|
|
|
|
[DataRow(".", ",", "2,000,000", "2000000")]
|
|
|
|
|
[DataRow(".", ",", "2,000,000.6", "2000000.6")]
|
|
|
|
|
[DataRow(",", ".", "2.000.000", "2000000")]
|
|
|
|
|
[DataRow(",", ".", "2.000.000,6", "2000000.6")]
|
2021-01-25 10:51:32 +01:00
|
|
|
public void Translate_RemoveNumberGroupSeparator_WhenCalled(string decimalSeparator, string groupSeparator, string input, string expectedResult)
|
|
|
|
|
{
|
|
|
|
|
// Arrange
|
|
|
|
|
var sourceCulture = new CultureInfo("en-US")
|
|
|
|
|
{
|
|
|
|
|
NumberFormat =
|
|
|
|
|
{
|
|
|
|
|
NumberDecimalSeparator = decimalSeparator,
|
|
|
|
|
NumberGroupSeparator = groupSeparator,
|
|
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
var translator = NumberTranslator.Create(sourceCulture, new CultureInfo("en-US"));
|
|
|
|
|
|
|
|
|
|
// Act
|
|
|
|
|
var result = translator.Translate(input);
|
|
|
|
|
|
|
|
|
|
// Assert
|
|
|
|
|
Assert.IsNotNull(result);
|
|
|
|
|
Assert.AreEqual(expectedResult, result);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|