Author: lindner
Date: Sat Mar  5 12:54:28 2011
New Revision: 1078280

URL: http://svn.apache.org/viewvc?rev=1078280&view=rev
Log:
SHINDIG-1510 | Patch from Matthew Marum | Opensocial Javascript Compliance tests

Added:
    shindig/trunk/content/gadgets/compliance/
    shindig/trunk/content/gadgets/compliance/javascript-tests/
    shindig/trunk/content/gadgets/compliance/javascript-tests/1.1/
    shindig/trunk/content/gadgets/compliance/javascript-tests/1.1/activities/
    
shindig/trunk/content/gadgets/compliance/javascript-tests/1.1/activities/activitiessuite.js
    
shindig/trunk/content/gadgets/compliance/javascript-tests/1.1/activities/suite.xml
    shindig/trunk/content/gadgets/compliance/javascript-tests/1.1/appdata/
    
shindig/trunk/content/gadgets/compliance/javascript-tests/1.1/appdata/appdatasuite.js
    
shindig/trunk/content/gadgets/compliance/javascript-tests/1.1/appdata/suite.xml
    shindig/trunk/content/gadgets/compliance/javascript-tests/1.1/people/
    
shindig/trunk/content/gadgets/compliance/javascript-tests/1.1/people/peoplesuite.js
    
shindig/trunk/content/gadgets/compliance/javascript-tests/1.1/people/suite.xml
    shindig/trunk/content/gadgets/compliance/javascript-tests/1.1/suite.xml

Added: 
shindig/trunk/content/gadgets/compliance/javascript-tests/1.1/activities/activitiessuite.js
URL: 
http://svn.apache.org/viewvc/shindig/trunk/content/gadgets/compliance/javascript-tests/1.1/activities/activitiessuite.js?rev=1078280&view=auto
==============================================================================
--- 
shindig/trunk/content/gadgets/compliance/javascript-tests/1.1/activities/activitiessuite.js
 (added)
+++ 
shindig/trunk/content/gadgets/compliance/javascript-tests/1.1/activities/activitiessuite.js
 Sat Mar  5 12:54:28 2011
