^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) // SPDX-License-Identifier: GPL-2.0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) #include <string.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) #include <stdlib.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) #include <stdio.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) #include "tests.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) #include "session.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) #include "debug.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) #include "demangle-java.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) int test__demangle_java(struct test *test __maybe_unused, int subtest __maybe_unused)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) int ret = TEST_OK;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) char *buf = NULL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) size_t i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) const char *mangled, *demangled;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) } test_cases[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) { "Ljava/lang/StringLatin1;equals([B[B)Z",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) "boolean java.lang.StringLatin1.equals(byte[], byte[])" },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) { "Ljava/util/zip/ZipUtils;CENSIZ([BI)J",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) "long java.util.zip.ZipUtils.CENSIZ(byte[], int)" },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) { "Ljava/util/regex/Pattern$BmpCharProperty;match(Ljava/util/regex/Matcher;ILjava/lang/CharSequence;)Z",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) "boolean java.util.regex.Pattern$BmpCharProperty.match(java.util.regex.Matcher, int, java.lang.CharSequence)" },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) { "Ljava/lang/AbstractStringBuilder;appendChars(Ljava/lang/String;II)V",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) "void java.lang.AbstractStringBuilder.appendChars(java.lang.String, int, int)" },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) { "Ljava/lang/Object;<init>()V",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) "void java.lang.Object<init>()" },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) for (i = 0; i < sizeof(test_cases) / sizeof(test_cases[0]); i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) buf = java_demangle_sym(test_cases[i].mangled, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) if (strcmp(buf, test_cases[i].demangled)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) pr_debug("FAILED: %s: %s != %s\n", test_cases[i].mangled,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) buf, test_cases[i].demangled);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) ret = TEST_FAIL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) free(buf);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) return ret;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) }