diff --git a/src/core/desktopfilereader.cpp b/src/core/desktopfilereader.cpp index 13d65a5..aae0f36 100644 --- a/src/core/desktopfilereader.cpp +++ b/src/core/desktopfilereader.cpp @@ -48,6 +48,10 @@ DesktopFileReader::DesktopFileReader(boost::filesystem::path path) : DesktopFile d->parse(ifs); } +DesktopFileReader::DesktopFileReader(std::istream& is) : DesktopFileReader() { + d->parse(is); +} + DesktopFileReader::DesktopFileReader(const DesktopFileReader& other) : DesktopFileReader() { d->copyData(other.d); } diff --git a/src/core/desktopfilereader.h b/src/core/desktopfilereader.h index 058eeca..c13befe 100644 --- a/src/core/desktopfilereader.h +++ b/src/core/desktopfilereader.h @@ -2,6 +2,7 @@ // system includes #include +#include // library includes #include @@ -19,6 +20,9 @@ public: // construct from path explicit DesktopFileReader(boost::filesystem::path path); + // construct from existing istream + explicit DesktopFileReader(std::istream& is); + // copy constructor DesktopFileReader(const DesktopFileReader& other); diff --git a/tests/core/test_desktopfilereader.cpp b/tests/core/test_desktopfilereader.cpp index 98bde08..2f7f6e4 100644 --- a/tests/core/test_desktopfilereader.cpp +++ b/tests/core/test_desktopfilereader.cpp @@ -25,6 +25,13 @@ TEST_F(DesktopFileReaderFixture, testPathConstructor) { EXPECT_FALSE(reader.isEmpty()); } +TEST_F(DesktopFileReaderFixture, testStreamConstructor) { + std::stringstream ss; + DesktopFileReader reader(ss); + + EXPECT_TRUE(reader.isEmpty()); +} + TEST_F(DesktopFileReaderFixture, testPathConstructorWithEmptyPath) { ASSERT_THROW(DesktopFileReader(""), std::invalid_argument); }