aboutsummaryrefslogtreecommitdiff
path: root/runtime/Perl5/t/author/api.t
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/Perl5/t/author/api.t')
-rw-r--r--runtime/Perl5/t/author/api.t95
1 files changed, 95 insertions, 0 deletions
diff --git a/runtime/Perl5/t/author/api.t b/runtime/Perl5/t/author/api.t
new file mode 100644
index 0000000..420fe83
--- /dev/null
+++ b/runtime/Perl5/t/author/api.t
@@ -0,0 +1,95 @@
+use strict;
+use warnings;
+
+use File::Spec;
+use Java::JVM::Classfile;
+
+use Test::More tests => 29;
+
+sub class_name_to_java {
+ my ($name) = @_;
+
+ my $tmp = $name;
+ $tmp =~ s/ANTLR::Runtime/org.antlr.runtime/;
+ $tmp =~ s/::/./g;
+
+ return $tmp;
+}
+
+sub java_class_name_to_perl {
+ my ($name) = @_;
+
+ my $tmp = $name;
+ $tmp =~ s/org\.antlr\.runtime/ANTLR::Runtime/;
+ $tmp =~ s/\./::/g;
+
+ return $tmp;
+}
+
+sub resolve_java_class_file {
+ my ($name, $basedir) = @_;
+
+ my $tmp = $name;
+ $tmp =~ s!\.!/!g;
+ $tmp .= '.class';
+
+ return File::Spec->catfile($basedir, $tmp);
+}
+
+sub java_constant_name_to_perl {
+}
+
+sub java_method_name_to_perl {
+ my ($name) = @_;
+
+ if ($name eq '<init>') {
+ return 'new';
+ }
+ # add special cases here
+ else {
+ my $tmp = $name;
+ $tmp =~ s/([a-z])([A-Z])/$1_\L$2\E/g;
+
+ return $tmp;
+ }
+}
+
+my @java_class_names = qw(
+ org.antlr.runtime.BitSet
+);
+
+foreach my $java_class_name (@java_class_names) {
+ my $java_class_file = resolve_java_class_file($java_class_name,
+ '../../build/rtclasses');
+
+ my $java_class;
+ {
+ local $SIG{'__WARN__'} = sub {};
+ $java_class = Java::JVM::Classfile->new($java_class_file);
+ }
+
+ my $class_name = java_class_name_to_perl($java_class_name);
+ use_ok($class_name);
+ print map { "$_\n" } ANTLR::Runtime::BitSet->can();
+ print "---\n";
+
+ eval { $class_name->new() };
+ print join "\n", ANTLR::Runtime::BitSet->can();
+ print "\n";
+
+ my $java_fields = $java_class->fields;
+ foreach my $java_field (@$java_fields) {
+ next if grep { $_ eq 'private' } @{$java_field->access_flags};
+
+ my $field_name = $java_field->name;
+ ok($class_name->can($field_name), $field_name);
+ }
+
+ my $java_methods = $java_class->methods;
+ foreach my $java_method (@$java_methods) {
+ next if grep { $_ eq 'private' } @{$java_method->access_flags};
+
+ my $method_name = java_method_name_to_perl($java_method->name);
+ ok($class_name->can($method_name), $method_name);
+ }
+}