Skip to content

Commit a7185a1

Browse files
authored
Merge pull request #48 from cs-25-sw-4-11/feat/recurrence-op
Recurrence operator
2 parents cfaccd7 + 2b5f51a commit a7185a1

17 files changed

+303
-116
lines changed

CSL.Tests/CalendarVisitorTest.cs

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System.Collections;
22
using Antlr4.Runtime;
33
using CSL.EventTypes;
4+
using CSL.TypeChecker;
45

56
namespace CSL.Tests;
67

@@ -11,7 +12,6 @@ public static IEnumerable CalendarTestCases
1112
{
1213
get
1314
{
14-
1515
yield return new TestCaseData(
1616
"1mth ++ 'abc'",
1717
new Calendar([
@@ -325,15 +325,14 @@ public static IEnumerable TestPlusCases
325325
[TestCaseSource(nameof(TestPlusCases))]
326326
public void TestPlusOp(string input, Event expectedResult)
327327
{
328-
var stream = CharStreams.fromString(input);
329-
var lexer = new CSLLexer(stream);
330-
331-
var tokens = new CommonTokenStream(lexer);
332-
var parser = new CSLParser(tokens);
333-
334-
var tree = parser.prog();
328+
var tree = Parse(input);
335329
var calendarVisitor = new CalendarVisitor();
336330

331+
// Type checking
332+
var typeCheckerVisitor = new TypeCheckerVisitor();
333+
typeCheckerVisitor.Visit(tree);
334+
335+
// Backend
337336
var expr = calendarVisitor.Visit(tree);
338337

339338
Assert.That(expr, Is.Not.Null);
@@ -354,13 +353,7 @@ public static IEnumerable TestNotPlusCases
354353
[TestCaseSource(nameof(TestNotPlusCases))]
355354
public void TestNotPlusOp(string input, Event expectedResult)
356355
{
357-
var stream = CharStreams.fromString(input);
358-
var lexer = new CSLLexer(stream);
359-
360-
var tokens = new CommonTokenStream(lexer);
361-
var parser = new CSLParser(tokens);
362-
363-
var tree = parser.prog();
356+
var tree = Parse(input);
364357
var calendarVisitor = new CalendarVisitor();
365358

366359
var expr = calendarVisitor.Visit(tree);
@@ -407,8 +400,14 @@ public static IEnumerable TestMinusCases
407400
[TestCaseSource(nameof(TestMinusCases))]
408401
public void TestMinusOp(string input, Event expectedResult)
409402
{
403+
var tree = Parse(input);
404+
405+
// Type checking
406+
var typeCheckerVisitor = new TypeCheckerVisitor();
407+
typeCheckerVisitor.Visit(tree);
408+
410409
var calendarVisitor = new CalendarVisitor();
411-
var expr = calendarVisitor.Visit(Parse(input));
410+
var expr = calendarVisitor.Visit(tree);
412411

413412
Assert.That(expr, Is.Not.Null);
414413
Assert.That(expr.Events[0], Is.EqualTo(expectedResult));
@@ -457,8 +456,14 @@ public static IEnumerable TestParentersesCases
457456
[TestCaseSource(nameof(TestParentersesCases))]
458457
public void TestParenterses(string input, Event expectedResult)
459458
{
459+
var tree = Parse(input);
460+
461+
// Type checking
462+
var typeCheckerVisitor = new TypeCheckerVisitor();
463+
typeCheckerVisitor.Visit(tree);
464+
460465
var calendarVisitor = new CalendarVisitor();
461-
var expr = calendarVisitor.Visit(Parse(input));
466+
var expr = calendarVisitor.Visit(tree);
462467

463468
Assert.That(expr, Is.Not.Null);
464469
Assert.That(expr.Events[0], Is.EqualTo(expectedResult));

CSL.Tests/Compiler/CompilerTests.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@ namespace CSL.Tests;
88
[TestFixture]
99
public class CompilerTests
1010
{
11-
[TestCase("Compiler/TestCases/casper.txt", "Compiler/TestCases/casper.result.ics")]
12-
[TestCase("Compiler/TestCases/casper.hide.txt", "Compiler/TestCases/casper.result.ics")]
13-
11+
[TestCase("Compiler/TestCases/casper.txt", "Compiler/TestCases/casper.expected.ics")]
12+
[TestCase("Compiler/TestCases/casper.hidden.txt", "Compiler/TestCases/casper.expected.ics")]
13+
[TestCase("Compiler/TestCases/case-study-2.txt", "Compiler/TestCases/case-study-2.expected.ics")]
1414
public void TestSourceCodeExamples(string inputFile, string expectedFile)
1515
{
1616
var input = File.ReadAllText(inputFile);

CSL.Tests/Compiler/GeneratorTests.cs

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System.Collections;
22
using CSL.EventTypes;
3+
using Ical.Net;
34
using Ical.Net.CalendarComponents;
45
using Ical.Net.DataTypes;
56
using Ical.Net.Serialization;
@@ -51,8 +52,42 @@ public static IEnumerable GeneratorTestCases
5152
]), ical);
5253
}
5354
}
55+
56+
public static IEnumerable CaseStudy2TestCase
57+
{
58+
get
59+
{
60+
var ical = new Ical.Net.Calendar();
61+
62+
var medsEvent = new CalendarEvent
63+
{
64+
Summary = "Take Medicine",
65+
Description = "Take the blue pill, Neo",
66+
Start = new CalDateTime(new DateTime(2025, 4, 11, 17, 25, 0)),
67+
End = new CalDateTime(new DateTime(2025, 4, 11, 17, 30, 0)),
68+
};
69+
70+
var dinnerEvent = new CalendarEvent
71+
{
72+
Summary = "Dinner",
73+
Description = "",
74+
Start = new CalDateTime(new DateTime(2025, 4, 11, 18, 0, 0)),
75+
End = new CalDateTime(new DateTime(2025, 4, 11, 18, 30, 0)),
76+
};
77+
78+
var rrule = new RecurrencePattern(FrequencyType.Minutely, 24 * 60);
79+
medsEvent.RecurrenceRules = new List<RecurrencePattern> { rrule };
80+
dinnerEvent.RecurrenceRules = new List<RecurrencePattern> { rrule };
81+
82+
ical.Events.Add(medsEvent);
83+
ical.Events.Add(dinnerEvent);
84+
85+
yield return new TestCaseData(new Calendar([]), ical);
86+
}
87+
}
5488

5589
[TestCaseSource(nameof(GeneratorTestCases))]
90+
[TestCaseSource(nameof(CaseStudy2TestCase))]
5691
public void CompareCalendars(Calendar calendar, Ical.Net.Calendar expectedCalendar)
5792
{
5893
expectedCalendar.AddTimeZone(new VTimeZone("Europe/Copenhagen")); // TZ should be added

CSL.Tests/Compiler/TestCases/CaseStudy2.txt

Lines changed: 0 additions & 7 deletions
This file was deleted.
File renamed without changes.
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
BEGIN:VCALENDAR
2+
PRODID:-//github.com/ical-org/ical.net//NONSGML ical.net 4.0//EN
3+
VERSION:2.0
4+
BEGIN:VEVENT
5+
DESCRIPTION:Take the blue pill\, Neo
6+
DTEND:20250411T173000
7+
DTSTAMP:20250523T101200Z
8+
DTSTART:20250411T172500
9+
RRULE:FREQ=MINUTELY;INTERVAL=1440
10+
SEQUENCE:0
11+
SUMMARY:Take Medicine
12+
UID:d60648cf-dd6b-4797-95b5-51d31969b469
13+
END:VEVENT
14+
BEGIN:VEVENT
15+
DESCRIPTION:
16+
DTEND:20250411T183000
17+
DTSTAMP:20250523T101200Z
18+
DTSTART:20250411T180000
19+
RRULE:FREQ=MINUTELY;INTERVAL=1440
20+
SEQUENCE:0
21+
SUMMARY:Dinner
22+
UID:d0d6c30d-d546-42d6-870f-613f55f7d9f0
23+
END:VEVENT
24+
BEGIN:VTIMEZONE
25+
TZID:Europe/Copenhagen
26+
X-LIC-LOCATION:Europe/Copenhagen
27+
END:VTIMEZONE
28+
END:VCALENDAR
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
Meds = 'Take Medicine' ++ 5 min ++ "Take the blue pill, Neo";
2+
3+
Dinner = 'Dinner' ++ 30 min ++ 18:00;
4+
5+
MedsBeforeDinner = Meds << ([30 min] << Dinner);
6+
7+
MedsBeforeDinner ++ 11/04/2025 * 1 d
File renamed without changes.
File renamed without changes.

CSL.Tests/EventTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
namespace CSL.Tests.Literals;
1+
namespace CSL.Tests;
22

33
using CSL;
44
using CSL.EventTypes;

0 commit comments

Comments
 (0)