This repository was archived by the owner on Jul 6, 2026. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 64
Expand file tree
/
Copy pathDynamicJavaClassTests.cs
More file actions
156 lines (133 loc) · 3.93 KB
/
Copy pathDynamicJavaClassTests.cs
File metadata and controls
156 lines (133 loc) · 3.93 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Threading;
using Java.Interop;
using Java.Interop.Dynamic;
using NUnit.Framework;
namespace Java.Interop.DynamicTests {
class MyDynamicObject : DynamicJavaClass {
public MyDynamicObject ()
: base ("java/lang/Object")
{
}
public int MyProperty {get; set;}
public int Method (string value)
{
return value.Length;
}
}
[TestFixture]
class DynamicJavaClassTests : Java.InteropTests.JavaVMFixture
{
const string Arrays_class = "java/util/Arrays";
const string Integer_class = "java/lang/Integer";
[Test]
public void Constructor ()
{
Assert.Throws<ArgumentNullException> (() => new DynamicJavaClass (null));
}
[Test]
public void DisposedInstanceThrowsObjectDisposedException ()
{
dynamic Integer = new DynamicJavaClass (Integer_class);
Assert.AreEqual (1, JavaClassInfo.GetClassInfoCount (Integer_class));
Integer.Dispose ();
Assert.AreEqual (-1, JavaClassInfo.GetClassInfoCount (Integer_class));
Integer.Dispose (); // Dispose() is idempotent
Assert.Catch<Exception> (() => Integer.bitCount (2));
Assert.Catch<Exception> (() => {
int max = Integer.MAX_INT;
max = max > 0 ? max : max;
});
Assert.Catch<Exception> (() => {
Integer.MAX_INT = 42;
});
}
[Test]
public void JniClassName ()
{
dynamic Arrays = new DynamicJavaClass (Arrays_class);
Assert.AreEqual (1, JavaClassInfo.GetClassInfoCount (Arrays_class));
Assert.AreEqual (Arrays_class, Arrays.JniClassName);
Arrays.Dispose ();
Assert.AreEqual (-1, JavaClassInfo.GetClassInfoCount (Arrays_class));
}
[Test]
public void CallStaticMethod ()
{
dynamic Arrays = new DynamicJavaClass (Arrays_class);
var array = new int[]{ 1, 2, 3, 4 };
int value = 3;
int index = Arrays.binarySearch (array, value);
Assert.AreEqual (2, index);
Arrays.Dispose ();
}
[Test]
public void ReadStaticMember ()
{
dynamic Integer = new DynamicJavaClass (Integer_class);
int max = Integer.MAX_VALUE;
Assert.AreEqual (int.MaxValue, max);
Integer.Dispose ();
}
[Test]
public void WriteStaticMember ()
{
dynamic Integer = new DynamicJavaClass (Integer_class);
int cur = Integer.MAX_VALUE;
Console.WriteLine ("# MAX_VALUE={0}", cur);
Integer.MAX_VALUE = 42;
int max = Integer.MAX_VALUE;
Console.WriteLine ("# set MAX_VALUE=42");
Assert.AreEqual (42, max);
Integer.MAX_VALUE = cur;
Console.WriteLine ("# done!");
Integer.Dispose ();
}
[Test]
public void FallbackPropertySet ()
{
dynamic d = new MyDynamicObject ();
d.MyProperty = 42;
int v = d.MyProperty;
Assert.AreEqual (42, v);
d.Dispose ();
}
[Test]
public void FallbackInvokeMember ()
{
dynamic d = new MyDynamicObject ();
int v = d.Method ("foo");
Assert.AreEqual (3, v);
d.Dispose ();
}
[Test]
public void InvokeConstructor ()
{
dynamic Integer = new DynamicJavaClass (Integer_class);
Assert.AreEqual (1, JavaClassInfo.GetClassInfoCount (Integer_class));
dynamic value = Integer (42);
Assert.AreEqual (2, JavaClassInfo.GetClassInfoCount (Integer_class));
Assert.IsTrue (value is DynamicJavaInstance);
value.Dispose ();
Assert.AreEqual (1, JavaClassInfo.GetClassInfoCount (Integer_class));
Integer.Dispose ();
Assert.AreEqual (-1, JavaClassInfo.GetClassInfoCount (Integer_class));
}
}
static class JavaClassInfo {
static Func<string, int> getClassInfoCount;
static JavaClassInfo ()
{
var t = typeof (DynamicJavaClass).Assembly.GetType ("Java.Interop.Dynamic.JavaClassInfo");
getClassInfoCount = (Func<string, int>)
Delegate.CreateDelegate (typeof (Func<string, int>), t.GetMethod ("GetClassInfoCount"));
}
public static int GetClassInfoCount (string jniClassName)
{
return getClassInfoCount (jniClassName);
}
}
}