Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix build tests #163

Merged
merged 4 commits into from
Nov 3, 2015
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 16 additions & 8 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,18 +1,26 @@
.PHONY: build_ext tests

JAVAC_OPTS=-target 1.6 -source 1.6
JAVAC=javac $(JAVAC_OPTS)

build_ext:
javac jnius/src/org/jnius/NativeInvocationHandler.java
$(JAVAC) jnius/src/org/jnius/NativeInvocationHandler.java
python setup.py build_ext --inplace -f -g

clean:
find . -name "*.class" -exec rm {} \;
rm -rf build

html:
$(MAKE) -C docs html

tests: build_ext
cd tests && javac org/jnius/HelloWorld.java
cd tests && javac org/jnius/BasicsTest.java
cd tests && javac org/jnius/MultipleMethods.java
cd tests && javac org/jnius/SimpleEnum.java
cd tests && javac org/jnius/InterfaceWithPublicEnum.java
cd tests && javac org/jnius/ClassArgument.java
cd tests && javac org/jnius/MultipleDimensions.java
cd tests && $(JAVAC) org/jnius/HelloWorld.java
cd tests && $(JAVAC) org/jnius/BasicsTest.java
cd tests && $(JAVAC) org/jnius/MultipleMethods.java
cd tests && $(JAVAC) org/jnius/SimpleEnum.java
cd tests && $(JAVAC) org/jnius/InterfaceWithPublicEnum.java
cd tests && $(JAVAC) org/jnius/ClassArgument.java
cd tests && $(JAVAC) org/jnius/MultipleDimensions.java
cp jnius/src/org/jnius/NativeInvocationHandler.class tests/org/jnius
cd tests && env PYTHONPATH=..:$(PYTHONPATH) nosetests-2.7 -v
5 changes: 5 additions & 0 deletions jnius/jnius_utils.pxi
Original file line number Diff line number Diff line change
Expand Up @@ -278,6 +278,11 @@ cdef int calculate_score(sign_args, args, is_varargs=False) except *:
continue
return -1

# accept an autoclass class for java/lang/Class.
if hasattr(arg, '__javaclass__') and r == 'java/lang/Class':
score += 10
continue

# if we pass a JavaClass, ensure the definition is matching
# XXX FIXME what if we use a subclass or something ?
if isinstance(arg, JavaClass):
Expand Down
16 changes: 15 additions & 1 deletion jnius/reflect.py
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,11 @@ def ensureclass(clsname):
registers.append(clsname)
autoclass(clsname)

def lower_name(s):
return s[:1].lower() + s[1:] if s else ''

def bean_getter(s):
return (s.startswith('get') and len(s) > 3 and s[3].isupper()) or (s.startswith('is') and len(s) > 2 and s[2].isupper())

def autoclass(clsname):
jniname = clsname.replace('.', '/')
Expand Down Expand Up @@ -176,9 +181,12 @@ def autoclass(clsname):
get_signature(method.getReturnType()))
cls = JavaStaticMethod if static else JavaMethod
classDict[name] = cls(sig, varargs=varargs)
if name != 'getClass' and bean_getter(name) and len(method.getParameterTypes()) == 0:
lowername = lower_name(name[3:])
classDict[lowername] = (lambda n: property(lambda self: getattr(self, n)()))(name)
continue

# multpile signatures
# multiple signatures
signatures = []
for index, subname in enumerate(methods_name):
if subname != name:
Expand Down Expand Up @@ -207,6 +215,12 @@ def autoclass(clsname):

classDict[name] = JavaMultipleMethod(signatures)

for iclass in c.getInterfaces():
if iclass.getName() == 'java.util.List':
classDict['__getitem__'] = lambda self, index: self.get(index)
classDict['__len__'] = lambda self: self.size()
break

for field in c.getFields():
static = Modifier.isStatic(field.getModifiers())
sig = get_signature(field.getType())
Expand Down
12 changes: 10 additions & 2 deletions tests/test_proxy.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
from jnius import autoclass, java_method, PythonJavaClass, cast
from nose.tools import *

print '1: declare a TestImplem that implement Collection'

Expand Down Expand Up @@ -104,7 +105,7 @@ def bad_signature(self, *args):
pass


print '2: instanciate the class, with some data'
print '2: instantiate the class, with some data'
a = TestImplem(*range(10))
print a
print dir(a)
Expand Down Expand Up @@ -150,4 +151,11 @@ def bad_signature(self, *args):
#print Collections.shuffle(a2)

# test bad signature
TestBadSignature()
threw = False
try:
TestBadSignature()
except Exception:
threw = True

if not threw:
raise Exception("Failed to throw for bad signature")