diff --git a/test/source/scwx/awips/coded_location.test.cpp b/test/source/scwx/awips/coded_location.test.cpp index a3ef5e80..00caa845 100644 --- a/test/source/scwx/awips/coded_location.test.cpp +++ b/test/source/scwx/awips/coded_location.test.cpp @@ -195,5 +195,38 @@ TEST(CodedLocation, NCMaine) EXPECT_DOUBLE_EQ(coordinates[12].longitude_, -69.21); } +TEST(CodedLocation, InvalidNC) +{ + std::vector data = { + "LAT...LON 47316870 4721679 46466767 45436766 44756779", + " 44216834 43816943 43706970 43837006 44497009", + " 45306974 46356946 46976921"}; + + CodedLocation location; + bool dataValid = location.Parse(data); + + EXPECT_EQ(dataValid, false); +} + +TEST(CodedLocation, EmptyData) +{ + std::vector data = {}; + + CodedLocation location; + bool dataValid = location.Parse(data); + + EXPECT_EQ(dataValid, false); +} + +TEST(CodedLocation, MalformedData) +{ + std::vector data = {"LAT...LON 1360"}; + + CodedLocation location; + bool dataValid = location.Parse(data); + + EXPECT_EQ(dataValid, false); +} + } // namespace awips } // namespace scwx diff --git a/test/source/scwx/awips/coded_time_motion_location.test.cpp b/test/source/scwx/awips/coded_time_motion_location.test.cpp index 931de2d2..8c09bcb4 100644 --- a/test/source/scwx/awips/coded_time_motion_location.test.cpp +++ b/test/source/scwx/awips/coded_time_motion_location.test.cpp @@ -86,5 +86,25 @@ TEST(CodedTimeMotionLocation, TwoCoordinates) EXPECT_DOUBLE_EQ(coordinates[1].longitude_, -81.98); } +TEST(CodedTimeMotionLocation, EmptyData) +{ + std::vector data = {}; + + CodedTimeMotionLocation tml; + bool dataValid = tml.Parse(data); + + EXPECT_EQ(dataValid, false); +} + +TEST(CodedTimeMotionLocation, MalformedData) +{ + std::vector data = {"TIME...MOT...LOC 2113Z 345DEG 42KT 2760"}; + + CodedTimeMotionLocation tml; + bool dataValid = tml.Parse(data); + + EXPECT_EQ(dataValid, false); +} + } // namespace awips } // namespace scwx diff --git a/wxdata/source/scwx/awips/coded_location.cpp b/wxdata/source/scwx/awips/coded_location.cpp index f70b1fb7..d1bea57f 100644 --- a/wxdata/source/scwx/awips/coded_location.cpp +++ b/wxdata/source/scwx/awips/coded_location.cpp @@ -114,6 +114,11 @@ bool CodedLocation::Parse(const StringRange& lines, const std::string& wfo) { if (token->size() != 8) { + BOOST_LOG_TRIVIAL(warning) + << logPrefix_ + << "Invalid National Center LAT...LON format: \"" << *token + << "\""; + dataValid = false; break; } @@ -137,6 +142,27 @@ bool CodedLocation::Parse(const StringRange& lines, const std::string& wfo) } } } + else + { + if (tokenList.empty()) + { + BOOST_LOG_TRIVIAL(warning) << logPrefix_ << "LAT...LON not found"; + } + else + { + BOOST_LOG_TRIVIAL(warning) + << logPrefix_ + << "Malformed LAT...LON tokens: (0: " << tokenList.at(0) + << ", size: " << tokenList.size() << ")"; + + for (const auto& token : tokenList) + { + BOOST_LOG_TRIVIAL(debug) << logPrefix_ << token; + } + } + + dataValid = false; + } if (dataValid) { diff --git a/wxdata/source/scwx/awips/coded_time_motion_location.cpp b/wxdata/source/scwx/awips/coded_time_motion_location.cpp index 054404f3..4e70afae 100644 --- a/wxdata/source/scwx/awips/coded_time_motion_location.cpp +++ b/wxdata/source/scwx/awips/coded_time_motion_location.cpp @@ -175,6 +175,28 @@ bool CodedTimeMotionLocation::Parse(const StringRange& lines, } } } + else + { + if (tokenList.empty()) + { + BOOST_LOG_TRIVIAL(warning) + << logPrefix_ << "TIME...MOT...LOC not found"; + } + else + { + BOOST_LOG_TRIVIAL(warning) + << logPrefix_ + << "Malformed TIME...MOT...LOC tokens: (0: " << tokenList.at(0) + << ", size: " << tokenList.size() << ")"; + + for (const auto& token : tokenList) + { + BOOST_LOG_TRIVIAL(debug) << logPrefix_ << token; + } + } + + dataValid = false; + } return dataValid; }