Add Sprache package and enhance event occurrence parsing with new grammar rules
This commit is contained in:
@@ -469,6 +469,153 @@ public class EventOccurrenceParserIssues_Tests
|
||||
EventOccurrenceParserTestHelpers.CleanupTempFile(tempFile);
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Parse_AllMonths_AreSupported()
|
||||
{
|
||||
// Arrange
|
||||
var months = new[] { "January", "February", "March", "April", "May", "June",
|
||||
"July", "August", "September", "October", "November", "December" };
|
||||
var events = new[] { EventOccurrenceParserTestHelpers.CreateTestEvent("Test Event") };
|
||||
var locationConfig = EventOccurrenceParserTestHelpers.CreateLocationConfig("Room *");
|
||||
|
||||
foreach (var month in months)
|
||||
{
|
||||
var testContent = $"Test Event – MS\n" +
|
||||
$"Submit Entry {month} 15 3:00 p.m. Room A";
|
||||
var tempFile = EventOccurrenceParserTestHelpers.CreateTempFile(testContent);
|
||||
var parser = new EventOccurrenceParser(tempFile, events, locationConfig);
|
||||
|
||||
try
|
||||
{
|
||||
// Act
|
||||
var result = parser.Parse();
|
||||
|
||||
// Assert
|
||||
if (result.Issues.Count > 0)
|
||||
{
|
||||
var issueMessages = string.Join("; ", result.Issues.Select(i => $"{i.IssueType}: {i.Message}"));
|
||||
Assert.Fail($"Month {month} had {result.Issues.Count} issue(s): {issueMessages}");
|
||||
}
|
||||
Assert.That(result.Issues, Has.Count.EqualTo(0),
|
||||
$"Month {month} should parse without issues");
|
||||
Assert.That(result.Occurrences.Values.Sum(list => list.Count), Is.EqualTo(1),
|
||||
$"Month {month} should produce one occurrence");
|
||||
|
||||
var occurrence = result.Occurrences.Values.First().First();
|
||||
Assert.That(occurrence.Date, Does.Contain(month),
|
||||
$"Occurrence date should contain {month}");
|
||||
}
|
||||
finally
|
||||
{
|
||||
EventOccurrenceParserTestHelpers.CleanupTempFile(tempFile);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Parse_SectionHeader_WithEnDash_IsRecognized()
|
||||
{
|
||||
// Arrange
|
||||
var testContent = "Biotechnology – MS\n" +
|
||||
"Submit Entry March 15 8:00 a.m. Room 1";
|
||||
var tempFile = EventOccurrenceParserTestHelpers.CreateTempFile(testContent);
|
||||
var events = new[] { EventOccurrenceParserTestHelpers.CreateTestEvent("Biotechnology") };
|
||||
var parser = new EventOccurrenceParser(tempFile, events);
|
||||
|
||||
try
|
||||
{
|
||||
// Act
|
||||
var result = parser.Parse();
|
||||
|
||||
// Assert
|
||||
Assert.That(result.Issues, Has.Count.EqualTo(0));
|
||||
Assert.That(result.Occurrences.Values.Sum(list => list.Count), Is.EqualTo(1));
|
||||
Assert.That(result.Occurrences.ContainsKey(events[0]));
|
||||
}
|
||||
finally
|
||||
{
|
||||
EventOccurrenceParserTestHelpers.CleanupTempFile(tempFile);
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Parse_SectionHeader_WithHyphen_IsRecognized()
|
||||
{
|
||||
// Arrange
|
||||
var testContent = "Architectural Design - HS\n" +
|
||||
"Submit Entry March 15 8:00 a.m. Room 1";
|
||||
var tempFile = EventOccurrenceParserTestHelpers.CreateTempFile(testContent);
|
||||
var events = new[] { EventOccurrenceParserTestHelpers.CreateTestEvent("Architectural Design") };
|
||||
var parser = new EventOccurrenceParser(tempFile, events);
|
||||
|
||||
try
|
||||
{
|
||||
// Act
|
||||
var result = parser.Parse();
|
||||
|
||||
// Assert
|
||||
Assert.That(result.Issues, Has.Count.EqualTo(0));
|
||||
Assert.That(result.Occurrences.Values.Sum(list => list.Count), Is.EqualTo(1));
|
||||
Assert.That(result.Occurrences.ContainsKey(events[0]));
|
||||
}
|
||||
finally
|
||||
{
|
||||
EventOccurrenceParserTestHelpers.CleanupTempFile(tempFile);
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Parse_SectionHeader_WithEmDash_IsRecognized()
|
||||
{
|
||||
// Arrange
|
||||
var testContent = "Coding — MS\n" +
|
||||
"Submit Entry March 15 8:00 a.m. Room 1";
|
||||
var tempFile = EventOccurrenceParserTestHelpers.CreateTempFile(testContent);
|
||||
var events = new[] { EventOccurrenceParserTestHelpers.CreateTestEvent("Coding") };
|
||||
var parser = new EventOccurrenceParser(tempFile, events);
|
||||
|
||||
try
|
||||
{
|
||||
// Act
|
||||
var result = parser.Parse();
|
||||
|
||||
// Assert
|
||||
Assert.That(result.Issues, Has.Count.EqualTo(0));
|
||||
Assert.That(result.Occurrences.Values.Sum(list => list.Count), Is.EqualTo(1));
|
||||
Assert.That(result.Occurrences.ContainsKey(events[0]));
|
||||
}
|
||||
finally
|
||||
{
|
||||
EventOccurrenceParserTestHelpers.CleanupTempFile(tempFile);
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Parse_SectionHeader_WithWhitespace_IsRecognized()
|
||||
{
|
||||
// Arrange
|
||||
var testContent = "Event Name – MS\n" +
|
||||
"Submit Entry March 15 8:00 a.m. Room 1";
|
||||
var tempFile = EventOccurrenceParserTestHelpers.CreateTempFile(testContent);
|
||||
var events = new[] { EventOccurrenceParserTestHelpers.CreateTestEvent("Event Name") };
|
||||
var parser = new EventOccurrenceParser(tempFile, events);
|
||||
|
||||
try
|
||||
{
|
||||
// Act
|
||||
var result = parser.Parse();
|
||||
|
||||
// Assert
|
||||
Assert.That(result.Issues, Has.Count.EqualTo(0));
|
||||
Assert.That(result.Occurrences.Values.Sum(list => list.Count), Is.EqualTo(1));
|
||||
Assert.That(result.Occurrences.ContainsKey(events[0]));
|
||||
}
|
||||
finally
|
||||
{
|
||||
EventOccurrenceParserTestHelpers.CleanupTempFile(tempFile);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user