/ src / modules / cmdpal / Tests / Microsoft.CmdPal.Ext.TimeDate.UnitTests / TimeDateCalculatorTests.cs
TimeDateCalculatorTests.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;
  6  using System.Collections.Generic;
  7  using System.Globalization;
  8  using System.Linq;
  9  using Microsoft.CmdPal.Ext.TimeDate.Helpers;
 10  using Microsoft.CommandPalette.Extensions.Toolkit;
 11  using Microsoft.VisualStudio.TestTools.UnitTesting;
 12  
 13  namespace Microsoft.CmdPal.Ext.TimeDate.UnitTests;
 14  
 15  [TestClass]
 16  public class TimeDateCalculatorTests
 17  {
 18      private CultureInfo originalCulture;
 19      private CultureInfo originalUiCulture;
 20  
 21      [TestInitialize]
 22      public void Setup()
 23      {
 24          // Set culture to 'en-us'
 25          originalCulture = CultureInfo.CurrentCulture;
 26          CultureInfo.CurrentCulture = new CultureInfo("en-us", false);
 27          originalUiCulture = CultureInfo.CurrentUICulture;
 28          CultureInfo.CurrentUICulture = new CultureInfo("en-us", false);
 29      }
 30  
 31      [TestCleanup]
 32      public void Cleanup()
 33      {
 34          // Restore original culture
 35          CultureInfo.CurrentCulture = originalCulture;
 36          CultureInfo.CurrentUICulture = originalUiCulture;
 37      }
 38  
 39      [TestMethod]
 40      public void CountAllResults()
 41      {
 42          // Setup
 43          var settings = new SettingsManager();
 44  
 45          // Act
 46          var results = TimeDateCalculator.ExecuteSearch(settings, string.Empty);
 47  
 48          // Assert
 49          Assert.IsTrue(results.Count > 0);
 50      }
 51  
 52      [TestMethod]
 53      public void ValidateEmptyQuery()
 54      {
 55          // Setup
 56          var settings = new SettingsManager();
 57  
 58          // Act
 59          var results = TimeDateCalculator.ExecuteSearch(settings, string.Empty);
 60  
 61          // Assert
 62          Assert.IsNotNull(results);
 63      }
 64  
 65      [TestMethod]
 66      public void ValidateNullQuery()
 67      {
 68          // Setup
 69          var settings = new SettingsManager();
 70  
 71          // Act
 72          var results = TimeDateCalculator.ExecuteSearch(settings, null);
 73  
 74          // Assert
 75          Assert.IsNotNull(results);
 76      }
 77  
 78      [TestMethod]
 79      public void ValidateTimeParsing()
 80      {
 81          // Setup
 82          var settings = new SettingsManager();
 83          var query = "time::10:30:45";
 84  
 85          // Act
 86          var results = TimeDateCalculator.ExecuteSearch(settings, query);
 87  
 88          // Assert
 89          Assert.IsNotNull(results);
 90          Assert.IsTrue(results.Count >= 0); // May have 0 results due to invalid format, but shouldn't crash
 91      }
 92  
 93      [TestMethod]
 94      public void ValidateDateParsing()
 95      {
 96          // Setup
 97          var settings = new SettingsManager();
 98          var query = "date::12/25/2023";
 99  
100          // Act
101          var results = TimeDateCalculator.ExecuteSearch(settings, query);
102  
103          // Assert
104          Assert.IsNotNull(results);
105          Assert.IsTrue(results.Count >= 0); // May have 0 results due to invalid format, but shouldn't crash
106      }
107  
108      [TestMethod]
109      public void ValidateCommonQueries()
110      {
111          // Setup
112          var settings = new SettingsManager();
113          var queries = new[] { "time", "date", "now", "current" };
114  
115          foreach (var query in queries)
116          {
117              // Act
118              var results = TimeDateCalculator.ExecuteSearch(settings, query);
119  
120              // Assert
121              Assert.IsNotNull(results, $"Results should not be null for query: {query}");
122          }
123      }
124  }