source: trunk/abcl/test/lisp/abcl/runtime-class.lisp

Last change on this file was 15796, checked in by Mark Evenson, 4 months ago

JNEW-RUNTIME-CLASS: add support for doubles as arguments and return type in methods

File size: 3.1 KB
Line 
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)
Note: See TracBrowser for help on using the repository browser.