diff --git a/common-rust/src/types.rs b/common-rust/src/types.rs index 180ae6e..41077a3 100644 --- a/common-rust/src/types.rs +++ b/common-rust/src/types.rs @@ -96,8 +96,12 @@ impl<'a> QVariant<'a> { self.type_ as u32 } pub fn convert(&self) -> Variant { - // TODO - Variant::None + match (self.type_) { + 10 => { + Variant::String(String::new()) + } + _ => Variant::None + } } } diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 019584e..48230dd 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -16,8 +16,6 @@ function(rust_test NAME DIRECTORY) MAIN_DEPENDENCY "${NAME}.json" DEPENDS "${GENERATOR}" ) -# add_custom_target("${DIRECTORY}" -# DEPENDS "${DIR}/src/inferface.rs") add_custom_command( OUTPUT "${DIR}/${RUST_TARGET_DIR}/librust.a" @@ -39,7 +37,8 @@ function(rust_test NAME DIRECTORY) "${DIR}/${RUST_TARGET_DIR}/librust.a" ) set_property(TARGET ${NAME} - APPEND PROPERTY AUTOGEN_TARGET_DEPENDS "${SRC}/${NAME}_rust.h") + APPEND PROPERTY AUTOGEN_TARGET_DEPENDS "${SRC}/${NAME}_rust.h" + APPEND PROPERTY AUTOGEN_TARGET_DEPENDS "${SRC}/${NAME}_rust.cpp") add_test("build_${NAME}" "${CMAKE_COMMAND}" --build ${CMAKE_BINARY_DIR} --target "${NAME}") diff --git a/tests/rust_object_types/src/types.rs b/tests/rust_object_types/src/types.rs index 180ae6e..b8ca403 100644 --- a/tests/rust_object_types/src/types.rs +++ b/tests/rust_object_types/src/types.rs @@ -96,8 +96,16 @@ impl<'a> QVariant<'a> { self.type_ as u32 } pub fn convert(&self) -> Variant { - // TODO - Variant::None + match self.type_ { + 10 => { + let data = unsafe { + let d = self.data as *const uint16_t; + slice::from_raw_parts(d, self.len as usize) + }; + Variant::String(String::from_utf16_lossy(data)) + } + _ => Variant::None + } } } diff --git a/tests/test_object_types.cpp b/tests/test_object_types.cpp index 5791b9c..6361284 100644 --- a/tests/test_object_types.cpp +++ b/tests/test_object_types.cpp @@ -1,6 +1,7 @@ -#include "test_object_rust.h" +#include "test_object_types_rust.h" #include #include +#include class TestRustObject : public QObject { @@ -26,15 +27,17 @@ void TestRustObject::testStringSetter() { // GIVEN Person person; + const QVariant userName(QString("Konqi")); QSignalSpy spy(&person, &Person::userNameChanged); // WHEN - person.setUserName("Konqi"); + person.setUserName(userName); // THEN QVERIFY(spy.isValid()); QCOMPARE(spy.count(), 1); - QCOMPARE(person.userName(), QString("Konqi")); + QCOMPARE(person.userName().type(), userName.type()); + QCOMPARE(person.userName(), userName); } QTEST_MAIN(TestRustObject) diff --git a/tests/test_object_types.json b/tests/test_object_types.json index 7948a0e..7db52a9 100644 --- a/tests/test_object_types.json +++ b/tests/test_object_types.json @@ -10,7 +10,7 @@ "type": "Object", "properties": [{ "name": "userName", - "type": "QString", + "type": "QVariant", "write": true }] }] diff --git a/tests/test_object_types_rust.cpp b/tests/test_object_types_rust.cpp index 5b238c1..11f5ffe 100644 --- a/tests/test_object_types_rust.cpp +++ b/tests/test_object_types_rust.cpp @@ -110,8 +110,8 @@ void set_qvariant(QVariant* v, qvariant_t* val) { extern "C" { PersonInterface* person_new(Person*, void (*)(Person*)); void person_free(PersonInterface*); - void person_user_name_get(PersonInterface*, QString*, qstring_set); - void person_user_name_set(void*, qstring_t); + void person_user_name_get(PersonInterface*, QVariant*, qvariant_set); + void person_user_name_set(void*, qvariant_t); }; Person::Person(QObject *parent): QObject(parent), @@ -121,12 +121,12 @@ Person::Person(QObject *parent): Person::~Person() { person_free(d); } -QString Person::userName() const +QVariant Person::userName() const { - QString v; - person_user_name_get(d, &v, set_qstring); + QVariant v; + person_user_name_get(d, &v, set_qvariant); return v; } -void Person::setUserName(const QString& v) { - person_user_name_set(d, v); +void Person::setUserName(const QVariant& v) { + variant(v, d, person_user_name_set); } diff --git a/tests/test_object_types_rust.h b/tests/test_object_types_rust.h index ff3448b..1eb64da 100644 --- a/tests/test_object_types_rust.h +++ b/tests/test_object_types_rust.h @@ -11,15 +11,15 @@ class Person : public QObject { Q_OBJECT PersonInterface * const d; - Q_PROPERTY(QString userName READ userName WRITE setUserName NOTIFY userNameChanged FINAL) + Q_PROPERTY(QVariant userName READ userName WRITE setUserName NOTIFY userNameChanged FINAL) public: explicit Person(QObject *parent = nullptr); ~Person(); - QString userName() const; - void setUserName(const QString& v); + QVariant userName() const; + void setUserName(const QVariant& v); signals: void userNameChanged(); private: - QString m_userName; + QVariant m_userName; }; #endif // TEST_OBJECT_TYPES_RUST_H