|  | using System; | 
|  | using System.Collections.Generic; | 
|  | using System.Linq; | 
|  | using System.Text; | 
|  | using Microsoft.VisualStudio.TestTools.UnitTesting; | 
|  | using OfficeOpenXml.DataValidation; | 
|  |  | 
|  | namespace EPPlusTest.DataValidation | 
|  | { | 
|  | [TestClass] | 
|  | public class ExcelTimeTests | 
|  | { | 
|  | private ExcelTime _time; | 
|  | private readonly decimal SecondsPerHour = 3600; | 
|  | // private readonly decimal HoursPerDay = 24; | 
|  | private readonly decimal SecondsPerDay = 3600 * 24; | 
|  |  | 
|  | private decimal Round(decimal value) | 
|  | { | 
|  | return Math.Round(value, ExcelTime.NumberOfDecimals); | 
|  | } | 
|  |  | 
|  | [TestInitialize] | 
|  | public void Setup() | 
|  | { | 
|  | _time = new ExcelTime(); | 
|  | } | 
|  |  | 
|  | [TestCleanup] | 
|  | public void Cleanup() | 
|  | { | 
|  | _time = null; | 
|  | } | 
|  |  | 
|  | [TestMethod, ExpectedException(typeof(ArgumentException))] | 
|  | public void ExcelTimeTests_ConstructorWithValue_ShouldThrowIfValueIsLessThan0() | 
|  | { | 
|  | new ExcelTime(-1); | 
|  | } | 
|  |  | 
|  | [TestMethod, ExpectedException(typeof(ArgumentException))] | 
|  | public void ExcelTimeTests_ConstructorWithValue_ShouldThrowIfValueIsEqualToOrGreaterThan1() | 
|  | { | 
|  | new ExcelTime(1); | 
|  | } | 
|  |  | 
|  | [TestMethod, ExpectedException(typeof(InvalidOperationException))] | 
|  | public void ExcelTimeTests_Hour_ShouldThrowIfNegativeValue() | 
|  | { | 
|  | _time.Hour = -1; | 
|  | } | 
|  |  | 
|  | [TestMethod, ExpectedException(typeof(InvalidOperationException))] | 
|  | public void ExcelTimeTests_Minute_ShouldThrowIfNegativeValue() | 
|  | { | 
|  | _time.Minute = -1; | 
|  | } | 
|  |  | 
|  | [TestMethod, ExpectedException(typeof(InvalidOperationException))] | 
|  | public void ExcelTimeTests_Minute_ShouldThrowIValueIsGreaterThan59() | 
|  | { | 
|  | _time.Minute = 60; | 
|  | } | 
|  |  | 
|  | [TestMethod, ExpectedException(typeof(InvalidOperationException))] | 
|  | public void ExcelTimeTests_Second_ShouldThrowIfNegativeValue() | 
|  | { | 
|  | _time.Second = -1; | 
|  | } | 
|  |  | 
|  | [TestMethod, ExpectedException(typeof(InvalidOperationException))] | 
|  | public void ExcelTimeTests_Second_ShouldThrowIValueIsGreaterThan59() | 
|  | { | 
|  | _time.Second = 60; | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void ExcelTimeTests_ToExcelTime_HourIsSet() | 
|  | { | 
|  | // Act | 
|  | _time.Hour = 1; | 
|  |  | 
|  | // Assert | 
|  | Assert.AreEqual(Round(SecondsPerHour/SecondsPerDay), _time.ToExcelTime()); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void ExcelTimeTests_ToExcelTime_MinuteIsSet() | 
|  | { | 
|  | // Arrange | 
|  | decimal expected = SecondsPerHour + (20M * 60M); | 
|  | // Act | 
|  | _time.Hour = 1; | 
|  | _time.Minute = 20; | 
|  |  | 
|  | // Assert | 
|  | Assert.AreEqual(Round(expected/SecondsPerDay), _time.ToExcelTime()); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void ExcelTimeTests_ToExcelTime_SecondIsSet() | 
|  | { | 
|  | // Arrange | 
|  | decimal expected = SecondsPerHour + (20M * 60M) + 10M; | 
|  | // Act | 
|  | _time.Hour = 1; | 
|  | _time.Minute = 20; | 
|  | _time.Second = 10; | 
|  |  | 
|  | // Assert | 
|  | Assert.AreEqual(Round(expected / SecondsPerDay), _time.ToExcelTime()); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void ExcelTimeTests_ConstructorWithValue_ShouldSetHour() | 
|  | { | 
|  | // Arrange | 
|  | decimal value = 3660M/(decimal)SecondsPerDay; | 
|  |  | 
|  | // Act | 
|  | var time = new ExcelTime(value); | 
|  |  | 
|  | // Assert | 
|  | Assert.AreEqual(1, time.Hour); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void ExcelTimeTests_ConstructorWithValue_ShouldSetMinute() | 
|  | { | 
|  | // Arrange | 
|  | decimal value = 3660M / (decimal)SecondsPerDay; | 
|  |  | 
|  | // Act | 
|  | var time = new ExcelTime(value); | 
|  |  | 
|  | // Assert | 
|  | Assert.AreEqual(1, time.Minute); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void ExcelTimeTests_ConstructorWithValue_ShouldSetSecond() | 
|  | { | 
|  | // Arrange | 
|  | decimal value = 3662M / (decimal)SecondsPerDay; | 
|  |  | 
|  | // Act | 
|  | var time = new ExcelTime(value); | 
|  |  | 
|  | // Assert | 
|  | Assert.AreEqual(2, time.Second); | 
|  | } | 
|  | } | 
|  | } |