From f827941a1b7353e3b0eae10a071893dda0fa941d Mon Sep 17 00:00:00 2001 From: windyboy Date: Tue, 30 Jul 2024 10:56:05 +0800 Subject: [PATCH] refactor: Update parsing of flight schedule data for improved accuracy and functionality --- internal/parsers/schedule_parser.go | 5 +- internal/parsers/schedule_parser_test.go | 95 ++++++++++++++++++++++++ 2 files changed, 98 insertions(+), 2 deletions(-) diff --git a/internal/parsers/schedule_parser.go b/internal/parsers/schedule_parser.go index 729d781..3806f5b 100644 --- a/internal/parsers/schedule_parser.go +++ b/internal/parsers/schedule_parser.go @@ -13,11 +13,11 @@ const ( AirportCode = "airport" Date = "date" Task = "task" - IndexPattern = `(?P\(?L?\d+\)?\.?)` + IndexPattern = `(?P\(?L?[0-9]+\)?\.?)` DatePattern = `\s?(?P\d{2}\w{3})` TaskPattern = `\s?(?P[A-Z]\/[A-Z])` WaypointPattern = `\s?(?P\d{4}(\(\d{2}\w{3}\))?)\/?(?P\w{3})\/?(?P\d{4}(\(\d{2}\w{3}\))?)` - FlightNumberPattern = `\s?(?P[0-9A-Z][A-Z]\d{3,5})` + FlightNumberPattern = `\s?(?P[0-9A-Z][0-9A-Z]\d{3,5})` RegisterPattern = `\s?(?PB\d{4})` ) @@ -53,6 +53,7 @@ func FindWaypoints(message string) map[string]string { return result } + func ParseLine(line string) *domain.FlightSchedule { cleanLine := strings.TrimSpace(line) words := strings.Split(cleanLine, " ") diff --git a/internal/parsers/schedule_parser_test.go b/internal/parsers/schedule_parser_test.go index 2db8531..d50ae47 100644 --- a/internal/parsers/schedule_parser_test.go +++ b/internal/parsers/schedule_parser_test.go @@ -7,6 +7,101 @@ import ( var _ = Describe("Schedule Parser", func() { + Describe("Index Parser", func() { + Context("parse : 83.", func() { + message := "83." + data := parse(message, IndexExpression) + It("should return a valid index", func() { + Expect(data).NotTo(BeNil()) + Expect(data[Index]).To(Equal("83.")) + }) + }) + + Context("parse : (21)", func() { + message := "(21)" + data := parse(message, IndexExpression) + It("should return a valid index", func() { + Expect(data).NotTo(BeNil()) + Expect(data[Index]).To(Equal("(21)")) + }) + }) + + Context("parse : L59", func() { + message := "L59" + data := parse(message, IndexExpression) + It("should return a valid index", func() { + Expect(data).NotTo(BeNil()) + Expect(data[Index]).To(Equal("L59")) + }) + }) + + Context("parse : (205)", func() { + message := "(205)" + data := parse(message, IndexExpression) + It("should return a valid index", func() { + Expect(data).NotTo(BeNil()) + Expect(data[Index]).To(Equal("(205)")) + }) + }) + + Context("parse : L01", func() { + message := "L01" + data := parse(message, IndexExpression) + It("should return a valid index", func() { + Expect(data).NotTo(BeNil()) + Expect(data[Index]).To(Equal("L01")) + }) + }) + + Context("parse : 01)", func() { + message := "01)" + data := parse(message, IndexExpression) + It("should return a valid index", func() { + Expect(data).NotTo(BeNil()) + Expect(data[Index]).To(Equal("01)")) + }) + }) + + }) + + Describe("Flight Number Parser", func() { + Context("parse : FM9134", func() { + message := "FM9134" + data := parse(message, FlightNumberExpression) + It("should return a valid flight number", func() { + Expect(data).NotTo(BeNil()) + Expect(data[FlightNumber]).To(Equal("FM9134")) + }) + }) + + Context("parse : Y87969", func() { + message := "Y87969" + data := parse(message, FlightNumberExpression) + It("should return a valid flight number", func() { + Expect(data).NotTo(BeNil()) + Expect(data[FlightNumber]).To(Equal("Y87969")) + }) + }) + + Context("parse : CK261", func() { + message := "CK261" + data := parse(message, FlightNumberExpression) + It("should return a valid flight number", func() { + Expect(data).NotTo(BeNil()) + Expect(data[FlightNumber]).To(Equal("CK261")) + }) + }) + + Context("parse : 9C8812", func() { + message := "9C8812" + data := parse(message, FlightNumberExpression) + It("should return a valid flight number", func() { + Expect(data).NotTo(BeNil()) + Expect(data[FlightNumber]).To(Equal("9C8812")) + }) + }) + }) + Describe("FindWaypoints", func() { It("should return the correct waypoints based on the message", func() { message := "1845(11JUN)TSN/2100"