Files
Common-VS2019/SacsCoreUnitTests/Standard/Base/Utils/DateUtil_Tester.cs
T
2021-05-05 15:36:28 +01:00

260 lines
11 KiB
C#

using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Sarand.Net.Standard.Base.Utils;
namespace Sarand.UnitTests.Core.Base.Utils
{
//=======================================================================
[TestClass]
public class DateUtil_Tester
{
//-------------------------------------------------------------------
// Data members.
private Random random = new Random();
private DateTime today = DateTime.Today;
//-------------------------------------------------------------------
[TestMethod]
public void DateTime_CTR_Void ()
{
Assert.IsNotNull(new DateTime());
Assert.AreEqual(new DateTime(), DateTime.MinValue);
}
//-------------------------------------------------------------------
// S e t T i m e
//-------------------------------------------------------------------
[TestMethod]
public void SetTime_DateTime ()
{
for (int i = 0; i < 1000; i++)
{
DateTime date = new DateTime(random.Next(1970, 2100), random.Next(1, 13), random.Next(1, 28), random.Next(0, 24), random.Next(0, 60), random.Next(0, 60));
DateTime time = new DateTime(random.Next(1970, 2100), random.Next(1, 13), random.Next(1, 28), random.Next(0, 24), random.Next(0, 60), random.Next(0, 60));
Assert.AreEqual(DateUtil.FormatXmlDate(date), DateUtil.FormatXmlDate(date.SetTime(time)));
Assert.AreEqual(DateUtil.FormatXmlTime(time), DateUtil.FormatXmlTime(date.SetTime(time)));
}
}
[TestMethod]
public void SetTime_TimeSpan ()
{
for (int i = 0; i < 1000; i++)
{
DateTime date = new DateTime(random.Next(1970, 2100), random.Next(1, 13), random.Next(1, 28), random.Next(0, 24), random.Next(0, 60), random.Next(0, 60));
TimeSpan time = new TimeSpan(random.Next(0, 24), random.Next(0, 60), random.Next(0, 60));
Assert.AreEqual(DateUtil.FormatXmlDate(date), DateUtil.FormatXmlDate(date.SetTime(time)));
Assert.AreEqual(DateUtil.FormatXmlTime(today + time), DateUtil.FormatXmlTime(date.SetTime(time)));
}
}
//-------------------------------------------------------------------
// R o u n d T i m e
//-------------------------------------------------------------------
[TestMethod]
public void RoundTime ()
{
for (int i = 0; i < 2000; i++)
{
DateTime datetime = new DateTime(random.Next(1970, 2100), random.Next(1, 13), random.Next(1, 28), random.Next(0, 24), random.Next(0, 60), random.Next(0, 60));
ushort intervalMins = (ushort)random.Next(1,61);
{
// Round up without seconds.
int expectedMins = ((datetime.Minute / intervalMins) + (datetime.Minute % intervalMins > 0 ? 1 : 0)) * intervalMins;
DateTime expected = datetime.Date + new TimeSpan(datetime.Hour,expectedMins,0);
DateTime rounded = DateUtil.RoundTime(datetime,intervalMins,DateUtil.RoundingDirection.Up,true);
Assert.AreEqual(DateUtil.FormatXmlDateTime(expected), DateUtil.FormatXmlDateTime(rounded));
}
{
// Round up with seconds.
int expectedMins = ((datetime.Minute / intervalMins) + ((datetime.Minute * 60 + datetime.Second) % (intervalMins * 60) > 0 ? 1 : 0)) * intervalMins;
DateTime expected = datetime.Date + new TimeSpan(datetime.Hour,expectedMins,0);
DateTime rounded = DateUtil.RoundTime(datetime,intervalMins,DateUtil.RoundingDirection.Up,false);
Assert.AreEqual(DateUtil.FormatXmlDateTime(expected), DateUtil.FormatXmlDateTime(rounded));
}
{
// Round down without seconds.
int expectedMins = (datetime.Minute / intervalMins) * intervalMins;
DateTime expected = datetime.Date + new TimeSpan(datetime.Hour,expectedMins,0);
DateTime rounded = DateUtil.RoundTime(datetime,intervalMins,DateUtil.RoundingDirection.Down,true);
Assert.AreEqual(DateUtil.FormatXmlDateTime(expected), DateUtil.FormatXmlDateTime(rounded));
}
{
// Round down with seconds.
int expectedMins = (datetime.Minute / intervalMins) * intervalMins;
DateTime expected = datetime.Date + new TimeSpan(datetime.Hour,expectedMins,0);
DateTime rounded = DateUtil.RoundTime(datetime,intervalMins,DateUtil.RoundingDirection.Down,false);
Assert.AreEqual(DateUtil.FormatXmlDateTime(expected), DateUtil.FormatXmlDateTime(rounded));
}
{
// Nearest without seconds.
int expectedMins = ((datetime.Minute / intervalMins) + (datetime.Minute % intervalMins > (intervalMins/2) ? 1 : 0)) * intervalMins;
DateTime expected = datetime.Date + new TimeSpan(datetime.Hour,expectedMins,0);
DateTime rounded = DateUtil.RoundTime(datetime,intervalMins,DateUtil.RoundingDirection.Nearest,true);
if (!DateUtil.FormatXmlDateTime(expected).Equals(DateUtil.FormatXmlDateTime(rounded)))
{
//String s = "";
}
Assert.AreEqual(DateUtil.FormatXmlDateTime(expected), DateUtil.FormatXmlDateTime(rounded));
}
{
// Nearest with seconds.
int expectedMins = ((datetime.Minute / intervalMins) + ((datetime.Minute * 60 + datetime.Second) % (intervalMins * 60) > (intervalMins*60/2) ? 1 : 0)) * intervalMins;
DateTime expected = datetime.Date + new TimeSpan(datetime.Hour,expectedMins,0);
DateTime rounded = DateUtil.RoundTime(datetime,intervalMins,DateUtil.RoundingDirection.Nearest,false);
if (!DateUtil.FormatXmlDateTime(expected).Equals(DateUtil.FormatXmlDateTime(rounded)))
{
//String s = "";
}
Assert.AreEqual(DateUtil.FormatXmlDateTime(expected), DateUtil.FormatXmlDateTime(rounded));
}
}
}
//-------------------------------------------------------------------
// C o n v e r t F r o m S t r i n g
//-------------------------------------------------------------------
[TestMethod]
public void DateTime_ParseXmlDate ()
{
String xmlDate = "2015-05-28";
Assert.AreEqual(new DateTime(2015, 5, 28), DateUtil.ParseXmlDate(xmlDate));
}
//-------------------------------------------------------------------
[TestMethod]
public void DateTime_ParseXmlTime ()
{
String xmlTime = "16:25:57";
Assert.AreEqual(new DateTime(today.Year, today.Month, today.Day, 16, 25, 57), DateUtil.ParseXmlTime(xmlTime));
}
//-------------------------------------------------------------------
[TestMethod]
public void DateTime_ParseXmlDateTime ()
{
String xmlDateTime = "2010-05-28T17:05:01";
Assert.AreEqual(new DateTime(2010, 5, 28, 17, 5, 1), DateUtil.ParseXmlDateTime(xmlDateTime));
}
//-------------------------------------------------------------------------
// V a l i d a t i o n
//-------------------------------------------------------------------------
[TestMethod]
public void DateTime_IsValid ()
{
// Valid.
Assert.AreEqual(true, DateUtil.IsValid(DateTime.Now));
Assert.AreEqual(true, DateUtil.IsValid(DateTime.Today));
Assert.AreEqual(true, DateUtil.IsValid(new DateTime(2018, 2, 12, 10, 32, 56)));
// Invalid.
Assert.AreEqual(false, DateUtil.IsValid(DateTime.MinValue));
Assert.AreEqual(false, DateUtil.IsValid(DateTime.MaxValue));
Assert.AreEqual(false, DateUtil.IsValid(new DateTime(0)));
Assert.AreEqual(false, DateUtil.IsValid(new DateTime(1, 1, 1)));
// Nullable.
Assert.AreEqual(false, DateUtil.IsValid(null));
}
//-------------------------------------------------------------------
// Relative dates - Week.
// DateUtil.StartOfWeek
[TestMethod]
public void DateTime_StartOfWeek ()
{
for (int i = 0; i < 1000; i++)
{
// Random date between 0AD and 3000AD (or thereabouts):
DateTime date = new DateTime(random.Next(0, 365 * 3000) * TimeSpan.TicksPerDay);
//Trace.WriteLine("DateUtil_Tester.DateTime_StartOfWeek Date=" + date.Format("ddd d-MMM-yyyy") + ", Start of week=" + date.StartOfWeek().Format("ddd d-MMM-yyyy"));
Assert.AreEqual(date.StartOfWeek().Format("ddd"), "Sun");
}
}
// DateUtil.StartOfWeek
[TestMethod]
public void DateTime_StartOfWorkingWeek ()
{
for (int i = 0; i < 1000; i++)
{
// Random date between 0AD and 3000AD (or thereabouts):
DateTime date = new DateTime(random.Next(0, 365 * 3000) * TimeSpan.TicksPerDay);
//Trace.WriteLine("DateUtil_Tester.DateTime_StartOfWorkingWeek Date=" + date.Format("ddd d-MMM-yyyy") + ", Start of week=" + date.StartOfWorkingWeek().Format("ddd d-MMM-yyyy"));
Assert.AreEqual(date.StartOfWorkingWeek().Format("ddd"), "Mon");
}
}
//-------------------------------------------------------------------
// Relative dates - Month.
// DateUtil.StartOfMonth
[TestMethod]
public void DateTime_StartOfMonth ()
{
DateTime dt20160723 = new DateTime(2016, 7, 23);
Assert.AreEqual(dt20160723.StartOfMonth(), new DateTime(2016, 7, 1));
}
// DateUtil.EndOfMonth
[TestMethod]
public void DateTime_DaysInMonth ()
{
DateTime dt20160723 = new DateTime(2016, 7, 23);
Assert.AreEqual(dt20160723.DaysInMonth(), 31);
}
// DateUtil.EndOfMonth
[TestMethod]
public void DateTime_EndOfMonth ()
{
DateTime dt20160723 = new DateTime(2016, 7, 23);
Assert.AreEqual(dt20160723.EndOfMonth(), new DateTime(2016, 7, 31));
}
//-------------------------------------------------------------------
// F o r m a t t i n g
//-------------------------------------------------------------------
[TestMethod]
public void DateTime_Format_Void ()
{
DateTime dt20160723 = new DateTime(2016, 7, 23);
DateTime dt20160723172829 = new DateTime(2016, 7, 23, 17, 28, 39);
Assert.AreEqual(dt20160723.Format("dd/MM/yyyy"), "23/07/2016");
Assert.AreEqual(dt20160723.Format("dd/MM/yyyy HH:mm:ss"), "23/07/2016 00:00:00");
Assert.AreEqual(dt20160723172829.Format("dd/MM/yyyy"), "23/07/2016");
Assert.AreEqual(dt20160723172829.Format("dd/MM/yyyy HH:mm:ss"), "23/07/2016 17:28:39");
}
//-------------------------------------------------------------------
[TestMethod]
public void DateTime_FormatXmlDate ()
{
DateTime dt20160723 = new DateTime(2016, 7, 23);
DateTime dt20160723172829 = new DateTime(2016, 7, 23, 17, 28, 39);
Assert.AreEqual("2016-07-23", DateUtil.FormatXmlDate(dt20160723));
Assert.AreEqual("2016-07-23", DateUtil.FormatXmlDate(dt20160723172829));
}
//-------------------------------------------------------------------
[TestMethod]
public void DateTime_FormatXmlTime ()
{
DateTime dt20160723172829 = new DateTime(2016, 7, 23, 17, 28, 39);
Assert.AreEqual("17:28:39", DateUtil.FormatXmlTime(dt20160723172829));
}
//-------------------------------------------------------------------
[TestMethod]
public void DateTime_FormatXmlDateTime ()
{
DateTime dt20160723172829 = new DateTime(2016, 7, 23, 17, 28, 39);
Assert.AreEqual("2016-07-23T17:28:39", DateUtil.FormatXmlDateTime(dt20160723172829));
}
//-------------------------------------------------------------------
}
//=======================================================================
}