Skip to content

Commit dd8a6a0

Browse files
committed
Add unit tests.
1 parent 0ef3d55 commit dd8a6a0

File tree

10 files changed

+526
-6
lines changed

10 files changed

+526
-6
lines changed

src/Xamarin.Android.Tools.Bytecode/Xamarin.Android.Tools.Bytecode.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
</PropertyGroup>
1414

1515
<ItemGroup>
16-
<PackageReference Include="protobuf-net" Version="2.4.1" />
16+
<PackageReference Include="protobuf-net" Version="2.4.4" />
1717
</ItemGroup>
1818

1919
</Project>

tests/Xamarin.Android.Tools.Bytecode-Tests/KotlinFixupsTests.cs

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -125,10 +125,14 @@ public void UnsignedMethods ()
125125
{
126126
var klass = LoadClassFile ("UnsignedTypes.class");
127127

128-
var uint_method = klass.Methods.First (m => m.Name.Contains ('-') && m.GetParameters () [0].Type.BinaryName == "I");
129-
var ushort_method = klass.Methods.First (m => m.Name.Contains ('-') && m.GetParameters () [0].Type.BinaryName == "S");
130-
var ulong_method = klass.Methods.First (m => m.Name.Contains ('-') && m.GetParameters () [0].Type.BinaryName == "J");
131-
var ubyte_method = klass.Methods.First (m => m.Name.Contains ('-') && m.GetParameters () [0].Type.BinaryName == "B");
128+
var uint_method = klass.Methods.Single (m => m.Name.Contains ("foo_uint-"));
129+
var ushort_method = klass.Methods.Single (m => m.Name.Contains ("foo_ushort-"));
130+
var ulong_method = klass.Methods.Single (m => m.Name.Contains ("foo_ulong-"));
131+
var ubyte_method = klass.Methods.Single (m => m.Name.Contains ("foo_ubyte-"));
132+
var uintarray_method = klass.Methods.Single (m => m.Name.Contains ("foo_uintarray-"));
133+
var ushortarray_method = klass.Methods.Single (m => m.Name.Contains ("foo_ushortarray-"));
134+
var ulongarray_method = klass.Methods.Single (m => m.Name.Contains ("foo_ulongarray-"));
135+
var ubytearray_method = klass.Methods.Single (m => m.Name.Contains ("foo_ubytearray-"));
132136

133137
KotlinFixups.Fixup (new [] { klass });
134138

@@ -143,6 +147,18 @@ public void UnsignedMethods ()
143147

144148
Assert.AreEqual ("ubyte", ubyte_method.GetParameters () [0].KotlinType);
145149
Assert.AreEqual ("ubyte", ubyte_method.KotlinReturnType);
150+
151+
Assert.AreEqual ("uint[]", uintarray_method.GetParameters () [0].KotlinType);
152+
Assert.AreEqual ("uint[]", uintarray_method.KotlinReturnType);
153+
154+
Assert.AreEqual ("ushort[]", ushortarray_method.GetParameters () [0].KotlinType);
155+
Assert.AreEqual ("ushort[]", ushortarray_method.KotlinReturnType);
156+
157+
Assert.AreEqual ("ulong[]", ulongarray_method.GetParameters () [0].KotlinType);
158+
Assert.AreEqual ("ulong[]", ulongarray_method.KotlinReturnType);
159+
160+
Assert.AreEqual ("ubyte[]", ubytearray_method.GetParameters () [0].KotlinType);
161+
Assert.AreEqual ("ubyte[]", ubytearray_method.KotlinReturnType);
146162
}
147163

148164
[Test]
@@ -200,6 +216,18 @@ public void UnsignedMethodsXml ()
200216

