From 5fa20ea2d54d21a781d07995e27113b4c3bbc953 Mon Sep 17 00:00:00 2001
From: kenneth_suter <kenneth_suter@localhost>
Date: Fri, 17 Aug 2007 19:23:08 +0000
Subject: [PATCH] New tests for messaging plumbing to replace old ones:

---
 opends/tests/unit-tests-testng/src/server/org/opends/messages/MessageDescriptorRegistryTest.java |  102 ++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 100 insertions(+), 2 deletions(-)

diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/messages/MessageDescriptorRegistryTest.java b/opends/tests/unit-tests-testng/src/server/org/opends/messages/MessageDescriptorRegistryTest.java
index b3d0136..49aec35 100644
--- a/opends/tests/unit-tests-testng/src/server/org/opends/messages/MessageDescriptorRegistryTest.java
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/messages/MessageDescriptorRegistryTest.java
@@ -30,6 +30,17 @@
 import static org.testng.Assert.*;
 import org.testng.annotations.*;
 
+import java.util.Set;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Locale;
+import java.util.EnumSet;
+import java.util.Map;
+import java.util.HashMap;
+import java.lang.reflect.Field;
+
 /**
  * MessageDescriptorRegistry Tester.
  *
@@ -46,8 +57,95 @@
 
   @Test(dataProvider = "message descriptors")
   public void testGetMessageDescriptor(MessageDescriptor md) {
-    assertEquals(md,
-            MessageDescriptorRegistry.getMessageDescriptor(md.getId()));
+    MessageDescriptor md2 = MessageDescriptorRegistry.getMessageDescriptor(md.getId());
+    assertEquals(md, md2);
   }
 
+  @DataProvider(name = "message classes")
+  public Object[][] getMessageClasses() {
+    Set<Class> mdClasses = MessageDescriptorRegistry.getRegisteredClasses();
+    List<Class> classesToTest = new ArrayList<Class>(mdClasses);
+
+    // These newer message files don't comply
+    classesToTest.remove(AdminToolMessages.class);
+    classesToTest.remove(QuickSetupMessages.class);
+
+    Object[][] ret = new Object[classesToTest.size()][1];
+    for (int i = 0; i < ret.length; i++) {
+      ret[i] = new Object[] { classesToTest.get(i) };
+    }
+    return ret;
+  }
+
+  /**
+   * Tests that messages don't end with a period (.) excluding those that end
+   * with an ellipsis (...)
+   * 
+   * @param  messagesClass containing definitions of MessageDescriptor objects
+   * @throws IllegalAccessException if there is a problem accessing the
+   *         class through reflection
+   */
+  @Test(dataProvider = "message classes")
+  public void testFormatStringsDontEndWithPeriod(Class messagesClass)
+          throws IllegalAccessException
+  {
+    Field[] fa = messagesClass.getFields();
+    if (fa != null) {
+      for (Field f : fa) {
+        Class<?> c = f.getType();
+        if (MessageDescriptor.class.isAssignableFrom(c)) {
+          MessageDescriptor md = (MessageDescriptor)f.get(null);
+          String fmtString = md.getFormatString(Locale.getDefault());
+          boolean bad = fmtString.endsWith(".") && !fmtString.endsWith("...");
+          assertFalse(bad,
+                  "Format string for message descriptor " + f.getName() +
+                  " obtained through key " + md.getKey() + 
+                  " defined in class " + messagesClass.getName() +
+                  " \'" + md.getFormatString(Locale.getDefault()) +
+                  "\' ends with a '.'");
+        }
+      }
+    }
+  }
+
+  /**
+   * Tests that messages for each category are restricted to a single
+   * messages file and that each file only contains messages from a
+   * single category.
+   */
+  @Test
+  public void testCategoriesDontSpanFiles() {
+    Map<Category,Class> categoriesToClass = new HashMap<Category,Class>();
+    Set categories = EnumSet.allOf(Category.class);
+    Set<Class> msgClasses = MessageDescriptorRegistry.getRegisteredClasses();
+    for (Class msgClass : msgClasses) {
+      List<MessageDescriptor> mds =
+              MessageDescriptorRegistry.getMessageDescriptorsForClass(msgClass);
+      Category currentCategory = null;
+      for (MessageDescriptor md : mds) {
+        if (currentCategory == null) {
+          currentCategory = md.getCategory();
+          if (categories.contains(currentCategory)) {
+            categories.remove(currentCategory);
+            categoriesToClass.put(currentCategory, msgClass);
+          } else {
+            assertTrue(false,
+                    "Message file " + msgClass + " defines descriptors " +
+                    "for category " + currentCategory + " but message file " +
+                    categoriesToClass.get(currentCategory) + " defines descriptors " +
+                    "of " + currentCategory + ".  Descriptors for a particular " +
+                    "category can only be defined in a single messages file.");
+          }
+        } else {
+          boolean categoriesMatch = currentCategory.equals(md.getCategory());
+          assertTrue(categoriesMatch,
+                  "Message file " + msgClass + " contains descriptors from at least " +
+                          "two different categories: descriptor of key " +
+                          md.getFormatString() + " is of category " + md.getCategory() +
+                          " but expected category was " + currentCategory);
+
+        }
+      }
+    }
+  }
 }

--
Gitblit v1.10.0