Recently Written · git

subread-dictionary

Pop-up dictionary for Android that reads Yomitan dictionaries, with local audio

git clone https://github.com/equwal/subread-dictionary

Log | Files | Refs


app/src/androidTest/kotlin/space/subread/dictionary/DictionariesTest.kt (4043 bytes)

1 package space.subread.dictionary
2 
3 import androidx.test.core.app.ApplicationProvider
4 import androidx.test.ext.junit.runners.AndroidJUnit4
5 import org.junit.After
6 import org.junit.Assert.assertEquals
7 import org.junit.Assert.assertTrue
8 import org.junit.Before
9 import org.junit.Test
10 import org.junit.runner.RunWith
11 import space.subread.dictionary.core.DictionaryIndex
12 import space.subread.dictionary.core.Lookup
13 import java.io.ByteArrayInputStream
14 import java.io.ByteArrayOutputStream
15 import java.util.zip.ZipEntry
16 import java.util.zip.ZipOutputStream
17 
18 /** The import into SQLite and the lookup through it, on a device. */
19 @RunWith(AndroidJUnit4::class)
20 class DictionariesTest {
21 
22     private val context = ApplicationProvider.getApplicationContext<android.content.Context>()
23     private lateinit var dictionaries: Dictionaries
24 
25     @Before
26     fun open() {
27         context.deleteDatabase("test.db")
28         dictionaries = Dictionaries(context, "test.db")
29     }
30 
31     @After
32     fun close() {
33         dictionaries.close()
34         context.deleteDatabase("test.db")
35     }
36 
37     private fun zip(vararg files: Pair<String, String>): ByteArray {
38         val bytes = ByteArrayOutputStream()
39         ZipOutputStream(bytes).use { out ->
40             for ((name, body) in files) {
41                 out.putNextEntry(ZipEntry(name))
42                 out.write(body.toByteArray())
43                 out.closeEntry()
44             }
45         }
46         return bytes.toByteArray()
47     }
48 
49     private val termBank = """[
50         ["食べる","たべる","v1","v1",10,["to eat"],1,"P"],
51         ["食べ物","たべもの","n","",5,["food"],2,""],
52         ["物","もの","n","",1,["thing"],3,""]
53     ]"""
54 
55     private val metaBank = """[["食べる","freq",{"value":100,"displayValue":"100"}],["食べる","pitch",{"reading":"たべる","pitches":[{"position":2}]}]]"""
56 
57     @Test
58     fun importThenLookup() {
59         val index = DictionaryIndex("Test", "1", 3)
60         val counts = ArrayList<Int>()
61         val info = dictionaries.import(index, ByteArrayInputStream(zip("term_bank_1.json" to termBank, "term_meta_bank_1.json" to metaBank))) { counts.add(it) }
62         // Three terms and two meta rows.
63         assertEquals(5, info.terms)
64         assertEquals(listOf(info), dictionaries.list())
65 
66         val found = Lookup.find("食べ物を食べた", 4, dictionaries)
67         assertEquals("食べる", found.first().stored.term.expression)
68         assertEquals(listOf("past"), found.first().reasons)
69         // A kana text finds the reading.
70         assertEquals("食べ物", Lookup.find("たべもの", 0, dictionaries).first().stored.term.expression)
71 
72         val meta = dictionaries.meta("食べる")
73         assertEquals(listOf("freq", "pitch"), meta.map { it.meta.mode })
74     }
75 
76     @Test
77     fun aDisabledDictionaryIsNotSearched() {
78         val info = dictionaries.import(DictionaryIndex("Test", "1", 3), ByteArrayInputStream(zip("term_bank_1.json" to termBank))) {}
79         dictionaries.setEnabled(info.id, false)
80         assertTrue(Lookup.find("食べる", 0, dictionaries).isEmpty())
81         assertTrue(!dictionaries.anyEnabled())
82     }
83 
84     @Test
85     fun deleteRemovesTheTermsToo() {
86         val info = dictionaries.import(DictionaryIndex("Test", "1", 3), ByteArrayInputStream(zip("term_bank_1.json" to termBank, "term_meta_bank_1.json" to metaBank))) {}
87         dictionaries.delete(info.id)
88         assertTrue(dictionaries.list().isEmpty())
89         assertTrue(dictionaries.terms(listOf("食べる")).isEmpty())
90         assertTrue(dictionaries.meta("食べる").isEmpty())
91     }
92 
93     @Test
94     fun orderFollowsMoveUp() {
95         val a = dictionaries.import(DictionaryIndex("A", "1", 3), ByteArrayInputStream(zip("term_bank_1.json" to "[]"))) {}
96         val b = dictionaries.import(DictionaryIndex("B", "1", 3), ByteArrayInputStream(zip("term_bank_1.json" to "[]"))) {}
97         assertEquals(listOf(a.id, b.id), dictionaries.list().map { it.id })
98         dictionaries.moveUp(b.id)
99         assertEquals(listOf(b.id, a.id), dictionaries.list().map { it.id })
100     }
101 }