QueryTests.cs
 1  // Copyright (c) Microsoft Corporation
 2  // The Microsoft Corporation licenses this file to you under the MIT license.
 3  // See the LICENSE file in the project root for more information.
 4  
 5  using System.Linq;
 6  using Microsoft.CmdPal.Ext.Calc.Helper;
 7  using Microsoft.CmdPal.Ext.Calc.Pages;
 8  using Microsoft.CmdPal.Ext.UnitTestBase;
 9  using Microsoft.VisualStudio.TestTools.UnitTesting;
10  
11  namespace Microsoft.CmdPal.Ext.Calc.UnitTests;
12  
13  [TestClass]
14  public class QueryTests : CommandPaletteUnitTestBase
15  {
16      [DataTestMethod]
17      [DataRow("2+2", "4")]
18      [DataRow("5*3", "15")]
19      [DataRow("10/2", "5")]
20      [DataRow("sqrt(16)", "4")]
21      [DataRow("2^3", "8")]
22      public void TopLevelPageQueryTest(string input, string expectedResult)
23      {
24          var settings = new Settings();
25          var page = new CalculatorListPage(settings);
26  
27          // Simulate query execution
28          page.UpdateSearchText(string.Empty, input);
29          var result = page.GetItems();
30  
31          Assert.IsTrue(result.Length == 1, "Valid input should always return result");
32  
33          var firstResult = result.FirstOrDefault();
34  
35          Assert.IsNotNull(result);
36          Assert.IsTrue(
37              firstResult.Title.Contains(expectedResult),
38              $"Expected result to contain '{expectedResult}' but got '{firstResult.Title}'");
39      }
40  
41      [TestMethod]
42      public void EmptyQueryTest()
43      {
44          var settings = new Settings();
45          var page = new CalculatorListPage(settings);
46          page.UpdateSearchText("abc", string.Empty);
47          var results = page.GetItems();
48          Assert.IsNotNull(results);
49  
50          var firstItem = results.FirstOrDefault();
51          Assert.AreEqual("Type an equation...", firstItem.Title);
52      }
53  
54      [TestMethod]
55      public void InvalidExpressionTest()
56      {
57          var settings = new Settings();
58  
59          var page = new CalculatorListPage(settings);
60  
61          // Simulate query execution
62          page.UpdateSearchText(string.Empty, "invalid expression");
63          var result = page.GetItems().FirstOrDefault();
64  
65          Assert.AreEqual("Type an equation...", result.Title);
66      }
67  
68      [DataTestMethod]
69      [DataRow("sin(60)", "-0.30481", CalculateEngine.TrigMode.Radians)]
70      [DataRow("sin(60)", "0.866025", CalculateEngine.TrigMode.Degrees)]
71      [DataRow("sin(60)", "0.809016", CalculateEngine.TrigMode.Gradians)]
72      public void TrigModeSettingsTest(string input, string expected, CalculateEngine.TrigMode trigMode)
73      {
74          var settings = new Settings(trigUnit: trigMode, outputUseEnglishFormat: true);
75  
76          var page = new CalculatorListPage(settings);
77  
78          page.UpdateSearchText(string.Empty, input);
79          var result = page.GetItems().FirstOrDefault();
80  
81          Assert.IsNotNull(result);
82  
83          Assert.IsTrue(result.Title.Contains(expected, System.StringComparison.Ordinal), $"Calc trigMode convert result isn't correct. Current result: {result.Title}");
84      }
85  }