From dbed0f7d389dc5004f085919fee83a8820c73605 Mon Sep 17 00:00:00 2001 From: rturovtsev Date: Mon, 28 Oct 2024 13:26:12 +0300 Subject: [PATCH 1/8] add ru date --- rules/ru/date.go | 63 ++++++++++++++++++++++++++++++ rules/ru/date_test.go | 41 ++++++++++++++++++++ rules/ru/dot_date_time.go | 59 ++++++++++++++++++++++++++++ rules/ru/dot_date_time_test.go | 38 ++++++++++++++++++ rules/ru/ru.go | 70 ++++++++++++++++++++++------------ 5 files changed, 247 insertions(+), 24 deletions(-) create mode 100644 rules/ru/date.go create mode 100644 rules/ru/date_test.go create mode 100644 rules/ru/dot_date_time.go create mode 100644 rules/ru/dot_date_time_test.go diff --git a/rules/ru/date.go b/rules/ru/date.go new file mode 100644 index 0000000..326a1be --- /dev/null +++ b/rules/ru/date.go @@ -0,0 +1,63 @@ +package ru + +import ( + "regexp" + "strconv" + "strings" + "time" + + "github.com/olebedev/when/rules" + "github.com/pkg/errors" +) + +// https://go.dev/play/p/YsVdaraCwIP + +func Date(s rules.Strategy) rules.Rule { + return &rules.F{ + RegExp: regexp.MustCompile(`(?i)(?:\b|^)(\d{1,2})\s*(` + MONTHS_PATTERN + `)\s*(\d{4})(?:\s*в\s*(\d{1,2}):(\d{2}))?(?:\b|$)`), + Applier: func(m *rules.Match, c *rules.Context, o *rules.Options, ref time.Time) (bool, error) { + if c.Day != nil || c.Month != nil || c.Year != nil { + return false, nil + } + + day, err := strconv.Atoi(m.Captures[0]) + if err != nil { + return false, errors.Wrap(err, "date rule: day") + } + + month, ok := MONTHS[strings.ToLower(m.Captures[1])] + if !ok { + return false, errors.New("date rule: invalid month") + } + + year, err := strconv.Atoi(m.Captures[2]) + if err != nil { + return false, errors.Wrap(err, "date rule: year") + } + + hour, minute := 0, 0 + if m.Captures[3] != "" && m.Captures[4] != "" { + hour, err = strconv.Atoi(m.Captures[3]) + if err != nil { + return false, errors.Wrap(err, "date rule: hour") + } + minute, err = strconv.Atoi(m.Captures[4]) + if err != nil { + return false, errors.Wrap(err, "date rule: minute") + } + } + + c.Day = &day + c.Month = pointerToInt(int(month)) + c.Year = &year + c.Hour = &hour + c.Minute = &minute + + return true, nil + }, + } +} + +func pointerToInt(v int) *int { + return &v +} diff --git a/rules/ru/date_test.go b/rules/ru/date_test.go new file mode 100644 index 0000000..f6241df --- /dev/null +++ b/rules/ru/date_test.go @@ -0,0 +1,41 @@ +package ru_test + +import ( + "github.com/olebedev/when" + "github.com/olebedev/when/rules" + "github.com/olebedev/when/rules/ru" + "testing" + "time" +) + +func TestDate(t *testing.T) { + w := when.New(nil) + w.Add(ru.Date(rules.Override)) + + fixt := []Fixture{ + // Simple dates + {"встреча 15 января 2024", 15, "15 января 2024", time.Date(2024, 1, 15, 0, 0, 0, 0, time.UTC).Sub(null)}, + {"5 марта 2025 запланирована встреча", 0, "5 марта 2025", time.Date(2025, 3, 5, 0, 0, 0, 0, time.UTC).Sub(null)}, + {"31 декабря 2023", 0, "31 декабря 2023", time.Date(2023, 12, 31, 0, 0, 0, 0, time.UTC).Sub(null)}, + + // Dates with time + {"15 января 2024 в 9:30", 0, "15 января 2024 в 9:30", time.Date(2024, 1, 15, 9, 30, 0, 0, time.UTC).Sub(null)}, + {"5 марта 2025 в 15:00 запланирована встреча", 0, "5 марта 2025 в 15:00", time.Date(2025, 3, 5, 15, 0, 0, 0, time.UTC).Sub(null)}, + {"31 декабря 2023 в 23:59", 0, "31 декабря 2023 в 23:59", time.Date(2023, 12, 31, 23, 59, 0, 0, time.UTC).Sub(null)}, + } + + ApplyFixtures(t, "ru.Date", w, fixt) +} + +func TestDateNil(t *testing.T) { + w := when.New(nil) + w.Add(ru.Date(rules.Override)) + + fixt := []Fixture{ + {"это текст без даты", 0, "", 0}, + {"15", 0, "", 0}, + {"15 чего-то", 0, "", 0}, + } + + ApplyFixturesNil(t, "ru.Date nil", w, fixt) +} diff --git a/rules/ru/dot_date_time.go b/rules/ru/dot_date_time.go new file mode 100644 index 0000000..9f9e1b1 --- /dev/null +++ b/rules/ru/dot_date_time.go @@ -0,0 +1,59 @@ +package ru + +import ( + "regexp" + "strconv" + "time" + + "github.com/olebedev/when/rules" + "github.com/pkg/errors" +) + +// https://go.dev/play/p/vRzLhHHupUJ + +func DotDateTime(s rules.Strategy) rules.Rule { + return &rules.F{ + RegExp: regexp.MustCompile(`(?i)(?:^|\b)(\d{2})\.(\d{2})\.(\d{4})\s+(\d{2}):(\d{2})(?:\b|$)`), + Applier: func(m *rules.Match, c *rules.Context, o *rules.Options, ref time.Time) (bool, error) { + if c.Day != nil || c.Month != nil || c.Year != nil { + return false, nil + } + + day, err := strconv.Atoi(m.Captures[0]) + if err != nil { + return false, errors.Wrap(err, "dot date time rule: day") + } + + month, err := strconv.Atoi(m.Captures[1]) + if err != nil { + return false, errors.Wrap(err, "dot date time rule: month") + } + + year, err := strconv.Atoi(m.Captures[2]) + if err != nil { + return false, errors.Wrap(err, "dot date time rule: year") + } + + hour, err := strconv.Atoi(m.Captures[3]) + if err != nil { + return false, errors.Wrap(err, "dot date time rule: hour") + } + + minute, err := strconv.Atoi(m.Captures[4]) + if err != nil { + return false, errors.Wrap(err, "dot date time rule: minute") + } + + if day > 0 && day <= 31 && month > 0 && month <= 12 { + c.Day = &day + c.Month = &month + c.Year = &year + c.Hour = &hour + c.Minute = &minute + return true, nil + } + + return false, nil + }, + } +} diff --git a/rules/ru/dot_date_time_test.go b/rules/ru/dot_date_time_test.go new file mode 100644 index 0000000..ae739fe --- /dev/null +++ b/rules/ru/dot_date_time_test.go @@ -0,0 +1,38 @@ +package ru_test + +import ( + "github.com/olebedev/when" + "github.com/olebedev/when/rules" + "github.com/olebedev/when/rules/ru" + "testing" + "time" +) + +func TestDotDateTime(t *testing.T) { + w := when.New(nil) + w.Add(ru.DotDateTime(rules.Override)) + + fixt := []Fixture{ + // Basic date/time formats + {"встреча 15.01.2024 09:30", 15, "15.01.2024 09:30", time.Date(2024, 1, 15, 9, 30, 0, 0, time.UTC).Sub(null)}, + {"05.03.2025 15:00 запланирована встреча", 0, "05.03.2025 15:00", time.Date(2025, 3, 5, 15, 0, 0, 0, time.UTC).Sub(null)}, + {"31.12.2023 23:59", 0, "31.12.2023 23:59", time.Date(2023, 12, 31, 23, 59, 0, 0, time.UTC).Sub(null)}, + } + + ApplyFixtures(t, "ru.DateTime", w, fixt) +} + +func TestDotDateTimeNil(t *testing.T) { + w := when.New(nil) + w.Add(ru.DotDateTime(rules.Override)) + + fixt := []Fixture{ + {"это текст без даты и времени", 0, "", 0}, + {"15.01", 0, "", 0}, + {"15.01.2024", 0, "", 0}, // нет времени + {"32.01.2024 15:00", 0, "", 0}, // некорректный день + {"15.13.2024 15:00", 0, "", 0}, // некорректный месяц + } + + ApplyFixturesNil(t, "ru.DateTime nil", w, fixt) +} diff --git a/rules/ru/ru.go b/rules/ru/ru.go index b503d85..4e8afe2 100644 --- a/rules/ru/ru.go +++ b/rules/ru/ru.go @@ -1,6 +1,9 @@ package ru -import "github.com/olebedev/when/rules" +import ( + "github.com/olebedev/when/rules" + "time" +) var All = []rules.Rule{ Weekday(rules.Override), @@ -9,6 +12,8 @@ var All = []rules.Rule{ Hour(rules.Override), HourMinute(rules.Override), Deadline(rules.Override), + Date(rules.Override), + DotDateTime(rules.Override), } var WEEKDAY_OFFSET = map[string]int{ @@ -18,29 +23,29 @@ var WEEKDAY_OFFSET = map[string]int{ "понедельник": 1, "понедельнику": 1, "понедельника": 1, - "пн": 1, - "вторник": 2, - "вторника": 2, - "вторнику": 2, - "вт": 2, - "среда": 3, - "среду": 3, - "среде": 3, - "ср": 3, - "четверг": 4, - "четверга": 4, - "четвергу": 4, - "чт": 4, - "пятница": 5, - "пятнице": 5, - "пятницы": 5, - "пятницу": 5, - "пт": 5, - "суббота": 6, - "субботы": 6, - "субботе": 6, - "субботу": 6, - "сб": 6, + "пн": 1, + "вторник": 2, + "вторника": 2, + "вторнику": 2, + "вт": 2, + "среда": 3, + "среду": 3, + "среде": 3, + "ср": 3, + "четверг": 4, + "четверга": 4, + "четвергу": 4, + "чт": 4, + "пятница": 5, + "пятнице": 5, + "пятницы": 5, + "пятницу": 5, + "пт": 5, + "суббота": 6, + "субботы": 6, + "субботе": 6, + "субботу": 6, + "сб": 6, } var WEEKDAY_OFFSET_PATTERN = "(?:воскресенье|воскресенья|воск|понедельник|понедельнику|понедельника|пн|вторник|вторника|вторнику|вт|среда|среду|среде|ср|четверг|четверга|четвергу|чт|пятница|пятнице|пятницы|пятницу|пт|суббота|субботы|субботе|субботу|сб)" @@ -65,3 +70,20 @@ var INTEGER_WORDS = map[string]int{ } var INTEGER_WORDS_PATTERN = `(?:час|один|одну|одного|два|две|три|четыре|пять|шесть|семь|восемь|девять|десять|одиннадцать|двенадцать)` + +var MONTHS = map[string]time.Month{ + "января": time.January, + "февраля": time.February, + "марта": time.March, + "апреля": time.April, + "мая": time.May, + "июня": time.June, + "июля": time.July, + "августа": time.August, + "сентября": time.September, + "октября": time.October, + "ноября": time.November, + "декабря": time.December, +} + +var MONTHS_PATTERN = `(?:января|февраля|марта|апреля|мая|июня|июля|августа|сентября|октября|ноября|декабря)` From 55ecc30e8ef02185076049b22456fef1546e51fa Mon Sep 17 00:00:00 2001 From: rturovtsev Date: Mon, 28 Oct 2024 13:49:17 +0300 Subject: [PATCH 2/8] fix --- rules/ru/ru.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rules/ru/ru.go b/rules/ru/ru.go index 4e8afe2..7ef8597 100644 --- a/rules/ru/ru.go +++ b/rules/ru/ru.go @@ -9,11 +9,11 @@ var All = []rules.Rule{ Weekday(rules.Override), CasualDate(rules.Override), CasualTime(rules.Override), + Date(rules.Override), + DotDateTime(rules.Override), Hour(rules.Override), HourMinute(rules.Override), Deadline(rules.Override), - Date(rules.Override), - DotDateTime(rules.Override), } var WEEKDAY_OFFSET = map[string]int{ From 249ad756cd7aafc5dcac19652997e3be18e213dc Mon Sep 17 00:00:00 2001 From: rturovtsev Date: Tue, 29 Oct 2024 16:57:28 +0300 Subject: [PATCH 3/8] fix --- rules/ru/date.go | 2 +- rules/ru/dot_date_time.go | 2 +- rules/ru/hour_minute.go | 6 +++--- rules/ru/ru.go | 4 ++-- rules/ru/ru_test.go | 11 +++++++++++ 5 files changed, 18 insertions(+), 7 deletions(-) diff --git a/rules/ru/date.go b/rules/ru/date.go index 326a1be..9365f88 100644 --- a/rules/ru/date.go +++ b/rules/ru/date.go @@ -16,7 +16,7 @@ func Date(s rules.Strategy) rules.Rule { return &rules.F{ RegExp: regexp.MustCompile(`(?i)(?:\b|^)(\d{1,2})\s*(` + MONTHS_PATTERN + `)\s*(\d{4})(?:\s*в\s*(\d{1,2}):(\d{2}))?(?:\b|$)`), Applier: func(m *rules.Match, c *rules.Context, o *rules.Options, ref time.Time) (bool, error) { - if c.Day != nil || c.Month != nil || c.Year != nil { + if (c.Day != nil || c.Month != nil || c.Year != nil) || s != rules.Override { return false, nil } diff --git a/rules/ru/dot_date_time.go b/rules/ru/dot_date_time.go index 9f9e1b1..0d12e7e 100644 --- a/rules/ru/dot_date_time.go +++ b/rules/ru/dot_date_time.go @@ -15,7 +15,7 @@ func DotDateTime(s rules.Strategy) rules.Rule { return &rules.F{ RegExp: regexp.MustCompile(`(?i)(?:^|\b)(\d{2})\.(\d{2})\.(\d{4})\s+(\d{2}):(\d{2})(?:\b|$)`), Applier: func(m *rules.Match, c *rules.Context, o *rules.Options, ref time.Time) (bool, error) { - if c.Day != nil || c.Month != nil || c.Year != nil { + if (c.Day != nil || c.Month != nil || c.Year != nil || c.Hour != nil || c.Minute != nil) && s != rules.Override { return false, nil } diff --git a/rules/ru/hour_minute.go b/rules/ru/hour_minute.go index fe4d51b..0703406 100644 --- a/rules/ru/hour_minute.go +++ b/rules/ru/hour_minute.go @@ -22,7 +22,7 @@ import ( {"11.1pm", 0, "11.1pm", 0}, {"11.10 pm", 0, "11.10 pm", 0}, - https://play.golang.org/p/PmPBjHK4PA + https://go.dev/play/p/QiSvUkrni6N */ // 1. - int @@ -31,12 +31,12 @@ import ( func HourMinute(s rules.Strategy) rules.Rule { return &rules.F{ - RegExp: regexp.MustCompile("(?i)(?:\\W|\\D|^)" + + RegExp: regexp.MustCompile("(?i)(?:\\A|\\s|\\D)" + "((?:[0-1]{0,1}[0-9])|(?:2[0-3]))" + "(?:\\:|:|\\-|\\.)" + "((?:[0-5][0-9]))" + "(?:\\s*(утра|вечера|дня))?" + - "(?:\\P{L}|$)"), + "(?:\\s|\\D|\\z)"), Applier: func(m *rules.Match, c *rules.Context, o *rules.Options, ref time.Time) (bool, error) { if (c.Hour != nil || c.Minute != nil) && s != rules.Override { return false, nil diff --git a/rules/ru/ru.go b/rules/ru/ru.go index 7ef8597..4e8afe2 100644 --- a/rules/ru/ru.go +++ b/rules/ru/ru.go @@ -9,11 +9,11 @@ var All = []rules.Rule{ Weekday(rules.Override), CasualDate(rules.Override), CasualTime(rules.Override), - Date(rules.Override), - DotDateTime(rules.Override), Hour(rules.Override), HourMinute(rules.Override), Deadline(rules.Override), + Date(rules.Override), + DotDateTime(rules.Override), } var WEEKDAY_OFFSET = map[string]int{ diff --git a/rules/ru/ru_test.go b/rules/ru/ru_test.go index e4fe0dc..aa4bc8f 100644 --- a/rules/ru/ru_test.go +++ b/rules/ru/ru_test.go @@ -66,6 +66,17 @@ func TestAll(t *testing.T) { {"написать письмо до утра субботы ", 30, "до утра субботы", ((3 * 24) + 8) * time.Hour}, {"написать письмо к субботе после обеда ", 30, "к субботе после обеда", ((3 * 24) + 15) * time.Hour}, {"В субботу вечером", 0, "В субботу вечером", ((3 * 24) + 18) * time.Hour}, + + {"встреча 15 января 2024", 15, "15 января 2024", time.Date(2024, 1, 15, 0, 0, 0, 0, time.UTC).Sub(null)}, + {"5 марта 2025 запланирована встреча", 0, "5 марта 2025", time.Date(2025, 3, 5, 0, 0, 0, 0, time.UTC).Sub(null)}, + {"31 декабря 2023", 0, "31 декабря 2023", time.Date(2023, 12, 31, 0, 0, 0, 0, time.UTC).Sub(null)}, + {"15 января 2024 в 9:30", 0, "15 января 2024 в 9:30", time.Date(2024, 1, 15, 9, 30, 0, 0, time.UTC).Sub(null)}, + {"5 марта 2025 в 15:00 запланирована встреча", 0, "5 марта 2025 в 15:00", time.Date(2025, 3, 5, 15, 0, 0, 0, time.UTC).Sub(null)}, + {"31 декабря 2023 в 23:59", 0, "31 декабря 2023 в 23:59", time.Date(2023, 12, 31, 23, 59, 0, 0, time.UTC).Sub(null)}, + + {"встреча 15.01.2024 09:30", 15, "15.01.2024 09:30", time.Date(2024, 1, 15, 9, 30, 0, 0, time.UTC).Sub(null)}, + {"05.03.2025 15:00 запланирована встреча", 0, "05.03.2025 15:00", time.Date(2025, 3, 5, 15, 0, 0, 0, time.UTC).Sub(null)}, + {"31.12.2023 23:59", 0, "31.12.2023 23:59", time.Date(2023, 12, 31, 23, 59, 0, 0, time.UTC).Sub(null)}, } ApplyFixtures(t, "ru.All...", w, fixt) From b39555cef430b3082f5e7d320b7ca194793f06db Mon Sep 17 00:00:00 2001 From: rturovtsev Date: Tue, 29 Oct 2024 17:27:27 +0300 Subject: [PATCH 4/8] fix dot date without time --- rules/ru/dot_date_time.go | 20 +++++++++++--------- rules/ru/ru_test.go | 1 + 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/rules/ru/dot_date_time.go b/rules/ru/dot_date_time.go index 0d12e7e..2bfde47 100644 --- a/rules/ru/dot_date_time.go +++ b/rules/ru/dot_date_time.go @@ -13,7 +13,7 @@ import ( func DotDateTime(s rules.Strategy) rules.Rule { return &rules.F{ - RegExp: regexp.MustCompile(`(?i)(?:^|\b)(\d{2})\.(\d{2})\.(\d{4})\s+(\d{2}):(\d{2})(?:\b|$)`), + RegExp: regexp.MustCompile(`(?i)(?:^|\b)(\d{2})\.(\d{2})\.(\d{4})(?:\s+(\d{2}):(\d{2}))?(?:\b|$)`), Applier: func(m *rules.Match, c *rules.Context, o *rules.Options, ref time.Time) (bool, error) { if (c.Day != nil || c.Month != nil || c.Year != nil || c.Hour != nil || c.Minute != nil) && s != rules.Override { return false, nil @@ -34,14 +34,16 @@ func DotDateTime(s rules.Strategy) rules.Rule { return false, errors.Wrap(err, "dot date time rule: year") } - hour, err := strconv.Atoi(m.Captures[3]) - if err != nil { - return false, errors.Wrap(err, "dot date time rule: hour") - } - - minute, err := strconv.Atoi(m.Captures[4]) - if err != nil { - return false, errors.Wrap(err, "dot date time rule: minute") + hour, minute := 0, 0 + if m.Captures[3] != "" && m.Captures[4] != "" { + hour, err = strconv.Atoi(m.Captures[3]) + if err != nil { + return false, errors.Wrap(err, "dot date time rule: hour") + } + minute, err = strconv.Atoi(m.Captures[4]) + if err != nil { + return false, errors.Wrap(err, "dot date time rule: minute") + } } if day > 0 && day <= 31 && month > 0 && month <= 12 { diff --git a/rules/ru/ru_test.go b/rules/ru/ru_test.go index aa4bc8f..e0824f0 100644 --- a/rules/ru/ru_test.go +++ b/rules/ru/ru_test.go @@ -77,6 +77,7 @@ func TestAll(t *testing.T) { {"встреча 15.01.2024 09:30", 15, "15.01.2024 09:30", time.Date(2024, 1, 15, 9, 30, 0, 0, time.UTC).Sub(null)}, {"05.03.2025 15:00 запланирована встреча", 0, "05.03.2025 15:00", time.Date(2025, 3, 5, 15, 0, 0, 0, time.UTC).Sub(null)}, {"31.12.2023 23:59", 0, "31.12.2023 23:59", time.Date(2023, 12, 31, 23, 59, 0, 0, time.UTC).Sub(null)}, + {"31.12.2023", 0, "31.12.2023", time.Date(2023, 12, 31, 0, 0, 0, 0, time.UTC).Sub(null)}, } ApplyFixtures(t, "ru.All...", w, fixt) From 148e583e9e73f523b62274a80e6382170e0912b4 Mon Sep 17 00:00:00 2001 From: rturovtsev Date: Tue, 29 Oct 2024 18:13:36 +0300 Subject: [PATCH 5/8] add date without year --- rules/ru/date.go | 11 +++++++---- rules/ru/ru_test.go | 2 +- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/rules/ru/date.go b/rules/ru/date.go index 9365f88..0f141d7 100644 --- a/rules/ru/date.go +++ b/rules/ru/date.go @@ -14,7 +14,7 @@ import ( func Date(s rules.Strategy) rules.Rule { return &rules.F{ - RegExp: regexp.MustCompile(`(?i)(?:\b|^)(\d{1,2})\s*(` + MONTHS_PATTERN + `)\s*(\d{4})(?:\s*в\s*(\d{1,2}):(\d{2}))?(?:\b|$)`), + RegExp: regexp.MustCompile(`(?i)(?:\b|^)(\d{1,2})\s*(` + MONTHS_PATTERN + `)(?:\s*(\d{4}))?(?:\s*в\s*(\d{1,2}):(\d{2}))?(?:\b|$)`), Applier: func(m *rules.Match, c *rules.Context, o *rules.Options, ref time.Time) (bool, error) { if (c.Day != nil || c.Month != nil || c.Year != nil) || s != rules.Override { return false, nil @@ -30,9 +30,12 @@ func Date(s rules.Strategy) rules.Rule { return false, errors.New("date rule: invalid month") } - year, err := strconv.Atoi(m.Captures[2]) - if err != nil { - return false, errors.Wrap(err, "date rule: year") + year := time.Now().Year() + if m.Captures[2] != "" { + year, err = strconv.Atoi(m.Captures[2]) + if err != nil { + return false, errors.Wrap(err, "date rule: year") + } } hour, minute := 0, 0 diff --git a/rules/ru/ru_test.go b/rules/ru/ru_test.go index e0824f0..d41988e 100644 --- a/rules/ru/ru_test.go +++ b/rules/ru/ru_test.go @@ -73,7 +73,7 @@ func TestAll(t *testing.T) { {"15 января 2024 в 9:30", 0, "15 января 2024 в 9:30", time.Date(2024, 1, 15, 9, 30, 0, 0, time.UTC).Sub(null)}, {"5 марта 2025 в 15:00 запланирована встреча", 0, "5 марта 2025 в 15:00", time.Date(2025, 3, 5, 15, 0, 0, 0, time.UTC).Sub(null)}, {"31 декабря 2023 в 23:59", 0, "31 декабря 2023 в 23:59", time.Date(2023, 12, 31, 23, 59, 0, 0, time.UTC).Sub(null)}, - + {"31 декабря", 0, "31 декабря", time.Date(time.Now().Year(), 12, 31, 0, 0, 0, 0, time.UTC).Sub(null)}, {"встреча 15.01.2024 09:30", 15, "15.01.2024 09:30", time.Date(2024, 1, 15, 9, 30, 0, 0, time.UTC).Sub(null)}, {"05.03.2025 15:00 запланирована встреча", 0, "05.03.2025 15:00", time.Date(2025, 3, 5, 15, 0, 0, 0, time.UTC).Sub(null)}, {"31.12.2023 23:59", 0, "31.12.2023 23:59", time.Date(2023, 12, 31, 23, 59, 0, 0, time.UTC).Sub(null)}, From 93f4ab7b0c6bc86f2ca423177e180ae57a71acc5 Mon Sep 17 00:00:00 2001 From: rturovtsev Date: Wed, 30 Oct 2024 11:26:33 +0300 Subject: [PATCH 6/8] fix tests --- rules/ru/dot_date_time_test.go | 1 - rules/zh/casual_date_test.go | 2 -- 2 files changed, 3 deletions(-) diff --git a/rules/ru/dot_date_time_test.go b/rules/ru/dot_date_time_test.go index ae739fe..347b395 100644 --- a/rules/ru/dot_date_time_test.go +++ b/rules/ru/dot_date_time_test.go @@ -29,7 +29,6 @@ func TestDotDateTimeNil(t *testing.T) { fixt := []Fixture{ {"это текст без даты и времени", 0, "", 0}, {"15.01", 0, "", 0}, - {"15.01.2024", 0, "", 0}, // нет времени {"32.01.2024 15:00", 0, "", 0}, // некорректный день {"15.13.2024 15:00", 0, "", 0}, // некорректный месяц } diff --git a/rules/zh/casual_date_test.go b/rules/zh/casual_date_test.go index 09bd0fc..d91fa98 100644 --- a/rules/zh/casual_date_test.go +++ b/rules/zh/casual_date_test.go @@ -10,8 +10,6 @@ import ( ) func TestCasualDate(t *testing.T) { - // current is Monday - now := time.Now() fixt := []Fixture{ {"后天中午", 0, "后天", (2 * 24) * time.Hour}, {"大后天中午", 0, "大后天", (3 * 24) * time.Hour}, From f047d7997729cb79add67fd0e27e690f9b8269de Mon Sep 17 00:00:00 2001 From: rturovtsev Date: Thu, 31 Oct 2024 13:01:47 +0300 Subject: [PATCH 7/8] revert test zh/casual_date --- rules/zh/casual_date_test.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/rules/zh/casual_date_test.go b/rules/zh/casual_date_test.go index d91fa98..09bd0fc 100644 --- a/rules/zh/casual_date_test.go +++ b/rules/zh/casual_date_test.go @@ -10,6 +10,8 @@ import ( ) func TestCasualDate(t *testing.T) { + // current is Monday + now := time.Now() fixt := []Fixture{ {"后天中午", 0, "后天", (2 * 24) * time.Hour}, {"大后天中午", 0, "大后天", (3 * 24) * time.Hour}, From 47cb3e8138db151a515b697428f104ef768cfceb Mon Sep 17 00:00:00 2001 From: rturovtsev Date: Fri, 1 Nov 2024 10:28:59 +0300 Subject: [PATCH 8/8] fix test --- rules/zh/casual_date_test.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/rules/zh/casual_date_test.go b/rules/zh/casual_date_test.go index 09bd0fc..d91fa98 100644 --- a/rules/zh/casual_date_test.go +++ b/rules/zh/casual_date_test.go @@ -10,8 +10,6 @@ import ( ) func TestCasualDate(t *testing.T) { - // current is Monday - now := time.Now() fixt := []Fixture{ {"后天中午", 0, "后天", (2 * 24) * time.Hour}, {"大后天中午", 0, "大后天", (3 * 24) * time.Hour},