@@ -62,6 +62,23 @@ class CursorTest:BaseDatabaseTest(){
6262
6363 @Test
6464 fun testUtf8 () {
65+ fun runStringTest (connection : DatabaseConnection , id : Long , str : String ) {
66+ connection.withStatement(" insert into test(num, str)values(?,?)" ) {
67+ bindLong(1 , id)
68+ bindString(2 , str)
69+ executeInsert()
70+ }
71+
72+ connection.withStatement(" select * from test where num = ?" ) {
73+ bindLong(1 , id)
74+ query().iterator().next().let {
75+ val dbVal = it.values.get(1 ).second as String
76+ assertEquals(dbVal.length, str.length)
77+ assertEquals(dbVal, str)
78+ }
79+ }
80+ }
81+
6582 val manager = createDatabaseManager(DatabaseConfiguration (name = TEST_DB_NAME , version = 1 ,
6683 journalMode = JournalMode .WAL ,
6784 create = { db ->
@@ -71,22 +88,218 @@ class CursorTest:BaseDatabaseTest(){
7188 }))
7289
7390 val connection = manager.surpriseMeConnection()
74- connection.withStatement(" insert into test(num, str)values(?,?)" ){
75- bindLong(1 , 2 )
76- bindString(2 , utf8stress)
77- executeInsert()
78- }
7991
80- connection.withStatement(" select * from test" ){
81- query().iterator().next().let {
82- val dbVal = it.values.get(1 ).second as String
83- assertEquals(dbVal.length, utf8stress.length)
84- assertEquals(dbVal, utf8stress)
85- }
86- }
92+ runStringTest(connection, 2L , utf8stress)
93+ runStringTest(connection, 3L , utf8morestress)
94+ runStringTest(connection, 4L , someemoji)
8795
8896 connection.close()
8997 }
9098
9199 val utf8stress = """𝚊ḡηӑ 𝑓ṟĭṅᶃℹɬŀā ựᶉπ𝓪 ṗ૦𝓻τṯí𝞃ỡ𝐫 𝓻𝘩ỡ𝙣ϲų𝐬 𝖽𝖔ɭοꝛ ṕü𝘳ũ𝑠. Ł𝝸ճȩⲅò 𝗇ųղ𝑐 сṏդṣẹ𝓺𝓊α𝙩 ᶖηȶ𝖾ṝɖųᵯ 𝞶𝛂яᶖǖ𝗌 𝑠і𝜏 𝝰ṁėτ. Ở𝖽ĭ𝞸 ḟ𝗮ⲥ𝙞ł𝙞ꞩꙇȿ ṁắųɽ𝑖𝓈 𝗌ɪ𝞽 âмę𝓽 ᵯȃꜱƽ𝒂 𝝂íҭấе 𝑡ö𝗿𝗍ȱг ċ𝛔𝝿đ𝜾ṃė𝐧𝞃𝓊м. Ẹẗ м𝝰ḹ𝕖ᵴμ𝑎𝑑а 𝑓àṁ𝓮ş äс 𝛕ṻ𝙧ꝑⅈѕ. 𝛢с ҭ𝛔𝕣𝚝𝓸ɍ 𝚟ɩᵵ𝚊ể 𝜌ứяứ𝑠 𝗳𝖆ǖ𐐽𝗶Ъμṥ ợⲅп𝜶𝑟ẻ şửś𝖕ⱸ𝔫𝒹ⅰş𝓈𝔢 ᵴ𝖊δ 𝗇ıᶊ𝙞. 𝝡ỏŕᖯḭ ƞ𝗼ᶇ ӑ𝙧𝒄ú ṟ𝜄𝑠ȕʂ 𝕢𝘶íṥ 𝝂𝑎яᶖủ𝓈 ԛ𝔲àṁ. 𝒱ị𝞽ăⅇ 𝙟ṹꜱτǒ ӭ𝖌ĕ𝓉 ḿẵǥñӓ ᶂ𝕖гᵯȅṇṫủм îảⲥûḷ𝜾𝙨 𝖊𝑢 𝛑ꝋ𝓃 𝖉𝖎ӑᶆ 𝒑𝐡â𝘀әɬꝉự𝑠. Íȵ 𝘥ì𝔠𝕥ửṁ 𝜋ợ𝗇 ḉⲟ𝐧𝖘єȼȶ𝗲𝗍ừⲅ 𝚊. Ḍıâḿ ɱǡ𝚎𝕔επ𝙖ś 𝙨ξႻ ξղ𝖎ḿ ụʈ"""
100+ val someemoji = """ 😀 😁 😂 😃 😄 😅 😆 😇 😈 😉 😊 😋 😌 😍 😎 😏
101+ 😐 😑 😒 😓 😔 😕 😖 😗 😘 😙 😚 😛 😜 😝 😞 😟"""
102+ val utf8morestress = """ UTF-8 encoded sample plain-text file
103+ ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
104+
105+ Markus Kuhn [ˈmaʳkʊs kuːn] <mkuhn@acm.org> — 1999-08-20
106+
107+
108+ The ASCII compatible UTF-8 encoding of ISO 10646 and Unicode
109+ plain-text files is defined in RFC 2279 and in ISO 10646-1 Annex R.
110+
111+
112+ Using Unicode/UTF-8, you can write in emails and source code things such as
113+
114+ Mathematics and Sciences:
115+
116+ ∮ E⋅da = Q, n → ∞, ∑ f(i) = ∏ g(i), ∀x∈ℝ: ⌈x⌉ = −⌊−x⌋, α ∧ ¬β = ¬(¬α ∨ β),
117+
118+ ℕ ⊆ ℕ₀ ⊂ ℤ ⊂ ℚ ⊂ ℝ ⊂ ℂ, ⊥ < a ≠ b ≡ c ≤ d ≪ ⊤ ⇒ (A ⇔ B),
119+
120+ 2H₂ + O₂ ⇌ 2H₂O, R = 4.7 kΩ, ⌀ 200 mm
121+
122+ Linguistics and dictionaries:
123+
124+ ði ıntəˈnæʃənəl fəˈnɛtık əsoʊsiˈeıʃn
125+ Y [ˈʏpsilɔn], Yen [jɛn], Yoga [ˈjoːgɑ]
126+
127+ APL:
128+
129+ ((V⍳V)=⍳⍴V)/V←,V ⌷←⍳→⍴∆∇⊃‾⍎⍕⌈
130+
131+ Nicer typography in plain text files:
132+
133+ ╔══════════════════════════════════════════╗
134+ ║ ║
135+ ║ • ‘single’ and “double” quotes ║
136+ ║ ║
137+ ║ • Curly apostrophes: “We’ve been here” ║
138+ ║ ║
139+ ║ • Latin-1 apostrophe and accents: '´` ║
140+ ║ ║
141+ ║ • ‚deutsche‘ „Anführungszeichen“ ║
142+ ║ ║
143+ ║ • †, ‡, ‰, •, 3–4, —, −5/+5, ™, … ║
144+ ║ ║
145+ ║ • ASCII safety test: 1lI|, 0OD, 8B ║
146+ ║ ╭─────────╮ ║
147+ ║ • the euro symbol: │ 14.95 € │ ║
148+ ║ ╰─────────╯ ║
149+ ╚══════════════════════════════════════════╝
150+
151+ Greek (in Polytonic):
152+
153+ The Greek anthem:
154+
155+ Σὲ γνωρίζω ἀπὸ τὴν κόψη
156+ τοῦ σπαθιοῦ τὴν τρομερή,
157+ σὲ γνωρίζω ἀπὸ τὴν ὄψη
158+ ποὺ μὲ βία μετράει τὴ γῆ.
159+
160+ ᾿Απ᾿ τὰ κόκκαλα βγαλμένη
161+ τῶν ῾Ελλήνων τὰ ἱερά
162+ καὶ σὰν πρῶτα ἀνδρειωμένη
163+ χαῖρε, ὦ χαῖρε, ᾿Ελευθεριά!
164+
165+ From a speech of Demosthenes in the 4th century BC:
166+
167+ Οὐχὶ ταὐτὰ παρίσταταί μοι γιγνώσκειν, ὦ ἄνδρες ᾿Αθηναῖοι,
168+ ὅταν τ᾿ εἰς τὰ πράγματα ἀποβλέψω καὶ ὅταν πρὸς τοὺς
169+ λόγους οὓς ἀκούω· τοὺς μὲν γὰρ λόγους περὶ τοῦ
170+ τιμωρήσασθαι Φίλιππον ὁρῶ γιγνομένους, τὰ δὲ πράγματ᾿
171+ εἰς τοῦτο προήκοντα, ὥσθ᾿ ὅπως μὴ πεισόμεθ᾿ αὐτοὶ
172+ πρότερον κακῶς σκέψασθαι δέον. οὐδέν οὖν ἄλλο μοι δοκοῦσιν
173+ οἱ τὰ τοιαῦτα λέγοντες ἢ τὴν ὑπόθεσιν, περὶ ἧς βουλεύεσθαι,
174+ οὐχὶ τὴν οὖσαν παριστάντες ὑμῖν ἁμαρτάνειν. ἐγὼ δέ, ὅτι μέν
175+ ποτ᾿ ἐξῆν τῇ πόλει καὶ τὰ αὑτῆς ἔχειν ἀσφαλῶς καὶ Φίλιππον
176+ τιμωρήσασθαι, καὶ μάλ᾿ ἀκριβῶς οἶδα· ἐπ᾿ ἐμοῦ γάρ, οὐ πάλαι
177+ γέγονεν ταῦτ᾿ ἀμφότερα· νῦν μέντοι πέπεισμαι τοῦθ᾿ ἱκανὸν
178+ προλαβεῖν ἡμῖν εἶναι τὴν πρώτην, ὅπως τοὺς συμμάχους
179+ σώσομεν. ἐὰν γὰρ τοῦτο βεβαίως ὑπάρξῃ, τότε καὶ περὶ τοῦ
180+ τίνα τιμωρήσεταί τις καὶ ὃν τρόπον ἐξέσται σκοπεῖν· πρὶν δὲ
181+ τὴν ἀρχὴν ὀρθῶς ὑποθέσθαι, μάταιον ἡγοῦμαι περὶ τῆς
182+ τελευτῆς ὁντινοῦν ποιεῖσθαι λόγον.
183+
184+ Δημοσθένους, Γ´ ᾿Ολυνθιακὸς
185+
186+ Georgian:
187+
188+ From a Unicode conference invitation:
189+
190+ გთხოვთ ახლავე გაიაროთ რეგისტრაცია Unicode-ის მეათე საერთაშორისო
191+ კონფერენციაზე დასასწრებად, რომელიც გაიმართება 10-12 მარტს,
192+ ქ. მაინცში, გერმანიაში. კონფერენცია შეჰკრებს ერთად მსოფლიოს
193+ ექსპერტებს ისეთ დარგებში როგორიცაა ინტერნეტი და Unicode-ი,
194+ ინტერნაციონალიზაცია და ლოკალიზაცია, Unicode-ის გამოყენება
195+ ოპერაციულ სისტემებსა, და გამოყენებით პროგრამებში, შრიფტებში,
196+ ტექსტების დამუშავებასა და მრავალენოვან კომპიუტერულ სისტემებში.
197+
198+ Russian:
199+
200+ From a Unicode conference invitation:
201+
202+ Зарегистрируйтесь сейчас на Десятую Международную Конференцию по
203+ Unicode, которая состоится 10-12 марта 1997 года в Майнце в Германии.
204+ Конференция соберет широкий круг экспертов по вопросам глобального
205+ Интернета и Unicode, локализации и интернационализации, воплощению и
206+ применению Unicode в различных операционных системах и программных
207+ приложениях, шрифтах, верстке и многоязычных компьютерных системах.
208+
209+ Thai (UCS Level 2):
210+
211+ Excerpt from a poetry on The Romance of The Three Kingdoms (a Chinese
212+ classic 'San Gua'):
213+
214+ [----------------------------|------------------------]
215+ ๏ แผ่นดินฮั่นเสื่อมโทรมแสนสังเวช พระปกเกศกองบู๊กู้ขึ้นใหม่
216+ สิบสองกษัตริย์ก่อนหน้าแลถัดไป สององค์ไซร้โง่เขลาเบาปัญญา
217+ ทรงนับถือขันทีเป็นที่พึ่ง บ้านเมืองจึงวิปริตเป็นนักหนา
218+ โฮจิ๋นเรียกทัพทั่วหัวเมืองมา หมายจะฆ่ามดชั่วตัวสำคัญ
219+ เหมือนขับไสไล่เสือจากเคหา รับหมาป่าเข้ามาเลยอาสัญ
220+ ฝ่ายอ้องอุ้นยุแยกให้แตกกัน ใช้สาวนั้นเป็นชนวนชื่นชวนใจ
221+ พลันลิฉุยกุยกีกลับก่อเหตุ ช่างอาเพศจริงหนาฟ้าร้องไห้
222+ ต้องรบราฆ่าฟันจนบรรลัย ฤๅหาใครค้ำชูกู้บรรลังก์ ฯ
223+
224+ (The above is a two-column text. If combining characters are handled
225+ correctly, the lines of the second column should be aligned with the
226+ | character above.)
227+
228+ Ethiopian:
229+
230+ Proverbs in the Amharic language:
231+
232+ ሰማይ አይታረስ ንጉሥ አይከሰስ።
233+ ብላ ካለኝ እንደአባቴ በቆመጠኝ።
234+ ጌጥ ያለቤቱ ቁምጥና ነው።
235+ ደሀ በሕልሙ ቅቤ ባይጠጣ ንጣት በገደለው።
236+ የአፍ ወለምታ በቅቤ አይታሽም።
237+ አይጥ በበላ ዳዋ ተመታ።
238+ ሲተረጉሙ ይደረግሙ።
239+ ቀስ በቀስ፥ ዕንቁላል በእግሩ ይሄዳል።
240+ ድር ቢያብር አንበሳ ያስር።
241+ ሰው እንደቤቱ እንጅ እንደ ጉረቤቱ አይተዳደርም።
242+ እግዜር የከፈተውን ጉሮሮ ሳይዘጋው አይድርም።
243+ የጎረቤት ሌባ፥ ቢያዩት ይስቅ ባያዩት ያጠልቅ።
244+ ሥራ ከመፍታት ልጄን ላፋታት።
245+ ዓባይ ማደሪያ የለው፥ ግንድ ይዞ ይዞራል።
246+ የእስላም አገሩ መካ የአሞራ አገሩ ዋርካ።
247+ ተንጋሎ ቢተፉ ተመልሶ ባፉ።
248+ ወዳጅህ ማር ቢሆን ጨርስህ አትላሰው።
249+ እግርህን በፍራሽህ ልክ ዘርጋ።
250+
251+ Runes:
252+
253+ ᚻᛖ ᚳᚹᚫᚦ ᚦᚫᛏ ᚻᛖ ᛒᚢᛞᛖ ᚩᚾ ᚦᚫᛗ ᛚᚪᚾᛞᛖ ᚾᚩᚱᚦᚹᛖᚪᚱᛞᚢᛗ ᚹᛁᚦ ᚦᚪ ᚹᛖᛥᚫ
254+
255+ (Old English, which transcribed into Latin reads 'He cwaeth that he
256+ bude thaem lande northweardum with tha Westsae.' and means 'He said
257+ that he lived in the northern land near the Western Sea.')
258+
259+ Braille:
260+
261+ ⡌⠁⠧⠑ ⠼⠁⠒ ⡍⠜⠇⠑⠹⠰⠎ ⡣⠕⠌
262+
263+ ⡍⠜⠇⠑⠹ ⠺⠁⠎ ⠙⠑⠁⠙⠒ ⠞⠕ ⠃⠑⠛⠔ ⠺⠊⠹⠲ ⡹⠻⠑ ⠊⠎ ⠝⠕ ⠙⠳⠃⠞
264+ ⠱⠁⠞⠑⠧⠻ ⠁⠃⠳⠞ ⠹⠁⠞⠲ ⡹⠑ ⠗⠑⠛⠊⠌⠻ ⠕⠋ ⠙⠊⠎ ⠃⠥⠗⠊⠁⠇ ⠺⠁⠎
265+ ⠎⠊⠛⠝⠫ ⠃⠹ ⠹⠑ ⠊⠇⠻⠛⠹⠍⠁⠝⠂ ⠹⠑ ⠊⠇⠻⠅⠂ ⠹⠑ ⠥⠝⠙⠻⠞⠁⠅⠻⠂
266+ ⠁⠝⠙ ⠹⠑ ⠡⠊⠑⠋ ⠍⠳⠗⠝⠻⠲ ⡎⠊⠗⠕⠕⠛⠑ ⠎⠊⠛⠝⠫ ⠊⠞⠲ ⡁⠝⠙
267+ ⡎⠊⠗⠕⠕⠛⠑⠰⠎ ⠝⠁⠍⠑ ⠺⠁⠎ ⠛⠕⠕⠙ ⠥⠏⠕⠝ ⠰⡡⠁⠝⠛⠑⠂ ⠋⠕⠗ ⠁⠝⠹⠹⠔⠛ ⠙⠑
268+ ⠡⠕⠎⠑ ⠞⠕ ⠏⠥⠞ ⠙⠊⠎ ⠙⠁⠝⠙ ⠞⠕⠲
269+
270+ ⡕⠇⠙ ⡍⠜⠇⠑⠹ ⠺⠁⠎ ⠁⠎ ⠙⠑⠁⠙ ⠁⠎ ⠁ ⠙⠕⠕⠗⠤⠝⠁⠊⠇⠲
271+
272+ ⡍⠔⠙⠖ ⡊ ⠙⠕⠝⠰⠞ ⠍⠑⠁⠝ ⠞⠕ ⠎⠁⠹ ⠹⠁⠞ ⡊ ⠅⠝⠪⠂ ⠕⠋ ⠍⠹
273+ ⠪⠝ ⠅⠝⠪⠇⠫⠛⠑⠂ ⠱⠁⠞ ⠹⠻⠑ ⠊⠎ ⠏⠜⠞⠊⠊⠥⠇⠜⠇⠹ ⠙⠑⠁⠙ ⠁⠃⠳⠞
274+ ⠁ ⠙⠕⠕⠗⠤⠝⠁⠊⠇⠲ ⡊ ⠍⠊⠣⠞ ⠙⠁⠧⠑ ⠃⠑⠲ ⠔⠊⠇⠔⠫⠂ ⠍⠹⠎⠑⠇⠋⠂ ⠞⠕
275+ ⠗⠑⠛⠜⠙ ⠁ ⠊⠕⠋⠋⠔⠤⠝⠁⠊⠇ ⠁⠎ ⠹⠑ ⠙⠑⠁⠙⠑⠌ ⠏⠊⠑⠊⠑ ⠕⠋ ⠊⠗⠕⠝⠍⠕⠝⠛⠻⠹
276+ ⠔ ⠹⠑ ⠞⠗⠁⠙⠑⠲ ⡃⠥⠞ ⠹⠑ ⠺⠊⠎⠙⠕⠍ ⠕⠋ ⠳⠗ ⠁⠝⠊⠑⠌⠕⠗⠎
277+ ⠊⠎ ⠔ ⠹⠑ ⠎⠊⠍⠊⠇⠑⠆ ⠁⠝⠙ ⠍⠹ ⠥⠝⠙⠁⠇⠇⠪⠫ ⠙⠁⠝⠙⠎
278+ ⠩⠁⠇⠇ ⠝⠕⠞ ⠙⠊⠌⠥⠗⠃ ⠊⠞⠂ ⠕⠗ ⠹⠑ ⡊⠳⠝⠞⠗⠹⠰⠎ ⠙⠕⠝⠑ ⠋⠕⠗⠲ ⡹⠳
279+ ⠺⠊⠇⠇ ⠹⠻⠑⠋⠕⠗⠑ ⠏⠻⠍⠊⠞ ⠍⠑ ⠞⠕ ⠗⠑⠏⠑⠁⠞⠂ ⠑⠍⠏⠙⠁⠞⠊⠊⠁⠇⠇⠹⠂ ⠹⠁⠞
280+ ⡍⠜⠇⠑⠹ ⠺⠁⠎ ⠁⠎ ⠙⠑⠁⠙ ⠁⠎ ⠁ ⠙⠕⠕⠗⠤⠝⠁⠊⠇⠲
281+
282+ (The first couple of paragraphs of "A Christmas Carol" by Dickens)
283+
284+ Compact font selection example text:
285+
286+ ABCDEFGHIJKLMNOPQRSTUVWXYZ /0123456789
287+ abcdefghijklmnopqrstuvwxyz £©µÀÆÖÞßéöÿ
288+ –—‘“”„†•…‰™œŠŸž€ ΑΒΓΔΩαβγδω АБВГДабвгд
289+ ∀∂∈ℝ∧∪≡∞ ↑↗↨↻⇣ ┐┼╔╘░►☺♀ fi�⑀₂ἠḂӥẄɐː⍎אԱა
290+
291+ Greetings in various languages:
292+
293+ Hello world, Καλημέρα κόσμε, コンニチハ
294+
295+ Box drawing alignment tests: █
296+ ▉
297+ ╔══╦══╗ ┌──┬──┐ ╭──┬──╮ ╭──┬──╮ ┏━━┳━━┓ ┎┒┏┑ ╷ ╻ ┏┯┓ ┌┰┐ ▊ ╱╲╱╲╳╳╳
298+ ║┌─╨─┐║ │╔═╧═╗│ │╒═╪═╕│ │╓─╁─╖│ ┃┌─╂─┐┃ ┗╃╄┙ ╶┼╴╺╋╸┠┼┨ ┝╋┥ ▋ ╲╱╲╱╳╳╳
299+ ║│╲ ╱│║ │║ ║│ ││ │ ││ │║ ┃ ║│ ┃│ ╿ │┃ ┍╅╆┓ ╵ ╹ ┗┷┛ └┸┘ ▌ ╱╲╱╲╳╳╳
300+ ╠╡ ╳ ╞╣ ├╢ ╟┤ ├┼─┼─┼┤ ├╫─╂─╫┤ ┣┿╾┼╼┿┫ ┕┛┖┚ ┌┄┄┐ ╎ ┏┅┅┓ ┋ ▍ ╲╱╲╱╳╳╳
301+ ║│╱ ╲│║ │║ ║│ ││ │ ││ │║ ┃ ║│ ┃│ ╽ │┃ ░░▒▒▓▓██ ┊ ┆ ╎ ╏ ┇ ┋ ▎
302+ ║└─╥─┘║ │╚═╤═╝│ │╘═╪═╛│ │╙─╀─╜│ ┃└─╂─┘┃ ░░▒▒▓▓██ ┊ ┆ ╎ ╏ ┇ ┋ ▏
303+ ╚══╩══╝ └──┴──┘ ╰──┴──╯ ╰──┴──╯ ┗━━┻━━┛ └╌╌┘ ╎ ┗╍╍┛ ┋ ▁▂▃▄▅▆▇█
304+ """
92305}
0 commit comments