Issue #15 CVariant can convert between CVariantList and our other container classes

This commit is contained in:
Mat Sutcliffe
2019-02-26 01:51:11 +00:00
parent e8a0a0b6ba
commit 07f6c8b73c
11 changed files with 212 additions and 13 deletions

View File

@@ -13,6 +13,7 @@
* \ingroup testblackmisc
*/
#include "blackmisc/aviation/airlineicaocodelist.h"
#include "blackmisc/aviation/atcstation.h"
#include "blackmisc/aviation/callsign.h"
#include "blackmisc/compare.h"
@@ -24,6 +25,7 @@
#include "blackmisc/pq/units.h"
#include "blackmisc/propertyindexvariantmap.h"
#include "blackmisc/registermetadata.h"
#include "blackmisc/variantlist.h"
#include "blackmisc/variant.h"
#include "test.h"
@@ -50,6 +52,9 @@ namespace BlackMiscTest
//! Basic unit tests for value objects and variants
void variant();
//! Unit tests for variant lists
void variantList();
//! Unit tests for value maps and value objects
void valueMap();
};
@@ -106,6 +111,29 @@ namespace BlackMiscTest
QVERIFY2(compare(station1, station3) != 0, "Station should not be equal");
}
void CTestVariantAndMap::variantList()
{
const CSequence<int> ints { 1, 2, 3 };
CVariant variant = CVariant::from(ints);
QVERIFY2(variant.canConvert<CVariantList>(), "Variant containing list can convert to CVariantList");
QVERIFY2(variant.convert(qMetaTypeId<CVariantList>()), "Variant containing list can convert to CVariantList");
const CVariantList variantInts = variant.to<CVariantList>();
QVERIFY2(ints.size() == variantInts.size(), "Variant list has same size as original list");
QVERIFY2(ints[0] == variantInts[0].to<int>(), "Variant list has same element");
QVERIFY2(variant.canConvert<CSequence<int>>(), "Variant containing can convert back");
QVERIFY2(ints == variant.to<CSequence<int>>(), "Variant list converted back compares equal");
const CAirlineIcaoCodeList list { CAirlineIcaoCode("BAW"), CAirlineIcaoCode("DLH"), CAirlineIcaoCode("AAL") };
variant = CVariant::from(list);
QVERIFY2(variant.canConvert<CVariantList>(), "Variant containing list can convert to CVariantList");
QVERIFY2(variant.convert(qMetaTypeId<CVariantList>()), "Variant containing list can convert to CVariantList");
CVariantList variantList = variant.to<CVariantList>();
QVERIFY2(list.size() == variantList.size(), "Variant list has same size as original list");
QVERIFY2(list[0] == variantList[0].to<CAirlineIcaoCode>(), "Variant list has same element");
QVERIFY2(variant.canConvert<CAirlineIcaoCodeList>(), "Variant containing can convert back");
QVERIFY2(list == variant.to<CAirlineIcaoCodeList>(), "Variant list converted back compares equal");
}
void CTestVariantAndMap::valueMap()
{
// ATC station