summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gentoobrowse-api/service/maintenance/newsProcessor.cpp2
-rw-r--r--gentoobrowse-api/service/news.cpp4
-rw-r--r--gentoobrowse-api/service/news.h6
-rw-r--r--gentoobrowse-api/unittests/Jamfile.jam5
-rw-r--r--gentoobrowse-api/unittests/testNews.cpp4
-rw-r--r--gentoobrowse-api/unittests/testProcessAll.cpp18
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<const gchar *>(m.data), m.getStat().st_size);
+ auto news = Portage::Utils::News::parse(m.sv<gchar>());
news->newsid = path.parent_path().leaf().string();
Slicer::SerializeAny<Serializer>(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<gchar> & 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 <istream>
#include <vector>
@@ -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<gchar> &);
};
}
}
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
: : :
<define>BOOST_TEST_DYN_LINK
<library>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<const gchar *>(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<const gchar *>(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 <boost/test/data/test_case.hpp>
#include <depend.h>
+#include <news.h>
#include <utils/ebuildCacheParser.h>
#include <boost/filesystem/path.hpp>
#include <boost/filesystem/convenience.hpp>
@@ -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<gchar>());
+ 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
+}
+