using System; using System.Linq; using NUnit.Framework; using Developpez.Dotnet; namespace Developpez.Dotnet.Tests { [TestFixture] public class DateExtensionsTests { private DateTime y2k = new DateTime(2000, 1, 1); private long y2kAsUnix = 946684800; [Test] public void Check_that_20_minutes_from_is_correct() { Assert.AreEqual(20.Minutes().From(y2k), y2k.AddMinutes(20)); } [Test] public void Check_that_20_minutes_fromnow_is_correct() { Assert.AreEqual(20.Minutes().FromNow(), DateTime.Now.AddMinutes(20)); } [Test] public void Check_that_20_minutes_before_is_correct() { Assert.AreEqual(20.Minutes().Before(y2k), y2k.AddMinutes(-20)); } [Test] public void Check_that_20_minutes_ago_is_correct() { Assert.AreEqual(20.Minutes().Ago(), DateTime.Now.AddMinutes(-20)); } [Test] public void Check_that_20_hours_is_correct() { Assert.AreEqual(20.Hours(), TimeSpan.FromHours(20)); } [Test] public void Check_that_20_seconds_is_correct() { Assert.AreEqual(20.Seconds(), TimeSpan.FromSeconds(20)); } [Test] public void Check_that_20_days_is_correct() { Assert.AreEqual(20.Days(), TimeSpan.FromDays(20)); } [Test] public void Check_that_ToUnixTimestamp_Returns_y2kasUnix_timestamp_when_given_y2k() { Assert.AreEqual(y2k.ToUnixTimestamp(), y2kAsUnix); } [Test] public void Check_that_ToDateTime_Returns_y2k_timestamp_when_given_y2kAsUnix() { Assert.AreEqual(y2kAsUnix.ToDateTime(), y2k); } [Test] public void Check_next_previous_DayOfWeek() { DateTime date = new DateTime(1981, 9, 10); DateTime nextSaturday = date.Next(DayOfWeek.Saturday); Assert.AreEqual(new DateTime(1981, 9, 12), nextSaturday); DateTime lastMonday = date.Previous(DayOfWeek.Monday); Assert.AreEqual(new DateTime(1981, 9, 7), lastMonday); } [Test] public void Check_AddWorkingDays() { var actual = // Monday 7 to Sunday 13 March 2011 from i in Enumerable.Range(7, 7).ToArray() let date = new DateTime(2011, 3, i) // Add -8 to 8 working days from days in Enumerable.Range(-8, 17) select date.AddWorkingDays(days).Day; var expected = new int[] { 23, 24, 25, 28, 1, 2, 3, 4, // from Monday 7 (days < 0) 7, 8, 9, 10, 11, 14, 15, 16, 17, // from Monday 7 (days >= 0) 24, 25, 28, 1, 2, 3, 4, 7, // from Tuesday 8 (days < 0) 8, 9, 10, 11, 14, 15, 16, 17, 18, // from Tuesday 8 (days >= 0) 25, 28, 1, 2, 3, 4, 7, 8, // from Wednesday 9 (days < 0) 9, 10, 11, 14, 15, 16, 17, 18, 21, // from Wednesday 9 (days >= 0) 28, 1, 2, 3, 4, 7, 8, 9, // from Thursday 10 (days < 0) 10, 11, 14, 15, 16, 17, 18, 21, 22, // from Thursday 10 (days >= 0) 1, 2, 3, 4, 7, 8, 9, 10, // from Friday 11 (days < 0) 11, 14, 15, 16, 17, 18, 21, 22, 23, // from Friday 12 (days >= 0) 2, 3, 4, 7, 8, 9, 10, 11, // from Saturday 12 (days < 0) 12, 14, 15, 16, 17, 18, 21, 22, 23, // from Saturday 12 (days >= 0) 2, 3, 4, 7, 8, 9, 10, 11, // from Sunday 13 (days < 0) 13, 14, 15, 16, 17, 18, 21, 22, 23, // from Sunday 13 (days >= 0) }; Assert2.AreSequenceEqual(expected, actual); } [Test] public void Check_IsWorkingDays() { DateTime monday = new DateTime(2011, 3, 7); DateTime tuesday = monday.AddDays(1); DateTime wednesday = monday.AddDays(2); DateTime thursday = monday.AddDays(3); DateTime friday = monday.AddDays(4); DateTime saturday = monday.AddDays(5); DateTime sunday = monday.AddDays(6); Assert.IsTrue(monday.IsWorkingDay()); Assert.IsTrue(tuesday.IsWorkingDay()); Assert.IsTrue(wednesday.IsWorkingDay()); Assert.IsTrue(thursday.IsWorkingDay()); Assert.IsTrue(friday.IsWorkingDay()); Assert.IsFalse(saturday.IsWorkingDay()); Assert.IsFalse(sunday.IsWorkingDay()); } } }