From 9c3800374b63e578f9ab8bf7aae26ed38d1bb34b Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Wed, 2 May 2018 00:48:09 +0100 Subject: Add testProcessAll case for processing news And update news processor with string_view interface. --- gentoobrowse-api/service/maintenance/newsProcessor.cpp | 2 +- gentoobrowse-api/service/news.cpp | 4 ++-- gentoobrowse-api/service/news.h | 6 +++--- gentoobrowse-api/unittests/Jamfile.jam | 5 ++++- gentoobrowse-api/unittests/testNews.cpp | 4 ++-- gentoobrowse-api/unittests/testProcessAll.cpp | 18 ++++++++++++++++++ 6 files changed, 30 insertions(+), 9 deletions(-) diff --git a/gentoobrowse-api/service/maintenance/newsProcessor.cpp b/gentoobrowse-api/service/maintenance/newsProcessor.cpp index 68e2b57..e416eea 100644 --- a/gentoobrowse-api/service/maintenance/newsProcessor.cpp +++ b/gentoobrowse-api/service/maintenance/newsProcessor.cpp @@ -34,7 +34,7 @@ namespace Gentoo { NewsProcessor::importNews(DB::Connection * dbc, const boost::filesystem::path & path) { AdHoc::FileUtils::MemMap m(path); - auto news = Portage::Utils::News::parse(reinterpret_cast(m.data), m.getStat().st_size); + auto news = Portage::Utils::News::parse(m.sv()); news->newsid = path.parent_path().leaf().string(); Slicer::SerializeAny(news, dbc, "gentoobrowse.news"); } diff --git a/gentoobrowse-api/service/news.cpp b/gentoobrowse-api/service/news.cpp index be4d53e..3bc7aa8 100644 --- a/gentoobrowse-api/service/news.cpp +++ b/gentoobrowse-api/service/news.cpp @@ -81,10 +81,10 @@ namespace Portage { } Gentoo::NewsItemPtr - News::parse(const gchar * str, size_t len) + News::parse(const std::basic_string_view & str) { News d; - d.extract(str, len); + d.extract(str.data(), str.length()); d.news->body.erase( std::remove_if(d.news->body.begin(), d.news->body.end(), [](const auto & s) { return s.empty(); }), d.news->body.end()); diff --git a/gentoobrowse-api/service/news.h b/gentoobrowse-api/service/news.h index 7c7b495..0d2e26f 100644 --- a/gentoobrowse-api/service/news.h +++ b/gentoobrowse-api/service/news.h @@ -1,5 +1,5 @@ -#ifndef GENTOOBROWSE_SERVICE_DEPEND_H -#define GENTOOBROWSE_SERVICE_DEPEND_H +#ifndef GENTOOBROWSE_SERVICE_NEWS_H +#define GENTOOBROWSE_SERVICE_NEWS_H #include #include @@ -14,7 +14,7 @@ namespace Portage { public: Gentoo::NewsItemPtr news; - static Gentoo::NewsItemPtr parse(const gchar * string, size_t length); + static Gentoo::NewsItemPtr parse(const std::basic_string_view &); }; } } diff --git a/gentoobrowse-api/unittests/Jamfile.jam b/gentoobrowse-api/unittests/Jamfile.jam index 94f2b89..2fd9f79 100644 --- a/gentoobrowse-api/unittests/Jamfile.jam +++ b/gentoobrowse-api/unittests/Jamfile.jam @@ -71,7 +71,10 @@ run explicit testProcessAll ; run - testProcessAll.cpp ../service/utils/ebuildCacheParser.cpp ../service/depend.cpp + testProcessAll.cpp + ../service/utils/ebuildCacheParser.cpp + ../service/depend.cpp + ../service/news.cpp : : : BOOST_TEST_DYN_LINK testCommon diff --git a/gentoobrowse-api/unittests/testNews.cpp b/gentoobrowse-api/unittests/testNews.cpp index 291f49c..b2c8a78 100644 --- a/gentoobrowse-api/unittests/testNews.cpp +++ b/gentoobrowse-api/unittests/testNews.cpp @@ -8,7 +8,7 @@ BOOST_AUTO_TEST_CASE( news_2016_04_07_kde_plasma5_stable ) { AdHoc::FileUtils::MemMap m(rootDir / "fixtures" / "4156eb45cf3b0ce1d7125b84efd8688c2d6e831d" / "metadata" / "news" / "2016-04-07-kde-plasma5-stable" / "2016-04-07-kde-plasma5-stable.en.txt"); - auto news = Portage::Utils::News::parse(reinterpret_cast(m.data), m.getStat().st_size); + auto news = Portage::Utils::News::parse(m.sv()); BOOST_REQUIRE_EQUAL(news->title, "KDE Plasma 5 Upgrade"); BOOST_REQUIRE(news->authorname); BOOST_REQUIRE_EQUAL(*news->authorname, "Michael Palimaka"); @@ -29,7 +29,7 @@ BOOST_AUTO_TEST_CASE( news_2016_04_07_kde_plasma5_stable ) BOOST_AUTO_TEST_CASE( news_2010_03_23_new_subprofiles ) { AdHoc::FileUtils::MemMap m(rootDir / "fixtures" / "4156eb45cf3b0ce1d7125b84efd8688c2d6e831d" / "metadata" / "news" / "2010-03-23-new-subprofiles" / "2010-03-23-new-subprofiles.en.txt"); - auto news = Portage::Utils::News::parse(reinterpret_cast(m.data), m.getStat().st_size); + auto news = Portage::Utils::News::parse(m.sv()); BOOST_REQUIRE_EQUAL(news->title, "New desktop subprofiles for GNOME and KDE"); BOOST_REQUIRE(news->authorname); BOOST_REQUIRE_EQUAL(*news->authorname, "Theo Chatzimichos"); diff --git a/gentoobrowse-api/unittests/testProcessAll.cpp b/gentoobrowse-api/unittests/testProcessAll.cpp index cd72a8c..b06ad23 100644 --- a/gentoobrowse-api/unittests/testProcessAll.cpp +++ b/gentoobrowse-api/unittests/testProcessAll.cpp @@ -3,6 +3,7 @@ #include #include +#include #include #include #include @@ -35,3 +36,20 @@ BOOST_DATA_TEST_CASE( ebuildCacheDependencies, boost::unit_test::data::make( testDependRange(ecp.getRange("PDEPEND")); } +BOOST_DATA_TEST_CASE( news, boost::unit_test::data::make( + getFileList("/usr/portage/metadata/news", boost::filesystem::is_regular_file)), + path ) +{ + AdHoc::FileUtils::MemMap n(path); + auto news = Portage::Utils::News::parse(n.sv()); + BOOST_REQUIRE(news); + BOOST_CHECK(news->authoremail); + BOOST_CHECK(!news->authoremail->empty()); + BOOST_CHECK(news->authorname); + BOOST_CHECK(!news->authorname->empty()); + BOOST_CHECK(!news->body.empty()); + BOOST_CHECK(!news->title.empty()); + BOOST_CHECK_EQUAL(news->posted.length(), 10); + BOOST_CHECK(news->newsid.empty()); // From file name, not handled by parser +} + -- cgit v1.2.3