1 | (in-package :abcl.test.lisp) |
---|
2 | |
---|
3 | ;; method with no arguments |
---|
4 | (deftest runtime-class.1 |
---|
5 | (java:jclass-name |
---|
6 | (java:jnew-runtime-class |
---|
7 | "Actor" |
---|
8 | :fields '(("name" "java.lang.String" :getter NIL)) |
---|
9 | :methods '(("getName" "java.lang.String" NIL |
---|
10 | (lambda (this) |
---|
11 | (java:jfield "name" this)))))) |
---|
12 | "Actor") |
---|
13 | |
---|
14 | ;; method with primitive type |
---|
15 | (deftest runtime-class.2 |
---|
16 | (java:jclass-name |
---|
17 | (java:jnew-runtime-class |
---|
18 | "Actor" |
---|
19 | :fields '(("name" "java.lang.String" :getter NIL)) |
---|
20 | :methods '(("getName" "java.lang.String" (:int) |
---|
21 | (lambda (this x) |
---|
22 | (declare (ignore x)) |
---|
23 | (java:jfield "name" this)))))) |
---|
24 | "Actor") |
---|
25 | |
---|
26 | (deftest runtime-class.doubles |
---|
27 | (flet ((dub (ignored-this x) (* 2 x))) |
---|
28 | (let ((class |
---|
29 | (java:jnew-runtime-class "Doubler" |
---|
30 | :superclass "java.lang.Object" |
---|
31 | :access-flags '(:public) |
---|
32 | :methods `( |
---|
33 | ("dub" :double (:double) ,#'dub))))) |
---|
34 | (java:jcall "dub" (java:jnew class) 2))) |
---|
35 | 4.0d0) |
---|
36 | |
---|
37 | ;; inheritance of type |
---|
38 | (deftest runtime-class.3 |
---|
39 | (let ((class-loader (java::make-memory-class-loader))) |
---|
40 | (java:jnew-runtime-class |
---|
41 | "foo.Actor" |
---|
42 | :fields '(("name" "java.lang.String")) |
---|
43 | :class-loader class-loader) |
---|
44 | (java:jclass-name |
---|
45 | (java:jnew-runtime-class |
---|
46 | "foo.StageActor" |
---|
47 | :superclass "foo.Actor" |
---|
48 | :fields '(("givenName" "java.lang.String")) |
---|
49 | :class-loader class-loader))) |
---|
50 | "foo.StageActor") |
---|
51 | |
---|
52 | ;; constructor |
---|
53 | (deftest runtime-class.4 |
---|
54 | (java:jcall "getName" |
---|
55 | (java:jnew |
---|
56 | (java:jnew-runtime-class |
---|
57 | "Actor" |
---|
58 | :constructors '((("java.lang.String") |
---|
59 | (lambda (this name) |
---|
60 | (setf (java:jfield "name" this) name)))) |
---|
61 | :methods '(("getName" "java.lang.String" NIL |
---|
62 | (lambda (this) |
---|
63 | (java:jfield "name" this)))) |
---|
64 | :fields '(("name" "java.lang.String" :getter NIL))) |
---|
65 | "Someone")) |
---|
66 | "Someone") |
---|
67 | |
---|
68 | ;; print-object |
---|
69 | (deftest runtime-class.print-object |
---|
70 | (subseq |
---|
71 | (with-output-to-string (stream) |
---|
72 | (print-object |
---|
73 | (java:jnew |
---|
74 | (java:jnew-runtime-class |
---|
75 | "FooList" |
---|
76 | :superclass "java.util.AbstractList" |
---|
77 | :methods '(("get" "java.lang.Object" (:int) |
---|
78 | (lambda (this index) |
---|
79 | "Foo")) |
---|
80 | ("size" :int () |
---|
81 | (lambda (this) |
---|
82 | 15))))) |
---|
83 | stream)) |
---|
84 | 0 |
---|
85 | 20) |
---|
86 | "#<FooList [Foo, Foo,") |
---|
87 | |
---|
88 | |
---|
89 | ;; class annotations |
---|
90 | (deftest runtime-class.annotations.deprecated |
---|
91 | (let* ((class (java:jnew-runtime-class |
---|
92 | "Foo" |
---|
93 | :annotations '("java.lang.Deprecated"))) |
---|
94 | (annotations (java:jcall "getAnnotations" class))) |
---|
95 | (assert (java:jinstance-of-p (aref annotations 0) "java.lang.Deprecated")) |
---|
96 | t) |
---|
97 | t) |
---|