18cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd/** 28cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @file java_test.cpp 38cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * 48cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * A simple test for java demangling. Run it through: 58cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * $ java_test 68cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * 78cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @remark Copyright 2007 OProfile authors 88cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @remark Read the file COPYING 98cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * 108cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @author Philippe Elie 118cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd */ 128cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 138cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include "demangle_java_symbol.h" 148cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 158cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include "op_regex.h" 168cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 178cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include <iostream> 188cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include <fstream> 198cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 208cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include <cstdlib> 218cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 228cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddusing namespace std; 238cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 248cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddnamespace { 258cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 268cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddvoid check_result(string const & input, string const & output, 278cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd string const & result) 288cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 298cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if (result != output) { 308cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd cerr << "for:\n\"" << input << "\"\n" 318cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd << "expect:\n\"" << output << "\"\n" 328cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd << "found:\n\"" << result << "\"\n"; 338cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd exit(EXIT_FAILURE); 348cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd } 358cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 368cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 378cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddstruct input_output { 388cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd char const * mangled; 398cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd char const * expect; 408cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd}; 418cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 428cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddinput_output mangle_tests[] = { 438cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd { "Ltest$test_1;f2(I)V", "void test$test_1.f2(int)" }, 448cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd { "Ltest;f4()V", "void test.f4()" }, 458cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd { "Ltest;f2(II)V", "void test.f2(int, int)" }, 468cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd { "Ltest$HelloThread;run()V~1", "void test$HelloThread.run()~1" }, 478cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd { "Lsun/security/provider/SHA;implCompress([BI)V", "void sun.security.provider.SHA.implCompress(byte[], int)" }, 488cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd { "Ljava/lang/String;equals(Ljava/lang/Object;)Z", "boolean java.lang.String.equals(java.lang.Object)" }, 498cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd { "Lorg/eclipse/swt/graphics/ImageData;blit(I[BIIIIIIIIIII[BIII[BIIIIIIIIIIZZ)V", "void org.eclipse.swt.graphics.ImageData.blit(int, byte[], int, int, int, int, int, int, int, int, int, int, int, byte[], int, int, int, byte[], int, int, int, int, int, int, int, int, int, int, boolean, boolean)" }, 508cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd { 0, 0 } 518cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd}; 528cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 538cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} // anonymous namespace 548cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 558cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddint main(void) 568cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 578cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd input_output const * cur; 588cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd for (cur = mangle_tests; cur->mangled; ++cur) { 598cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd string result = demangle_java_symbol(cur->mangled); 608cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd check_result(cur->mangled, cur->expect, result); 618cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd } 628cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 638cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd return 0; 648cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} 658cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 66