Author: ieb
Date: Mon Jul 21 15:48:25 2008
New Revision: 678591

URL: http://svn.apache.org/viewvc?rev=678591&view=rev
Log:
SHINDIG-451

Removed the dependency on shindig-eatures from the APIiValidator.
added in log4j.properties to the test scope to configure logging correctly

Added:
    incubator/shindig/trunk/java/social-api/src/test/resources/
    incubator/shindig/trunk/java/social-api/src/test/resources/log4j.properties
    
incubator/shindig/trunk/java/social-api/src/test/resources/simplelog.properties
Modified:
    incubator/shindig/trunk/java/social-api/pom.xml
    
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/util/ApiValidator.java
    
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/util/ApiValidatorTest.java
    
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/util/BeanJsonLibConverterTest.java

Modified: incubator/shindig/trunk/java/social-api/pom.xml
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/pom.xml?rev=678591&r1=678590&r2=678591&view=diff
==============================================================================
--- incubator/shindig/trunk/java/social-api/pom.xml (original)
+++ incubator/shindig/trunk/java/social-api/pom.xml Mon Jul 21 15:48:25 2008
@@ -60,13 +60,6 @@
       <groupId>org.apache.shindig</groupId>
       <artifactId>shindig-common</artifactId>
     </dependency>
-    <!-- is this Ok, only used in test to load the features -->
-    <dependency>
-      <groupId>org.apache.shindig</groupId>
-      <artifactId>shindig-features</artifactId>
-      <scope>test</scope>
-    </dependency>
-
     <!-- external depenencies -->
     <dependency>
       <groupId>org.json</groupId>

Modified: 
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/util/ApiValidator.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/util/ApiValidator.java?rev=678591&r1=678590&r2=678591&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/util/ApiValidator.java
 (original)
+++ 
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/util/ApiValidator.java
 Mon Jul 21 15:48:25 2008
@@ -65,7 +65,7 @@
    *                 feature is missing
    * 
    */
-  public ApiValidator(String feature) throws IOException,
+  private ApiValidator(String feature) throws IOException,
       ParserConfigurationException, SAXException {
     ctx = Context.enter();
     scope = ctx.initStandardObjects();
@@ -73,6 +73,15 @@
   }
 
   /**
+   * Load the ApiValidator with no features, this avoids having features in 
the classpath
+   * @throws IOException
+   */
+  public ApiValidator() throws IOException {
+    ctx = Context.enter();
+    scope = ctx.initStandardObjects();
+  }
+
+  /**
    * @param json
    *                The json to validate expected in a form { xyz: yyy } form
    * @param object
@@ -120,7 +129,61 @@
     }
     log.debug("Loaded " + so);
 
-    return validateOject(so, object, optionalFields, nullfields);
+    ScriptableObject specification = getScriptableObject(object);
+    log.debug("Looking for  " + object + " found " + specification);
+    listScriptable(object, specification);
+    Object[] fields = specification.getIds();
+    String[] fieldNames = new String[fields.length];
+    for (int i = 0; i < fields.length; i++) {
+      Object fieldName = specification.get(String.valueOf(fields[i]), 
specification);
+      fieldNames[i] = String.valueOf(fieldName);
+    }
+
+    return validateObject(so, fieldNames, optionalFields, nullfields);
+
+  }
+
+  /**
+   * @param json
+   *                The json to validate expected in a form { xyz: yyy } form
+   * @param fieldNames
+   *                An Array of field names that the oject should be tested 
against
+   * @param optionalFields
+   *                If any of the fields that appear in the json structure are
+   *                optional, then they should be defined in this parameter.
+   * @param nullfields
+   * @throws ApiValidatorExpcetion
+   *                 if there is a problem validating the json
+   * @return a map so string object pairs containing the fields at the top 
level
+   *         of the json tree. Where these are native java objects, they will
+   *         appear as native object. Complex json objects will appear as Rhino
+   *         specific objects
+   */
+  public Map<String, Object> validate(String json, String[] fieldNames,
+      String[] optionalFields, String[] nullfields)
+      throws ApiValidatorExpcetion {
+
+
+    log.debug("Loading " + json);
+    json = json.trim();
+    if (!json.endsWith("}")) {
+      json = json + "}";
+    }
+    if (!json.startsWith("{")) {
+      json = "{" + json;
+    }
+    json = "( testingObject = " + json + " )";
+
+    Object so = null;
+    try {
+      so = ctx.evaluateString(scope, json, "test json", 0, null);
+    } catch (EvaluatorException ex) {
+      log.error("Non parseable JSON " + json);
+    }
+    log.debug("Loaded " + so);
+
+
+    return validateObject(so, fieldNames, optionalFields, nullfields);
 
   }
 
