From 3df617323e1e0035344f66de28db34ccfdc2d557 Mon Sep 17 00:00:00 2001
From: Jean Chalard <jchalard@google.com>
Date: Tue, 10 Dec 2013 21:52:38 +0900
Subject: [PATCH] Make the bad header a checked exception and fix dicttool test

Change-Id: If780a2a1cb722aee83d910904c0a6315add9552d
---
 .../inputmethod/latin/makedict/FormatSpec.java  |  9 +++++----
 .../dicttool/BinaryDictOffdeviceUtilsTests.java | 17 +++++++++++++++--
 2 files changed, 20 insertions(+), 6 deletions(-)

diff --git a/java/src/com/android/inputmethod/latin/makedict/FormatSpec.java b/java/src/com/android/inputmethod/latin/makedict/FormatSpec.java
index f23fe4656f..d7c523f3ce 100644
--- a/java/src/com/android/inputmethod/latin/makedict/FormatSpec.java
+++ b/java/src/com/android/inputmethod/latin/makedict/FormatSpec.java
@@ -352,18 +352,19 @@ public final class FormatSpec {
         public static final String DICTIONARY_ID_ATTRIBUTE = "dictionary";
         private static final String DICTIONARY_DESCRIPTION_ATTRIBUTE = "description";
         public FileHeader(final int headerSize, final DictionaryOptions dictionaryOptions,
-                final FormatOptions formatOptions) {
+                final FormatOptions formatOptions) throws UnsupportedFormatException {
             mDictionaryOptions = dictionaryOptions;
             mFormatOptions = formatOptions;
             mBodyOffset = formatOptions.mVersion < VERSION4 ? headerSize : 0;
             if (null == getLocaleString()) {
-                throw new RuntimeException("Cannot create a FileHeader without a locale");
+                throw new UnsupportedFormatException("Cannot create a FileHeader without a locale");
             }
             if (null == getVersion()) {
-                throw new RuntimeException("Cannot create a FileHeader without a version");
+                throw new UnsupportedFormatException(
+                        "Cannot create a FileHeader without a version");
             }
             if (null == getId()) {
-                throw new RuntimeException("Cannot create a FileHeader without an ID");
+                throw new UnsupportedFormatException("Cannot create a FileHeader without an ID");
             }
         }
 
diff --git a/tools/dicttool/tests/com/android/inputmethod/latin/dicttool/BinaryDictOffdeviceUtilsTests.java b/tools/dicttool/tests/com/android/inputmethod/latin/dicttool/BinaryDictOffdeviceUtilsTests.java
index 9e397f19d8..0c11f868ef 100644
--- a/tools/dicttool/tests/com/android/inputmethod/latin/dicttool/BinaryDictOffdeviceUtilsTests.java
+++ b/tools/dicttool/tests/com/android/inputmethod/latin/dicttool/BinaryDictOffdeviceUtilsTests.java
@@ -42,9 +42,16 @@ public class BinaryDictOffdeviceUtilsTests extends TestCase {
     private static final int TEST_FREQ = 37; // Some arbitrary value unlikely to happen by chance
 
     public void testGetRawDictWorks() throws IOException, UnsupportedFormatException {
+        final String VERSION = "1";
+        final String LOCALE = "test";
+        final String ID = "main:test";
+
         // Create a thrice-compressed dictionary file.
-        final FusionDictionary dict = new FusionDictionary(new PtNodeArray(),
-                new DictionaryOptions(new HashMap<String, String>()));
+        final DictionaryOptions testOptions = new DictionaryOptions(new HashMap<String, String>());
+        testOptions.mAttributes.put(FormatSpec.FileHeader.DICTIONARY_VERSION_ATTRIBUTE, VERSION);
+        testOptions.mAttributes.put(FormatSpec.FileHeader.DICTIONARY_LOCALE_ATTRIBUTE, LOCALE);
+        testOptions.mAttributes.put(FormatSpec.FileHeader.DICTIONARY_ID_ATTRIBUTE, ID);
+        final FusionDictionary dict = new FusionDictionary(new PtNodeArray(), testOptions);
         dict.add("foo", TEST_FREQ, null, false /* isNotAWord */);
         dict.add("fta", 1, null, false /* isNotAWord */);
         dict.add("ftb", 1, null, false /* isNotAWord */);
@@ -72,6 +79,12 @@ public class BinaryDictOffdeviceUtilsTests extends TestCase {
         final FusionDictionary resultDict = dictDecoder.readDictionaryBinary(
                 null /* dict : an optional dictionary to add words to, or null */,
                 false /* deleteDictIfBroken */);
+        assertEquals("Wrong version attribute", VERSION, resultDict.mOptions.mAttributes.get(
+                FormatSpec.FileHeader.DICTIONARY_VERSION_ATTRIBUTE));
+        assertEquals("Wrong locale attribute", LOCALE, resultDict.mOptions.mAttributes.get(
+                FormatSpec.FileHeader.DICTIONARY_LOCALE_ATTRIBUTE));
+        assertEquals("Wrong id attribute", ID, resultDict.mOptions.mAttributes.get(
+                FormatSpec.FileHeader.DICTIONARY_ID_ATTRIBUTE));
         assertEquals("Dictionary can't be read back correctly",
                 FusionDictionary.findWordInTree(resultDict.mRootNodeArray, "foo").getFrequency(),
                 TEST_FREQ);
-- 
GitLab