File indexing completed on 2024-05-19 05:14:15
0001 /* 0002 SPDX-FileCopyrightText: 2020 Volker Krause <vkrause@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "kandroidextras/jniproperty.h" 0008 #include "kandroidextras/jnitypes.h" 0009 #include "kandroidextras/manifestpermission.h" 0010 #include "kandroidextras/intent.h" 0011 #include "kandroidextras/uri.h" 0012 0013 #include <QtTest/qtest.h> 0014 0015 using namespace KAndroidExtras; 0016 0017 class TestClass 0018 { 0019 TestClass() = default; 0020 JNI_OBJECT(TestClass, android::content::Intent) 0021 0022 JNI_CONSTANT(java::lang::String, ACTION_CREATE_DOCUMENT) 0023 JNI_CONSTANT(jint, FLAG_GRANT_READ_URI_PERMISSION) 0024 JNI_CONSTANT(android::net::Uri, OBJECT_TYPE_PROPERTY) 0025 JNI_CONSTANT(bool, BOOL_PROPERTY) 0026 // JNI_CONSTANT(uint32_t, UNSIGNED_PROPERTY) // must not compile 0027 0028 JNI_PROPERTY(java::lang::String, myStringField) 0029 JNI_PROPERTY(int, myIntField) 0030 JNI_PROPERTY(android::net::Uri, myUriField) 0031 JNI_PROPERTY(android::content::Intent, myIntentField) 0032 JNI_PROPERTY(bool, myBoolProperty) 0033 // JNI_PROPERTY(uint32_t, myUsignedProperty) // must not compile 0034 0035 public: 0036 friend class JniPropertyTest; 0037 }; 0038 0039 static_assert(sizeof(TestClass) == sizeof(QJniObject)); 0040 0041 class JniPropertyTest : public QObject 0042 { 0043 Q_OBJECT 0044 private Q_SLOTS: 0045 void testPropertyRead() 0046 { 0047 #ifndef Q_OS_ANDROID 0048 const QString p1 = TestClass::ACTION_CREATE_DOCUMENT; 0049 Q_UNUSED(p1) 0050 int32_t p2 = TestClass::FLAG_GRANT_READ_URI_PERMISSION; 0051 Q_UNUSED(p2) 0052 QJniObject p3 = TestClass::OBJECT_TYPE_PROPERTY; 0053 Q_UNUSED(p3) 0054 bool b = TestClass::BOOL_PROPERTY; 0055 0056 QCOMPARE(QJniObject::m_staticProtocol.size(), 4); 0057 QCOMPARE(QJniObject::m_staticProtocol.at(0), QLatin1StringView("getStaticObjectField: android/content/Intent ACTION_CREATE_DOCUMENT Ljava/lang/String;")); 0058 QCOMPARE(QJniObject::m_staticProtocol.at(1), QLatin1StringView("getStaticField<>: android/content/Intent FLAG_GRANT_READ_URI_PERMISSION I")); 0059 QCOMPARE(QJniObject::m_staticProtocol.at(2), QLatin1StringView("getStaticObjectField: android/content/Intent OBJECT_TYPE_PROPERTY Landroid/net/Uri;")); 0060 QCOMPARE(QJniObject::m_staticProtocol.at(3), QLatin1StringView("getStaticField<>: android/content/Intent BOOL_PROPERTY Z")); 0061 0062 const QString p4 = ManifestPermission::READ_CALENDAR; 0063 Q_UNUSED(p4) 0064 QCOMPARE(QJniObject::m_staticProtocol.at(4), QLatin1StringView("getStaticObjectField: android/Manifest$permission READ_CALENDAR Ljava/lang/String;")); 0065 0066 0067 TestClass obj; 0068 const QString foo = obj.myStringField; 0069 obj.myStringField = foo; 0070 const int bar = obj.myIntField; 0071 Q_UNUSED(bar); 0072 obj.myIntField = 42; 0073 const QUrl url = obj.myUriField; 0074 obj.myUriField = url; 0075 const QJniObject bla = obj.myIntentField; 0076 obj.myIntentField = bla; 0077 b = obj.myBoolProperty; 0078 obj.myBoolProperty = b; 0079 0080 QCOMPARE(obj.jniHandle().protocol().size(), 10); 0081 QCOMPARE(obj.jniHandle().protocol().at(0), QLatin1StringView("getObjectField: myStringField Ljava/lang/String;")); 0082 QCOMPARE(obj.jniHandle().protocol().at(1), QLatin1StringView("setField: myStringField Ljava/lang/String;")); 0083 QCOMPARE(obj.jniHandle().protocol().at(2), QLatin1StringView("getField: myIntField I")); 0084 QCOMPARE(obj.jniHandle().protocol().at(3), QLatin1StringView("setField: myIntField I")); 0085 QCOMPARE(obj.jniHandle().protocol().at(4), QLatin1StringView("getObjectField: myUriField Landroid/net/Uri;")); 0086 QCOMPARE(obj.jniHandle().protocol().at(5), QLatin1StringView("setField: myUriField Landroid/net/Uri;")); 0087 QCOMPARE(obj.jniHandle().protocol().at(6), QLatin1StringView("getObjectField: myIntentField Landroid/content/Intent;")); 0088 QCOMPARE(obj.jniHandle().protocol().at(7), QLatin1StringView("setField: myIntentField Landroid/content/Intent;")); 0089 QCOMPARE(obj.jniHandle().protocol().at(8), QLatin1StringView("getField: myBoolProperty Z")); 0090 QCOMPARE(obj.jniHandle().protocol().at(9), QLatin1StringView("setField: myBoolProperty Z")); 0091 #endif 0092 } 0093 }; 0094 0095 QTEST_GUILESS_MAIN(JniPropertyTest) 0096 0097 #include "jnipropertytest.moc"