@@ -133,7 +196,7 @@
    * @return
    * @throws ApiValidatorExpcetion
    */
-  public Map<String, Object> validateOject(Object jsonObject, String object,
+  public Map<String, Object> validateObject(Object jsonObject, String[] 
fieldNames,
       String[] optionalFields, String[] nullFields)
       throws ApiValidatorExpcetion {
     Map<String, String> optional = new HashMap<String, String>();
@@ -145,19 +208,14 @@
       nullf.put(nf, nf);
     }
 
-    ScriptableObject specification = getScriptableObject(object);
-    log.debug("Looking for  " + object + " found " + specification);
-    listScriptable(object, specification);
 
     Map<String, Object> resultFields = new HashMap<String, Object>();
 
     if (jsonObject instanceof ScriptableObject) {
       ScriptableObject parsedJSONObject = (ScriptableObject) jsonObject;
       listScriptable("testingObject", parsedJSONObject);
-      Object[] fields = specification.getIds();
-      for (Object f : fields) {
-        Object fieldName = specification.get(String.valueOf(f), specification);
-        Object o = parsedJSONObject.get(String.valueOf(fieldName),
+      for (String fieldName : fieldNames) {
+        Object o = parsedJSONObject.get(fieldName,
             parsedJSONObject);
         if (o == ScriptableObject.NOT_FOUND) {
           if (optional.containsKey(fieldName)) {
@@ -174,12 +232,12 @@
             if (nullf.containsKey(fieldName)) {
               log.error("Null Fields has been serialized " + fieldName);
             }
-            log.debug("Got a Null object for Field " + f + ":" + fieldName
+            log.debug("Got a Null object for Field " + fieldName
                 + " on json [[" + jsonObject + "]]");
 
           } else {
 
-            log.debug("Got JSON Field  Field," + f + ":" + fieldName + " as "
+            log.debug("Got JSON Field  Field,"  + fieldName + " as "
                 + o + " " + o.getClass());
           }
           resultFields.put(String.valueOf(fieldName), o);
@@ -266,7 +324,8 @@
         in = this.getClass().getClassLoader().getResourceAsStream(
             "features/" + scriptPath);
         if (in == null) {
-          throw new IOException("Cant load spec " + spec + " or 
features/"+spec+" from classpath");
+          throw new IOException("Cant load spec " + spec + " or features/"
+              + spec + " from classpath");
         }
       }
       InputStreamReader reader = new InputStreamReader(in);
@@ -315,9 +374,10 @@
         features);
     if (in == null) {
       in = this.getClass().getClassLoader().getResourceAsStream(
-          "features/"+features);
+          "features/" + features);
       if (in == null) {
-        throw new IOException("Cant find " + features + " or features/" + 
features+ " in classpath ");
+        throw new IOException("Cant find " + features + " or features/"
+            + features + " in classpath ");
       }
     }
     DocumentBuilderFactory builderFactory = DocumentBuilderFactory

Modified: 
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/util/ApiValidatorTest.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/util/ApiValidatorTest.java?rev=678591&r1=678590&r2=678591&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/util/ApiValidatorTest.java
 (original)
+++ 
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/util/ApiValidatorTest.java
 Mon Jul 21 15:48:25 2008
@@ -37,6 +37,11 @@
    */
   private static final String TEST_DEFINITION = 
     "var TestDef = {}; TestDef.Field = { FIELD1 : \"json\", FIELD2 : \"xyz\", 
FIELD3 : \"shouldBeMissing\" };";
+  private static final String[] TEST_DEFINITION_FIELDS = {
+    "json",
+    "xyz",
+    "shouldBeMissing"
+  };
 
   /**
    * test the validator for successful validation
@@ -47,7 +52,7 @@
    */
   @Test
   public void testValidator() throws ApiValidatorExpcetion, IOException, 
ParserConfigurationException, SAXException {
-    ApiValidator apiVal = new ApiValidator("opensocial-reference");
+    ApiValidator apiVal = new ApiValidator();
     apiVal.addScript(TEST_DEFINITION);
     String[] optional = {"shouldBeMissing"};
     String[] nullfields = {};
@@ -72,7 +77,7 @@
    */
   @Test
   public void testValidatorFail() throws ApiValidatorExpcetion, IOException, 
ParserConfigurationException, SAXException {
-    ApiValidator apiVal = new ApiValidator("opensocial-reference");
+    ApiValidator apiVal = new ApiValidator();
     apiVal.addScript(TEST_DEFINITION);
     String[] optional = {};
     String[] nullfields = {};
@@ -82,8 +87,49 @@
     } catch ( ApiValidatorExpcetion ex ) {
       
     }
+  }
+  /**
+   * test the validator for successful validation
+   * @throws ApiValidatorExpcetion
+   * @throws IOException
+   * @throws ParserConfigurationException
+   * @throws SAXException
+   */
+  @Test
+  public void testFieldsValidator() throws ApiValidatorExpcetion, IOException, 
ParserConfigurationException, SAXException {
+    ApiValidator apiVal = new ApiValidator();
+    String[] optional = {"shouldBeMissing"};
+    String[] nullfields = {};
+     Map<String, Object> result = apiVal.validate("{ json: \"A Test JSON\", 
xyz : 123 }", TEST_DEFINITION_FIELDS, optional, nullfields );
+     Assert.assertNotNull(result);
+     Assert.assertNotNull(result.get("json"));
+     Assert.assertNotNull(result.get("xyz"));
+     Assert.assertEquals(String.class,result.get("json").getClass());
+     Assert.assertEquals(Integer.class,result.get("xyz").getClass());
+     Assert.assertEquals("A Test JSON",result.get("json"));
+     Assert.assertEquals(123,((Integer)result.get("xyz")).intValue());
      
     
   }
+  
+  /**
+   * Test for a failing validation
+   * @throws ApiValidatorExpcetion
+   * @throws IOException
+   * @throws ParserConfigurationException
+   * @throws SAXException
+   */
+  @Test
+  public void testFieldsValidatorFail() throws ApiValidatorExpcetion, 
IOException, ParserConfigurationException, SAXException {
+    ApiValidator apiVal = new ApiValidator();
+    String[] optional = {};
+    String[] nullfields = {};
+    try {
+      apiVal.validate("{ jsonIsMissing: \"A Test JSON\", xyz : 123 }", 
TEST_DEFINITION_FIELDS, optional, nullfields );
+      Assert.fail("Should have Generated an APIValidatorException ");
+    } catch ( ApiValidatorExpcetion ex ) {
+      
+    }
+  }
 
 }

Modified: 
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/util/BeanJsonLibConverterTest.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/util/BeanJsonLibConverterTest.java?rev=678591&r1=678590&r2=678591&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/util/BeanJsonLibConverterTest.java
 (original)
+++ 
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/util/BeanJsonLibConverterTest.java
 Mon Jul 21 15:48:25 2008
@@ -49,6 +49,23 @@
 
   private static final Log log = LogFactory
       .getLog(BeanJsonLibConverterTest.class);
+  // taken from opensocial-reference/person.js
+  private static final String[] PERSON_FIELDS = { "id", "name", "nickname",
+      "thumbnailUrl", "profileUrl", "currentLocation", "addresses", "emails",
+      "phoneNumbers", "aboutMe", "status", "profileSong", "profileVideo",
+      "gender", "sexualOrientation", "relationshipStatus", "age",
+      "dateOfBirth", "bodyType", "ethnicity", "smoker", "drinker", "children",
+      "pets", "livingArrangement", "timeZone", "languagesSpoken", "jobs",
+      "jobInterests", "schools", "interests", "urls", "music", "movies",
+      "tvShows", "books", "activities", "sports", "heroes", "quotes", "cars",
+      "food", "turnOns", "turnOffs", "tags", "romance", "scaredOf",
+      "happiestWhen", "fashion", "humor", "lookingFor", "religion",
+      "politicalViews", "hasApp", "networkPresence" };
+
+  // taken from opensocial-reference/name.js
+  private static final String[] NAME_FIELDS = { "familyName", "givenName",
+      "additionalName", "honorificPrefix", "honorificSuffix", "unstructured"};
+  
   private Person johnDoe;
   private Activity activity;
 
@@ -80,19 +97,25 @@
     beanJsonConverter = new BeanJsonLibConverter(Guice
         .createInjector(new JsonLibTestsGuiceModule()));
 
-    apiValidator = new ApiValidator("opensocial-reference");
+    apiValidator = new ApiValidator();
 
   }
 
   public static class SpecialPerson extends PersonImpl {
     public static final String[] OPTIONALFIELDS = {};
-    public static final String[] NULLFIELDS  = 
{"jobInterests","nickname","romance","religion","timeZone",
-    
"relationshipStatus","tags","networkPresence","books","quotes","phoneNumbers","languagesSpoken",
-    
"activities","jobs","dateOfBirth","profileVideo","bodyType","urls","schools","music","addresses",
-    
"livingArrangement","thumbnailUrl","humor","sports","scaredOf","movies","age","pets","hasApp","turnOffs",
-    
"gender","fashion","drinker","aboutMe","children","sexualOrientation","heroes","profileSong","lookingFor",
-    
"cars","turnOns","tvShows","profileUrl","status","currentLocation","smoker","happiestWhen","ethnicity",
-    
"food","emails","politicalViews","interests","familyName","honorificSuffix","additionalName","honorificPrefix","givenName"};
+    public static final String[] NULLFIELDS = { "jobInterests", "nickname",
+        "romance", "religion", "timeZone", "relationshipStatus", "tags",
+        "networkPresence", "books", "quotes", "phoneNumbers",
+        "languagesSpoken", "activities", "jobs", "dateOfBirth", "profileVideo",
+        "bodyType", "urls", "schools", "music", "addresses",
+        "livingArrangement", "thumbnailUrl", "humor", "sports", "scaredOf",
+        "movies", "age", "pets", "hasApp", "turnOffs", "gender", "fashion",
+        "drinker", "aboutMe", "children", "sexualOrientation", "heroes",
+        "profileSong", "lookingFor", "cars", "turnOns", "tvShows",
+        "profileUrl", "status", "currentLocation", "smoker", "happiestWhen",
+        "ethnicity", "food", "emails", "politicalViews", "interests",
+        "familyName", "honorificSuffix", "additionalName", "honorificPrefix",
+        "givenName" };
 
     private String newfield;
 
@@ -120,13 +143,13 @@
 
     String result = beanJsonConverter.convertToString(cassie);
 
-    validatePerson(result, "5", "robot", SpecialPerson.OPTIONALFIELDS, 
SpecialPerson.NULLFIELDS);
+    validatePerson(result, "5", "robot", SpecialPerson.OPTIONALFIELDS,
+        SpecialPerson.NULLFIELDS);
 
-    apiValidator.addScript(" specialPerson = { SPECIAL : \"newfield\" }; ");
     String[] optional = {};
     String[] nullfields = {};
     Map<String, Object> special = apiValidator.validate(result,
-        "specialPerson", optional,nullfields);
+        new String[] { "newfield" }, optional, nullfields);
     assertNotNull(special.get("newfield"));
     assertEquals(String.class, special.get("newfield").getClass());
     assertEquals("nonsense", special.get("newfield"));
@@ -156,18 +179,18 @@
    * @param result
    * @throws ApiValidatorExpcetion
    */
-  private void validatePerson(String result, String id, String name, String[] 
optional, String[] nullfields)
-      throws ApiValidatorExpcetion {
+  private void validatePerson(String result, String id, String name,
+      String[] optional, String[] nullfields) throws ApiValidatorExpcetion {
 
-    Map<String, Object> standard = apiValidator.validate(result,
-        "opensocial.Person.Field", optional,nullfields);
+    Map<String, Object> standard = apiValidator.validate(result, PERSON_FIELDS,
+        optional, nullfields);
     assertNotNull(standard.get("id"));
     assertEquals(String.class, standard.get("id").getClass());
     assertEquals(id, standard.get("id"));
 
     assertNotNull(standard.get("name"));
-    Map<String, Object> nameJSON = apiValidator.validateOject(standard
-        .get("name"), "opensocial.Name.Field", optional,nullfields);
+    Map<String, Object> nameJSON = apiValidator.validateObject(standard
+        .get("name"), NAME_FIELDS, optional, nullfields);
     ApiValidator.dump(nameJSON);
 
     assertNotNull(nameJSON.get("unstructured"));
@@ -269,16 +292,15 @@
     // map should contain, so we have to tell it
     beanJsonConverter.addMapping("item1", Map.class);
     beanJsonConverter.addMapping("item2", Map.class);
-    Map<?, ?> parsedMap = beanJsonConverter
-        .convertToObject(result, Map.class);
+    Map<?, ?> parsedMap = beanJsonConverter.convertToObject(result, Map.class);
 
     if (outputInfo) {
       log.info("Dumping Map (" + parsedMap + ")");
     }
     ApiValidator.dump(parsedMap);
 
-    assertEquals("1", ((Map<?,?>)parsedMap.get("item1")).get("value"));
-    assertEquals("2", ((Map<?,?>)parsedMap.get("item2")).get("value"));
+    assertEquals("1", ((Map<?, ?>) parsedMap.get("item1")).get("value"));
+    assertEquals("2", ((Map<?, ?>) parsedMap.get("item2")).get("value"));
   }
 
   public void testListsToJson() throws Exception {
@@ -299,8 +321,8 @@
     if (outputInfo) {
       log.info("JSON (" + result + ")");
     }
-    Map<?, ?>[] parsedList = beanJsonConverter.convertToObject(
-        result, Map[].class);
+    Map<?, ?>[] parsedList = beanJsonConverter.convertToObject(result,
+        Map[].class);
 
     assertEquals("1", parsedList[0].get("value"));
     assertEquals("2", parsedList[1].get("value"));

Added: 
incubator/shindig/trunk/java/social-api/src/test/resources/log4j.properties
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/test/resources/log4j.properties?rev=678591&view=auto
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/test/resources/log4j.properties 
(added)
+++ incubator/shindig/trunk/java/social-api/src/test/resources/log4j.properties 
Mon Jul 21 15:48:25 2008
@@ -0,0 +1,8 @@
+log4j.rootCategory=info
+log4j.rootLogger=info, stdout
+
+
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+log4j.appender.stdout.layout.ConversionPattern= %p %m  [%d] (%F:%L) %n
+

Added: 
incubator/shindig/trunk/java/social-api/src/test/resources/simplelog.properties
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/test/resources/simplelog.properties?rev=678591&view=auto
==============================================================================
--- 
incubator/shindig/trunk/java/social-api/src/test/resources/simplelog.properties 
(added)
+++ 
incubator/shindig/trunk/java/social-api/src/test/resources/simplelog.properties 
Mon Jul 21 15:48:25 2008
@@ -0,0 +1,8 @@
+log4j.rootCategory=info
+log4j.rootLogger=info, stdout
+
+
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+log4j.appender.stdout.layout.ConversionPattern= %p %m  [%d] (%F:%L) %n
+


Reply via email to