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