f916cfad6b
This commit restructures the EventOccurrenceParser by breaking down its functionality into modular components, including EventDefinitionResolver, LineClassifier, LocationPatternMatcher, SectionHeaderMatcher, TimeLocationParser, and TimeParser. This refactoring enhances code readability and maintainability, allowing for easier updates and testing. Additionally, the TextUtil class has been updated to include input sanitization methods. Comprehensive unit tests have been added to ensure the correctness of the new parsing logic and to validate the handling of various event occurrence scenarios.
157 lines
3.5 KiB
C#
157 lines
3.5 KiB
C#
using Core.Parsers.EventOccurrence;
|
|
using NUnit.Framework;
|
|
|
|
namespace Tests.Parsers.EventOccurrence;
|
|
|
|
[TestFixture]
|
|
public class TimeParser_Tests
|
|
{
|
|
[Test]
|
|
public void Parse_NOON_Returns12PM()
|
|
{
|
|
// Act
|
|
var result = TimeParser.Parse("NOON");
|
|
|
|
// Assert
|
|
Assert.That(result, Is.EqualTo(new TimeOnly(12, 0, 0)));
|
|
}
|
|
|
|
[Test]
|
|
public void Parse_TBD_ReturnsMidnight()
|
|
{
|
|
// Act
|
|
var result = TimeParser.Parse("TBD");
|
|
|
|
// Assert
|
|
Assert.That(result, Is.EqualTo(new TimeOnly(0, 0, 0)));
|
|
}
|
|
|
|
[Test]
|
|
public void Parse_TBD_CaseInsensitive_ReturnsMidnight()
|
|
{
|
|
// Act
|
|
var result = TimeParser.Parse("tbd");
|
|
|
|
// Assert
|
|
Assert.That(result, Is.EqualTo(new TimeOnly(0, 0, 0)));
|
|
}
|
|
|
|
[Test]
|
|
public void Parse_AMTime_ReturnsCorrectTime()
|
|
{
|
|
// Act
|
|
var result = TimeParser.Parse("10:30 a.m.");
|
|
|
|
// Assert
|
|
Assert.That(result, Is.EqualTo(new TimeOnly(10, 30, 0)));
|
|
}
|
|
|
|
[Test]
|
|
public void Parse_PMTime_ReturnsCorrectTime()
|
|
{
|
|
// Act
|
|
var result = TimeParser.Parse("3:45 p.m.");
|
|
|
|
// Assert
|
|
Assert.That(result, Is.EqualTo(new TimeOnly(15, 45, 0)));
|
|
}
|
|
|
|
[Test]
|
|
public void Parse_TimeRange_ExtractsStartTime()
|
|
{
|
|
// Act
|
|
var result = TimeParser.Parse("10:00 a.m. - 12:00 p.m.");
|
|
|
|
// Assert
|
|
Assert.That(result, Is.EqualTo(new TimeOnly(10, 0, 0)));
|
|
}
|
|
|
|
[Test]
|
|
public void Parse_TimeRangeWithNOON_ExtractsStartTime()
|
|
{
|
|
// Act
|
|
var result = TimeParser.Parse("10:30 a.m. - NOON");
|
|
|
|
// Assert
|
|
Assert.That(result, Is.EqualTo(new TimeOnly(10, 30, 0)));
|
|
}
|
|
|
|
[Test]
|
|
public void Parse_TimeWithoutMinutes_ReturnsCorrectTime()
|
|
{
|
|
// Act
|
|
var result = TimeParser.Parse("3 p.m.");
|
|
|
|
// Assert
|
|
Assert.That(result, Is.EqualTo(new TimeOnly(15, 0, 0)));
|
|
}
|
|
|
|
[Test]
|
|
public void Parse_TimeWithoutColon_ReturnsCorrectTime()
|
|
{
|
|
// Act
|
|
var result = TimeParser.Parse("1030 a.m.");
|
|
|
|
// Assert
|
|
Assert.That(result, Is.EqualTo(new TimeOnly(10, 30, 0)));
|
|
}
|
|
|
|
[Test]
|
|
public void Parse_12PM_Returns12PM_NotMidnight()
|
|
{
|
|
// Act
|
|
var result = TimeParser.Parse("12:00 p.m.");
|
|
|
|
// Assert
|
|
Assert.That(result, Is.EqualTo(new TimeOnly(12, 0, 0)));
|
|
}
|
|
|
|
[Test]
|
|
public void Parse_12AM_ReturnsMidnight()
|
|
{
|
|
// Act
|
|
var result = TimeParser.Parse("12:00 a.m.");
|
|
|
|
// Assert
|
|
Assert.That(result, Is.EqualTo(new TimeOnly(0, 0, 0)));
|
|
}
|
|
|
|
[Test]
|
|
public void Parse_InvalidFormat_ThrowsFormatException()
|
|
{
|
|
// Act & Assert
|
|
Assert.Throws<FormatException>(() => TimeParser.Parse("invalid time format"));
|
|
}
|
|
|
|
[Test]
|
|
public void ExtractStartTime_Range_ReturnsStartTime()
|
|
{
|
|
// Act
|
|
var result = TimeParser.ExtractStartTime("10:00 a.m. - 12:00 p.m.");
|
|
|
|
// Assert
|
|
Assert.That(result, Is.EqualTo("10:00 a.m."));
|
|
}
|
|
|
|
[Test]
|
|
public void ExtractStartTime_NoRange_ReturnsOriginal()
|
|
{
|
|
// Act
|
|
var result = TimeParser.ExtractStartTime("3:00 p.m.");
|
|
|
|
// Assert
|
|
Assert.That(result, Is.EqualTo("3:00 p.m."));
|
|
}
|
|
|
|
[Test]
|
|
public void ExtractStartTime_RangeWithNOON_ReturnsStartTime()
|
|
{
|
|
// Act
|
|
var result = TimeParser.ExtractStartTime("10:30 a.m. - NOON");
|
|
|
|
// Assert
|
|
Assert.That(result, Is.EqualTo("10:30 a.m."));
|
|
}
|
|
}
|
|
|