mirror of
https://github.com/microsoft/PowerToys.git
synced 2026-04-05 18:57:19 +02:00
[CmdPal][UT] Refactor some cmdpal ext's ut and improve the test case (#40896)
<!-- Enter a brief description/summary of your PR here. What does it fix/what does it change/how was it tested (even manually, if necessary)? --> ## Summary of the Pull Request 1. Remove some AI generated nonsense case 2. Add ISettingsInterface for those ext for testing purpose. 3. Add query test. <!-- Please review the items on the PR checklist before submitting--> ## PR Checklist - [x] Closes: #40897 - [x] **Communication:** I've discussed this with core contributors already. If the work hasn't been agreed, this work might be rejected - [x] **Tests:** Added/updated and all pass - [ ] **Localization:** All end-user-facing strings can be localized - [ ] **Dev docs:** Added/updated - [ ] **New binaries:** Added on the required places - [ ] [JSON for signing](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ESRPSigning_core.json) for new binaries - [ ] [WXS for installer](https://github.com/microsoft/PowerToys/blob/main/installer/PowerToysSetup/Product.wxs) for new binaries and localization folder - [ ] [YML for CI pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ci/templates/build-powertoys-steps.yml) for new test projects - [ ] [YML for signed pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/release.yml) - [ ] **Documentation updated:** If checked, please file a pull request on [our docs repo](https://github.com/MicrosoftDocs/windows-uwp/tree/docs/hub/powertoys) and link it here: #xxx <!-- Provide a more detailed description of the PR, other things fixed, or any additional comments/features here --> ## Detailed Description of the Pull Request / Additional comments <!-- Describe how you validated the behavior. Add automated tests wherever possible, but list manual validation steps taken as well --> ## Validation Steps Performed --------- Co-authored-by: Yu Leng <yuleng@microsoft.com>
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) Microsoft Corporation
|
||||
// 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.
|
||||
|
||||
@@ -6,12 +6,15 @@ using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using Microsoft.CmdPal.Ext.Calc.Helper;
|
||||
using Microsoft.CmdPal.Ext.UnitTestBase;
|
||||
using Microsoft.CommandPalette.Extensions;
|
||||
using Microsoft.CommandPalette.Extensions.Toolkit;
|
||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||
|
||||
namespace Microsoft.CmdPal.Ext.Calc.UnitTests;
|
||||
|
||||
[TestClass]
|
||||
public class ExtendedCalculatorParserTests
|
||||
public class ExtendedCalculatorParserTests : CommandPaletteUnitTestBase
|
||||
{
|
||||
[DataTestMethod]
|
||||
[DataRow(null)]
|
||||
@@ -28,7 +31,7 @@ public class ExtendedCalculatorParserTests
|
||||
[DataRow("[10,10]")] // '[10,10]' is interpreted as array by mages engine
|
||||
public void Interpret_NoResult_WhenCalled(string input)
|
||||
{
|
||||
var settings = new SettingsManager();
|
||||
var settings = new Settings();
|
||||
|
||||
var result = CalculateEngine.Interpret(settings, input, CultureInfo.CurrentCulture, out _);
|
||||
|
||||
@@ -68,7 +71,7 @@ public class ExtendedCalculatorParserTests
|
||||
[DynamicData(nameof(Interpret_NoErrors_WhenCalledWithRounding_Data))]
|
||||
public void Interpret_NoErrors_WhenCalledWithRounding(string input, decimal expectedResult)
|
||||
{
|
||||
var settings = new SettingsManager();
|
||||
var settings = new Settings();
|
||||
|
||||
// Act
|
||||
// Using InvariantCulture since this is internal
|
||||
@@ -90,7 +93,7 @@ public class ExtendedCalculatorParserTests
|
||||
public void Interpret_GreaterPrecision_WhenCalled(string input, decimal expectedResult)
|
||||
{
|
||||
// Arrange
|
||||
var settings = new SettingsManager();
|
||||
var settings = new Settings();
|
||||
|
||||
// Act
|
||||
// Using InvariantCulture since this is internal
|
||||
@@ -114,7 +117,7 @@ public class ExtendedCalculatorParserTests
|
||||
{
|
||||
// Arrange
|
||||
var cultureInfo = CultureInfo.GetCultureInfo(cultureName);
|
||||
var settings = new SettingsManager();
|
||||
var settings = new Settings();
|
||||
|
||||
// Act
|
||||
var result = CalculateEngine.Interpret(settings, input, cultureInfo, out _);
|
||||
@@ -175,7 +178,7 @@ public class ExtendedCalculatorParserTests
|
||||
public void Interpret_MustReturnResult_WhenResultIsZero(string input)
|
||||
{
|
||||
// Arrange
|
||||
var settings = new SettingsManager();
|
||||
var settings = new Settings();
|
||||
|
||||
// Act
|
||||
// Using InvariantCulture since this is internal
|
||||
@@ -203,7 +206,7 @@ public class ExtendedCalculatorParserTests
|
||||
public void Interpret_MustReturnExpectedResult_WhenCalled(string input, decimal expectedResult)
|
||||
{
|
||||
// Arrange
|
||||
var settings = new SettingsManager();
|
||||
var settings = new Settings();
|
||||
|
||||
// Act
|
||||
// Using en-us culture to have a fixed number style
|
||||
@@ -226,7 +229,7 @@ public class ExtendedCalculatorParserTests
|
||||
{
|
||||
// Arrange
|
||||
var translator = NumberTranslator.Create(new CultureInfo(sourceCultureName, false), new CultureInfo("en-US", false));
|
||||
var settings = new SettingsManager();
|
||||
var settings = new Settings();
|
||||
|
||||
// Act
|
||||
// Using en-us culture to have a fixed number style
|
||||
|
||||
@@ -14,5 +14,6 @@
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\ext\Microsoft.CmdPal.Ext.Calc\Microsoft.CmdPal.Ext.Calc.csproj" />
|
||||
<ProjectReference Include="..\Microsoft.CmdPal.Ext.UnitTestsBase\Microsoft.CmdPal.Ext.UnitTestBase.csproj" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
@@ -0,0 +1,86 @@
|
||||
// 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.Linq;
|
||||
using Microsoft.CmdPal.Ext.Calc.Helper;
|
||||
using Microsoft.CmdPal.Ext.Calc.Pages;
|
||||
using Microsoft.CmdPal.Ext.UnitTestBase;
|
||||
using Microsoft.CommandPalette.Extensions.Toolkit;
|
||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||
|
||||
namespace Microsoft.CmdPal.Ext.Calc.UnitTests;
|
||||
|
||||
[TestClass]
|
||||
public class QueryTests : CommandPaletteUnitTestBase
|
||||
{
|
||||
[DataTestMethod]
|
||||
[DataRow("2+2", "4")]
|
||||
[DataRow("5*3", "15")]
|
||||
[DataRow("10/2", "5")]
|
||||
[DataRow("sqrt(16)", "4")]
|
||||
[DataRow("2^3", "8")]
|
||||
public void TopLevelPageQueryTest(string input, string expectedResult)
|
||||
{
|
||||
var settings = new Settings();
|
||||
var page = new CalculatorListPage(settings);
|
||||
|
||||
// Simulate query execution
|
||||
page.UpdateSearchText(string.Empty, input);
|
||||
var result = page.GetItems();
|
||||
|
||||
Assert.IsTrue(result.Length == 1, "Valid input should always return result");
|
||||
|
||||
var firstResult = result.FirstOrDefault();
|
||||
|
||||
Assert.IsNotNull(result);
|
||||
Assert.IsTrue(
|
||||
firstResult.Title.Contains(expectedResult),
|
||||
$"Expected result to contain '{expectedResult}' but got '{firstResult.Title}'");
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void EmptyQueryTest()
|
||||
{
|
||||
var settings = new Settings();
|
||||
var page = new CalculatorListPage(settings);
|
||||
page.UpdateSearchText("abc", string.Empty);
|
||||
var results = page.GetItems();
|
||||
Assert.IsNotNull(results);
|
||||
|
||||
var firstItem = results.FirstOrDefault();
|
||||
Assert.AreEqual("Type an equation...", firstItem.Title);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void InvalidExpressionTest()
|
||||
{
|
||||
var settings = new Settings();
|
||||
|
||||
var page = new CalculatorListPage(settings);
|
||||
|
||||
// Simulate query execution
|
||||
page.UpdateSearchText(string.Empty, "invalid expression");
|
||||
var result = page.GetItems().FirstOrDefault();
|
||||
|
||||
Assert.AreEqual("Type an equation...", result.Title);
|
||||
}
|
||||
|
||||
[DataTestMethod]
|
||||
[DataRow("sin(60)", "-0.30481", CalculateEngine.TrigMode.Radians)]
|
||||
[DataRow("sin(60)", "0.866025", CalculateEngine.TrigMode.Degrees)]
|
||||
[DataRow("sin(60)", "0.809016", CalculateEngine.TrigMode.Gradians)]
|
||||
public void TrigModeSettingsTest(string input, string expected, CalculateEngine.TrigMode trigMode)
|
||||
{
|
||||
var settings = new Settings(trigUnit: trigMode);
|
||||
|
||||
var page = new CalculatorListPage(settings);
|
||||
|
||||
page.UpdateSearchText(string.Empty, input);
|
||||
var result = page.GetItems().FirstOrDefault();
|
||||
|
||||
Assert.IsNotNull(result);
|
||||
|
||||
Assert.IsTrue(result.Title.Contains(expected, System.StringComparison.Ordinal), $"Calc trigMode convert result isn't correct. Current result: {result.Title}");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
// 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 Microsoft.CmdPal.Ext.Calc.Helper;
|
||||
|
||||
namespace Microsoft.CmdPal.Ext.Calc.UnitTests;
|
||||
|
||||
public class Settings : ISettingsInterface
|
||||
{
|
||||
private readonly CalculateEngine.TrigMode trigUnit;
|
||||
private readonly bool inputUseEnglishFormat;
|
||||
private readonly bool outputUseEnglishFormat;
|
||||
private readonly bool closeOnEnter;
|
||||
|
||||
public Settings(
|
||||
CalculateEngine.TrigMode trigUnit = CalculateEngine.TrigMode.Radians,
|
||||
bool inputUseEnglishFormat = false,
|
||||
bool outputUseEnglishFormat = false,
|
||||
bool closeOnEnter = true)
|
||||
{
|
||||
this.trigUnit = trigUnit;
|
||||
this.inputUseEnglishFormat = inputUseEnglishFormat;
|
||||
this.outputUseEnglishFormat = outputUseEnglishFormat;
|
||||
this.closeOnEnter = closeOnEnter;
|
||||
}
|
||||
|
||||
public CalculateEngine.TrigMode TrigUnit => trigUnit;
|
||||
|
||||
public bool InputUseEnglishFormat => inputUseEnglishFormat;
|
||||
|
||||
public bool OutputUseEnglishFormat => outputUseEnglishFormat;
|
||||
|
||||
public bool CloseOnEnter => closeOnEnter;
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
// 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 Microsoft.CmdPal.Ext.Calc.Helper;
|
||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||
|
||||
namespace Microsoft.CmdPal.Ext.Calc.UnitTests;
|
||||
|
||||
[TestClass]
|
||||
public class SettingsManagerTests
|
||||
{
|
||||
[TestMethod]
|
||||
public void SettingsManagerInitializationTest()
|
||||
{
|
||||
// Act
|
||||
var settingsManager = new SettingsManager();
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(settingsManager);
|
||||
Assert.IsNotNull(settingsManager.Settings);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void SettingsInterfaceTest()
|
||||
{
|
||||
// Act
|
||||
ISettingsInterface settings = new SettingsManager();
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(settings);
|
||||
Assert.IsTrue(settings.TrigUnit == CalculateEngine.TrigMode.Radians);
|
||||
Assert.IsFalse(settings.InputUseEnglishFormat);
|
||||
Assert.IsFalse(settings.OutputUseEnglishFormat);
|
||||
Assert.IsTrue(settings.CloseOnEnter);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void MockSettingsTest()
|
||||
{
|
||||
// Act
|
||||
var settings = new Settings(
|
||||
trigUnit: CalculateEngine.TrigMode.Degrees,
|
||||
inputUseEnglishFormat: true,
|
||||
outputUseEnglishFormat: true,
|
||||
closeOnEnter: false);
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(settings);
|
||||
Assert.AreEqual(CalculateEngine.TrigMode.Degrees, settings.TrigUnit);
|
||||
Assert.IsTrue(settings.InputUseEnglishFormat);
|
||||
Assert.IsTrue(settings.OutputUseEnglishFormat);
|
||||
Assert.IsFalse(settings.CloseOnEnter);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user