260 lines
11 KiB
C#
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("Sun", date.StartOfWeek().Format("ddd"));
|
|
}
|
|
}
|
|
// 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("Mon", date.StartOfWorkingWeek().Format("ddd"));
|
|
}
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// 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(31, dt20160723.DaysInMonth());
|
|
}
|
|
// 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("23/07/2016", dt20160723.Format("dd/MM/yyyy"));
|
|
Assert.AreEqual("23/07/2016 00:00:00", dt20160723.Format("dd/MM/yyyy HH:mm:ss"));
|
|
|
|
Assert.AreEqual("23/07/2016", dt20160723172829.Format("dd/MM/yyyy"));
|
|
Assert.AreEqual("23/07/2016 17:28:39", dt20160723172829.Format("dd/MM/yyyy HH:mm:ss"));
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
[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));
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
}
|
|
//=======================================================================
|
|
}
|