Unverified Commit aa466a74 authored by Oleksandr Karpovich's avatar Oleksandr Karpovich Committed by GitHub

use ManagedString._nMake from toInterop(String) (#342)

* use ManagedString._nMake from toInterop(String)

* add more ManagedString tests
Co-authored-by: 's avatarOleksandr Karpovich <oleksandr.karpovich@jetbrains.com>
parent a077e19b
...@@ -10,7 +10,9 @@ class ManagedString internal constructor(ptr: NativePointer, managed: Boolean = ...@@ -10,7 +10,9 @@ class ManagedString internal constructor(ptr: NativePointer, managed: Boolean =
} }
} }
constructor(s: String?) : this(_nMake(s)) { constructor(s: String?) : this(
interopScope { _nMake(toInterop(s)) }
) {
Stats.onNativeCall() Stats.onNativeCall()
} }
...@@ -28,13 +30,17 @@ class ManagedString internal constructor(ptr: NativePointer, managed: Boolean = ...@@ -28,13 +30,17 @@ class ManagedString internal constructor(ptr: NativePointer, managed: Boolean =
fun insert(offset: Int, s: String): ManagedString { fun insert(offset: Int, s: String): ManagedString {
Stats.onNativeCall() Stats.onNativeCall()
_nInsert(_ptr, offset, s) interopScope {
_nInsert(_ptr, offset, toInterop(s))
}
return this return this
} }
fun append(s: String): ManagedString { fun append(s: String): ManagedString {
Stats.onNativeCall() Stats.onNativeCall()
_nAppend(_ptr, s) interopScope {
_nAppend(_ptr, toInterop(s))
}
return this return this
} }
...@@ -59,7 +65,7 @@ class ManagedString internal constructor(ptr: NativePointer, managed: Boolean = ...@@ -59,7 +65,7 @@ class ManagedString internal constructor(ptr: NativePointer, managed: Boolean =
private external fun ManagedString_nGetFinalizer(): NativePointer private external fun ManagedString_nGetFinalizer(): NativePointer
@ExternalSymbolName("org_jetbrains_skia_ManagedString__1nMake") @ExternalSymbolName("org_jetbrains_skia_ManagedString__1nMake")
private external fun _nMake(s: String?): NativePointer private external fun _nMake(s: InteropPointer): NativePointer
@ExternalSymbolName("org_jetbrains_skia_ManagedString__nStringSize") @ExternalSymbolName("org_jetbrains_skia_ManagedString__nStringSize")
private external fun _nStringSize(ptr: NativePointer): Int private external fun _nStringSize(ptr: NativePointer): Int
...@@ -68,10 +74,10 @@ private external fun _nStringSize(ptr: NativePointer): Int ...@@ -68,10 +74,10 @@ private external fun _nStringSize(ptr: NativePointer): Int
private external fun _nStringData(ptr: NativePointer, result: InteropPointer, size: Int): String private external fun _nStringData(ptr: NativePointer, result: InteropPointer, size: Int): String
@ExternalSymbolName("org_jetbrains_skia_ManagedString__1nInsert") @ExternalSymbolName("org_jetbrains_skia_ManagedString__1nInsert")
private external fun _nInsert(ptr: NativePointer, offset: Int, s: String?) private external fun _nInsert(ptr: NativePointer, offset: Int, s: InteropPointer)
@ExternalSymbolName("org_jetbrains_skia_ManagedString__1nAppend") @ExternalSymbolName("org_jetbrains_skia_ManagedString__1nAppend")
private external fun _nAppend(ptr: NativePointer, s: String?) private external fun _nAppend(ptr: NativePointer, s: InteropPointer)
@ExternalSymbolName("org_jetbrains_skia_ManagedString__1nRemoveSuffix") @ExternalSymbolName("org_jetbrains_skia_ManagedString__1nRemoveSuffix")
private external fun _nRemoveSuffix(ptr: NativePointer, from: Int) private external fun _nRemoveSuffix(ptr: NativePointer, from: Int)
......
...@@ -6,6 +6,7 @@ import kotlin.test.Test ...@@ -6,6 +6,7 @@ import kotlin.test.Test
import kotlin.test.assertEquals import kotlin.test.assertEquals
class ManagedStringTest { class ManagedStringTest {
@Test @Test
fun basicTest() { fun basicTest() {
val s1 = withStringResult { val s1 = withStringResult {
...@@ -21,4 +22,55 @@ class ManagedStringTest { ...@@ -21,4 +22,55 @@ class ManagedStringTest {
} }
assertEquals("你好", s3) assertEquals("你好", s3)
} }
@Test
fun canCreateAndReadManagedString() {
val ms1 = ManagedString("Hello")
assertEquals("Hello", ms1.toString())
val ms2 = ManagedString("Привет!")
assertEquals("Привет!", ms2.toString())
val ms3 = ManagedString("你好!")
assertEquals("你好!", ms3.toString())
}
@Test
fun canAppend() {
val ms = ManagedString("Hello").append(" World!")
assertEquals("Hello World!", ms.toString())
val ms2 = ManagedString("Привет").append(" Мир!")
assertEquals("Привет Мир!", ms2.toString())
val ms3 = ManagedString("你好").append(",世界")
assertEquals("你好,世界", ms3.toString())
}
@Test
fun canInsert() {
val ms = ManagedString("World!").insert(0, "Hello ")
assertEquals("Hello World!", ms.toString())
val ms2 = ManagedString("Мир!").insert(0, "Привет ")
assertEquals("Привет Мир!", ms2.toString())
val ms3 = ManagedString("世界").insert(0,"你好,")
assertEquals("你好,世界", ms3.toString())
}
@Test
fun canRemove() {
val ms = ManagedString("World!").remove(from = 2)
assertEquals("Wo", ms.toString())
val ms2 = ManagedString("World!").remove(from = 2, length = 2)
assertEquals("Wod!", ms2.toString())
val ms3 = ManagedString("你好,世界!").remove(from = 2)
assertEquals("你好", ms3.toString())
val ms4 = ManagedString("你好,世界!").remove(from = 2, length = 3) // ',' is 1 symbol
assertEquals("你好!", ms4.toString())
}
} }
...@@ -33,17 +33,10 @@ SKIKO_EXPORT void org_jetbrains_skia_ManagedString__nStringData ...@@ -33,17 +33,10 @@ SKIKO_EXPORT void org_jetbrains_skia_ManagedString__nStringData
SKIKO_EXPORT void org_jetbrains_skia_ManagedString__1nInsert SKIKO_EXPORT void org_jetbrains_skia_ManagedString__1nInsert
(KNativePointer ptr, KInt offset, KInteropPointer s) { (KNativePointer ptr, KInt offset, KInteropPointer s) {
TODO("implement org_jetbrains_skia_ManagedString__1nInsert"); SkString* instance = reinterpret_cast<SkString*>(ptr);
}
#if 0
SKIKO_EXPORT void org_jetbrains_skia_ManagedString__1nInsert
(KNativePointer ptr, KInt offset, KInteropPointer s) {
SkString* instance = reinterpret_cast<SkString*>((ptr));
skija::UtfIndicesConverter conv(*instance); skija::UtfIndicesConverter conv(*instance);
instance->insert(conv.from16To8(offset), skString(env, s)); instance->insert(conv.from16To8(offset), skString(s));
} }
#endif
SKIKO_EXPORT void org_jetbrains_skia_ManagedString__1nAppend SKIKO_EXPORT void org_jetbrains_skia_ManagedString__1nAppend
(KNativePointer ptr, KInteropPointer s) { (KNativePointer ptr, KInteropPointer s) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment