File indexing completed on 2023-05-30 12:24:35
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"