File indexing completed on 2024-05-12 05:13:45

0001 /*
0002     SPDX-FileCopyrightText: 2019 Volker Krause <vkrause@kde.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "kandroidextras/androidtypes.h"
0008 #include "kandroidextras/jnisignature.h"
0009 #include "kandroidextras/javatypes.h"
0010 
0011 #include <QtTest/qtest.h>
0012 
0013 using namespace KAndroidExtras;
0014 
0015 class JniSignatureTest : public QObject
0016 {
0017     Q_OBJECT
0018 private Q_SLOTS:
0019     void testSignature()
0020     {
0021         QCOMPARE((const char*)Jni::signature<bool>(), "Z");
0022         QCOMPARE((const char*)Jni::signature<bool()>(), "()Z");
0023         QCOMPARE((const char*)Jni::signature<void(float[])>(), "([F)V");
0024         QCOMPARE((const char*)Jni::signature<void(java::lang::String)>(), "(Ljava/lang/String;)V");
0025         QCOMPARE((const char*)Jni::signature<java::lang::String()>(), "()Ljava/lang/String;");
0026         QCOMPARE((const char*)Jni::signature<android::content::Intent(java::lang::String, bool[])>(), "(Ljava/lang/String;[Z)Landroid/content/Intent;");
0027         QCOMPARE((const char*)Jni::signature<android::database::Cursor(android::net::Uri, java::lang::String[], java::lang::String, java::lang::String[], java::lang::String)>(), "(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;");
0028 
0029         // Jni::signature<java::lang::String[]()>() would be invalid C++, so we need alternatives for array returns
0030         QCOMPARE((const char*)Jni::signature<java::lang::String*()>(), "()[Ljava/lang/String;");
0031         QCOMPARE((const char*)Jni::signature<Jni::Array<java::lang::String>()>(), "()[Ljava/lang/String;");
0032 
0033         QCOMPARE((const char*)Jni::signature<jlong()>(), "()J");
0034     }
0035 
0036     void testTypeName()
0037     {
0038         QCOMPARE((const char*)Jni::typeName<android::provider::OpenableColumns>(), "android/provider/OpenableColumns");
0039         QCOMPARE((const char*)Jni::typeName<android::Manifest_permission>(), "android/Manifest$permission");
0040     }
0041 
0042     void testImplementationDetails()
0043     {
0044         static_assert(Internal::static_strlen("Hello!") == 6, "");
0045         QCOMPARE(java::lang::String::jniName(), "java/lang/String");
0046         QCOMPARE(((const char*)Internal::staticStringFromJniType<java::lang::String, std::make_index_sequence<16>>::value()), "java/lang/String");
0047     }
0048 };
0049 
0050 QTEST_GUILESS_MAIN(JniSignatureTest)
0051 
0052 #include "jnisignaturetest.moc"