Skip to content

Commit 512395c

Browse files
committed
Dev: add Int test
1 parent e4ee9e1 commit 512395c

13 files changed

Lines changed: 365 additions & 116 deletions

File tree

compiler/src/main/java/com/readdle/codegen/SwiftBlockDescriptor.java

Lines changed: 12 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -160,18 +160,8 @@ File generateCode() throws IOException {
160160
}
161161

162162
if (params.size() > 0) {
163-
boolean hasNonPrimitiveParam = false;
164-
for (int i = 0; i < params.size(); i++) {
165-
SwiftParamDescriptor param = params.get(i);
166-
if (param.isOptional || !param.isPrimitive()) {
167-
hasNonPrimitiveParam = true;
168-
break;
169-
}
170-
}
171163

172-
if (hasNonPrimitiveParam) {
173-
swiftWriter.emitStatement("do {");
174-
}
164+
swiftWriter.emitStatement("do {");
175165

176166
for (int i = 0; i < params.size(); i++) {
177167
SwiftParamDescriptor param = params.get(i);
@@ -184,26 +174,25 @@ File generateCode() throws IOException {
184174
swiftWriter.emitStatement("}");
185175
} else {
186176
if (param.isPrimitive()) {
187-
swiftWriter.emitStatement(String.format("java_%s = $%s.javaPrimitive()", param.name, i + ""));
177+
swiftWriter.emitStatement(String.format("java_%s = try $%s.javaPrimitive()", param.name, i + ""));
188178
}
189179
else {
190180
swiftWriter.emitStatement(String.format("java_%s = try $%s.javaObject()", param.name, i + ""));
191181
}
192182
}
193183
}
194184

195-
if (hasNonPrimitiveParam) {
196-
swiftWriter.emitStatement("}");
197-
swiftWriter.emitStatement("catch {");
198-
swiftWriter.emitStatement("let errorString = String(reflecting: type(of: error)) + String(describing: error)");
199-
if (returnSwiftType == null) {
200-
swiftWriter.emitStatement("assert(false, errorString)");
201-
swiftWriter.emitStatement("return");
202-
} else {
203-
swiftWriter.emitStatement("fatalError(errorString)");
204-
}
205-
swiftWriter.emitStatement("}");
185+
swiftWriter.emitStatement("}");
186+
swiftWriter.emitStatement("catch {");
187+
swiftWriter.emitStatement("let errorString = String(reflecting: type(of: error)) + String(describing: error)");
188+
if (returnSwiftType == null) {
189+
swiftWriter.emitStatement("assert(false, errorString)");
190+
swiftWriter.emitStatement("return");
191+
} else {
192+
swiftWriter.emitStatement("fatalError(errorString)");
206193
}
194+
swiftWriter.emitStatement("}");
195+
207196
}
208197

209198
String jniMethodTemplate;

compiler/src/main/java/com/readdle/codegen/SwiftCallbackFuncDescriptor.java

Lines changed: 15 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -141,18 +141,8 @@ void generateCode(SwiftWriter swiftWriter, String javaFullName, String swiftType
141141
swiftWriter.emitStatement("}");
142142

143143
if (params.size() > 0) {
144-
boolean hasNonPrimitiveParam = false;
145-
for (int i = 0; i < params.size(); i++) {
146-
SwiftParamDescriptor param = params.get(i);
147-
if (param.isOptional || !param.isPrimitive()) {
148-
hasNonPrimitiveParam = true;
149-
break;
150-
}
151-
}
152144

153-
if (hasNonPrimitiveParam) {
154-
swiftWriter.emitStatement("do {");
155-
}
145+
swiftWriter.emitStatement("do {");
156146

157147
for (SwiftParamDescriptor param : params) {
158148
if (param.isOptional) {
@@ -161,29 +151,27 @@ void generateCode(SwiftWriter swiftWriter, String javaFullName, String swiftType
161151
swiftWriter.emitStatement("}");
162152
} else {
163153
if (param.isPrimitive()) {
164-
swiftWriter.emitStatement(String.format("java%s = %s.javaPrimitive()", param.name, param.name));
154+
swiftWriter.emitStatement(String.format("java%s = try %s.javaPrimitive()", param.name, param.name));
165155
}
166156
else {
167157
swiftWriter.emitStatement(String.format("java%s = try %s.javaObject()", param.name, param.name));
168158
}
169159
}
170160
}
171161

172-
if (hasNonPrimitiveParam) {
173-
swiftWriter.emitStatement("}");
174-
swiftWriter.emitStatement("catch {");
175-
swiftWriter.emitStatement("let errorString = String(reflecting: type(of: error)) + String(describing: error)");
176-
if (returnSwiftType == null) {
177-
swiftWriter.emitStatement("assert(false, errorString)");
178-
swiftWriter.emitStatement("return");
179-
} else if (isReturnTypeOptional) {
180-
swiftWriter.emitStatement("assert(false, errorString)");
181-
swiftWriter.emitStatement("return nil");
182-
} else {
183-
swiftWriter.emitStatement("fatalError(errorString)");
184-
}
185-
swiftWriter.emitStatement("}");
162+
swiftWriter.emitStatement("}");
163+
swiftWriter.emitStatement("catch {");
164+
swiftWriter.emitStatement("let errorString = String(reflecting: type(of: error)) + String(describing: error)");
165+
if (returnSwiftType == null) {
166+
swiftWriter.emitStatement("assert(false, errorString)");
167+
swiftWriter.emitStatement("return");
168+
} else if (isReturnTypeOptional) {
169+
swiftWriter.emitStatement("assert(false, errorString)");
170+
swiftWriter.emitStatement("return nil");
171+
} else {
172+
swiftWriter.emitStatement("fatalError(errorString)");
186173
}
174+
swiftWriter.emitStatement("}");
187175
}
188176

189177
String jniMethodTemplate;
@@ -229,12 +217,7 @@ void generateCode(SwiftWriter swiftWriter, String javaFullName, String swiftType
229217

230218
if (returnSwiftType != null) {
231219
if (!isReturnTypeOptional && returnSwiftType.isPrimitiveType()) {
232-
if (returnSwiftType.swiftType.equals("Bool")) {
233-
swiftWriter.emitStatement("return optionalResult == JNI_TRUE");
234-
}
235-
else {
236-
swiftWriter.emitStatement("return optionalResult");
237-
}
220+
swiftWriter.emitStatement("return " + returnSwiftType.swiftType + "(fromJavaPrimitive: optionalResult)");
238221
}
239222
else {
240223
swiftWriter.emitStatement("guard let result = optionalResult else {");

compiler/src/main/java/com/readdle/codegen/SwiftFuncDescriptor.java

Lines changed: 8 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -118,12 +118,7 @@ public void generateCode(SwiftWriter swiftWriter, String javaFullName, String sw
118118

119119
for (SwiftParamDescriptor param : params) {
120120
if (param.isPrimitive()) {
121-
if (param.swiftType.swiftType.equals("Bool")) {
122-
swiftWriter.emitStatement(String.format("%1$s = j%1$s == JNI_TRUE", param.name));
123-
}
124-
else {
125-
swiftWriter.emitStatement(String.format("%1$s = j%1$s", param.name));
126-
}
121+
swiftWriter.emitStatement(String.format("%1$s = " + param.swiftType.swiftType + "(fromJavaPrimitive: j%1$s)", param.name));
127122
}
128123
else if (param.isOptional) {
129124
swiftWriter.emitStatement(String.format("if let j%1$s = j%1$s {", param.name));
@@ -177,27 +172,22 @@ else if (param.isOptional) {
177172
}
178173

179174
if (returnSwiftType != null) {
175+
swiftWriter.emitStatement("do {");
180176
if (!isReturnTypeOptional && returnSwiftType.isPrimitiveType()) {
181-
if (returnSwiftType.swiftType.equals("Bool")) {
182-
swiftWriter.emitStatement("return jboolean(result ? JNI_TRUE : JNI_FALSE)");
183-
}
184-
else {
185-
swiftWriter.emitStatement("return result");
186-
}
177+
swiftWriter.emitStatement("return try result.javaPrimitive()");
187178
}
188179
else {
189-
swiftWriter.emitStatement("do {");
190180
if (isReturnTypeOptional) {
191181
swiftWriter.emitStatement("return try result?.javaObject()");
192182
} else {
193183
swiftWriter.emitStatement("return try result.javaObject()");
194184
}
195-
swiftWriter.emitStatement("}");
196-
swiftWriter.emitStatement("catch {");
197-
Utils.handleRuntimeError(swiftWriter);
198-
swiftWriter.emitStatement("return nil");
199-
swiftWriter.emitStatement("}");
200185
}
186+
swiftWriter.emitStatement("}");
187+
swiftWriter.emitStatement("catch {");
188+
Utils.handleRuntimeError(swiftWriter);
189+
swiftWriter.emitStatement("return nil");
190+
swiftWriter.emitStatement("}");
201191
}
202192

203193
if (isThrown) {

compiler/src/main/java/com/readdle/codegen/SwiftGetterDescriptor.java

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -75,27 +75,22 @@ public void generateCode(SwiftWriter swiftWriter, String javaFullName, String sw
7575
swiftWriter.emitStatement(String.format("let result = %s.%s", isStatic ? swiftType : "swiftSelf", swiftName));
7676

7777
if (returnSwiftType != null) {
78+
swiftWriter.emitStatement("do {");
7879
if (!isReturnTypeOptional && returnSwiftType.isPrimitiveType()) {
79-
if (returnSwiftType.swiftType.equals("Bool")) {
80-
swiftWriter.emitStatement("return jboolean(result ? JNI_TRUE : JNI_FALSE)");
81-
}
82-
else {
83-
swiftWriter.emitStatement("return result");
84-
}
80+
swiftWriter.emitStatement("return try result.javaPrimitive()");
8581
}
8682
else {
87-
swiftWriter.emitStatement("do {");
8883
if (isReturnTypeOptional) {
8984
swiftWriter.emitStatement("return try result?.javaObject()");
9085
} else {
9186
swiftWriter.emitStatement("return try result.javaObject()");
9287
}
93-
swiftWriter.emitStatement("}");
94-
swiftWriter.emitStatement("catch {");
95-
Utils.handleRuntimeError(swiftWriter);
96-
swiftWriter.emitStatement("return nil");
97-
swiftWriter.emitStatement("}");
9888
}
89+
swiftWriter.emitStatement("}");
90+
swiftWriter.emitStatement("catch {");
91+
Utils.handleRuntimeError(swiftWriter);
92+
swiftWriter.emitStatement("return nil");
93+
swiftWriter.emitStatement("}");
9994
}
10095

10196
swiftWriter.emitStatement("}");

compiler/src/main/java/com/readdle/codegen/SwiftSetterDescriptor.java

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -67,12 +67,7 @@ public void generateCode(SwiftWriter swiftWriter, String javaFullName, String sw
6767
}
6868

6969
if (param.isPrimitive()) {
70-
if (param.swiftType.swiftType.equals("Bool")) {
71-
swiftWriter.emitStatement(String.format("%1$s = j%1$s == JNI_TRUE", param.name));
72-
}
73-
else {
74-
swiftWriter.emitStatement(String.format("%1$s = j%1$s", param.name));
75-
}
70+
swiftWriter.emitStatement(String.format("%1$s = " + param.swiftType.swiftType + "(fromJavaPrimitive: j%1$s)", param.name));
7671
}
7772
else if (param.isOptional) {
7873
swiftWriter.emitStatement(String.format("if let j%1$s = j%1$s {", param.name));

compiler/src/main/java/com/readdle/codegen/Utils.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -175,8 +175,8 @@ private static PackageElement getPackage(Element type) {
175175
}
176176

177177
static void handleRuntimeError(SwiftWriter swiftWriter) throws IOException {
178-
swiftWriter.emitStatement("let nsError = error as NSError");
179-
swiftWriter.emitStatement("let errorString = \"\\(nsError.domain): \\(nsError.code)\"");
178+
swiftWriter.emitStatement("let errorType = type(of: error)");
179+
swiftWriter.emitStatement("let errorString = \"\\(errorType) (\\(error.localizedDescription))\"");
180180
swiftWriter.emitStatement("_ = JNI.api.ThrowNew(JNI.env, SwiftRuntimeErrorClass, errorString)");
181181
}
182182

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
package com.readdle.swiftjava.sample;
2+
3+
import android.support.test.runner.AndroidJUnit4;
4+
5+
import com.readdle.codegen.anotation.JavaSwift;
6+
import com.readdle.codegen.anotation.SwiftRuntimeError;
7+
8+
import org.junit.Assert;
9+
import org.junit.Before;
10+
import org.junit.Test;
11+
import org.junit.runner.RunWith;
12+
13+
@RunWith(AndroidJUnit4.class)
14+
public class IntTests {
15+
16+
@Before
17+
public void setUp() {
18+
System.loadLibrary("SampleAppCore");
19+
JavaSwift.init();
20+
SwiftEnvironment.initEnvironment();
21+
}
22+
23+
@Test
24+
public void testZero() {
25+
Assert.assertEquals(IntTest.testZero(), 0);
26+
}
27+
28+
@Test
29+
public void testMin() {
30+
try {
31+
Assert.assertEquals(IntTest.testMin(), Integer.MIN_VALUE);
32+
Assert.fail();
33+
}
34+
catch (Exception e) {
35+
Assert.assertTrue(e instanceof SwiftRuntimeError);
36+
Assert.assertEquals(e.getMessage(), "JavaCodingError (Not enough bits to represent Int " + Long.MIN_VALUE + ")");
37+
}
38+
}
39+
40+
@Test
41+
public void testMax() {
42+
try {
43+
Assert.assertEquals(IntTest.testMax(), Integer.MAX_VALUE);
44+
Assert.fail();
45+
}
46+
catch (Exception e) {
47+
Assert.assertTrue(e instanceof SwiftRuntimeError);
48+
Assert.assertEquals(e.getMessage(), "JavaCodingError (Not enough bits to represent Int " + Long.MAX_VALUE + ")");
49+
}
50+
}
51+
52+
@Test
53+
public void testParam() {
54+
Assert.assertTrue(IntTest.testParam(Integer.MAX_VALUE));
55+
Assert.assertFalse(IntTest.testParam(Integer.MIN_VALUE));
56+
}
57+
58+
@Test
59+
public void testReturnType() {
60+
Assert.assertEquals(IntTest.testReturnType(), Integer.MAX_VALUE);
61+
}
62+
63+
@Test
64+
public void testOptionalParam() {
65+
Assert.assertTrue(IntTest.testOptionalParam(Integer.MAX_VALUE));
66+
Assert.assertFalse(IntTest.testOptionalParam(Integer.MIN_VALUE));
67+
}
68+
69+
public void testOptionalReturnType() {
70+
Integer result = IntTest.testOptionalReturnType();
71+
Assert.assertNotNull(result);
72+
Assert.assertEquals(result.intValue(), Integer.MAX_VALUE);
73+
}
74+
75+
@Test
76+
public void testProtocolParam() {
77+
boolean result = IntTest.testProtocolParam(param -> param == Integer.MAX_VALUE);
78+
Assert.assertTrue(result);
79+
}
80+
81+
@Test
82+
public void testProtocolReturnType() {
83+
int result = IntTest.testProtocolReturnType(() -> 42);
84+
Assert.assertEquals(result, 42);
85+
}
86+
87+
@Test
88+
public void testProtocolOptionalParam() {
89+
boolean result = IntTest.testProtocolOptionalParam(param -> param != null && param == Integer.MAX_VALUE);
90+
Assert.assertTrue(result);
91+
}
92+
93+
@Test
94+
public void testProtocolOptionalReturnType() {
95+
Integer result = IntTest.testProtocolOptionalReturnType(() -> 42);
96+
Assert.assertNotNull(result);
97+
Assert.assertEquals(result.intValue(), 42);
98+
}
99+
100+
@Test
101+
public void testEncode() {
102+
IntTestStruct result = IntTest.testEncode();
103+
Assert.assertEquals(result, new IntTestStruct());
104+
}
105+
106+
@Test
107+
public void testDecode() {
108+
IntTestStruct goodParam = new IntTestStruct();
109+
IntTestStruct badParam = new IntTestStruct(42, 42, 42, 42, 42);
110+
Assert.assertTrue(IntTest.testDecode(goodParam));
111+
Assert.assertFalse(IntTest.testDecode(badParam));
112+
}
113+
114+
}

0 commit comments

Comments
 (0)