@@ -0,0 +1,150 @@
+/**
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+function runActivitiesSuite(){
+       
+       module("OpenSocial JavaScript Activities Tests 1.1");
+       
+       asyncTest("osapi.activities.get defaults", function(){
+               ok(osapi.activities.get, "osapi.activities.get exists");
+               var req = osapi.activities.get();
+               ok(req != null,"Req not null");
+               setTimeout(function(){
+                       req.execute(function(response){
+                               ok(!response.error, "No error in get response");
+                               ok(response.totalResults == 1,"total results = 
" + response.totalResults + ", expected 1");
+                               var count = 0;
+                               for(var i in response.list){
+                                       ok(response.list[i], "Activity " + i);
+                                       ok(response.list[i].id, "Activity " + i 
+ " id: " + response.list[i].id);
+                                       ok(response.list[i].title, "Activity " 
+ i + " title: " + response.list[i].title);
+                                       ok(response.list[i].userId, "Activity " 
+ i + " userId: " + response.list[i].userId);
+                                       count ++;
+                               }
+                               ok(count == response.totalResults,"Number of 
activities in list should match totalResults");
+                               start();
+                       });                     
+               },1000);
+
+       });
+       
+       asyncTest("osapi.activities.get viewer", function(){
+               ok(osapi.activities.get, "osapi.activities.get exists");
+               var req = osapi.activities.get({userId: "@viewer"});
+               ok(req != null,"Req not null");
+               setTimeout(function(){
+                       req.execute(function(response){
+                               ok(!response.error, "No error in get response");
+                               ok(response.totalResults == 1,"total results = 
" + response.totalResults + ", expected 1");
+                               var count = 0;
+                               for(var i in response.list){
+                                       ok(response.list[i], "Activity " + i);
+                                       ok(response.list[i].id, "Activity " + i 
+ " id: " + response.list[i].id);
+                                       ok(response.list[i].title, "Activity " 
+ i + " title: " + response.list[i].title);
+                                       ok(response.list[i].userId, "Activity " 
+ i + " userId: " + response.list[i].userId);
+                                       count ++;
+                               }
+                               ok(count == response.totalResults,"Number of 
activities in list should match totalResults");
+                               start();
+                       });                     
+               },1000);
+
+       });
+       
+       asyncTest("osapi.activities.get owner", function(){
+               ok(osapi.activities.get, "osapi.activities.get exists");
+               var req = osapi.activities.get({userId: "@owner"});
+               ok(req != null,"Req not null");
+               setTimeout(function(){
+                       req.execute(function(response){
+                               ok(!response.error, "No error in get response");
+                               ok(response.totalResults == 1,"total results = 
" + response.totalResults + ", expected 1");
+                               var count = 0;
+                               for(var i in response.list){
+                                       ok(response.list[i], "Activity " + i);
+                                       ok(response.list[i].id, "Activity " + i 
+ " id: " + response.list[i].id);
+                                       ok(response.list[i].title, "Activity " 
+ i + " title: " + response.list[i].title);
+                                       ok(response.list[i].userId, "Activity " 
+ i + " userId: " + response.list[i].userId);
+                                       count ++;
+                               }
+                               ok(count == response.totalResults,"Number of 
activities in list should match totalResults");
+                               start();
+                       });                     
+               },1000);
+
+       });
+       
+       asyncTest("osapi.activities.get viewer friends",function(){
+               ok(osapi.activities.get, "osapi.activities.get exists");
+               var req = osapi.activities.get({userId : "@viewer", groupId : 
"@friends"});
+               ok(req != null,"Req not null");
+               setTimeout(function(){
+                       req.execute(function(response){
+                               ok(!response.error, "No error in get response");
+                               ok(response.totalResults == 2,"total results = 
" + response.totalResults + ", expected 2");
+                               var count = 0;
+                               for(var i in response.list){
+                                       ok(response.list[i], "Activity " + i);
+                                       ok(response.list[i].id, "Activity " + i 
+ " id: " + response.list[i].id);
+                                       ok(response.list[i].title, "Activity " 
+ i + " title: " + response.list[i].title);
+                                       ok(response.list[i].userId, "Activity " 
+ i + " userId: " + response.list[i].userId);
+                                       count ++;
+                               }
+                               ok(count == response.totalResults,"Number of 
activities in list should match totalResults");
+                               start();
+                       });                     
+               },1000);
+
+       });
+       
+       asyncTest("osapi.activities.get owner friends",function(){
+               ok(osapi.activities.get, "osapi.activities.get exists");
+               var req = osapi.activities.get({userId : "@owner", groupId : 
"@friends"});
+               ok(req != null,"Req not null");
+               setTimeout(function(){
+                       req.execute(function(response){
+                               ok(!response.error, "No error in get response");
+                               ok(response.totalResults == 2,"total results = 
" + response.totalResults + ", expected 2");
+                               var count = 0;
+                               for(var i in response.list){
+                                       ok(response.list[i], "Activity " + i);
+                                       ok(response.list[i].id, "Activity " + i 
+ " id: " + response.list[i].id);
+                                       ok(response.list[i].title, "Activity " 
+ i + " title: " + response.list[i].title);
+                                       ok(response.list[i].userId, "Activity " 
+ i + " userId: " + response.list[i].userId);
+                                       count ++;
+                               }
+                               ok(count == response.totalResults,"Number of 
activities in list should match totalResults");
+                               start();
+                       });                     
+               },1000);
+
+       });
+       
+       asyncTest("osapi.activities.get with non-existant ID",function(){
+               ok(osapi.activities.get, "osapi.activities.get exists");
+               var req = osapi.activities.get({userId : "DOES_NOT_EXIST"});
+               ok(req != null,"Req not null");
+               setTimeout(function(){
+                       req.execute(function(response){
+                               ok(!response.error, "No error in get response");
+                               console.log(response);
+                               ok(response.totalResults == 0);
+                               start();
+                       });                     
+               },1000);
+
+       });
+       
+       
+}

Added: 
shindig/trunk/content/gadgets/compliance/javascript-tests/1.1/activities/suite.xml
URL: 
http://svn.apache.org/viewvc/shindig/trunk/content/gadgets/compliance/javascript-tests/1.1/activities/suite.xml?rev=1078280&view=auto
==============================================================================
--- 
shindig/trunk/content/gadgets/compliance/javascript-tests/1.1/activities/suite.xml
 (added)
+++ 
shindig/trunk/content/gadgets/compliance/javascript-tests/1.1/activities/suite.xml
 Sat Mar  5 12:54:28 2011
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Module specificationVersion="1.1">
+  <ModulePrefs title="Activities Tests 1.1" author="OpenSocial_QA"
+               description="Activities Requests Tests 1.1">
+    <Require feature="dynamic-height"/>
+    <Require feature="osapi"/>
+    <Require feature="opensocial-data"/>
+    <Require feature="opensocial"/>
+  </ModulePrefs>
+  <Content type="html" scrolling="true">
+    <![CDATA[
+<html>
+  <head>
+  <link rel="stylesheet" href="http://code.jquery.com/qunit/git/qunit.css"; 
type="text/css" media="screen" />
+  <script type="text/javascript" 
src="http://code.jquery.com/jquery-latest.min.js";></script>
+  <script type="text/javascript" 
src="http://code.jquery.com/qunit/git/qunit.js";></script>
+  <script type="text/javascript" src="activitiessuite.js"></script>
+  
+  <script>
+  
+      gadgets.util.registerOnLoadHandler(runActivitiesSuite);
+      gadgets.util.registerOnLoadHandler(function(){
+            gadgets.window.adjustHeight(2000);
+      });
+
+  </script>
+  </head>
+  
+  <body>
+    <h1 id="qunit-header">OpenSocial JavaScript 1.1 Activities</h1>
+    <h2 id="qunit-banner"></h2>
+    <div id="qunit-testrunner-toolbar"></div>
+    <h2 id="qunit-userAgent"></h2>
+    <ol id="qunit-tests"></ol>
+    <div id="qunit-fixture">test markup, will be hidden</div>
+  </body>
+</html>
+  
+  
+]]>
+  </Content>
+</Module>

Added: 
shindig/trunk/content/gadgets/compliance/javascript-tests/1.1/appdata/appdatasuite.js
URL: 
http://svn.apache.org/viewvc/shindig/trunk/content/gadgets/compliance/javascript-tests/1.1/appdata/appdatasuite.js?rev=1078280&view=auto
==============================================================================
--- 
shindig/trunk/content/gadgets/compliance/javascript-tests/1.1/appdata/appdatasuite.js
 (added)
+++ 
shindig/trunk/content/gadgets/compliance/javascript-tests/1.1/appdata/appdatasuite.js
 Sat Mar  5 12:54:28 2011
@@ -0,0 +1,411 @@
+/**
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+var appDataPersonalValue2 = 'personalValue2 ' + new Date().getTime();
+var appDataPersonalValue1 = 'personalValue1 ' + new Date().getTime();
+function runAppDataSuite(){
+       
+       module("OpenSocial JavaScript AppData Tests 1.1");
+       
+       asyncTest("osapi.appdata.(update, get) defaults" , function(){
+
+               ok(osapi.appdata.update, "osapi.appdata.update exists");
+               ok(osapi.appdata.get, "osapi.appdata.get exists");
+        var pairs = {"testKey1" : appDataPersonalValue1};
+        ok(pairs,"Setting testKey1 to " + appDataPersonalValue1);
+        var params = {data : pairs};
+        var req = osapi.appdata.update(params);
+        ok(req != null, "Req not null");
+        setTimeout(function(){
+               req.execute(function(response){
+                       ok(!response.error,"No error in response");
+
+                var params = {keys : ["testKey1"]};
+                var req2 = osapi.appdata.get(params);
+                ok(req2 != null, "Req not null");
+                req2.execute(function(response){
+                               ok(!response.error,"No error in response");
+                               for(var person in response){
+                                       
ok(response[person]["testKey1"],"Response contains personalValue1");
+                                       ok(response[person]["testKey1"] == 
appDataPersonalValue1, "personalValue1 matches expected value");
+                               }
+                               start();
+                       });
+               });
+        }, 1000);
+      
+       });
+       
+       asyncTest("osapi.appdata.(update, get) @me" , function(){
+
+               ok(osapi.appdata.update, "osapi.appdata.update exists");
+               ok(osapi.appdata.get, "osapi.appdata.get exists");
+        var pairs = {"testKey2" : appDataPersonalValue2};
+        ok(pairs,"Setting personalValue to " + appDataPersonalValue2);
+        var params = {userId : "@me", data : pairs};
+        var req = osapi.appdata.update(params);
+        ok(req != null, "Req not null");
+        setTimeout(function(){
+               req.execute(function(response){
+                       ok(!response.error,"No error in response");
+                var params = {userId : "@me" , keys : ["testKey2"]};
+                var req2 = osapi.appdata.get(params);
+                ok(req2 != null, "Req not null");
+                req2.execute(function(response){
+                               ok(!response.error,"No error in response");
+                               var i = 0;
+                               for(var person in response){
+                                       i++;
+                                       ok(response[person]["testKey2"] == 
appDataPersonalValue2, 
+                                                       appDataPersonalValue2 + 
" matches retreived value "+ response[person]["testKey2"]);
+                               }
+                               ok(i == 1, "Expect 1 Person in response, found 
" + i);
+                               start();
+                       });
+               });
+        }, 1000);
+      
+       });
+       
+       asyncTest("osapi.appdata.get w/ wildcard", function(){
+               ok(osapi.appdata.get, "osapi.appdata.get exists");
+        var params = {keys : ["*"]};
+        var req = osapi.appdata.get(params);
+        ok(req != null, "Req not null");
+        setTimeout(function(){
+               req.execute(function(response){
+                       ok(!response.error,"No error in response");
+//                     for(var person in response){
+//TODO VALIDATE RESPONSE
+//                     }
+                       start();
+               });
+        }, 1000);
+       });
+       
+       //TODO fully validate response against compliance db
+       asyncTest("osapi.appdata.get @viewer", function(){
+               ok(osapi.appdata.get, "osapi.appdata.get exists");
+        var params = {userId : "@viewer"};
+        var req = osapi.appdata.get(params);
+        ok(req != null, "Req not null");
+        setTimeout(function(){
+               req.execute(function(response){
+                       ok(!response.error,"No error in response");
+                       var count = 0;
+                       for(var person in response){
+                               ok(person, person + " in response");
+                               count ++;
+                       }
+                       ok(count == 1, "Expected 1 person in response");
+                       start();
+               });
+        }, 1000);
+       });
+       
+       
+       //TODO fully validate response against compliance db
+       asyncTest("osapi.appdata.get @owner", function(){
+               ok(osapi.appdata.get, "osapi.appdata.get exists");
+        var params = {userId : "@owner"};
+        var req = osapi.appdata.get(params);
+        ok(req != null, "Req not null");
+        setTimeout(function(){
+               req.execute(function(response){
+                       ok(!response.error,"No error in response");
+                       var count = 0;
+                       for(var person in response){
+                               ok(person, person + " in response");
+                               count ++;
+                       }
+                       ok(count == 1, "Expected 1 person in response");
+                       start();
+               });
+        }, 1000);
+       });
+       
+       asyncTest("osapi.appdata.get w/ DOES_NOT_EXIST property", function(){
+               ok(osapi.appdata.get, "osapi.appdata.get exists");
+        var params = {keys : ["DOES_NOT_EXIST"]};
+        var req = osapi.appdata.get(params);
+        ok(req != null, "Req not null");
+        setTimeout(function(){
+               req.execute(function(response){
+                       ok(!response.error, "No error in response");
+                       for(var person in response){
+                               ok(person, person +" in response");
+                               for(var data in response[person]){
+                                       ok(false,person+" response should not 
contain data, but found \'" + data+"\'");
+                               }
+                       }
+                       start();
+               });
+        }, 1000);
+       });
+       
+    
+       asyncTest("osapi.appdata.UPDATE without data property (Expect Error)", 
function(){
+               ok(osapi.appdata.update, "osapi.appdata.update exists");
+        var params = {};
+        var req = osapi.appdata.update(params);
+        ok(req != null, "Req not null");
+        setTimeout(function(){
+               req.execute(function(response){
+                       ok(response.error,"Expecting error in UPDATE response");
+                       start();
+               });
+        }, 1000);
+      
+       });
+       
+       asyncTest("osapi.appdata.DELETE without keys property (Expect Error)", 
function(){
+               ok(osapi.appdata.delete, "osapi.appdata.delete exists");
+        var params = {};
+        var req = osapi.appdata.delete(params);
+        ok(req != null, "Req not null");
+        setTimeout(function(){
+               req.execute(function(response){
+                       ok(response.error,"Expecting error in DELETE response");
+                       start();
+               });
+        }, 1000);
+      
+       });
+        
+       asyncTest("osapi.appdata.GET without keys property (Expect Error)", 
function(){
+               ok(osapi.appdata.get, "osapi.appdata.get exists");
+        var params = {};
+        var req = osapi.appdata.get(params);
+        ok(req != null, "Req not null");
+        setTimeout(function(){
+               req.execute(function(response){
+                       ok(response.error,"Expecting error in GET response");
+                       start();
+               });
+        }, 1000);
+      
+       });
+       
+       asyncTest("osapi.appdata.(update, get) @viewer  w/ key array" , 
function(){
+
+               ok(osapi.appdata.update, "osapi.appdata.update exists");
+               ok(osapi.appdata.get, "osapi.appdata.get exists");
+        var pairs = {"testKey2" : appDataPersonalValue2, "testKey1" : 
appDataPersonalValue1};
+        var params = {userId : "@viewer", data : pairs};
+        var req = osapi.appdata.update(params);
+        ok(req != null, "Req not null");
+        setTimeout(function(){
+               req.execute(function(response){
+                       ok(!response.error,"No error in response");
+
+                var params = {userId : "@viewer" , keys : ["testKey2", 
"testKey1"]};
+                var req2 = osapi.appdata.get(params);
+                ok(req2 != null, "Req not null");
+                req2.execute(function(response){
+                               ok(!response.error,"No error in response");
+                               var i = 0;
+                               for(var person in response){
+                                       i++;
+                                       var j = 0;
+                                       for(var data in response[person]){
+                                               j++;
+                                               if(data == "testKey1"){
+                                               ok(response[person]["testKey1"] 
== appDataPersonalValue1, 
+                                                               "testKey1 value 
= " + response[person]["testKey1"] + ", expected " + appDataPersonalValue1);
+                                               } else if(data == "testKey2"){
+                                               ok(response[person]["testKey2"] 
== appDataPersonalValue2, 
+                                                               "testKey2 value 
= " + response[person]["testKey2"] + ", expected " + appDataPersonalValue2);
+                                               } else {
+                                                       ok(false, "Found 
unexpected key \'" + data + "\', value = " + response[person][data]);
+                                               }
+                                       }
+                               }
+                               ok(i == 1, "Expect 1 Person in response, found 
" + i);
+                               start();
+                       });
+               });
+        }, 1000);
+      
+       });
+       
+       
+       //Assumes that one of the @viewer's friends is jane.doe
+       asyncTest("osapi.appdata.(update, get) Viewer Friends" , function(){
+               ok(osapi.appdata.update, "osapi.appdata.update exists");
+               ok(osapi.appdata.get, "osapi.appdata.get exists");
+        var pairs = {"testKey1" : "friendDataZZ"};
+        ok(pairs,"Setting \'jane.doe\' testKey1 to \'friendDataZZ\'");
+        var params = {userId : "jane.doe", groupId : "@self", data : pairs};
+        var req = osapi.appdata.update(params);
+        ok(req != null, "Req not null");
+        setTimeout(function(){
+               req.execute(function(response){
+                       ok(!response.error,"No error in response");
+                var params = {userId : "@viewer", groupId : "@friends", keys : 
["testKey1"]};
+                var req2 = osapi.appdata.get(params);
+                ok(req2 != null, "Req not null");
+                req2.execute(function(response){
+                               ok(!response.error,"No error in response");
+                               for(var person in response){
+                                       ok(person != "john.doe", person + " is 
not john.doe");
+                                       if(person == "jane.doe"){
+                                       ok(response[person]["testKey1"], person 
+ " appdata contains contains testKey1");
+                                       ok(response[person]["testKey1"] == 
"friendDataZZ",
+                                                       person + " testKey1 
value = " + response[person]["testKey1"] + ", expected = friendDataZZ");
+                                       }
+                               }
+                               start();
+                       });
+               });
+        }, 1000);
+      
+       });
+       
+       //Assumes that one of the @owner's friends is jane.doe
+       asyncTest("osapi.appdata.(update, get) Owner Friends" , function(){
+               ok(osapi.appdata.update, "osapi.appdata.update exists");
+               ok(osapi.appdata.get, "osapi.appdata.get exists");
+        var pairs = {"testKey1" : "friendDataZZ"};
+        ok(pairs,"Setting \'jane.doe\' testKey1 to \'friendDataZZ\'");
+        var params = {userId : "jane.doe", groupId : "@self", data : pairs};
+        var req = osapi.appdata.update(params);
+        ok(req != null, "Req not null");
+        setTimeout(function(){
+               req.execute(function(response){
+                       ok(!response.error,"No error in response");
+                var params = {userId : "@owner", groupId : "@friends", keys : 
["testKey1"]};
+                var req2 = osapi.appdata.get(params);
+                ok(req2 != null, "Req not null");
+                req2.execute(function(response){
+                               ok(!response.error,"No error in response");
+                               for(var person in response){
+                                       ok(person != "john.doe", person + " is 
not john.doe");
+                                       if(person == "jane.doe"){
+                                       ok(response[person]["testKey1"], person 
+ " appdata contains contains testKey1");
+                                       ok(response[person]["testKey1"] == 
"friendDataZZ",
+                                                       person + " testKey1 
value = " + response[person]["testKey1"] + ", expected = friendDataZZ");
+                                       }
+                               }
+                               start();
+                       });
+               });
+        }, 1000);
+      
+       });
+       
+       asyncTest("osapi.appdata.(update, delete) Create TO_DELETE appdata then 
delete it" , function(){
+               ok(osapi.appdata.update, "osapi.appdata.update exists");
+               ok(osapi.appdata.delete, "osapi.appdata.delete exists");
+        var pairs = {"TO_DELETE" : "value"};
+        ok(pairs,"Setting TO_DELETE");
+        var params = {data : pairs};
+        var req = osapi.appdata.update(params);
+        setTimeout(function(){
+               req.execute(function(response){
+                       ok(!response.error,"TO_DELETE set successfully");
+                var params = {keys : ["TO_DELETE"]};
+                var req2 = osapi.appdata.delete(params);
+                ok(req2 != null, "Delete request not null");
+                req2.execute(function(response){
+                       ok(!response.error,"No error in DELETE response");
+                    var params = {keys : ["*"]};
+                    var req2 = osapi.appdata.get(params);
+                    req2.execute(function(response){
+                               ok(!response.error,"No error in GET response");
+                               for(var person in response){
+                                       ok(!response[person]["TO_DELETE"], 
person + " does not have TO_DELETE appdata");
+                               }
+                               start();
+                       });
+               });
+               });
+        }, 1500);
+      
+       });
+       
+       
+       //Assumes the existence of john.doe and jane.doe
+       asyncTest("osapi.batch appdata requests (multi-user multi-key)", 
function(){
+               ok(osapi.newBatch,"osapi.newBatch exists");
+               var time = new Date().getTime();
+               var johnvalue1 = "john.doe value1 " + time;
+               var johnvalue2 = "john.doe value2 " + time;
+               var janevalue1 = "jane.doe value1 " + time;
+               var janevalue2 = "jane.doe value2 " + time;
+        var batchUpdate = osapi.newBatch().add("john.doe", 
osapi.appdata.update({userId : "john.doe", 
+                               data : {
+                                       "batchKey1" : johnvalue1, 
+                                       "batchKey2" : johnvalue2}
+                       })).add("jane.doe", osapi.appdata.update({userId: 
"jane.doe", 
+                               data : {
+                                       "batchKey1" : janevalue1,
+                                       "batchKey2" : janevalue2}}));
+                       
+        
+        var batchGet = osapi.newBatch().add("john.doe", 
osapi.appdata.get({userId : "john.doe", "keys" : ["batchKey1", "batchKey2"]}))
+                               .add("jane.doe", osapi.appdata.get({userId: 
"jane.doe", "keys" : ["batchKey1", "batchKey2"]}));
+        
+        setTimeout(function(){
+           batchUpdate.execute(function(result) {
+               ok(!result["john.doe"].error,"No error in john.doe update 
response");
+               ok(!result["jane.doe"].error,"No error in jane.doe update 
response");
+               if (!result["jane.doe"].error && !result["jane.doe"].error) {
+                   batchGet.execute(function(result) {
+                       ok(!result["john.doe"].error,"No error in john.doe get 
response");
+                       ok(!result["jane.doe"].error,"No error in jane.doe get 
response");
+                       if (!result["jane.doe"].error && 
!result["jane.doe"].error) {
+                               ok(result["john.doe"]["john.doe"]["batchKey1"] 
== johnvalue1,"john.doe key1 = " + johnvalue1 + " (expected "+johnvalue1+")");
+                               ok(result["jane.doe"]["jane.doe"]["batchKey1"] 
== janevalue1,"jane.doe key1 = " + janevalue1 + " (expected "+janevalue1+")");
+                               ok(result["john.doe"]["john.doe"]["batchKey2"] 
== johnvalue2,"john.doe key2 = " + johnvalue2 + " (expected "+johnvalue2+")");
+                               ok(result["jane.doe"]["jane.doe"]["batchKey2"] 
== janevalue2,"jane.doe key2 = " + janevalue2 + " (expected "+janevalue2+")");
+                       }
+                       start();
+                    });
+               }
+            });
+        }, 1000);
+               
+       });
+       
+       asyncTest("osapi.batch mixed appdata & people requests", function(){
+               var batch = osapi.newBatch().
+                   add("viewer", osapi.people.getViewer()).
+                   add("appdata", osapi.appdata.get({ userId : '@viewer', 
groupId : '@self', "keys" : ["*"]}));
+               setTimeout(function(){
+                       batch.execute(function(result) {
+                                   ok(!result.viewer.error, 
"osapi.people.getViewer() succeeded");
+                                   if(result.viewer.error){
+                                       ok(false, result.viewer.error.message);
+                                   }
+                                   ok(!result.appdata.error, 
"osapi.appdata.get() succeeded");
+                                   if(result.appdata.error){
+                                       ok(false, result.appdata.error.message);
+                                   }
+                                       ok(result.viewer.id,"Got viewer 
"+result.viewer.id);
+                                       //TODO validate that appdata values 
match expected
+                                       for(var person in result.appdata){
+                                               for(var data in 
result.appdata[person]){
+                                                       
ok(result.appdata[person][data], person + " - key: " + data + ", value: " + 
result.appdata[person][data]);
+                                               }
+                                       }
+                                   start();
+                               });
+               }, 1000);
+
+
+               
+       });
+       
+
+       
+}

Added: 
shindig/trunk/content/gadgets/compliance/javascript-tests/1.1/appdata/suite.xml
URL: 
http://svn.apache.org/viewvc/shindig/trunk/content/gadgets/compliance/javascript-tests/1.1/appdata/suite.xml?rev=1078280&view=auto
==============================================================================
--- 
shindig/trunk/content/gadgets/compliance/javascript-tests/1.1/appdata/suite.xml 
(added)
+++ 
shindig/trunk/content/gadgets/compliance/javascript-tests/1.1/appdata/suite.xml 
Sat Mar  5 12:54:28 2011
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Module specificationVersion="1.1">
+  <ModulePrefs title="AppData Tests 1.1" author="OpenSocial_QA"
+               description="AppData Requests Tests 1.1">
+    <Require feature="dynamic-height"/>
+    <Require feature="osapi"/>
+    <Require feature="opensocial-data"/>
+    <Require feature="opensocial"/>
+  </ModulePrefs>
+  <Content type="html" scrolling="true">
+    <![CDATA[
+<html>
+  <head>
+  <link rel="stylesheet" href="http://code.jquery.com/qunit/git/qunit.css"; 
type="text/css" media="screen" />
+  <script type="text/javascript" 
src="http://code.jquery.com/jquery-latest.min.js";></script>
+  <script type="text/javascript" 
src="http://code.jquery.com/qunit/git/qunit.js";></script>
+  <script type="text/javascript" src="appdatasuite.js"></script>
+  
+  <script>
+  
+      gadgets.util.registerOnLoadHandler(runAppDataSuite);
+      gadgets.util.registerOnLoadHandler(function(){
+            gadgets.window.adjustHeight(2000);
+      });
+
+  </script>
+  </head>
+  
+  <body>
+    <h1 id="qunit-header">OpenSocial JavaScript 1.1 AppData</h1>
+    <h2 id="qunit-banner"></h2>
+    <div id="qunit-testrunner-toolbar"></div>
+    <h2 id="qunit-userAgent"></h2>
+    <ol id="qunit-tests"></ol>
+    <div id="qunit-fixture">test markup, will be hidden</div>
+  </body>
+</html>
+  
+  
+]]>
+  </Content>
+</Module>

Added: 
shindig/trunk/content/gadgets/compliance/javascript-tests/1.1/people/peoplesuite.js
URL: 
http://svn.apache.org/viewvc/shindig/trunk/content/gadgets/compliance/javascript-tests/1.1/people/peoplesuite.js?rev=1078280&view=auto
==============================================================================
--- 
shindig/trunk/content/gadgets/compliance/javascript-tests/1.1/people/peoplesuite.js
 (added)
+++ 
shindig/trunk/content/gadgets/compliance/javascript-tests/1.1/people/peoplesuite.js
 Sat Mar  5 12:54:28 2011
@@ -0,0 +1,577 @@
+/**
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+//TODO Verify person objects against compliance person data
+function personResponse(dataResponse) {
+         
+    ok(!dataResponse.error, "No error in response");
+    if (!dataResponse.error) {
+      var viewerData = dataResponse;
+      for (var field in opensocial.Person.Field) {
+        try {
+          var fieldValue = viewerData[opensocial.Person.Field[field]];
+               var req = requiredBySpec(opensocial.Person.Field[field]);
+               var msg;
+               if(req){
+                       msg = "REQUIRED: ";
+               } else {
+                       msg = "OPTIONAL: ";
+               }
+           if(fieldValue != null) {
+              ok(fieldValue != null, msg + (opensocial.Person.Field[field] + " 
is set."));
+            } else if 
(opensocial.getEnvironment().supportsField(opensocial.Environment.ObjectType.PERSON,
 opensocial.Person.Field[field])) {
+                       ok(!req, msg + (opensocial.Person.Field[field] +" is 
empty."));
+            } else {
+                 ok(fieldValue == null, 'Container non-supported field - ' + 
opensocial.Person.Field[field]);
+            }
+        } catch (ex) {
+          ok(false,ex);
+        }
+      }
+    }
+  start();
+}
+
+/**
+ * Returns TRUE if field is a required Person field
+ * 
+ * 
http://opensocial-resources.googlecode.com/svn/spec/1.1/Social-Data.xml#Person
+ * 
+ * @param field Person Field 
+ * @returns {Boolean}  TRUE if required, FALSE if not required (see spec).
+ */
+function requiredBySpec(field){
+       if(field == "id" ||
+               field == "name" ||
+               field == "thumbnailUrl"){
+               return true;
+       }
+       return false;
+}
+
+function runPeopleSuite(){
+       module("OpenSocial JavaScript People/Person Tests 1.1");
+       
+       asyncTest("osapi.people.getViewer() - (no parameters)", function(){
+          var req = osapi.people.getViewer();
+                 ok(osapi.people.getViewer,"osapi.people.getViewer exists");
+          ok(req != null, "Req not null");
+          ok(req.execute != null, "Req has execute method");
+          setTimeout(function(){ 
+                 req.execute(personResponse);
+         }, 1000);
+        
+      });
+       
+       asyncTest("osapi.people.getOwner() - (no parameters)", function(){
+        var req = osapi.people.getOwner();
+        ok(osapi.people.getOwner,"osapi.people.getOwner exists");
+        ok(req != null, "Req not null");
+        ok(req.execute != null, "Req has execute method");
+        setTimeout(function(){ 
+         req.execute(personResponse);
+               }, 1000);
+      
+    });
+       
+       asyncTest("osapi.people.get() - VIEWER (with params)", function(){
+
+         var params = { userId : "@me", groupId : "@self"};
+      var req = osapi.people.getViewer(params);
+      ok(req != null, "osapi request not null");
+      ok(req.execute != null, "Request has execute method");
+      setTimeout(function(){ 
+         req.execute(personResponse);
+               }, 1000);
+
+       });
+       
+       asyncTest("osapi.people.get() - OWNER (with params)", function(){
+
+             var params = { userId : "@me", groupId : "@self"};
+             var req = osapi.people.getOwner(params);
+             ok(req != null, "osapi request not null");
+             ok(req.execute != null, "Request has execute method");
+             setTimeout(function(){ 
+                 req.execute(personResponse);
+                       }, 1000);
+
+               });
+       
+       asyncTest("osapi.people.get() - (by id 'john.doe')", function(){
+
+               var params = {userId : "john.doe", groupId : "@self"};
+        var req = osapi.people.get(params);
+        setTimeout(function(){
+               
+               req.execute(function(dataResponse){
+
+               ok(!dataResponse.error,"no error in data response");
+                if (!dataResponse.error) {
+                  ok(dataResponse.id == "john.doe","ID is john.doe");
+                  ok(dataResponse.name.givenName == "John", "given name is 
John");
+                  ok(dataResponse.name.familyName == "Doe", "family name is 
Doe");
+                }
+                start();
+              });
+               
+      }, 1000);
+       });
+       
+       test("opensocial.hasPermission(VIEWER)", function(){
+        var hasViewerPermission;
+        try {
+          ok(opensocial.hasPermission,"hasPermission exists");
+          ok(opensocial.Permission.VIEWER,"opensocial.Permission.VIEWER 
exists");
+          hasViewerPermission = 
opensocial.hasPermission(opensocial.Permission.VIEWER);
+          ok(hasViewerPermission != null,"User permission not null.")
+          ok(!hasViewerPermission,"Gadget should not have Viewer permission");
+        } catch (ex) {
+               ok(false,ex);
+        }
+       });
+       
+       asyncTest("opensocial.requestPermission(VIEWER)", function(){
+               expect(2);
+               ok(opensocial.requestPermission,"opensocial.requestPermission 
exists");
+        opensocial.requestPermission(opensocial.Permission.VIEWER, 'test',
+                function(dataResponse) {
+                               ok(dataResponse instanceof 
opensocial.ResponseItem,"dataResponse is a opensocial.ResponseItem");
+                       });
+               setTimeout(function(){
+                       start();
+               },1000);
+       });
+       
+       
+       
asyncTest("opensocial.requestShareApp(VIEWER/VIEWER_FRIENDS/OWNER/OWNER_FRIENDS)",
 function(){
+
+               var ids = [ 'VIEWER', 'OWNER'];
+               expect(2 + (ids.length*2));
+               ok(opensocial.requestShareApp,"opensocial.requestShareApp 
exists");
+               ok(opensocial.newMessage,"opensocial.newMessage exists");
+               
+        for (var i = 0; i < ids.length; i++) {
+          var idSpec = {userId : ids[i], 
+                                 groupId : '@friends', 
+                                 networkDistance : 1};
+          opensocial.requestShareApp(idSpec, opensocial.newMessage("test"), 
function(dataResponse) {
+                 /* Does this have to be called? */
+                 ok(dataResponse instanceof opensocial.ResponseItem, ids[i]+" 
response is a opensocial.ResponseItem");
+          });
+        }
+        
+        for (i = 0; i < ids.length; i++) {
+            var idSpec = {userId : ids[i], 
+                                 groupId : '@self', 
+                                 networkDistance : 1};
+            opensocial.requestShareApp(idSpec, opensocial.newMessage("test"), 
function(dataResponse) {
+                 /* Does this have to be called? */
+                 ok(dataResponse instanceof opensocial.ResponseItem, ids[i]+" 
response is a opensocial.ResponseItem");
+            });
+        }
+        
+               setTimeout(function(){
+                       start();
+           },3000);
+               
+       });
+       
+       asyncTest("osapi.people.getViewer() (profile_details: addresses)", 
function(){
+
+               testAsyncViewerFieldResult(opensocial.Person.Field.ADDRESSES);
+      
+       });
+       
+       
+       asyncTest("osapi.people.getViewer() (profile_details: urls)", 
function(){
+
+               testAsyncViewerFieldResult(opensocial.Person.Field.URLS);
+      
+       });
+       
+       asyncTest("osapi.people.getViewer() (profile_details: name)", 
function(){
+
+               testAsyncViewerFieldResult(opensocial.Person.Field.NAME);
+      
+       });
+       
+       asyncTest("osapi.people.getViewer() (profile_details: 
currentLocation)", function(){
+
+               
testAsyncViewerFieldResult(opensocial.Person.Field.CURRENT_LOCATION);
+      
+       });
+
+       asyncTest("osapi.people.getViewer() (profile_details: gender)", 
function(){
+
+               testAsyncViewerFieldResult(opensocial.Person.Field.GENDER);
+      
+       });
+       
+       asyncTest("osapi.people.getViewer() (profile_details: bodyType)", 
function(){
+
+               testAsyncViewerFieldResult(opensocial.Person.Field.BODY_TYPE);
+      
+       });
+       
+       asyncTest("osapi.people.getViewer() (profile_details: schools)", 
function(){
+
+               testAsyncViewerFieldResult(opensocial.Person.Field.SCHOOLS);
+      
+       });
+       
+       asyncTest("osapi.people.getOwner() (profile_details: addresses)", 
function(){
+
+               testAsyncOwnerFieldResult(opensocial.Person.Field.ADDRESSES);
+      
+       });
+       
+       
+       asyncTest("osapi.people.getOwner() (profile_details: urls)", function(){
+
+               testAsyncOwnerFieldResult(opensocial.Person.Field.URLS);
+      
+       });
+       
+       asyncTest("osapi.people.getOwner() (profile_details: name)", function(){
+
+               testAsyncOwnerFieldResult(opensocial.Person.Field.NAME);
+      
+       });
+       
+       asyncTest("osapi.people.getOwner() (profile_details: currentLocation)", 
function(){
+
+               
testAsyncOwnerFieldResult(opensocial.Person.Field.CURRENT_LOCATION);
+      
+       });
+
+       asyncTest("osapi.people.getOwner() (profile_details: gender)", 
function(){
+
+               testAsyncOwnerFieldResult(opensocial.Person.Field.GENDER);
+      
+       });
+       
+       asyncTest("osapi.people.getOwner() (profile_details: bodyType)", 
function(){
+
+               testAsyncOwnerFieldResult(opensocial.Person.Field.BODY_TYPE);
+      
+       });
+       
+       asyncTest("osapi.people.getOwner() (profile_details: schools)", 
function(){
+
+               testAsyncOwnerFieldResult(opensocial.Person.Field.SCHOOLS);
+      
+       });
+       
+       asyncTest("osapi.people.get() - String ID",function(){
+               
+        var req = osapi.people.getViewer();
+        var id;
+        setTimeout(function(){ 
+               req.execute(function(dataResponse){ 
+                       id = dataResponse['id']
+                       ok(id != null && id != undefined, "Viewer id is " + id);
+
+                       var params = { userId : id, groupId : "@self"};
+                       var req = osapi.people.get(params);
+
+                       req.execute(function(dataResponse) {
+                         ok(!dataResponse.error,"No error in data response");
+                         if (!dataResponse.error) {
+                           var actual = dataResponse['id'];
+                           ok(actual == id, "Expected " + id + " got " + 
actual);
+                         }
+                         start();
+                       });
+
+               });
+               }, 1000);
+        
+       });
+       
+       asyncTest("osapi.people.get() w/bad parameters - Error expected", 
function(){
+
+
+        var req = osapi.people.get("bad_param");
+
+        setTimeout(function(){
+               
+               req.execute(function(dataResponse){
+                ok(dataResponse.error,"Error in data response");
+                       start();
+               });
+               
+               
+          }, 1000);
+
+      
+    });
+       
+       asyncTest("osapi.people.get() - viewer\'s friends  (default) ", 
function(){
+        
+        var params = {userId : "@viewer", groupId : "@friends", 
networkDistance : 1};
+        var req = osapi.people.get(params);
+        testAsyncPeopleCollection(req,getSupportedPersonFields());
+      
+    });
+       
+       asyncTest("osapi.people.get() - john.doe\'s friends  (default) ", 
function(){
+        
+        var params = {userId : "john.doe", groupId : "@friends", 
networkDistance : 1};
+        var req = osapi.people.get(params);
+        testAsyncPeopleCollection(req,getSupportedPersonFields());
+      
+    });
+       
+       asyncTest("osapi.people.getViewerFriends() - (default) ", function(){
+
+        
testAsyncPeopleCollection(osapi.people.getViewerFriends(),getSupportedPersonFields());
+      
+    });
+       
+       asyncTest("osapi.people.getOwnerFriends() - (default) ", function(){
+               var supportedPersonFields = getSupportedPersonFields();
+        
testAsyncPeopleCollection(osapi.people.getOwnerFriends(),supportedPersonFields);
+        
+       });
+       
+       asyncTest("osapi.people.getViewerFriends() - w/fields ", function(){
+               var fieldIds = ['id','thumbnailUrl'];
+        var params = {fields : fieldIds};
+        var req = osapi.people.getViewerFriends(params);
+        testAsyncPeopleCollection(req, fieldIds);
+        
+       });
+       
+       asyncTest("osapi.people.getViewerFriends() - (paginated 1 per page, 
start index 1)", function(){
+
+        var params = {networkDistance : 1, count : 1};
+
+        var req = osapi.people.getViewerFriends(params);
+        
+        var params2 = {networkDistance : 1, startIndex : 1, count : 1};
+
+        var req2 = osapi.people.getViewerFriends(params2);
+        setTimeout(function(){
+               var count = 0;
+               var name;
+               
+               req.execute(function(dataResponse){
+
+               ok(!dataResponse.error,"no error in data response");
+                if (!dataResponse.error) {
+                  var dataCollection = dataResponse;
+                  ok(dataResponse.startIndex == 0,"OpenSocial collections are 
zero indexed");
+                  ok(dataResponse.itemsPerPage == 1, "1 item per page");
+                  ok(dataResponse.list.length == 1,"list contains 1 item");
+                  ok(dataResponse.list[0].id,"Person id at 0 is " + 
dataResponse.list[0].id);
+                  if(!name){
+                         name = dataResponse.list[0].id;
+                  } else {
+                         ok(dataResponse.list[0].id != name,"Different indices 
returned different names");
+                  }
+                }
+                if(count == 1){
+                       start();
+                }
+                
+                count ++;
+              });
+               
+               req2.execute(function(dataResponse){
+
+               ok(!dataResponse.error,"no error in data response");
+                if (!dataResponse.error) {
+                  var dataCollection = dataResponse;
+                  ok(dataResponse.startIndex == 1,"Expect a start index of 1");
+                  ok(dataResponse.itemsPerPage == 1, "1 item per page");
+                  ok(dataResponse.list.length == 1,"list contains 1 item");
+                  ok(dataResponse.list[0].id,"Person id at 1 is " + 
dataResponse.list[0].id);
+                  if(!name){
+                         name = dataResponse.list[0].id;
+                  } else {
+                         ok(dataResponse.list[0].id != name,"0 and 1 indices 
point to different Person objects");
+                  }
+                }
+                if(count == 1){
+                       start();
+                }
+                count ++;
+              });
+               
+      }, 1000);
+        
+      
+       });
+       
+       
+       asyncTest("osapi.people.get() - (viewer's friends sorted by id)", 
function(){
+
+               var params = {userId : "@viewer", groupId : "@friends", 
networkDistance : 1, sortBy : "id"};
+        var req = osapi.people.get(params);
+        setTimeout(function(){
+               
+               req.execute(function(dataResponse){
+
+               ok(!dataResponse.error,"no error in data response");
+                if (!dataResponse.error) {
+                  var dataCollection = dataResponse;
+                  ok(dataCollection.sorted,"Collection is marked as sorted");
+                  //TODO Verify sorting
+
+                }
+                start();
+              });
+               
+      }, 1000);
+       });
+        
+       asyncTest("osapi.people.get() - (viewer's friends fitered - id contains 
'doe')", function(){
+
+               var params = {  userId : "@viewer", 
+                                               groupId : "@friends", 
+                                               networkDistance : 1, 
+                                               filterBy : "id",
+                                               filterValue : "doe"
+                                        };
+        var req = osapi.people.get(params);
+        setTimeout(function(){
+        
+               req.execute(function(dataResponse){
+
+               ok(!dataResponse.error,"no error in data response");
+                if (!dataResponse.error) {
+                  var dataCollection = dataResponse;
+                  ok(dataCollection.filtered,"Collection is marked as 
filtered");
+                  for(var i in dataCollection.list){
+                         ok(dataCollection.list[i].id.indexOf("doe") != 
-1,dataCollection.list[i].id+" contains \"doe\"");
+                  }
+
+                }
+                start();
+              });
+               
+      }, 1000);
+        
+      
+       });
+       
+       asyncTest("osapi.people.getViewerFriends() - (Paging out of bounds, 
startIndex = 9999)", function(){
+
+        var params = {networkDistance : 1, count : 10, startIndex : 9999};
+
+        var req = osapi.people.getViewerFriends(params);
+        setTimeout(function(){
+        
+               req.execute(function(dataResponse){
+               ok(dataResponse.error,"Error in data response");
+                start();
+              });
+               
+      }, 1000);
+        
+      
+       });
+
+}
+
+var _supportedPersonFields;
+
+function getSupportedPersonFields(){
+    if(!_supportedPersonFields){
+       _supportedPersonFields = new Array();
+           for(var field in opensocial.Person.Field){
+               
if(opensocial.getEnvironment().supportsField(opensocial.Environment.ObjectType.PERSON,
 opensocial.Person.Field[field])){
+                       
_supportedPersonFields.push(opensocial.Person.Field[field]);
+               }
+           }
+           ok(_supportedPersonFields,"Got list of supported Person fields");
+       }
+    return _supportedPersonFields;
+}
+
+//TODO Verify field values against compliance data
+function testAsyncPeopleCollection(req, fields){
+
+
+    setTimeout(function(){
+       
+       req.execute(function(dataResponse){
+               ok(!dataResponse.error,"No error in data response");
+               ok(dataResponse.totalResults,"Response has 
"+dataResponse.totalResults+" results");
+               ok(dataResponse.list.length == 
dataResponse.totalResults,"Response has a result list of size " + 
dataResponse.list.length);
+               var list = dataResponse.list;
+               for(var i=0; i<list.length; i++){
+                       for(var j=0; j<fields.length; j++){
+                               ok(requiredBySpec(fields[j]) && 
list[i][fields[j]] != null, 
+                                               "Friend " + i +" : " +fields[j] 
+ " - " + list[i][fields[j]]);
+                       }
+                       
+               }
+               start();
+       });
+       
+       
+      }, 1000);
+}
+
+
+function testAsyncViewerFieldResult(field){
+    if 
(opensocial.getEnvironment().supportsField(opensocial.Environment.ObjectType.PERSON,field))
 {
+               var params = {fields: [opensocial.Person.Field[field]]};
+               var req = osapi.people.getViewer(params);
+
+                       setTimeout(function(){
+                               req.execute(function(dataResponse) {
+                                       ok(!dataResponse.error,"dataResponse 
without an error");
+                           if (!dataResponse.error) {
+                             var actual = 
dataResponse[opensocial.Person.Field[field]];
+                             ok(actual != null, opensocial.Person.Field[field] 
+ " value is " + actual);
+                           }
+                           
+                       });
+                               
+                               start();
+                       }, 1000);
+
+    } else {
+       ok(!requiredBySpec(field),"Container does not declare support for "+ 
field +" field.")
+       start();
+    }
+}
+
+function testAsyncOwnerFieldResult(field){
+    if 
(opensocial.getEnvironment().supportsField(opensocial.Environment.ObjectType.PERSON,field))
 {
+               var params = {"fields": [opensocial.Person.Field[field]]};
+               var req = osapi.people.getOwner(params);
+
+                       setTimeout(function(){
+                               req.execute(function(dataResponse) {
+                                       ok(!dataResponse.error,"dataResponse 
without an error");
+                           if (!dataResponse.error) {
+                             var actual = 
dataResponse[opensocial.Person.Field[field]];
+                             ok(actual != null, opensocial.Person.Field[field] 
+ " value is " + actual);
+                           }
+               
+                       });
+                               
+                               start();
+                       },1000);
+
+    } else {
+       ok(!requiredBySpec(field),"Container does not declare support for  "+ 
field +" field.")
+       start();
+    }
+}
+

Added: 
shindig/trunk/content/gadgets/compliance/javascript-tests/1.1/people/suite.xml
URL: 
http://svn.apache.org/viewvc/shindig/trunk/content/gadgets/compliance/javascript-tests/1.1/people/suite.xml?rev=1078280&view=auto
==============================================================================
--- 
shindig/trunk/content/gadgets/compliance/javascript-tests/1.1/people/suite.xml 
(added)
+++ 
shindig/trunk/content/gadgets/compliance/javascript-tests/1.1/people/suite.xml 
Sat Mar  5 12:54:28 2011
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Module specificationVersion="1.1">
+  <ModulePrefs title="People Tests 1.1" author="OpenSocial_QA"
+               description="Person/People Requests Tests 1.1">
+    <Require feature="dynamic-height"/>
+    <Require feature="osapi"/>
+    <Require feature="opensocial-data"/>
+    <Require feature="opensocial"/>
+  </ModulePrefs>
+  <Content type="html" scrolling="true">
+    <![CDATA[
+<html>
+  <head>
+  <link rel="stylesheet" href="http://code.jquery.com/qunit/git/qunit.css"; 
type="text/css" media="screen" />
+  <script type="text/javascript" 
src="http://code.jquery.com/jquery-latest.min.js";></script>
+  <script type="text/javascript" 
src="http://code.jquery.com/qunit/git/qunit.js";></script>
+  <script type="text/javascript" src="peoplesuite.js"></script>
+  
+  <script>
+  
+      gadgets.util.registerOnLoadHandler(runPeopleSuite);
+      gadgets.util.registerOnLoadHandler(function(){
+            gadgets.window.adjustHeight(2000);
+      });
+
+  </script>
+  </head>
+  
+  <body>
+    <h1 id="qunit-header">OpenSocial JavaScript 1.1 People</h1>
+    <h2 id="qunit-banner"></h2>
+    <div id="qunit-testrunner-toolbar"></div>
+    <h2 id="qunit-userAgent"></h2>
+    <ol id="qunit-tests"></ol>
+    <div id="qunit-fixture">test markup, will be hidden</div>
+  </body>
+</html>
+  
+  
+]]>
+  </Content>
+</Module>

Added: shindig/trunk/content/gadgets/compliance/javascript-tests/1.1/suite.xml
URL: 
http://svn.apache.org/viewvc/shindig/trunk/content/gadgets/compliance/javascript-tests/1.1/suite.xml?rev=1078280&view=auto
==============================================================================
--- shindig/trunk/content/gadgets/compliance/javascript-tests/1.1/suite.xml 
(added)
+++ shindig/trunk/content/gadgets/compliance/javascript-tests/1.1/suite.xml Sat 
Mar  5 12:54:28 2011
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Module specificationVersion="1.1">
+  <ModulePrefs title="OpenSocial JavaScript 1.1 Compliance Tests" 
author="OpenSocial_QA"
+               description="OpenSocial JavaScript 1.1 Compliance Tests">
+    <Require feature="dynamic-height"/>
+    <Require feature="osapi"/>
+    <Require feature="opensocial-data"/>
+    <Require feature="opensocial"/>
+  </ModulePrefs>
+  <Content type="html" scrolling="true">
+    <![CDATA[
+<html>
+  <head>
+  <link rel="stylesheet" href="http://code.jquery.com/qunit/git/qunit.css"; 
type="text/css" media="screen" />
+  <script type="text/javascript" 
src="http://code.jquery.com/jquery-latest.min.js";></script>
+  <script type="text/javascript" 
src="http://code.jquery.com/qunit/git/qunit.js";></script>
+  <script type="text/javascript" src="appdata/appdatasuite.js"></script>
+  <script type="text/javascript" src="people/peoplesuite.js"></script>
+  <script type="text/javascript" src="activities/activitiessuite.js"></script> 
 
+  <script type="text/javascript" src="all.js"></script>
+  
+  
+  <script>
+  
+      gadgets.util.registerOnLoadHandler(function(){
+        runActivitiesSuite();
+        runAppDataSuite();
+        runPeopleSuite();
+        gadgets.window.adjustHeight(3000);
+      });
+
+  </script>
+  </head>
+  
+  <body>
+    <h1 id="qunit-header">OpenSocial JavaScript 1.1 Compliance</h1>
+    <h2 id="qunit-banner"></h2>
+    <div id="qunit-testrunner-toolbar"></div>
+    <h2 id="qunit-userAgent"></h2>
+    <ol id="qunit-tests"></ol>
+    <div id="qunit-fixture">test markup, will be hidden</div>
+  </body>
+</html>
+  
+  
+]]>
+  </Content>
+</Module>


Reply via email to