File indexing completed on 2024-04-14 15:48:44

0001 #include "test_object_types_rust.h"
0002 #include <QTest>
0003 #include <QSignalSpy>
0004 #include <QDebug>
0005 
0006 class TestRustObjectTypes : public QObject
0007 {
0008     Q_OBJECT
0009 private slots:
0010     void testBool();
0011     void testOptionalBool();
0012     void testInt8();
0013     void testUint8();
0014     void testInt16();
0015     void testUint16();
0016     void testInt32();
0017     void testUint32();
0018     void testInt64();
0019     void testUint64();
0020     void testOptionalUint64();
0021     void testFloat();
0022     void testDouble();
0023     void testString();
0024     void testOptionalString();
0025     void testByteArray();
0026     void testOptionalByteArray();
0027     void testStringByFunction();
0028 };
0029 
0030 template <typename V, typename Set, typename Get, typename Changed>
0031 void testSetter(const V v, Set set, Get get, Changed changed)
0032 {
0033     // GIVEN
0034     Object object;
0035     QSignalSpy spy(&object, changed);
0036 
0037     // WHEN
0038     (object.*set)((V)v);
0039 
0040     // THEN
0041     QVERIFY(spy.isValid());
0042     QCOMPARE(spy.count(), 1);
0043     QCOMPARE((V)(object.*get)(), (V)v);
0044 }
0045 
0046 void TestRustObjectTypes::testBool()
0047 {
0048     testSetter(true, &Object::setBoolean,
0049         &Object::boolean, &Object::booleanChanged);
0050     testSetter(false, &Object::setBoolean,
0051         &Object::boolean, &Object::booleanChanged);
0052 }
0053 
0054 void TestRustObjectTypes::testOptionalBool()
0055 {
0056     testSetter(QVariant(), &Object::setOptionalBoolean,
0057         &Object::optionalBoolean, &Object::optionalBooleanChanged);
0058     testSetter(QVariant::fromValue(true), &Object::setOptionalBoolean,
0059         &Object::optionalBoolean, &Object::optionalBooleanChanged);
0060     testSetter(QVariant::fromValue(false), &Object::setOptionalBoolean,
0061         &Object::optionalBoolean, &Object::optionalBooleanChanged);
0062 }
0063 
0064 void TestRustObjectTypes::testInt8()
0065 {
0066     testSetter(0, &Object::setI8,
0067         &Object::i8, &Object::i8Changed);
0068     testSetter(1, &Object::setI8,
0069         &Object::i8, &Object::i8Changed);
0070     testSetter(std::numeric_limits<int8_t>::min(), &Object::setI8,
0071         &Object::i8, &Object::i8Changed);
0072     testSetter(std::numeric_limits<int8_t>::max(), &Object::setI8,
0073         &Object::i8, &Object::i8Changed);
0074 }
0075 
0076 void TestRustObjectTypes::testUint8()
0077 {
0078     testSetter(0, &Object::setU8,
0079         &Object::u8, &Object::u8Changed);
0080     testSetter(1, &Object::setU8,
0081         &Object::u8, &Object::u8Changed);
0082     testSetter(std::numeric_limits<uint8_t>::min(), &Object::setU8,
0083         &Object::u8, &Object::u8Changed);
0084     testSetter(std::numeric_limits<uint8_t>::max(), &Object::setU8,
0085         &Object::u8, &Object::u8Changed);
0086 }
0087 
0088 void TestRustObjectTypes::testInt16()
0089 {
0090     testSetter(0, &Object::setI16,
0091         &Object::i16, &Object::i16Changed);
0092     testSetter(1, &Object::setI16,
0093         &Object::i16, &Object::i16Changed);
0094     testSetter(std::numeric_limits<int16_t>::min(), &Object::setI16,
0095         &Object::i16, &Object::i16Changed);
0096     testSetter(std::numeric_limits<int16_t>::max(), &Object::setI16,
0097         &Object::i16, &Object::i16Changed);
0098 }
0099 
0100 void TestRustObjectTypes::testUint16()
0101 {
0102     testSetter(0, &Object::setU16,
0103         &Object::u16, &Object::u16Changed);
0104     testSetter(1, &Object::setU16,
0105         &Object::u16, &Object::u16Changed);
0106     testSetter(std::numeric_limits<uint16_t>::min(), &Object::setU16,
0107         &Object::u16, &Object::u16Changed);
0108     testSetter(std::numeric_limits<uint16_t>::max(), &Object::setU16,
0109         &Object::u16, &Object::u16Changed);
0110 }
0111 
0112 void TestRustObjectTypes::testInt32()
0113 {
0114     testSetter(0, &Object::setI32,
0115         &Object::i32, &Object::i32Changed);
0116     testSetter(1, &Object::setI32,
0117         &Object::i32, &Object::i32Changed);
0118     testSetter(std::numeric_limits<int32_t>::min(), &Object::setI32,
0119         &Object::i32, &Object::i32Changed);
0120     testSetter(std::numeric_limits<int32_t>::max(), &Object::setI32,
0121         &Object::i32, &Object::i32Changed);
0122 }
0123 
0124 void TestRustObjectTypes::testUint32()
0125 {
0126     testSetter(0, &Object::setU32,
0127         &Object::u32, &Object::u32Changed);
0128     testSetter(1, &Object::setU32,
0129         &Object::u32, &Object::u32Changed);
0130     testSetter(std::numeric_limits<uint32_t>::min(), &Object::setU32,
0131         &Object::u32, &Object::u32Changed);
0132     testSetter(std::numeric_limits<uint32_t>::max(), &Object::setU32,
0133         &Object::u32, &Object::u32Changed);
0134 }
0135 
0136 void TestRustObjectTypes::testInt64()
0137 {
0138     testSetter(0, &Object::setI64,
0139         &Object::i64, &Object::i64Changed);
0140     testSetter(1, &Object::setI64,
0141         &Object::i64, &Object::i64Changed);
0142     testSetter(std::numeric_limits<int64_t>::min(), &Object::setI64,
0143         &Object::i64, &Object::i64Changed);
0144     testSetter(std::numeric_limits<int64_t>::max(), &Object::setI64,
0145         &Object::i64, &Object::i64Changed);
0146 }
0147 
0148 void TestRustObjectTypes::testUint64()
0149 {
0150     testSetter(0, &Object::setU64,
0151         &Object::u64, &Object::u64Changed);
0152     testSetter(1, &Object::setU64,
0153         &Object::u64, &Object::u64Changed);
0154     testSetter(std::numeric_limits<uint64_t>::min(), &Object::setU64,
0155         &Object::u64, &Object::u64Changed);
0156     testSetter(std::numeric_limits<uint64_t>::max(), &Object::setU64,
0157         &Object::u64, &Object::u64Changed);
0158 }
0159 
0160 void TestRustObjectTypes::testOptionalUint64()
0161 {
0162     testSetter(QVariant(), &Object::setOptionalU64,
0163         &Object::optionalU64, &Object::optionalU64Changed);
0164     testSetter(QVariant::fromValue(0), &Object::setOptionalU64,
0165         &Object::optionalU64, &Object::optionalU64Changed);
0166     testSetter(QVariant::fromValue(1), &Object::setOptionalU64,
0167         &Object::optionalU64, &Object::optionalU64Changed);
0168     testSetter(QVariant::fromValue(std::numeric_limits<uint64_t>::min()),
0169         &Object::setOptionalU64, &Object::optionalU64,
0170         &Object::optionalU64Changed);
0171     testSetter(QVariant::fromValue(std::numeric_limits<uint64_t>::max()),
0172         &Object::setOptionalU64, &Object::optionalU64,
0173         &Object::optionalU64Changed);
0174 }
0175 
0176 void TestRustObjectTypes::testFloat()
0177 {
0178     testSetter(0, &Object::setF32,
0179         &Object::f32, &Object::f32Changed);
0180     testSetter(1, &Object::setF32,
0181         &Object::f32, &Object::f32Changed);
0182     testSetter(std::numeric_limits<float>::min(), &Object::setF32,
0183         &Object::f32, &Object::f32Changed);
0184     testSetter(std::numeric_limits<float>::max(), &Object::setF32,
0185         &Object::f32, &Object::f32Changed);
0186 }
0187 
0188 void TestRustObjectTypes::testDouble()
0189 {
0190     testSetter(0, &Object::setF64,
0191         &Object::f64, &Object::f64Changed);
0192     testSetter(1, &Object::setF64,
0193         &Object::f64, &Object::f64Changed);
0194     testSetter(std::numeric_limits<double>::min(), &Object::setF64,
0195         &Object::f64, &Object::f64Changed);
0196     testSetter(std::numeric_limits<double>::max(), &Object::setF64,
0197         &Object::f64, &Object::f64Changed);
0198 }
0199 
0200 void TestRustObjectTypes::testString()
0201 {
0202     testSetter(QString(), &Object::setString,
0203         &Object::string, &Object::stringChanged);
0204     testSetter(QString(""), &Object::setString,
0205         &Object::string, &Object::stringChanged);
0206     testSetter(QString("Konqi"), &Object::setString,
0207         &Object::string, &Object::stringChanged);
0208     testSetter(QString("$𐐷𤭢"), &Object::setString,
0209         &Object::string, &Object::stringChanged);
0210 }
0211 
0212 void TestRustObjectTypes::testStringByFunction()
0213 {
0214     testSetter(QString(), &Object::setStringByFunction,
0215         &Object::stringByFunction, &Object::stringByFunctionChanged);
0216     testSetter(QString(""), &Object::setStringByFunction,
0217         &Object::stringByFunction, &Object::stringByFunctionChanged);
0218     testSetter(QString("Konqi"), &Object::setStringByFunction,
0219         &Object::stringByFunction, &Object::stringByFunctionChanged);
0220     testSetter(QString("$𐐷𤭢"), &Object::setStringByFunction,
0221         &Object::stringByFunction, &Object::stringByFunctionChanged);
0222 }
0223 
0224 void TestRustObjectTypes::testOptionalString()
0225 {
0226     testSetter(QString(), &Object::setOptionalString,
0227         &Object::optionalString, &Object::optionalStringChanged);
0228     testSetter(QString(""), &Object::setOptionalString,
0229         &Object::optionalString, &Object::optionalStringChanged);
0230     testSetter(QString("Konqi"), &Object::setOptionalString,
0231         &Object::optionalString, &Object::optionalStringChanged);
0232     testSetter(QString("$𐐷𤭢"), &Object::setOptionalString,
0233         &Object::optionalString, &Object::optionalStringChanged);
0234 }
0235 
0236 void TestRustObjectTypes::testByteArray()
0237 {
0238     testSetter(QByteArray(), &Object::setBytearray,
0239         &Object::bytearray, &Object::bytearrayChanged);
0240     const char data[10] = {0x0,0x1,0x2,0x3,0x4,0x5,0x6,0x7,0x8,0x9};
0241     testSetter(QByteArray(data, 0), &Object::setBytearray,
0242         &Object::bytearray, &Object::bytearrayChanged);
0243     testSetter(QByteArray(data, 10), &Object::setBytearray,
0244         &Object::bytearray, &Object::bytearrayChanged);
0245 }
0246 
0247 void TestRustObjectTypes::testOptionalByteArray()
0248 {
0249     testSetter(QByteArray(), &Object::setOptionalBytearray,
0250         &Object::optionalBytearray, &Object::optionalBytearrayChanged);
0251     const char data[10] = {0x0,0x1,0x2,0x3,0x4,0x5,0x6,0x7,0x8,0x9};
0252     testSetter(QByteArray(data, 0), &Object::setOptionalBytearray,
0253         &Object::optionalBytearray, &Object::optionalBytearrayChanged);
0254     testSetter(QByteArray(data, 10), &Object::setOptionalBytearray,
0255         &Object::optionalBytearray, &Object::optionalBytearrayChanged);
0256 }
0257 
0258 QTEST_MAIN(TestRustObjectTypes)
0259 #include "test_object_types.moc"