From a64720522652cab68951938ca877776da0ae0187 Mon Sep 17 00:00:00 2001 From: TheAssassin Date: Fri, 9 Nov 2018 01:32:18 +0100 Subject: [PATCH] Implement conversion to double --- src/core/desktopfileentry.cpp | 6 ++++++ src/core/desktopfileentry.h | 4 ++++ tests/core/test_desktopfileentry.cpp | 11 +++++++++++ 3 files changed, 21 insertions(+) diff --git a/src/core/desktopfileentry.cpp b/src/core/desktopfileentry.cpp index 39c6da5..43365c7 100644 --- a/src/core/desktopfileentry.cpp +++ b/src/core/desktopfileentry.cpp @@ -87,6 +87,12 @@ long DesktopFileEntry::asLong() const { return lexical_cast(value()); } +double DesktopFileEntry::asDouble() const { + d->assertValueNotEmpty(); + + return lexical_cast(value()); +} + std::vector DesktopFileEntry::parseStringList() const { const auto& value = this->value(); diff --git a/src/core/desktopfileentry.h b/src/core/desktopfileentry.h index 636c70c..da6b9b1 100644 --- a/src/core/desktopfileentry.h +++ b/src/core/desktopfileentry.h @@ -58,6 +58,10 @@ public: // throws boost::bad_lexical_cast in case of type errors long asLong() const; + // convert value to double + // throws boost::bad_lexical_cast in case of type errors + double asDouble() const; + // split CSV list value into vector // the separator used to split the string is a semicolon as per desktop file spec std::vector parseStringList() const; diff --git a/tests/core/test_desktopfileentry.cpp b/tests/core/test_desktopfileentry.cpp index 75e702b..d05946d 100644 --- a/tests/core/test_desktopfileentry.cpp +++ b/tests/core/test_desktopfileentry.cpp @@ -116,6 +116,17 @@ TEST_F(DesktopFileEntryFixture, testConversionToLong) { ASSERT_THROW(emptyEntry.asLong(), std::invalid_argument); } +TEST_F(DesktopFileEntryFixture, testConversionToDouble) { + DesktopFileEntry doubleEntry(key, "1.234567"); + EXPECT_NEAR(doubleEntry.asDouble(), 1.234567, 0.00000001); + + DesktopFileEntry brokenValueEntry(key, "abcd"); + ASSERT_THROW(brokenValueEntry.asDouble(), bad_lexical_cast); + + DesktopFileEntry emptyEntry(key, ""); + ASSERT_THROW(emptyEntry.asDouble(), std::invalid_argument); +} + TEST_F(DesktopFileEntryFixture, testConversionToString) { DesktopFileEntry entry(key, value); auto result = static_cast(entry);