201217
Assert.AreEqual ("ubyte", xml.Elements ("method").Single (f => f.Attribute ("name").Value == "foo_ubyte-7apg3OU").Attribute ("return").Value);
202218
Assert.AreEqual ("ubyte", xml.Elements ("method").Single (f => f.Attribute ("name").Value == "foo_ubyte-7apg3OU").Element ("parameter").Attribute ("type").Value);
219+
220+
Assert.AreEqual ("uint[]", xml.Elements ("method").Single (f => f.Attribute ("name").Value == "foo_uintarray--ajY-9A").Attribute ("return").Value);
221+
Assert.AreEqual ("uint[]", xml.Elements ("method").Single (f => f.Attribute ("name").Value == "foo_uintarray--ajY-9A").Element ("parameter").Attribute ("type").Value);
222+
223+
Assert.AreEqual ("ushort[]", xml.Elements ("method").Single (f => f.Attribute ("name").Value == "foo_ushortarray-rL5Bavg").Attribute ("return").Value);
224+
Assert.AreEqual ("ushort[]", xml.Elements ("method").Single (f => f.Attribute ("name").Value == "foo_ushortarray-rL5Bavg").Element ("parameter").Attribute ("type").Value);
225+
226+
Assert.AreEqual ("ulong[]", xml.Elements ("method").Single (f => f.Attribute ("name").Value == "foo_ulongarray-QwZRm1k").Attribute ("return").Value);
227+
Assert.AreEqual ("ulong[]", xml.Elements ("method").Single (f => f.Attribute ("name").Value == "foo_ulongarray-QwZRm1k").Element ("parameter").Attribute ("type").Value);
228+
229+
Assert.AreEqual ("ubyte[]", xml.Elements ("method").Single (f => f.Attribute ("name").Value == "foo_ubytearray-GBYM_sE").Attribute ("return").Value);
230+
Assert.AreEqual ("ubyte[]", xml.Elements ("method").Single (f => f.Attribute ("name").Value == "foo_ubytearray-GBYM_sE").Element ("parameter").Attribute ("type").Value);
203231
}
204232
}
205233
}
Binary file not shown.

