todoremind_test.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package main
  2. import (
  3. "testing"
  4. "time"
  5. )
  6. // 验证提醒解析:带日期的完整格式
  7. func TestParseTodoReminderFull(t *testing.T) {
  8. item := parseTodoReminder("做作业 @ 2026-10-31 17:30")
  9. if item == nil {
  10. t.Fatal("应解析出提醒项")
  11. }
  12. if item.Text != "做作业" {
  13. t.Fatalf("文本错误: %q", item.Text)
  14. }
  15. want := time.Date(2026, 10, 31, 17, 30, 0, 0, time.Local)
  16. if !item.When.Equal(want) {
  17. t.Fatalf("时间错误: %v, want %v", item.When, want)
  18. }
  19. }
  20. // 验证提醒解析:无日期默认当天
  21. func TestParseTodoReminderToday(t *testing.T) {
  22. item := parseTodoReminder("开会 @ 15:00")
  23. if item == nil {
  24. t.Fatal("应解析出提醒项")
  25. }
  26. if item.Text != "开会" {
  27. t.Fatalf("文本错误: %q", item.Text)
  28. }
  29. now := time.Now()
  30. if item.When.Hour() != 15 || item.When.Minute() != 0 {
  31. t.Fatalf("时间错误: %v", item.When)
  32. }
  33. if item.When.Year() != now.Year() || item.When.Month() != now.Month() || item.When.Day() != now.Day() {
  34. t.Fatalf("应默认当天: %v", item.When)
  35. }
  36. }
  37. // 验证带 [x] 前缀的完成项也能解析出提醒
  38. func TestParseTodoReminderDone(t *testing.T) {
  39. item := parseTodoReminder("[x] 买牛奶 @ 08:30")
  40. if item == nil {
  41. t.Fatal("应解析出提醒项")
  42. }
  43. if item.Text != "买牛奶" {
  44. t.Fatalf("文本错误: %q", item.Text)
  45. }
  46. }
  47. // 验证无提醒标记的行返回 nil
  48. func TestParseTodoReminderNone(t *testing.T) {
  49. if item := parseTodoReminder("普通任务"); item != nil {
  50. t.Fatalf("无标记应返回 nil, 得到 %+v", item)
  51. }
  52. if item := parseTodoReminder("[x] 已完成"); item != nil {
  53. t.Fatalf("无标记完成项应返回 nil, 得到 %+v", item)
  54. }
  55. }
  56. // 验证非法格式返回 nil
  57. func TestParseTodoReminderInvalid(t *testing.T) {
  58. for _, line := range []string{"任务 @ 25:99", "任务 @ abc", "@ 10:00", "任务 @ 2026-13-01 10:00"} {
  59. if item := parseTodoReminder(line); item != nil {
  60. t.Fatalf("非法行 %q 应返回 nil, 得到 %+v", line, item)
  61. }
  62. }
  63. }