blob: 3bec65cd8153874d29ab98dbe646e9c33ae737d2 [file] [log] [blame]
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);
}
}
}