From ef33aa01f3618da4bbe77a9961fbe1099bbe36be Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Fri, 11 Jan 2019 19:49:39 +0100 Subject: [PATCH] [fsresizer] Port to NamedSuffix template --- src/modules/fsresizer/ResizeFSJob.cpp | 46 ++++++++++----------------- src/modules/fsresizer/ResizeFSJob.h | 30 +++++++---------- src/modules/fsresizer/Tests.cpp | 26 +++++++-------- 3 files changed, 41 insertions(+), 61 deletions(-) diff --git a/src/modules/fsresizer/ResizeFSJob.cpp b/src/modules/fsresizer/ResizeFSJob.cpp index 4df41a7d4..8fccf6e8b 100644 --- a/src/modules/fsresizer/ResizeFSJob.cpp +++ b/src/modules/fsresizer/ResizeFSJob.cpp @@ -39,46 +39,32 @@ #include "modules/partition/core/PartitionIterator.h" -ResizeFSJob::RelativeSize::RelativeSize() - : m_value( 0 ) - , m_unit( None ) + +static const NamedEnumTable& +unitSuffixes() { -} + using Unit = ResizeFSJob::RelativeUnit; + static const NamedEnumTable names{ + { "%", Unit::Percent }, + { "MiB", Unit::Absolute } + }; -template -void matchUnitSuffix( - const QString& s, - const char ( &suffix )[N], - ResizeFSJob::RelativeSize::Unit matchedUnit, - int& value, - ResizeFSJob::RelativeSize::Unit& unit -) -{ - if ( s.endsWith( suffix ) ) - { - value = s.left( s.length() - N + 1 ).toInt(); - unit = matchedUnit; - } + return names; } - ResizeFSJob::RelativeSize::RelativeSize( const QString& s ) - : m_value( 0 ) - , m_unit( None ) + : NamedSuffix( unitSuffixes(), s ) { - matchUnitSuffix( s, "%", Percent, m_value, m_unit ); - matchUnitSuffix( s, "MiB", Absolute, m_value, m_unit ); - - if ( ( unit() == Percent ) && ( value() > 100 ) ) + if ( ( unit() == RelativeUnit::Percent ) && ( value() > 100 ) ) { cDebug() << "Percent value" << value() << "is not valid."; m_value = 0; - m_unit = None; + m_unit = RelativeUnit::None; } if ( !m_value ) - m_unit = None; + m_unit = RelativeUnit::None; } qint64 @@ -91,11 +77,11 @@ ResizeFSJob::RelativeSize::apply( qint64 totalSectors, qint64 sectorSize ) switch ( m_unit ) { - case None: + case unit_t::None: return -1; - case Absolute: + case unit_t::Absolute: return CalamaresUtils::MiBtoBytes( value() ) / sectorSize; - case Percent: + case unit_t::Percent: if ( value() == 100 ) return totalSectors; // Common-case, avoid futzing around else diff --git a/src/modules/fsresizer/ResizeFSJob.h b/src/modules/fsresizer/ResizeFSJob.h index c34ccb865..d575f18a9 100644 --- a/src/modules/fsresizer/ResizeFSJob.h +++ b/src/modules/fsresizer/ResizeFSJob.h @@ -24,7 +24,8 @@ #include -#include +#include "utils/NamedSuffix.h" +#include "utils/PluginFactory.h" #include @@ -37,31 +38,28 @@ class PLUGINDLLEXPORT ResizeFSJob : public Calamares::CppJob Q_OBJECT public: + enum class RelativeUnit + { + None, + Percent, + Absolute + }; + /** @brief Size expressions * * Sizes can be specified in MiB or percent (of the device they * are on). This class handles parsing of such strings from the * config file. */ - class RelativeSize + class RelativeSize : public NamedSuffix { public: - RelativeSize(); + RelativeSize() : NamedSuffix() { }; RelativeSize( const QString& ); - enum Unit - { - None, - Percent, - Absolute - }; - - int value() const { return m_value; } - Unit unit() const { return m_unit; } - bool isValid() const { - return ( unit() != None ) && ( value() > 0 ); + return ( unit() != RelativeUnit::None ) && ( value() > 0 ); } /** @brief Apply this size to the number of sectors @p totalSectors . @@ -80,10 +78,6 @@ public: * Equivalent to apply( d->totalLogical(), d->logicalSize() ) */ qint64 apply( Device* d ); - - private: - int m_value; - Unit m_unit; } ; explicit ResizeFSJob( QObject* parent = nullptr ); diff --git a/src/modules/fsresizer/Tests.cpp b/src/modules/fsresizer/Tests.cpp index 255153fa2..8f6bb48c5 100644 --- a/src/modules/fsresizer/Tests.cpp +++ b/src/modules/fsresizer/Tests.cpp @@ -54,13 +54,13 @@ FSResizerTests::initTestCase() void FSResizerTests::testConfigurationRobust() { ResizeFSJob j; - + // Empty config j.setConfigurationMap( QVariantMap() ); QVERIFY( j.m_fsname.isEmpty() ); QVERIFY( j.m_devicename.isEmpty() ); - QCOMPARE( j.m_size.unit(), ResizeFSJob::RelativeSize::None ); - QCOMPARE( j.m_atleast.unit(), ResizeFSJob::RelativeSize::None ); + QCOMPARE( j.m_size.unit(), ResizeFSJob::RelativeUnit::None ); + QCOMPARE( j.m_atleast.unit(), ResizeFSJob::RelativeUnit::None ); // Config is missing fs and dev, so it isn't valid YAML::Node doc0 = YAML::Load( R"(--- @@ -70,17 +70,17 @@ atleast: 600MiB j.setConfigurationMap( CalamaresUtils::yamlMapToVariant( doc0 ).toMap() ); QVERIFY( j.m_fsname.isEmpty() ); QVERIFY( j.m_devicename.isEmpty() ); - QCOMPARE( j.m_size.unit(), ResizeFSJob::RelativeSize::None ); - QCOMPARE( j.m_atleast.unit(), ResizeFSJob::RelativeSize::None ); + QCOMPARE( j.m_size.unit(), ResizeFSJob::RelativeUnit::None ); + QCOMPARE( j.m_atleast.unit(), ResizeFSJob::RelativeUnit::None ); QCOMPARE( j.m_size.value(), 0 ); QCOMPARE( j.m_atleast.value(), 0 ); -} +} void FSResizerTests::testConfigurationValues() { ResizeFSJob j; - // Check both + // Check both YAML::Node doc0 = YAML::Load( R"(--- fs: / size: 100% @@ -89,8 +89,8 @@ atleast: 600MiB j.setConfigurationMap( CalamaresUtils::yamlMapToVariant( doc0 ).toMap() ); QVERIFY( !j.m_fsname.isEmpty() ); QVERIFY( j.m_devicename.isEmpty() ); - QCOMPARE( j.m_size.unit(), ResizeFSJob::RelativeSize::Percent ); - QCOMPARE( j.m_atleast.unit(), ResizeFSJob::RelativeSize::Absolute ); + QCOMPARE( j.m_size.unit(), ResizeFSJob::RelativeUnit::Percent ); + QCOMPARE( j.m_atleast.unit(), ResizeFSJob::RelativeUnit::Absolute ); QCOMPARE( j.m_size.value(), 100 ); QCOMPARE( j.m_atleast.value(), 600 ); @@ -104,8 +104,8 @@ atleast: 127 % j.setConfigurationMap( CalamaresUtils::yamlMapToVariant( doc0 ).toMap() ); QVERIFY( !j.m_fsname.isEmpty() ); QVERIFY( !j.m_devicename.isEmpty() ); - QCOMPARE( j.m_size.unit(), ResizeFSJob::RelativeSize::Absolute ); - QCOMPARE( j.m_atleast.unit(), ResizeFSJob::RelativeSize::Percent ); + QCOMPARE( j.m_size.unit(), ResizeFSJob::RelativeUnit::Absolute ); + QCOMPARE( j.m_atleast.unit(), ResizeFSJob::RelativeUnit::Percent ); QCOMPARE( j.m_size.value(), 72 ); QCOMPARE( j.m_atleast.value(), 127 ); @@ -119,8 +119,8 @@ size: 71MiB j.setConfigurationMap( CalamaresUtils::yamlMapToVariant( doc0 ).toMap() ); QVERIFY( !j.m_fsname.isEmpty() ); QVERIFY( j.m_devicename.isEmpty() ); - QCOMPARE( j.m_size.unit(), ResizeFSJob::RelativeSize::Absolute ); - QCOMPARE( j.m_atleast.unit(), ResizeFSJob::RelativeSize::None ); + QCOMPARE( j.m_size.unit(), ResizeFSJob::RelativeUnit::Absolute ); + QCOMPARE( j.m_atleast.unit(), ResizeFSJob::RelativeUnit::None ); QCOMPARE( j.m_size.value(), 71 ); QCOMPARE( j.m_atleast.value(), 0 ); }