@@ -12,16 +12,23 @@ import java.time.Duration
1212
1313class FixInvalidDayOffsetPreprocessorTest {
1414
15- private fun fixAndAssert (expected : String , testValue : String ) {
16-
15+ /* *
16+ * Calls [FixInvalidDayOffsetPreprocessor.fixString] and asserts the result is equal to [expected].
17+ *
18+ * @param expected The expected result
19+ * @param testValue The value to test
20+ * @param parseDuration If `true`, [Duration.parse] is called on the fixed value to make sure it's a valid duration
21+ */
22+ private fun assertFixedEquals (expected : String , testValue : String , parseDuration : Boolean = true) {
1723 // Fix the duration string
1824 val fixed = FixInvalidDayOffsetPreprocessor .fixString(testValue)
1925
2026 // Test the duration can now be parsed
21- for (line in fixed.split(' \n ' )) {
22- val duration = line.substring(line.indexOf(' :' ) + 1 )
23- Duration .parse(duration)
24- }
27+ if (parseDuration)
28+ for (line in fixed.split(' \n ' )) {
29+ val duration = line.substring(line.indexOf(' :' ) + 1 )
30+ Duration .parse(duration)
31+ }
2532
2633 // Assert
2734 assertEquals(expected, fixed)
@@ -35,36 +42,57 @@ class FixInvalidDayOffsetPreprocessorTest {
3542 )
3643 }
3744
45+ @Test
46+ fun test_FixString_SucceedsAsValueOnCorrectProperties () {
47+ // By RFC 5545 the only properties allowed to hold DURATION as a VALUE are:
48+ // DURATION, REFRESH, RELATED, TRIGGER
49+ assertFixedEquals(" DURATION;VALUE=DURATION:P1D" , " DURATION;VALUE=DURATION:PT1D" )
50+ assertFixedEquals(" REFRESH-INTERVAL;VALUE=DURATION:P1D" , " REFRESH-INTERVAL;VALUE=DURATION:PT1D" )
51+ assertFixedEquals(" RELATED-TO;VALUE=DURATION:P1D" , " RELATED-TO;VALUE=DURATION:PT1D" )
52+ assertFixedEquals(" TRIGGER;VALUE=DURATION:P1D" , " TRIGGER;VALUE=DURATION:PT1D" )
53+ }
54+
55+ @Test
56+ fun test_FixString_FailsAsValueOnWrongProperty () {
57+ // The update from RFC 2445 to RFC 5545 disallows using DURATION as a VALUE in FREEBUSY
58+ assertFixedEquals(" FREEBUSY;VALUE=DURATION:PT1D" , " FREEBUSY;VALUE=DURATION:PT1D" , parseDuration = false )
59+ }
60+
61+ @Test
62+ fun test_FixString_FailsIfNotAtStartOfLine () {
63+ assertFixedEquals(" xxDURATION;VALUE=DURATION:PT1D" , " xxDURATION;VALUE=DURATION:PT1D" , parseDuration = false )
64+ }
65+
3866 @Test
3967 fun test_FixString_DayOffsetFrom_Invalid () {
40- fixAndAssert (" DURATION:-P1D" , " DURATION:-PT1D" )
41- fixAndAssert (" TRIGGER:-P2D" , " TRIGGER:-PT2D" )
68+ assertFixedEquals (" DURATION:-P1D" , " DURATION:-PT1D" )
69+ assertFixedEquals (" TRIGGER:-P2D" , " TRIGGER:-PT2D" )
4270
43- fixAndAssert (" DURATION:-P1D" , " DURATION:-P1DT" )
44- fixAndAssert (" TRIGGER:-P2D" , " TRIGGER:-P2DT" )
71+ assertFixedEquals (" DURATION:-P1D" , " DURATION:-P1DT" )
72+ assertFixedEquals (" TRIGGER:-P2D" , " TRIGGER:-P2DT" )
4573 }
4674
4775 @Test
4876 fun test_FixString_DayOffsetFrom_Valid () {
49- fixAndAssert (" DURATION:-PT12H" , " DURATION:-PT12H" )
50- fixAndAssert (" TRIGGER:-PT12H" , " TRIGGER:-PT12H" )
77+ assertFixedEquals (" DURATION:-PT12H" , " DURATION:-PT12H" )
78+ assertFixedEquals (" TRIGGER:-PT12H" , " TRIGGER:-PT12H" )
5179 }
5280
5381 @Test
5482 fun test_FixString_DayOffsetFromMultiple_Invalid () {
55- fixAndAssert (" DURATION:-P1D\n TRIGGER:-P2D" , " DURATION:-PT1D\n TRIGGER:-PT2D" )
56- fixAndAssert (" DURATION:-P1D\n TRIGGER:-P2D" , " DURATION:-P1DT\n TRIGGER:-P2DT" )
83+ assertFixedEquals (" DURATION:-P1D\n TRIGGER:-P2D" , " DURATION:-PT1D\n TRIGGER:-PT2D" )
84+ assertFixedEquals (" DURATION:-P1D\n TRIGGER:-P2D" , " DURATION:-P1DT\n TRIGGER:-P2DT" )
5785 }
5886
5987 @Test
6088 fun test_FixString_DayOffsetFromMultiple_Valid () {
61- fixAndAssert (" DURATION:-PT12H\n TRIGGER:-PT12H" , " DURATION:-PT12H\n TRIGGER:-PT12H" )
89+ assertFixedEquals (" DURATION:-PT12H\n TRIGGER:-PT12H" , " DURATION:-PT12H\n TRIGGER:-PT12H" )
6290 }
6391
6492 @Test
6593 fun test_FixString_DayOffsetFromMultiple_Mixed () {
66- fixAndAssert (" DURATION:-P1D\n DURATION:-PT12H\n TRIGGER:-P2D" , " DURATION:-PT1D\n DURATION:-PT12H\n TRIGGER:-PT2D" )
67- fixAndAssert (" DURATION:-P1D\n DURATION:-PT12H\n TRIGGER:-P2D" , " DURATION:-P1DT\n DURATION:-PT12H\n TRIGGER:-P2DT" )
94+ assertFixedEquals (" DURATION:-P1D\n DURATION:-PT12H\n TRIGGER:-P2D" , " DURATION:-PT1D\n DURATION:-PT12H\n TRIGGER:-PT2D" )
95+ assertFixedEquals (" DURATION:-P1D\n DURATION:-PT12H\n TRIGGER:-P2D" , " DURATION:-P1DT\n DURATION:-PT12H\n TRIGGER:-P2DT" )
6896 }
6997
7098 @Test
0 commit comments