tests/Xamarin.Android.Tools.Bytecode-Tests/kotlin/UnsignedTypes.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,8 @@ public class UnsignedTypes {
2020
public fun foo_ulong (value : ULong) : ULong { return value; }
2121
public fun foo_ubyte (value : Byte) : Byte { return value; }
2222
public fun foo_ubyte (value : UByte) : UByte { return value; }
23+
public fun foo_uintarray (value : UIntArray) : UIntArray { return value; }
24+
public fun foo_ushortarray (value : UShortArray) : UShortArray { return value; }
25+
public fun foo_ulongarray (value : ULongArray) : ULongArray { return value; }
26+
public fun foo_ubytearray (value : UByteArray) : UByteArray { return value; }
2327
}
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
// Metadata.xml XPath class reference: path="/api/package[@name='java.code']/class[@name='MyClass']"
2+
[global::Android.Runtime.Register ("java/code/MyClass", DoNotGenerateAcw=true)]
3+
public partial class MyClass {
4+
5+
static readonly JniPeerMembers _members = new JniPeerMembers ("java/code/MyClass", typeof (MyClass));
6+
internal static new IntPtr class_ref {
7+
get {
8+
return _members.JniPeerType.PeerReference.Handle;
9+
}
10+
}
11+
12+
protected MyClass (IntPtr javaReference, JniHandleOwnership transfer) : base (javaReference, transfer) {}
13+
14+
// Metadata.xml XPath method reference: path="/api/package[@name='java.code']/class[@name='MyClass']/method[@name='Echo' and count(parameter)=1 and parameter[1][@type='uint[]']]"
15+
[Register ("Echo", "([I)[I", "")]
16+
public unsafe uint[] Echo (uint[] value)
17+
{
18+
const string __id = "Echo.([I)[I";
19+
IntPtr native_value = JNIEnv.NewArray ((int[])(object)value);
20+
try {
21+
JniArgumentValue* __args = stackalloc JniArgumentValue [1];
22+
__args [0] = new JniArgumentValue (native_value);
23+
var __rm = _members.InstanceMethods.InvokeAbstractObjectMethod (__id, this, __args);
24+
return (uint[]) JNIEnv.GetArray (__rm.Handle, JniHandleOwnership.TransferLocalRef, typeof (uint));
25+
} finally {
26+
if (value != null) {
27+
JNIEnv.CopyArray (native_value, value);
28+
JNIEnv.DeleteLocalRef (native_value);
29+
}
30+
}
31+
}
32+
33+
// Metadata.xml XPath method reference: path="/api/package[@name='java.code']/class[@name='MyClass']/method[@name='Echo' and count(parameter)=1 and parameter[1][@type='ushort[]']]"
34+
[Register ("Echo", "([S)[S", "")]
35+
public unsafe ushort[] Echo (ushort[] value)
36+
{
37+
const string __id = "Echo.([S)[S";
38+
IntPtr native_value = JNIEnv.NewArray ((short[])(object)value);
39+
try {
40+
JniArgumentValue* __args = stackalloc JniArgumentValue [1];
41+
__args [0] = new JniArgumentValue (native_value);
42+
var __rm = _members.InstanceMethods.InvokeAbstractObjectMethod (__id, this, __args);
43+
return (ushort[]) JNIEnv.GetArray (__rm.Handle, JniHandleOwnership.TransferLocalRef, typeof (ushort));
44+
} finally {
45+
if (value != null) {
46+
JNIEnv.CopyArray (native_value, value);
47+
JNIEnv.DeleteLocalRef (native_value);
48+
}
49+
}
50+
}
51+
52+
// Metadata.xml XPath method reference: path="/api/package[@name='java.code']/class[@name='MyClass']/method[@name='Echo' and count(parameter)=1 and parameter[1][@type='ulong[]']]"
53+
[Register ("Echo", "([J)[J", "")]
54+
public unsafe ulong[] Echo (ulong[] value)
55+
{
56+
const string __id = "Echo.([J)[J";
57+
IntPtr native_value = JNIEnv.NewArray ((long[])(object)value);
58+
try {
59+
JniArgumentValue* __args = stackalloc JniArgumentValue [1];
60+
__args [0] = new JniArgumentValue (native_value);
61+
var __rm = _members.InstanceMethods.InvokeAbstractObjectMethod (__id, this, __args);
62+
return (ulong[]) JNIEnv.GetArray (__rm.Handle, JniHandleOwnership.TransferLocalRef, typeof (ulong));
63+
} finally {
64+
if (value != null) {
65+
JNIEnv.CopyArray (native_value, value);
66+
JNIEnv.DeleteLocalRef (native_value);
67+
}
68+
}
69+
}
70+
71+
// Metadata.xml XPath method reference: path="/api/package[@name='java.code']/class[@name='MyClass']/method[@name='Echo' and count(parameter)=1 and parameter[1][@type='ubyte[]']]"
72+
[Register ("Echo", "([B)[B", "")]
73+
public unsafe byte[] Echo (byte[] value)
74+
{
75+
const string __id = "Echo.([B)[B";
76+
IntPtr native_value = JNIEnv.NewArray (value);
77+
try {
78+
JniArgumentValue* __args = stackalloc JniArgumentValue [1];
79+
__args [0] = new JniArgumentValue (native_value);
80+
var __rm = _members.InstanceMethods.InvokeAbstractObjectMethod (__id, this, __args);
81+
return (byte[]) JNIEnv.GetArray (__rm.Handle, JniHandleOwnership.TransferLocalRef, typeof (byte));
82+
} finally {
83+
if (value != null) {
84+
JNIEnv.CopyArray (native_value, value);
85+
JNIEnv.DeleteLocalRef (native_value);
86+
}
87+
}
88+
}
89+
90+
}
Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
// Metadata.xml XPath class reference: path="/api/package[@name='java.code']/class[@name='MyClass']"
2+
[global::Android.Runtime.Register ("java/code/MyClass", DoNotGenerateAcw=true)]
3+
public partial class MyClass {
4+
5+
static readonly JniPeerMembers _members = new JniPeerMembers ("java/code/MyClass", typeof (MyClass));
6+
internal static new IntPtr class_ref {
7+
get {
8+
return _members.JniPeerType.PeerReference.Handle;
9+
}
10+
}
11+
12+
protected MyClass (IntPtr javaReference, JniHandleOwnership transfer) : base (javaReference, transfer) {}
13+
14+
public unsafe uint[] UIntProp {
15+
// Metadata.xml XPath method reference: path="/api/package[@name='java.code']/class[@name='MyClass']/method[@name='get_UIntProp' and count(parameter)=0]"
16+
[Register ("get_UIntProp", "()[I", "")]
17+
get {
18+
const string __id = "get_UIntProp.()[I";
19+
try {
20+
var __rm = _members.InstanceMethods.InvokeAbstractObjectMethod (__id, this, null);
21+
return (uint[]) JNIEnv.GetArray (__rm.Handle, JniHandleOwnership.TransferLocalRef, typeof (uint));
22+
} finally {
23+
}
24+
}
25+
// Metadata.xml XPath method reference: path="/api/package[@name='java.code']/class[@name='MyClass']/method[@name='set_UIntProp' and count(parameter)=1 and parameter[1][@type='uint[]']]"
26+
[Register ("set_UIntProp", "([I)V", "")]
27+
set {
28+
const string __id = "set_UIntProp.([I)V";
29+
IntPtr native_value = JNIEnv.NewArray ((int[])(object)value);
30+
try {
31+
JniArgumentValue* __args = stackalloc JniArgumentValue [1];
32+
__args [0] = new JniArgumentValue (native_value);
33+
_members.InstanceMethods.InvokeAbstractVoidMethod (__id, this, __args);
34+
} finally {
35+
if (value != null) {
36+
JNIEnv.CopyArray (native_value, value);
37+
JNIEnv.DeleteLocalRef (native_value);
38+
}
39+
}
40+
}
41+
}
42+
43+
public unsafe ushort[] UShortProp {
44+
// Metadata.xml XPath method reference: path="/api/package[@name='java.code']/class[@name='MyClass']/method[@name='get_UShortProp' and count(parameter)=0]"
45+
[Register ("get_UShortProp", "()[S", "")]
46+
get {
47+
const string __id = "get_UShortProp.()[S";
48+
try {
49+
var __rm = _members.InstanceMethods.InvokeAbstractObjectMethod (__id, this, null);
50+
return (ushort[]) JNIEnv.GetArray (__rm.Handle, JniHandleOwnership.TransferLocalRef, typeof (ushort));
51+
} finally {
52+
}
53+
}
54+
// Metadata.xml XPath method reference: path="/api/package[@name='java.code']/class[@name='MyClass']/method[@name='set_UShortProp' and count(parameter)=1 and parameter[1][@type='ushort[]']]"
55+
[Register ("set_UShortProp", "([S)V", "")]
56+
set {
57+
const string __id = "set_UShortProp.([S)V";
58+
IntPtr native_value = JNIEnv.NewArray ((short[])(object)value);
59+
try {
60+
JniArgumentValue* __args = stackalloc JniArgumentValue [1];
61+
__args [0] = new JniArgumentValue (native_value);
62+
_members.InstanceMethods.InvokeAbstractVoidMethod (__id, this, __args);
63+
} finally {
64+
if (value != null) {
65+
JNIEnv.CopyArray (native_value, value);
66+
JNIEnv.DeleteLocalRef (native_value);
67+
}
68+
}
69+
}
70+
}
71+
72+
public unsafe ulong[] ULongProp {
73+
// Metadata.xml XPath method reference: path="/api/package[@name='java.code']/class[@name='MyClass']/method[@name='get_ULongProp' and count(parameter)=0]"
74+
[Register ("get_ULongProp", "()[J", "")]
75+
get {
76+
const string __id = "get_ULongProp.()[J";
77+
try {
78+
var __rm = _members.InstanceMethods.InvokeAbstractObjectMethod (__id, this, null);
79+
return (ulong[]) JNIEnv.GetArray (__rm.Handle, JniHandleOwnership.TransferLocalRef, typeof (ulong));
80+
} finally {
81+
}
82+
}
83+
// Metadata.xml XPath method reference: path="/api/package[@name='java.code']/class[@name='MyClass']/method[@name='set_ULongProp' and count(parameter)=1 and parameter[1][@type='ulong[]']]"
84+
[Register ("set_ULongProp", "([J)V", "")]
85+
set {
86+
const string __id = "set_ULongProp.([J)V";
87+
IntPtr native_value = JNIEnv.NewArray ((long[])(object)value);
88+
try {
89+
JniArgumentValue* __args = stackalloc JniArgumentValue [1];
90+
__args [0] = new JniArgumentValue (native_value);
91+
_members.InstanceMethods.InvokeAbstractVoidMethod (__id, this, __args);
92+
} finally {
93+
if (value != null) {
94+
JNIEnv.CopyArray (native_value, value);
95+
JNIEnv.DeleteLocalRef (native_value);
96+
}
97+
}
98+
}
99+
}
100+
101+
public unsafe byte[] UByteProp {
102+
// Metadata.xml XPath method reference: path="/api/package[@name='java.code']/class[@name='MyClass']/method[@name='get_UByteProp' and count(parameter)=0]"
103+
[Register ("get_UByteProp", "()[B", "")]
104+
get {
105+
const string __id = "get_UByteProp.()[B";
106+
try {
107+
var __rm = _members.InstanceMethods.InvokeAbstractObjectMethod (__id, this, null);
108+
return (byte[]) JNIEnv.GetArray (__rm.Handle, JniHandleOwnership.TransferLocalRef, typeof (byte));
109+
} finally {
110+
}
111+
}
112+
// Metadata.xml XPath method reference: path="/api/package[@name='java.code']/class[@name='MyClass']/method[@name='set_UByteProp' and count(parameter)=1 and parameter[1][@type='ubyte[]']]"
113+
[Register ("set_UByteProp", "([B)V", "")]
114+
set {
115+
const string __id = "set_UByteProp.([B)V";
116+
IntPtr native_value = JNIEnv.NewArray (value);
117+
try {
118+
JniArgumentValue* __args = stackalloc JniArgumentValue [1];
119+
__args [0] = new JniArgumentValue (native_value);
120+
_members.InstanceMethods.InvokeAbstractVoidMethod (__id, this, __args);
121+
} finally {
122+
if (value != null) {
123+
JNIEnv.CopyArray (native_value, value);
124+
JNIEnv.DeleteLocalRef (native_value);
125+
}
126+
}
127+
}
128+
}
129+
130+
}
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
// Metadata.xml XPath class reference: path="/api/package[@name='java.code']/class[@name='MyClass']"
2+
[global::Android.Runtime.Register ("java/code/MyClass", DoNotGenerateAcw=true)]
3+
public partial class MyClass {
4+
5+
static readonly JniPeerMembers _members = new JniPeerMembers ("java/code/MyClass", typeof (MyClass));
6+
internal static new IntPtr class_ref {
7+
get {
8+
return _members.JniPeerType.PeerReference.Handle;
9+
}
10+
}
11+
12+
protected MyClass (IntPtr javaReference, JniHandleOwnership transfer) : base (javaReference, transfer) {}
13+
14+
// Metadata.xml XPath method reference: path="/api/package[@name='java.code']/class[@name='MyClass']/method[@name='Echo' and count(parameter)=1 and parameter[1][@type='uint']]"
15+
[Register ("Echo", "(I)I", "")]
16+
public unsafe uint Echo (uint value)
17+
{
18+
const string __id = "Echo.(I)I";
19+
try {
20+
JniArgumentValue* __args = stackalloc JniArgumentValue [1];
21+
__args [0] = new JniArgumentValue (value);
22+
var __rm = _members.InstanceMethods.InvokeAbstractInt32Method (__id, this, __args);
23+
return (uint)__rm;
24+
} finally {
25+
}
26+
}
27+
28+
// Metadata.xml XPath method reference: path="/api/package[@name='java.code']/class[@name='MyClass']/method[@name='Echo' and count(parameter)=1 and parameter[1][@type='ushort']]"
29+
[Register ("Echo", "(S)S", "")]
30+
public unsafe ushort Echo (ushort value)
31+
{
32+
const string __id = "Echo.(S)S";
33+
try {
34+
JniArgumentValue* __args = stackalloc JniArgumentValue [1];
35+
__args [0] = new JniArgumentValue (value);
36+
var __rm = _members.InstanceMethods.InvokeAbstractInt16Method (__id, this, __args);
37+
return (ushort)__rm;
38+
} finally {
39+
}
40+
}
41+
42+
// Metadata.xml XPath method reference: path="/api/package[@name='java.code']/class[@name='MyClass']/method[@name='Echo' and count(parameter)=1 and parameter[1][@type='ulong']]"
43+
[Register ("Echo", "(J)J", "")]
44+
public unsafe ulong Echo (ulong value)
45+
{
46+
const string __id = "Echo.(J)J";
47+
try {
48+
JniArgumentValue* __args = stackalloc JniArgumentValue [1];
49+
__args [0] = new JniArgumentValue (value);
50+
var __rm = _members.InstanceMethods.InvokeAbstractInt64Method (__id, this, __args);
51+
return (ulong)__rm;
52+
} finally {
53+
}
54+
}
55+
56+
// Metadata.xml XPath method reference: path="/api/package[@name='java.code']/class[@name='MyClass']/method[@name='Echo' and count(parameter)=1 and parameter[1][@type='ubyte']]"
57+
[Register ("Echo", "(B)B", "")]
58+
public unsafe byte Echo (byte value)
59+
{
60+
const string __id = "Echo.(B)B";
61+
try {
62+
JniArgumentValue* __args = stackalloc JniArgumentValue [1];
63+
__args [0] = new JniArgumentValue (value);
64+
var __rm = _members.InstanceMethods.InvokeAbstractSByteMethod (__id, this, __args);
65+
return (byte)__rm;
66+
} finally {
67+
}
68+
}
69+
70+
}

0 commit comments

Comments
 (0)