Functional Weave
Code in Python

todo.parse-repeat@1.0.0

vectors.json

3,797 bytes · view raw

[
  {"name": "every week with no due date starts today, as quick-add would", "args": ["every week", null, "2026-09-28"], "expect": {"frequency": "weekly", "interval": 1, "anchor": "2026-09-28"}},
  {"name": "every 2 weeks starts on the todo's due date", "args": ["every 2 weeks", "2026-10-02", "2026-09-28"], "expect": {"frequency": "weekly", "interval": 2, "anchor": "2026-10-02"}},
  {"name": "every month from a month-end due date keeps the 31st as the anchor", "args": ["every month", "2026-01-31", "2026-01-20"], "expect": {"frequency": "monthly", "interval": 1, "anchor": "2026-01-31"}},
  {"name": "every Monday on a todo due Wednesday starts the next Monday, not weekly on Wednesdays", "args": ["Every Monday", "2026-09-30", "2026-09-28"], "expect": {"frequency": "weekly", "interval": 1, "anchor": "2026-10-05"}},
  {"name": "every monday with no due date, typed on a Monday, starts next Monday", "args": ["every monday", null, "2026-09-28"], "expect": {"frequency": "weekly", "interval": 1, "anchor": "2026-10-05"}},
  {"name": "every friday on a todo due that Friday starts that day", "args": ["every friday", "2026-10-02", "2026-09-28"], "expect": {"frequency": "weekly", "interval": 1, "anchor": "2026-10-02"}},
  {"name": "every weekday on a todo due Saturday starts the Monday after", "args": ["every weekday", "2026-10-03", "2026-09-28"], "expect": {"frequency": "weekdays", "interval": 1, "anchor": "2026-10-05"}},
  {"name": "every weekday typed on a Saturday with no due date starts Monday", "args": ["every weekday", null, "2026-10-03"], "expect": {"frequency": "weekdays", "interval": 1, "anchor": "2026-10-05"}},
  {"name": "a date typed after the repeat beats the due date", "args": ["every other month on 2026-10-15", "2026-10-01", "2026-09-28"], "expect": {"frequency": "monthly", "interval": 2, "anchor": "2026-10-15"}},
  {"name": "a relative start date counts from today", "args": ["every 3 days tomorrow", "2026-10-10", "2026-09-28"], "expect": {"frequency": "daily", "interval": 3, "anchor": "2026-09-29"}},
  {"name": "a two-word start date", "args": ["every day next week", null, "2026-09-28"], "expect": {"frequency": "daily", "interval": 1, "anchor": "2026-10-05"}},
  {"name": "a weekday repeat with a start date moves to that weekday on or after it", "args": ["every monday on wed", null, "2026-09-28"], "expect": {"frequency": "weekly", "interval": 1, "anchor": "2026-10-05"}},
  {"name": "every year from 29 February keeps the leap day as the anchor", "args": ["every year", "2028-02-29", "2026-09-28"], "expect": {"frequency": "yearly", "interval": 1, "anchor": "2028-02-29"}},
  {"name": "case and extra spaces do not matter", "args": ["  EVERY   day  ", "2026-10-01", "2026-09-28"], "expect": {"frequency": "daily", "interval": 1, "anchor": "2026-10-01"}},
  {"name": "words left over are not understood", "args": ["every week please", "2026-10-01", "2026-09-28"], "expect": null},
  {"name": "weekly on its own is a title word to quick-add, so not a repeat", "args": ["weekly", "2026-10-01", "2026-09-28"], "expect": null},
  {"name": "an empty box is not a repeat", "args": ["", "2026-10-01", "2026-09-28"], "expect": null},
  {"name": "every on its own is not a repeat", "args": ["every", null, "2026-09-28"], "expect": null},
  {"name": "an interval above 999 is not a repeat", "args": ["every 1000 days", null, "2026-09-28"], "expect": null},
  {"name": "a start date before the repeat is not understood", "args": ["tomorrow every week", null, "2026-09-28"], "expect": null},
  {"name": "a malformed today is an error", "args": ["every week", null, "28/09/2026"], "expectError": "is not an ISO date"},
  {"name": "an impossible due date is an error", "args": ["every week", "2026-02-30", "2026-09-28"], "expectError": "is not a real calendar date"}
]