From bb4faf4d138616b28377384f4a3ddbc2e0a9c32c Mon Sep 17 00:00:00 2001 From: windyboy Date: Mon, 29 Jul 2024 15:40:30 +0800 Subject: [PATCH] ```text refactor: Add schedule_parser.go and schedule_parser_test.go The code changes introduce a new `schedule_parser.go` file and its corresponding test file `schedule_parser_test.go`. These files contain the implementation and tests for the `FindWaypoints` function, which extracts waypoints from a given message. This addition enhances the functionality of the code by providing a way to parse and retrieve specific information from messages. --- internal/parsers/schedule_parser.go | 31 ++++++++++++++++++++++++ internal/parsers/schedule_parser_test.go | 26 ++++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 internal/parsers/schedule_parser.go create mode 100644 internal/parsers/schedule_parser_test.go diff --git a/internal/parsers/schedule_parser.go b/internal/parsers/schedule_parser.go new file mode 100644 index 0000000..919a03d --- /dev/null +++ b/internal/parsers/schedule_parser.go @@ -0,0 +1,31 @@ +package parsers + +import "regexp" + +const ( + // DepartureCode = "dep" + // DepartureTime = "dep_time" + // ArrivalCode = "arr" + AirportCode = "airport" + WaypointPattern = `(?P\d{4}(\(\d{2}\w{3}\))?)(?P\w{3})\/?(?P\d{4}(\(\d{2}\w{3}\))?)` +) + +var ( + WaypointExpression = regexp.MustCompile(WaypointPattern) +) + +func FindWaypoints(message string) map[string]string { + matches := WaypointExpression.FindStringSubmatch(message) + if matches == nil { + return nil + } + + result := make(map[string]string) + for i, name := range WaypointExpression.SubexpNames() { + if i != 0 && name != "" { + result[name] = matches[i] + } + } + + return result +} diff --git a/internal/parsers/schedule_parser_test.go b/internal/parsers/schedule_parser_test.go new file mode 100644 index 0000000..5a7946f --- /dev/null +++ b/internal/parsers/schedule_parser_test.go @@ -0,0 +1,26 @@ +package parsers + +import ( + . "github.com/onsi/ginkgo/v2" + . "github.com/onsi/gomega" +) + +var _ = Describe("Schedule Parser", func() { + + Describe("FindWaypoints", func() { + It("should return the correct waypoints based on the message", func() { + message := "1845(11JUN)TSN/2100" + waypoints := FindWaypoints(message) + Expect(waypoints).NotTo(BeNil()) + Expect(waypoints[ArrivalTime]).To(Equal("1845(11JUN)")) + Expect(waypoints[AirportCode]).To(Equal("TSN")) + Expect(waypoints[DepartureTime]).To(Equal("2100")) + }) + + It("should return nil if no waypoints are found", func() { + message := "1845TSN" + waypoints := FindWaypoints(message) + Expect(waypoints).To(BeNil()) + }) + }) +})