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"