Skip to content

Commit 1db1abe

Browse files
authored
Merge pull request #26 from readdle/feature/add-string-test
Add StringTest
2 parents 0494620 + 89c4d16 commit 1db1abe

File tree

8 files changed

+346
-10
lines changed

8 files changed

+346
-10
lines changed

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ buildscript {
99
}
1010

1111
dependencies {
12-
classpath 'com.android.tools.build:gradle:3.6.0'
12+
classpath 'com.android.tools.build:gradle:4.1.1'
1313
classpath "com.readdle.android.swift:gradle:1.3.2"
1414
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
1515
classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
#Tue Feb 25 22:04:52 EET 2020
1+
#Wed Jan 27 00:03:50 EET 2021
22
distributionBase=GRADLE_USER_HOME
33
distributionPath=wrapper/dists
44
zipStoreBase=GRADLE_USER_HOME
55
zipStorePath=wrapper/dists
6-
distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip
6+
distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-all.zip

sample/build.gradle

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,11 @@ swift {
1515
}
1616

1717
android {
18-
compileSdkVersion 28
18+
compileSdkVersion 30
1919
defaultConfig {
2020
applicationId "com.readdle.swiftjava.sample"
2121
minSdkVersion 21
22-
targetSdkVersion 28
22+
targetSdkVersion 30
2323
versionCode 1
2424
versionName "1.0"
2525
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
@@ -68,9 +68,8 @@ dependencies {
6868
kapt project(':compiler')
6969
implementation project(':library')
7070

71-
implementation 'com.android.support:appcompat-v7:28.0.0'
72-
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
73-
testImplementation 'junit:junit:4.12'
71+
implementation 'com.android.support.constraint:constraint-layout:2.0.4'
72+
testImplementation 'junit:junit:4.13.1'
7473
androidTestImplementation 'com.android.support:support-annotations:28.0.0'
7574
androidTestImplementation 'com.android.support.test:runner:1.0.2'
7675
androidTestImplementation 'com.android.support.test:rules:1.0.2'
Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
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 StringTests {
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(StringTest.testZero(), "");
26+
}
27+
28+
@Test
29+
public void testParam() {
30+
Assert.assertTrue(StringTest.testParam(""));
31+
Assert.assertFalse(StringTest.testParam("42"));
32+
}
33+
34+
@Test
35+
public void testReturnType() {
36+
Assert.assertEquals(StringTest.testReturnType(), "");
37+
}
38+
39+
@Test
40+
public void testOptionalParam() {
41+
Assert.assertTrue(StringTest.testOptionalParam(""));
42+
Assert.assertFalse(StringTest.testOptionalParam(null));
43+
}
44+
45+
@Test
46+
public void testOptionalReturnType() {
47+
try {
48+
StringTest.testOptionalReturnType();
49+
}
50+
catch (Exception e) {
51+
Assert.assertTrue(e instanceof SwiftRuntimeError);
52+
Assert.assertEquals(e.getMessage(), "Invalid value \"" + Long.MAX_VALUE + "\": Not enough bits to represent Int []");
53+
}
54+
}
55+
56+
@Test
57+
public void testProtocolParam() {
58+
boolean result = StringTest.testProtocolParam(param -> param.equals(""));
59+
Assert.assertTrue(result);
60+
}
61+
62+
@Test
63+
public void testProtocolReturnType() {
64+
String result = StringTest.testProtocolReturnType(() -> "42");
65+
Assert.assertEquals(result, "42");
66+
}
67+
68+
@Test
69+
public void testProtocolOptionalParam() {
70+
boolean result = StringTest.testProtocolOptionalParam(param -> param != null && param.equals(""));
71+
Assert.assertTrue(result);
72+
}
73+
74+
@Test
75+
public void testProtocolOptionalReturnType() {
76+
String result = StringTest.testProtocolOptionalReturnType(() -> "42");
77+
Assert.assertNotNull(result);
78+
Assert.assertEquals(result, "42");
79+
}
80+
81+
@Test
82+
public void testEncode() {
83+
StringTestStruct result = StringTest.testEncode();
84+
Assert.assertEquals(result, new StringTestStruct());
85+
}
86+
87+
@Test
88+
public void testDecode() {
89+
StringTestStruct goodParam = new StringTestStruct();
90+
StringTestStruct badParam = new StringTestStruct("42", "42", "42");
91+
Assert.assertTrue(StringTest.testDecode(goodParam));
92+
Assert.assertFalse(StringTest.testDecode(badParam));
93+
}
94+
95+
@Test
96+
public void testEnumEncode() {
97+
Assert.assertEquals(StringEnum.ONE, StringTest.testEnumEncode(StringEnum.ONE.getRawValue()));
98+
Assert.assertEquals(StringEnum.TWO, StringTest.testEnumEncode(StringEnum.TWO.getRawValue()));
99+
Assert.assertEquals(StringEnum.THREE, StringTest.testEnumEncode(StringEnum.THREE.getRawValue()));
100+
}
101+
102+
@Test
103+
public void testEnumDecode() {
104+
Assert.assertEquals(StringEnum.ONE.getRawValue(), StringTest.testEnumDecode(StringEnum.ONE));
105+
Assert.assertEquals(StringEnum.TWO.getRawValue(), StringTest.testEnumDecode(StringEnum.TWO));
106+
Assert.assertEquals(StringEnum.THREE.getRawValue(), StringTest.testEnumDecode(StringEnum.THREE));
107+
}
108+
109+
@Test
110+
public void testBlock() {
111+
Assert.assertTrue(StringTest.testBlock(value -> value));
112+
}
113+
114+
@Test
115+
public void testOptionalBlock() {
116+
Assert.assertTrue(StringTest.testOptionalBlock(value -> value));
117+
}
118+
119+
}

sample/src/main/AndroidManifest.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@
88
android:label="@string/app_name"
99
android:roundIcon="@mipmap/ic_launcher_round"
1010
android:supportsRtl="true"
11+
android:allowNativeHeapPointerTagging="false"
1112
android:theme="@style/AppTheme">
1213
<activity android:name=".MainActivity">
1314
<intent-filter>
1415
<action android:name="android.intent.action.MAIN" />
15-
1616
<category android:name="android.intent.category.LAUNCHER" />
1717
</intent-filter>
1818
</activity>
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
package com.readdle.swiftjava.sample
2+
3+
import com.readdle.codegen.anotation.*
4+
import java.lang.annotation.Native
5+
6+
@SwiftValue
7+
enum class StringEnum(val rawValue: String) {
8+
9+
ONE("ONE"), TWO("TWO"), THREE("THREE");
10+
11+
}
12+
13+
@SwiftValue
14+
data class StringTestStruct(var zero: String = "",
15+
var optional: String? = "42",
16+
var optionalNil: String? = null)
17+
18+
@SwiftReference
19+
class StringTest private constructor() {
20+
21+
@SwiftDelegate(protocols = ["StringTestParamProtocol"])
22+
interface StringParamProtocol {
23+
@SwiftCallbackFunc
24+
fun testParam(param: String): Boolean
25+
}
26+
27+
@SwiftDelegate(protocols = ["StringTestReturnTypeProtocol"])
28+
interface StringReturnTypeProtocol {
29+
@SwiftCallbackFunc
30+
fun testReturnType(): String
31+
}
32+
33+
@SwiftDelegate(protocols = ["StringTestOptionalParamProtocol"])
34+
interface StringOptionalParamProtocol {
35+
@SwiftCallbackFunc
36+
fun testOptionalParam(param: String?): Boolean
37+
}
38+
39+
@SwiftDelegate(protocols = ["StringTestOptionalReturnTypeProtocol"])
40+
interface StringOptionalReturnTypeProtocol {
41+
@SwiftCallbackFunc
42+
fun testOptionalReturnType(): String?
43+
}
44+
45+
@SwiftBlock("(String) -> String")
46+
interface StringBlock {
47+
fun call(value: String): String
48+
}
49+
50+
@SwiftBlock("(String?) -> String?")
51+
interface OptionalStringBlock {
52+
fun call(value: String?): String?
53+
}
54+
55+
companion object {
56+
@JvmStatic
57+
external fun testZero(): String
58+
59+
@JvmStatic
60+
external fun testParam(param: String): Boolean
61+
62+
@JvmStatic
63+
external fun testReturnType(): String
64+
65+
@JvmStatic
66+
external fun testOptionalParam(param: String?): Boolean
67+
68+
@JvmStatic
69+
external fun testOptionalReturnType(): String?
70+
71+
@JvmStatic
72+
external fun testProtocolParam(callback: StringParamProtocol): Boolean
73+
74+
@JvmStatic
75+
external fun testProtocolReturnType(callback: StringReturnTypeProtocol): String
76+
77+
@JvmStatic
78+
external fun testProtocolOptionalParam(callback: StringOptionalParamProtocol): Boolean
79+
80+
@JvmStatic
81+
external fun testProtocolOptionalReturnType(callback: StringOptionalReturnTypeProtocol): String?
82+
83+
@JvmStatic
84+
external fun testEncode(): StringTestStruct
85+
86+
@JvmStatic
87+
external fun testDecode(value: StringTestStruct): Boolean
88+
89+
@JvmStatic
90+
external fun testEnumEncode(rawValue: String) : StringEnum
91+
92+
@JvmStatic
93+
external fun testEnumDecode(enum: StringEnum) : String
94+
95+
@JvmStatic
96+
external fun testBlock(@SwiftBlock block: StringBlock): Boolean
97+
98+
@JvmStatic
99+
external fun testOptionalBlock(@SwiftBlock block: OptionalStringBlock): Boolean
100+
}
101+
102+
@Native
103+
var nativePointer: Long = 0
104+
105+
external fun release()
106+
107+
}

sample/src/main/swift/Package.resolved

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)