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
|
2023-09-04 16:16:26 +01:00
|
|
|
var translator = NumberTranslator.Create(new CultureInfo("de-DE", false), new CultureInfo("en-US", false));
|
2021-01-25 10:51:32 +01:00
|
|
|
|
|
|
|
|
// 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
|
2023-09-04 16:16:26 +01:00
|
|
|
var translator = NumberTranslator.Create(new CultureInfo("de-DE", false), new CultureInfo("en-US", false));
|
2021-01-25 10:51:32 +01:00
|
|
|
|
|
|
|
|
// 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
|
2023-09-04 16:16:26 +01:00
|
|
|
var translator = NumberTranslator.Create(new CultureInfo("de-DE", false), new CultureInfo("en-US", false));
|
2021-01-25 10:51:32 +01:00
|
|
|
|
|
|
|
|
// 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
|
2023-09-04 16:16:26 +01:00
|
|
|
var translator = NumberTranslator.Create(new CultureInfo("de-DE", false), new CultureInfo("en-US", false));
|
2021-01-25 10:51:32 +01:00
|
|
|
|
|
|
|
|
// 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
|
2023-09-04 16:16:26 +01:00
|
|
|
var sourceCulture = new CultureInfo("en-US", false)
|
2021-01-25 10:51:32 +01:00
|
|
|
{
|
|
|
|
|
NumberFormat =
|
|
|
|
|
{
|
|
|
|
|
NumberDecimalSeparator = decimalSeparator,
|
|
|
|
|
NumberGroupSeparator = groupSeparator,
|
|
|
|
|
},
|
|
|
|
|
};
|
2023-09-04 16:16:26 +01:00
|
|
|
var translator = NumberTranslator.Create(sourceCulture, new CultureInfo("en-US", false));
|
2021-01-25 10:51:32 +01:00
|
|
|
|
|
|
|
|
// Act
|
|
|
|
|
var result = translator.Translate(input);
|
|
|
|
|
|
|
|
|
|
// Assert
|
|
|
|
|
Assert.IsNotNull(result);
|
|
|
|
|
Assert.AreEqual(expectedResult, result);
|
|
|
|
|
}
|
2022-03-24 16:59:27 +00:00
|
|
|
|
|
|
|
|
[DataTestMethod]
|
2023-09-12 11:22:34 +01:00
|
|
|
[DataRow("de-DE", "12,0004", "12.0004")]
|
|
|
|
|
[DataRow("de-DE", "0xF000", "0xF000")]
|
|
|
|
|
[DataRow("de-DE", "0", "0")]
|
|
|
|
|
[DataRow("de-DE", "00", "0")]
|
|
|
|
|
[DataRow("de-DE", "12.004", "12004")] // . is the group separator in de-DE
|
|
|
|
|
[DataRow("de-DE", "12.04", "1204")]
|
|
|
|
|
[DataRow("de-DE", "12.4", "124")]
|
|
|
|
|
[DataRow("de-DE", "3.004.044.444,05", "3004044444.05")]
|
|
|
|
|
[DataRow("de-DE", "123.01 + 52.30", "12301 + 5230")]
|
|
|
|
|
[DataRow("de-DE", "123.001 + 52.30", "123001 + 5230")]
|
|
|
|
|
[DataRow("fr-FR", "0", "0")]
|
|
|
|
|
[DataRow("fr-FR", "00", "0")]
|
|
|
|
|
[DataRow("fr-FR", "12.004", "12.004")] // . is not decimal or group separator in fr-FR
|
|
|
|
|
[DataRow("fr-FR", "12.04", "12.04")]
|
|
|
|
|
[DataRow("fr-FR", "12.4", "12.4")]
|
|
|
|
|
[DataRow("fr-FR", "12.0004", "12.0004")]
|
|
|
|
|
[DataRow("fr-FR", "123.01 + 52.30", "123.01 + 52.30")]
|
|
|
|
|
[DataRow("fr-FR", "123.001 + 52.30", "123.001 + 52.30")]
|
|
|
|
|
public void Translate_NoRemovalOfLeadingZeroesOnEdgeCases(string sourceCultureName, string input, string expectedResult)
|
2022-03-24 16:59:27 +00:00
|
|
|
{
|
|
|
|
|
// Arrange
|
2023-09-12 11:22:34 +01:00
|
|
|
var translator = NumberTranslator.Create(new CultureInfo(sourceCultureName, false), new CultureInfo("en-US", false));
|
2022-03-24 16:59:27 +00:00
|
|
|
|
|
|
|
|
// Act
|
|
|
|
|
var result = translator.Translate(input);
|
|
|
|
|
|
|
|
|
|
// Assert
|
|
|
|
|
Assert.IsNotNull(result);
|
|
|
|
|
Assert.AreEqual(expectedResult, result);
|
|
|
|
|
}
|
2021-01-25 10:51:32 +01:00
|
|
|
}
|
|
|
|
|
}
|