[libcalamares] Add test for InstanceKey

- cover all the constructors
 - Start with some tests that fail, showing bugs in the implementation
 - Fix bug that "derp@derp" was creating a valid instance-key with
   a bad module and id (need to use ::fromString() to get that
   functionality).
 - Extend tests with more bad cases.
 - Refactor tests to simplify "this is bad" assertions.
This commit is contained in:
Adriaan de Groot 2019-09-14 09:21:37 -04:00
parent 2f99004041
commit ba7e96c5e1
3 changed files with 151 additions and 0 deletions

View File

@ -207,6 +207,16 @@ if ( ECM_FOUND AND BUILD_TESTING )
Qt5::Test
)
calamares_automoc( libcalamaresnetworktest )
ecm_add_test(
modulesystem/Tests.cpp
TEST_NAME
libcalamaresmodulesystemtest
LINK_LIBRARIES
calamares
Qt5::Test
)
calamares_automoc( libcalamaresmodulesystemtest )
endif()
if( BUILD_TESTING )

View File

@ -52,12 +52,14 @@ public:
{
second = first;
}
validate();
}
/// @brief Create "usual" instances keys `module@module`
explicit InstanceKey( const QString& module )
: QPair( module, module )
{
validate();
}
/// @brief Create unusual, invalid instance key
@ -89,6 +91,16 @@ public:
return InstanceKey( moduleEntrySplit.first(), moduleEntrySplit.last() );
}
private:
/** @brief Check validity and reset module and id if needed. */
void validate()
{
if ( first.contains( '@' ) || second.contains( '@' ) )
{
first = QString();
second = QString();
}
}
};
}

View File

@ -0,0 +1,129 @@
/* === This file is part of Calamares - <https://github.com/calamares> ===
*
* Copyright 2019, Adriaan de Groot <groot@kde.org>
*
* Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Calamares is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Calamares. If not, see <http://www.gnu.org/licenses/>.
*/
#include "modulesystem/InstanceKey.h"
#include <QtTest/QtTest>
using Calamares::ModuleSystem::InstanceKey;
class ModuleSystemTests : public QObject
{
Q_OBJECT
public:
ModuleSystemTests() {}
virtual ~ModuleSystemTests() {}
private Q_SLOTS:
void initTestCase();
void testEmptyInstanceKey();
void testSimpleInstanceKey();
void testCustomInstanceKey();
void testFromStringInstanceKey();
void testBadSimpleCases();
void testBadFromStringCases();
};
void ModuleSystemTests::initTestCase()
{
}
void assert_is_invalid( const InstanceKey& k )
{
QVERIFY( !k.isValid() );
QVERIFY( !k.isCustom() );
QVERIFY( k.module().isEmpty() );
QVERIFY( k.id().isEmpty() );
}
void ModuleSystemTests::testEmptyInstanceKey()
{
InstanceKey k0;
assert_is_invalid( k0 );
}
void ModuleSystemTests::testSimpleInstanceKey()
{
InstanceKey k1( "derp" );
QVERIFY( k1.isValid() );
QVERIFY( !k1.isCustom() );
QCOMPARE( k1.module(), QStringLiteral( "derp" ) );
QCOMPARE( k1.id(), QStringLiteral( "derp" ) );
}
void ModuleSystemTests::testCustomInstanceKey()
{
InstanceKey k0("derp", "derp");
QVERIFY( k0.isValid() );
QVERIFY( !k0.isCustom() );
QCOMPARE( k0.module(), QStringLiteral( "derp" ) );
QCOMPARE( k0.id(), QStringLiteral( "derp" ) );
InstanceKey k1("derp", "horse");
QVERIFY( k1.isValid() );
QVERIFY( k1.isCustom() );
QCOMPARE( k1.module(), QStringLiteral( "derp" ) );
QCOMPARE( k1.id(), QStringLiteral( "horse" ) );
}
void ModuleSystemTests::testFromStringInstanceKey()
{
InstanceKey k0 = InstanceKey::fromString( "derp@derp" );
QVERIFY( k0.isValid() );
QVERIFY( !k0.isCustom() );
QCOMPARE( k0.module(), QStringLiteral( "derp" ) );
QCOMPARE( k0.id(), QStringLiteral( "derp" ) );
InstanceKey k1 = InstanceKey::fromString( "derp@horse" );
QVERIFY( k1.isValid() );
QVERIFY( k1.isCustom() );
QCOMPARE( k1.module(), QStringLiteral( "derp" ) );
QCOMPARE( k1.id(), QStringLiteral( "horse" ) );
InstanceKey k2 = InstanceKey::fromString( "derp" );
QVERIFY( k2.isValid() );
QVERIFY( !k2.isCustom() );
QCOMPARE( k2.module(), QStringLiteral( "derp" ) );
QCOMPARE( k2.id(), QStringLiteral( "derp" ) );
}
/// @brief These are expected to fail since they show bugs in the code
void ModuleSystemTests::testBadSimpleCases()
{
InstanceKey k2( "derp@derp" );
assert_is_invalid( k2 );
InstanceKey k3( "derp@horse" );
assert_is_invalid( k3 );
}
void ModuleSystemTests::testBadFromStringCases()
{
InstanceKey k0 = InstanceKey::fromString( QString() );
assert_is_invalid( k0 );
k0 = InstanceKey::fromString( "derp@derp@derp" );
assert_is_invalid( k0 );
}
QTEST_GUILESS_MAIN( ModuleSystemTests )
#include "Tests.moc"