1 package com.hughes.android.dictionary;
\r
4 import java.io.IOException;
\r
5 import java.io.RandomAccessFile;
\r
6 import java.util.Arrays;
\r
7 import java.util.List;
\r
8 import java.util.concurrent.atomic.AtomicBoolean;
\r
10 import junit.framework.TestCase;
\r
12 import com.hughes.android.dictionary.Dictionary.IndexEntry;
\r
13 import com.hughes.android.dictionary.Dictionary.LanguageData;
\r
14 import com.hughes.android.dictionary.Dictionary.Row;
\r
16 public class DictionaryTest extends TestCase {
\r
18 public void testDictionary() throws IOException {
\r
19 final File file = File.createTempFile("asdf", "asdf");
\r
20 file.deleteOnExit();
\r
22 // final Dictionary goldenDict;
\r
23 final List<Entry> entries = Arrays.asList(
\r
24 Entry.parseFromLine("der Hund :: the dog", false),
\r
25 Entry.parseFromLine("Die grosse Katze :: The big cat", false),
\r
26 Entry.parseFromLine("die Katze :: the cat", false),
\r
27 Entry.parseFromLine("gross :: big", false),
\r
28 Entry.parseFromLine("Dieb :: thief", false),
\r
29 Entry.parseFromLine("rennen :: run", false));
\r
32 final Dictionary dict = new Dictionary(Language.DE, Language.EN);
\r
33 dict.entries.addAll(entries);
\r
34 DictionaryBuilder.createIndex(dict, Entry.LANG1);
\r
35 DictionaryBuilder.createIndex(dict, Entry.LANG2);
\r
36 final RandomAccessFile raf = new RandomAccessFile(file, "rw");
\r
40 // goldenDict = dict;
\r
43 final RandomAccessFile raf = new RandomAccessFile(file, "r");
\r
44 final Dictionary dict = new Dictionary(raf);
\r
46 assertEquals(entries, dict.entries);
\r
48 assertEquals("der", dict.languageDatas[0].sortedIndex.get(0).word);
\r
49 assertEquals("Die", dict.languageDatas[0].sortedIndex.get(1).word);
\r
51 for (final IndexEntry indexEntry : dict.languageDatas[0].sortedIndex) {
\r
52 System.out.println(indexEntry);
\r
56 for (final Row row : dict.languageDatas[0].rows) {
\r
57 if (row.index >= 0) {
\r
58 System.out.println(" " + rowCount + ":" + dict.entries.get(row.index));
\r
60 System.out.println(rowCount + ":" + dict.languageDatas[0].sortedIndex.get(-row.index - 1));
\r
65 for (int l = 0; l <= 1; l++) {
\r
66 final LanguageData languageData = dict.languageDatas[l];
\r
67 for (int i = 0; i < languageData.sortedIndex.size(); i++) {
\r
68 final IndexEntry indexEntry = languageData.sortedIndex.get(i);
\r
69 if (indexEntry.word.toLowerCase().equals("dieb"))
\r
70 System.out.println();
\r
71 final IndexEntry lookedUpEntry = languageData.sortedIndex.get(languageData.lookup(indexEntry.word, new AtomicBoolean(false)));
\r
72 if (!indexEntry.word.toLowerCase().equals(lookedUpEntry.word.toLowerCase()))
\r
73 System.out.println();
\r
74 assertEquals(indexEntry.word.toLowerCase(), lookedUpEntry.word.toLowerCase());
\r
78 assertEquals("Die", dict.languageDatas[0].sortedIndex.get(dict.languageDatas[0].lookup("die", new AtomicBoolean())).word);
\r
82 public void testTextNorm() throws IOException {
\r
83 final List<Entry> entries = Arrays.asList(
\r
84 Entry.parseFromLine("Hund {m} :: dog", true),
\r
85 Entry.parseFromLine("\"Pick-up\"-Presse {f} :: baler", true),
\r
86 Entry.parseFromLine("(Ach was), echt? [auch ironisch] :: No shit! [also ironic]", true),
\r
87 Entry.parseFromLine("(akuter) Myokardinfarkt {m} <AMI / MI> :: (acute) myocardial infarction <AMI / MI>", true),
\r
88 Entry.parseFromLine("(reine) Vermutung {f} :: guesswork", true),
\r
89 Entry.parseFromLine("(mit) 6:1 vorne liegen :: to be 6-1 up [football]", true),
\r
90 Entry.parseFromLine("(auf) den Knopf drücken [auch fig.: auslösen] :: to push the button [also fig.: initiate]", false),
\r
91 Entry.parseFromLine("Adjektiv {n} /Adj./; Eigenschaftswort {n} [gramm.] | Adjektive {pl}; Eigenschaftswörter {pl} :: adjective /adj./ | adjectives", true),
\r
92 Entry.parseFromLine("Älteste {m,f}; Ältester :: oldest; eldest", true),
\r
93 Entry.parseFromLine("\"...\", schloss er an. :: '...,' he added.", true),
\r
94 Entry.parseFromLine("besonderer | besondere | besonderes :: extra", false),
\r
95 Entry.parseFromLine("| zu Pferde; zu Pferd | reiten :: horseback | on horseback | go on horseback", true),
\r
96 Entry.parseFromLine("Hauptaugenmerk {m} | sein Hauptaugenmerk richten auf :: | to focus (one's) attention on", true)
\r
99 assertFalse(entries.contains(null));
\r
101 // Hyphenated words get put both multiple listings.
\r
103 final Dictionary dict = new Dictionary(Language.DE, Language.EN);
\r
104 dict.entries.addAll(entries);
\r
105 DictionaryBuilder.createIndex(dict, Entry.LANG1);
\r
106 DictionaryBuilder.createIndex(dict, Entry.LANG2);
\r
108 for (int l = 0; l <= 1; l++) {
\r
109 final LanguageData languageData = dict.languageDatas[l];
\r
110 System.out.println("\n" + languageData.language);
\r
111 for (int i = 0; i < languageData.sortedIndex.size(); i++) {
\r
112 final IndexEntry indexEntry = languageData.sortedIndex.get(i);
\r
113 System.out.println(indexEntry);
\r