Author: scottbw
Date: Thu Nov 12 14:27:10 2009
New Revision: 835390

URL: http://svn.apache.org/viewvc?rev=835390&view=rev
Log:
Added automated conformance testing for W3C Widgets: Packaging and 
Configuration; this implements 100 of the 147 tests developed by the W3C team 
(another 47 are placeholders that require further work). Note that I've made a 
small change to the upload results page to make it easier to collect error 
messages. (Thanks to Marcos Caceres for the encouragement!)

Added:
    incubator/wookie/trunk/src-tests/org/apache/wookie/tests/conformance/
    
incubator/wookie/trunk/src-tests/org/apache/wookie/tests/conformance/PackagingAndConfiguration.java
    
incubator/wookie/trunk/src-tests/org/apache/wookie/tests/helpers/WidgetUploader.java
Modified:
    incubator/wookie/trunk/WebContent/admin/uploadresults.jsp

Modified: incubator/wookie/trunk/WebContent/admin/uploadresults.jsp
URL: 
http://svn.apache.org/viewvc/incubator/wookie/trunk/WebContent/admin/uploadresults.jsp?rev=835390&r1=835389&r2=835390&view=diff
==============================================================================
--- incubator/wookie/trunk/WebContent/admin/uploadresults.jsp (original)
+++ incubator/wookie/trunk/WebContent/admin/uploadresults.jsp Thu Nov 12 
14:27:10 2009
@@ -40,12 +40,12 @@
     
     
        <%if(errors!=null){%>
-      <p><img src="../shared/images/cancel.gif" width="16" height="16">There 
was 
+      <p id="error" title="<%=errors%>"><img src="../shared/images/cancel.gif" 
width="16" height="16">There was 
         a problem encountered when trying to upload the package. <br>
         Cause: <font color=red> <%=errors%> </font> </p>
        <%}%>
        <%if(messages!=null){%>
-       <p><img src="../shared/images/greentick.gif" width="16" height="16">
+         <p id="message"><img src="../shared/images/greentick.gif" width="16" 
height="16">
                <font color=green>
                <%=messages%>
                </font>

Added: 
incubator/wookie/trunk/src-tests/org/apache/wookie/tests/conformance/PackagingAndConfiguration.java
URL: 
http://svn.apache.org/viewvc/incubator/wookie/trunk/src-tests/org/apache/wookie/tests/conformance/PackagingAndConfiguration.java?rev=835390&view=auto
==============================================================================
--- 
incubator/wookie/trunk/src-tests/org/apache/wookie/tests/conformance/PackagingAndConfiguration.java
 (added)
+++ 
incubator/wookie/trunk/src-tests/org/apache/wookie/tests/conformance/PackagingAndConfiguration.java
 Thu Nov 12 14:27:10 2009
@@ -0,0 +1,1078 @@
+package org.apache.wookie.tests.conformance;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.io.Reader;
+import java.io.StringReader;
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import org.apache.commons.httpclient.HttpClient;
+import org.apache.commons.httpclient.methods.GetMethod;
+import org.apache.commons.httpclient.methods.PostMethod;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang.StringUtils;
+import org.apache.wookie.tests.functional.AbstractControllerTest;
+import org.apache.wookie.tests.helpers.WidgetUploader;
+import org.jdom.Document;
+import org.jdom.Element;
+import org.jdom.input.SAXBuilder;
+import org.junit.Ignore;
+import org.junit.Test;
+
+/**
+ * Conformance testing for the Packaging and Configuration spec
+ * These are functional tests and need to run against a running Wookie server 
on localhost:8080
+ * You need to be online to run these tests as they download test widgets 
hosted externally.
+ * For more information see 
http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/index.html
+ * 
+ * @author scott
+ *
+ */
+public class PackagingAndConfiguration extends AbstractControllerTest {
+       // 1 files
+       @Test
+       public void b5(){
+               String err = 
processWidgetWithErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-RRZxvvTFHx/000/b5.wgt";);
+               assertFalse(err == null||err.equals(""));
+       }       
+       @Test
+       public void b6(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-RRZxvvTFHx/001/b6.wgt";);
+               String start = locateStartFile(widget);
+               assertEquals("index.html",start);
+       }
+
+       // 2 files
+       @Test
+       public void bg(){
+               String err = 
processWidgetWithErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-dxzVDWpaWg/000/bg.wgt";);
+               assertFalse(err == null||err.equals(""));
+       }       
+
+       @Test
+       public void bh(){
+               String err = 
processWidgetWithErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-dxzVDWpaWg/001/bh.wgt";);
+               assertFalse(err == null||err.equals(""));
+       }       
+
+       // 3 Start files
+       @Test
+       public void taGVVIvsdEUo2(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-GVVIvsdEUo/000/test";);
+               String start = locateStartFile(widget);
+               assertEquals("index.htm",start);
+       }
+       @Test
+       public void taGVVIvsdEUo1(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-GVVIvsdEUo/001/test.html";);
+               String start = locateStartFile(widget);
+               assertEquals("index.htm",start);
+       }
+
+       // 4 MIME
+       @Test
+       public void di(){
+               String err = 
processWidgetWithErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-YrdwUYRXwc/000/di.wgt";);
+               assertFalse(err == null||err.equals(""));
+       }       
+
+       // 5 bad magic number
+       @Test
+       public void dk(){
+               String err = 
processWidgetWithErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-qxLSCRCHlN/000/dk.wgt";);
+               assertFalse(err == null||err.equals(""));
+       }       
+
+       // 6 start files
+       @Test
+       public void taFDGQBROtzW0(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-FDGQBROtzW/000/test.test";);
+               String start = locateStartFile(widget);
+               assertEquals("index.htm",start);
+       }
+       @Test
+       public void taFDGQBROtzW1(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-FDGQBROtzW/001/test";);
+               String start = locateStartFile(widget);
+               assertEquals("index.htm",start);
+       }
+
+
+       // 7
+       @Test
+       public void dl(){
+               String err = 
processWidgetWithErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-uLHyIMvLwz/000/dl.wgt";);
+               assertFalse(err == null||err.equals(""));
+       }       
+       @Test
+       public void split(){
+               String err = 
processWidgetWithErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-uLHyIMvLwz/001/split.wgt.001";);
+               assertFalse(err == null||err.equals(""));
+       }       
+       @Test
+       public void dp(){
+               String err = 
processWidgetWithErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-uLHyIMvLwz/002/dp.wgt";);
+               assertFalse(err == null||err.equals(""));
+       }
+       // 8 defaults
+       @Test 
+       @Ignore
+       public void ds(){
+               // Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-klLDaEgJeU/002/bv.wgt";);
+               // TODO 
+               // To pass, author email must be null, 
+               // author href must be null, 
+               // author name must be null, 
+               // feature list must be empty (null)
+               // icons must be null, 
+               // start file encoding must be UTF-8, 
+               // start file content-type must be text/html, 
+               // widget config doc must be 'config.xml' at the root of the 
widget package, 
+               // widget description must be null, 
+               // widget height must be null, 
+               // widget id must be null, 
+               // widget license must be null, 
+               // widget license file must be null, 
+               // widget license href must be null, 
+               // widget name must be null, 
+               // widget preferences must be null, 
+               // widget short name must be null, 
+               // widget version must be null, 
+               // widget width must be null, 
+               // widget window modes must a list with one entry whose value 
is 'floating', 
+               // widget start file must be index.htm at the root of the 
widget, 
+               // user agent locales must contain at least one item whose 
value is 'en' 
+       }
+
+       // 9 config.xml
+       @Test
+       public void dq(){
+               String err = 
processWidgetWithErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-ZjcdAxFMSx/000/dq.wgt";);
+               assertFalse(err == null||err.equals(""));
+       }
+       @Test
+       public void dw(){
+               String err = 
processWidgetWithErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-ZjcdAxFMSx/001/dw.wgt";);
+               assertFalse(err == null||err.equals(""));
+       }
+
+       // 10 xml
+       @Test
+       public void bt(){
+               String err = 
processWidgetWithErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-klLDaEgJeU/000/bt.wgt";);
+               assertFalse(err == null||err.equals(""));
+       }
+       @Test
+       public void bu(){
+               String err = 
processWidgetWithErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-klLDaEgJeU/001/bu.wgt";);
+               assertFalse(err == null||err.equals(""));
+       }
+
+       @Test 
+       public void bv(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-klLDaEgJeU/002/bv.wgt";);
+               String start = locateStartFile(widget);
+               assertEquals("pass&.html",start);
+       }
+       @Test
+       @Ignore
+       public void bw(){
+               //Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-klLDaEgJeU/003/bw.wgt";);
+               // TODO include author in metadata generated from REST API
+               // assertEquals("PASS", widget.getChild("author").getText());
+       }
+       // 11 widget
+       @Test
+       public void aa(){
+               String err = 
processWidgetWithErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-ACCJfDGwDQ/000/aa.wgt";);
+               assertTrue(err.contains("bad namespace"));
+       }
+       @Test
+       public void ab(){
+               String err = 
processWidgetWithErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-ACCJfDGwDQ/001/ab.wgt";);
+               assertTrue(err.contains("bad namespace"));
+       }
+       @Test
+       public void ac(){
+               String err = 
processWidgetWithErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-ACCJfDGwDQ/002/ac.wgt";);
+               assertTrue(err.contains("bad namespace"));
+       }
+
+       // 12 id
+       @Test
+       public void b1(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-RawAIWHoMs/000/b1.wgt";);
+               assertEquals("pass:", widget.getAttributeValue("identifier"));
+       }
+       @Test
+       public void rd(){
+               // We can't allow null ids, we use generated IDs where they 
aren't valid
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-RawAIWHoMs/001/rd.wgt";);
+               
assertTrue(widget.getAttributeValue("identifier").contains("generated"));
+       }
+       @Test
+       public void b2(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-RawAIWHoMs/002/b2.wgt";);
+               assertEquals("pass:", widget.getAttributeValue("identifier"));
+
+       }
+
+       // 13 Version
+
+       @Test
+       public void cf(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-VerEfVGeTc/000/cf.wgt";);
+               assertEquals("PASS", widget.getAttributeValue("version"));
+       }
+       @Test
+       public void cg(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-VerEfVGeTc/001/cg.wgt";);
+               assertEquals("", widget.getAttributeValue("version"));
+       }
+       @Test
+       public void ch(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-VerEfVGeTc/002/ch.wgt";);
+               assertEquals("PASS", widget.getAttributeValue("version"));
+       }
+
+
+       // 14  Height
+
+       @Test
+       public void ax(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-BxjoiWHaMr/000/ax.wgt";);
+               assertEquals("1234", getWidgetHeight(widget));
+       }
+       @Test
+       public void ay(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-BxjoiWHaMr/001/ay.wgt";);
+               assertEquals("0", getWidgetHeight(widget));
+       }
+       @Test
+       public void az(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-BxjoiWHaMr/002/az.wgt";);
+               assertEquals("100", getWidgetHeight(widget));
+       }
+       @Test
+       public void a1(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-BxjoiWHaMr/003/a1.wgt";);
+               assertEquals("123", getWidgetHeight(widget));
+       }
+       @Test
+       public void a2(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-BxjoiWHaMr/004/a2.wgt";);
+               assertEquals("", getWidgetHeight(widget));
+       }
+       @Test
+       public void a3(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-BxjoiWHaMr/005/a3.wgt";);
+               assertEquals("", getWidgetHeight(widget));
+       }
+       @Test
+       public void a4(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-BxjoiWHaMr/006/a4.wgt";);
+               assertEquals("0", getWidgetHeight(widget));
+       }       
+       // 15 Width
+
+       @Test
+       public void c9(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-UScJfQHPPy/000/c9.wgt";);
+               assertEquals("0", getWidgetWidth(widget));
+       }
+       @Test
+       public void cq(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-UScJfQHPPy/001/cq.wgt";);
+               assertEquals("1234", getWidgetWidth(widget));
+       }
+       @Test
+       public void cw(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-UScJfQHPPy/002/cw.wgt";);
+               assertEquals("100", getWidgetWidth(widget));
+       }
+       @Test
+       public void ce(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-UScJfQHPPy/003/ce.wgt";);
+               assertEquals("123", getWidgetWidth(widget));
+       }
+       @Test
+       public void cr(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-UScJfQHPPy/004/cr.wgt";);
+               assertEquals("", getWidgetWidth(widget));
+       }
+       @Test
+       public void ct(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-UScJfQHPPy/005/ct.wgt";);
+               assertEquals("", getWidgetWidth(widget));
+       }
+       @Test
+       public void cy(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-UScJfQHPPy/006/cy.wgt";);
+               assertEquals("0", getWidgetWidth(widget));
+       }
+
+
+       // 16 empty widget config
+
+       @Test
+       public void d3(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-MFcsScFEaC/000/d3.wgt";);
+               String start = locateStartFile(widget);
+               assertEquals("index.htm",start);
+       }
+
+       // 17 Title
+
+       @Test
+       public void bx(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-LYLMhryBBT/000/bx.wgt";);
+               assertEquals("PASS", getWidgetTitle(widget));
+       }
+
+       @Test
+       public void by(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-LYLMhryBBT/001/by.wgt";);
+               assertEquals("", getWidgetTitle(widget));
+       }
+
+       @Test
+       public void bz(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-LYLMhryBBT/002/bz.wgt";);
+               assertEquals("PASS", getWidgetTitle(widget));
+       }
+
+       // 18 Title
+
+       @Test
+       public void ao(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-AYLMhryBnD/000/ao.wgt";);
+               assertEquals("PASS", getWidgetTitle(widget));
+       }
+
+       @Test
+       public void ap(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-AYLMhryBnD/001/ap.wgt";);
+               assertEquals("P A S S", getWidgetTitle(widget));
+       }
+
+       @Test
+       public void aq(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-AYLMhryBnD/002/aq.wgt";);
+               assertEquals("PASS", getWidgetTitle(widget));
+       }
+
+       @Test
+       public void ar(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-AYLMhryBnD/003/ar.wgt";);
+               assertEquals("PASS", getWidgetShortName(widget));
+       }
+
+       @Test
+       public void as(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-AYLMhryBnD/004/as.wgt";);
+               assertEquals("PASS", getWidgetTitle(widget));
+               assertEquals("PASS", getWidgetShortName(widget));
+       }
+
+       @Test
+       public void at(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-AYLMhryBnD/005/at.wgt";);
+               assertEquals("PASS", getWidgetTitle(widget));
+               assertEquals("PASS", getWidgetShortName(widget));
+       }
+
+       @Test
+       public void au(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-AYLMhryBnD/006/au.wgt";);
+               assertEquals("", getWidgetShortName(widget));
+       }
+
+       @Test
+       public void av(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-AYLMhryBnD/007/av.wgt";);
+               assertEquals("", getWidgetTitle(widget));
+       }
+
+       @Test
+       public void oa(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-AYLMhryBnD/008/oa.wgt";);
+               assertEquals("PASS", getWidgetTitle(widget));
+       }
+
+       // 19 Description
+
+       @Test
+       public void c6(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-UEMbyHERkI/000/c6.wgt";);
+               assertEquals("PASS",  widget.getChild("description").getText());
+       }
+       @Test
+       public void c7(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-UEMbyHERkI/001/c7.wgt";);
+               assertEquals("",  widget.getChild("description").getText());
+       }
+       @Test
+       public void rb(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-UEMbyHERkI/002/rb.wgt";);
+               assertEquals("PASS",  widget.getChild("description").getText());
+       }
+       @Test
+       public void c8(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-UEMbyHERkI/003/c8.wgt";);
+               assertEquals("PASS", widget.getChild("description").getText());
+       }
+
+       // 20 Description
+       @Test
+       public void cp(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-VdCEyDVSA/000/cp.wgt";);
+               assertEquals("PASS",  widget.getChild("description").getText());
+       }
+       @Test
+       public void ca(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-VdCEyDVSA/001/ca.wgt";);
+               assertEquals("PASS",  widget.getChild("description").getText());
+       }
+       @Test
+       public void cs(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-VdCEyDVSA/002/cs.wgt";);
+               assertEquals("",  widget.getChild("description").getText());
+       }
+       @Test
+       public void cd(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-VdCEyDVSA/003/cd.wgt";);
+               assertEquals("P A S S",  
widget.getChild("description").getText());
+       }
+       @Test
+       public void x1(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-VdCEyDVSA/004/x1.wgt";);
+               assertEquals("PASS",  widget.getChild("description").getText());
+       }
+       @Test
+       public void x2(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-VdCEyDVSA/005/x2.wgt";);
+               assertEquals("PASS",  widget.getChild("description").getText());
+       }
+
+       // 21 License TODO can't test without license exposed in metadata
+       @Test
+       @Ignore
+       public void cu(){
+               
+       }
+       @Test
+       @Ignore
+       public void ci(){
+               
+       }
+       @Test
+       @Ignore
+       public void ra(){
+               
+       }
+       @Test
+       @Ignore
+       public void co(){
+               
+       }
+       
+       
+       // 22 License TODO can't test without license exposed in metadata
+       @Test
+       @Ignore
+       public void cj(){
+               
+       }
+       @Test
+       @Ignore
+       public void ck(){
+               
+       }
+       @Test
+       @Ignore
+       public void cl(){
+               
+       }
+       @Test
+       @Ignore
+       public void cz(){
+               
+       }
+       @Test
+       @Ignore
+       public void cx(){
+               
+       }
+
+       // 23 Icon
+       @Test
+       public void d1(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-iipTwNshRg/000/d1.wgt";);
+               assertEquals("icon.png",getIcon(widget));
+       }
+
+       // 24 Icon
+       @Test
+       public void d2(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-roCaKRxZhS/000/d2.wgt";);
+               assertEquals("icon.png",getIcon(widget));
+       }
+
+       // 25-28 IGNORE
+
+       // 29 Author
+       @Test
+       @Ignore
+       public void b7(){
+               // TODO can't test without author exposed in metadata
+       }
+       @Test
+       @Ignore
+       public void b8(){
+               // TODO can't test without author exposed in metadata
+       }
+       @Test
+       @Ignore
+       public void b9(){
+               // TODO can't test without author exposed in metadata
+       }
+
+       // 30 Author  
+       @Test
+       @Ignore
+       public void af(){
+               // TODO can't test without author exposed in metadata
+       }
+       @Test
+       @Ignore
+       public void ag(){
+               // TODO can't test without author exposed in metadata
+       }
+       @Test
+       @Ignore
+       public void ah(){
+               // TODO can't test without author exposed in metadata
+       }
+       @Test
+       @Ignore
+       public void ai(){
+               // TODO can't test without author exposed in metadata
+       }
+       @Test
+       @Ignore
+       public void aj(){
+               // TODO can't test without author exposed in metadata
+       }
+       @Test
+       @Ignore
+       public void ak(){
+               // TODO can't test without author exposed in metadata
+       }
+       @Test
+       @Ignore
+       public void al(){
+               // TODO can't test without author exposed in metadata   
+       }
+       @Test
+       @Ignore
+       public void am(){
+               // TODO can't test without author exposed in metadata   
+       }
+       @Test
+       @Ignore
+       public void an(){
+               // TODO can't test without author exposed in metadata
+       }
+
+       // 31 Preference
+       @Test
+       public void a5(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-DwhJBIJRQN/000/a5.wgt";);
+               assertTrue(widget.getChildren("preference") == null || 
widget.getChildren("preference").size() == 0);
+       }
+
+       @Test
+       @Ignore
+       public void a6(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-DwhJBIJRQN/001/a6.wgt";);
+               System.out.println(widget.getChildren("preference"));
+               assertTrue(widget.getChildren("preference").size() == 1);
+               assertEquals("PASS", 
widget.getChild("preference").getAttributeValue("name"));
+               assertEquals("PASS", 
widget.getChild("preference").getAttributeValue("value")); //TODO
+               assertEquals("false", 
widget.getChild("preference").getAttributeValue("readonly"));//TODO
+       }               
+       @Test
+       @Ignore
+       public void a7(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-DwhJBIJRQN/002/a7.wgt";);
+               System.out.println(widget.getChildren("preference"));
+               assertTrue(widget.getChildren("preference").size() == 1);
+               assertEquals("PASS", 
widget.getChild("preference").getAttributeValue("name"));
+               assertEquals("PASS", 
widget.getChild("preference").getAttributeValue("value")); //TODO
+               assertEquals("false", 
widget.getChild("preference").getAttributeValue("readonly"));//TODO
+       }                       
+       @Test
+       @Ignore
+       public void a8(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-DwhJBIJRQN/003/a8.wgt";);
+               System.out.println(widget.getChildren("preference"));
+               assertTrue(widget.getChildren("preference").size() == 1);
+               assertEquals("PASS", 
widget.getChild("preference").getAttributeValue("name"));
+               assertEquals("PASS", 
widget.getChild("preference").getAttributeValue("value")); //TODO
+               assertEquals("false", 
widget.getChild("preference").getAttributeValue("readonly"));//TODO
+       }       
+       @Test
+       @Ignore
+       public void a9(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-DwhJBIJRQN/004/a9.wgt";);
+               System.out.println(widget.getChildren("preference"));
+               assertTrue(widget.getChildren("preference").size() == 1);
+               assertEquals("PASS", 
widget.getChild("preference").getAttributeValue("name"));
+               assertEquals("PASS", 
widget.getChild("preference").getAttributeValue("value")); //TODO
+               assertEquals("false", 
widget.getChild("preference").getAttributeValue("readonly"));//TODO
+       }       
+       @Test
+       @Ignore
+       public void ba(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-DwhJBIJRQN/005/ba.wgt";);
+               System.out.println(widget.getChildren("preference"));
+               assertTrue(widget.getChildren("preference").size() == 1);
+               assertEquals("a", 
widget.getChild("preference").getAttributeValue("name"));
+               assertEquals("a", 
widget.getChild("preference").getAttributeValue("value")); //TODO
+               assertEquals("false", 
widget.getChild("preference").getAttributeValue("readonly"));//TODO
+       }
+       @Test
+       @Ignore
+       public void bb(){
+       }
+       @Test
+       @Ignore
+       public void bc(){
+       }
+       @Test
+       @Ignore
+       public void bd(){
+       }
+       @Test
+       @Ignore
+       public void be(){
+       }
+       @Test
+       @Ignore
+       public void bf(){
+       }
+
+       // 32
+       @Test
+       public void bq(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-hkWmGJgfve/000/bq.wgt";);
+               String start = locateStartFile(widget);
+               assertEquals("pass.html",start);
+       }
+       @Test
+       public void br(){
+               String err = 
processWidgetWithErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-hkWmGJgfve/001/br.wgt";);
+               assertFalse(err == null||err.equals(""));
+       }       
+       @Test
+       public void bs(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-hkWmGJgfve/002/bs.wgt";);
+               String start = locateStartFile(widget);
+               assertEquals("pass.html",start);
+       }
+
+       //33
+       @Test
+       public void dz(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-UJGJCaaFLT/000/dz.wgt";);
+               String start = locateStartFile(widget);
+               assertEquals("pass.html",start);
+       }
+       @Test
+       public void da(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-UJGJCaaFLT/001/da.wgt";);
+               String start = locateStartFile(widget);
+               assertEquals("pass.html",start);
+       }
+       //34
+       @Test
+       public void d7(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-LTUJGJFCOU/000/d7.wgt";);
+               String start = locateStartFile(widget);
+               assertEquals("index.htm",start);
+       }
+       @Test
+       public void d8(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-LTUJGJFCOU/001/d8.wgt";);
+               String start = locateStartFile(widget);
+               assertEquals("index.htm",start);
+       }
+       //35
+       @Test
+       public void db(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-pIffQywZin/000/db.wgt";);
+               String start = locateStartFile(widget);
+               assertEquals("index.htm",start);
+       }
+       //36
+       @Test
+       public void d9(){
+               String err = 
processWidgetWithErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-LQcjNKBLUZ/000/d9.wgt";);
+               assertFalse(err == null||err.equals(""));
+       }       
+       @Test
+       public void d0(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-LQcjNKBLUZ/001/d0.wgt";);
+               String start = locateStartFile(widget);
+               assertEquals("index.htm",start);
+       }
+
+       //37
+       @Test
+       @Ignore
+       public void dc(){
+               // TODO needs to test start file location
+       }
+       @Test
+       public void dv(){
+               String err = 
processWidgetWithErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-paIabGIIMC/001/dv.wgt";);
+               assertFalse(err == null||err.equals(""));
+       }       
+
+       // 38 Start File Encoding
+       @Test
+       @Ignore
+       public void e4(){
+               // TODO needs to test start file encoding
+       }
+       @Test
+       @Ignore
+       public void e5(){
+               // TODO needs to test start file encoding
+       }
+       @Test
+       @Ignore
+       public void e6(){
+               // TODO needs to test start file encoding
+       }
+       @Test
+       @Ignore
+       public void e7(){
+               // TODO needs to test start file encoding
+       }
+
+       //39
+       @Test
+       @Ignore
+       public void e1(){
+               // TODO needs to test features
+       }
+       //40
+       @Test
+       @Ignore
+       public void df(){
+               // TODO needs to test features
+       }
+       @Test
+       @Ignore
+       public void dr(){
+               // TODO needs to test features
+       }
+
+       //41
+       @Test
+       public void d4(){
+               String err = 
processWidgetWithErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-paWbGHyVrG/000/d4.wgt";);
+               assertFalse(err == null||err.equals(""));
+       }       
+       //42
+       @Test
+       public void e8(){
+               String err = 
processWidgetWithErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-vOBaOcWfll/000/e8.wgt";);
+               assertFalse(err == null||err.equals(""));
+       }       
+       //43
+       @Test
+       @Ignore
+       public void d5(){
+               // TODO needs to test features
+       }
+       //44
+       @Test
+       @Ignore
+       public void dt(){
+               // TODO needs to test features
+       }
+       @Test
+       @Ignore
+       public void dg(){
+               // TODO needs to test features
+       }       
+       //45
+       @Test
+       @Ignore
+       public void d6(){
+               // TODO needs to test features
+       }
+
+       // 46 Feature
+       @Test
+       @Ignore
+       public void e2(){
+               // TODO needs to test features
+       }
+       @Test
+       @Ignore
+       public void e3(){
+               // TODO needs to test features
+       }
+
+       //47 Start file and icons
+       @Test
+       public void aw(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-BnWPqNvNVo/000/aw.wgt";);
+               String start = locateStartFile(widget);
+               assertEquals("pass.html",start);
+               assertEquals("icon.png",getIcon(widget));
+       }
+
+       //48  Start file
+       @Test
+       public void cc(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-RGNHRBWNZV/008/cc.wgt";);
+               String start = locateStartFile(widget);
+               assertEquals("index.htm",start);
+       }
+       @Test
+       public void cv(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-RGNHRBWNZV/009/cv.wgt";);
+               String start = locateStartFile(widget);
+               assertEquals("index.html",start);
+       }
+       @Test
+       public void b3(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-RGNHRBWNZV/000/b3.wgt";);
+               String start = locateStartFile(widget);
+               assertEquals("index.htm",start);
+               assertEquals("text/html",getStartFileContentType(widget));
+       }
+       @Test
+       public void b4(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-RGNHRBWNZV/001/b4.wgt";);
+               String start = locateStartFile(widget);
+               assertEquals("index.htm",start);
+               assertEquals("text/html",getStartFileContentType(widget));
+       }
+       @Test
+       public void b0(){
+               String err = 
processWidgetWithErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-RGNHRBWNZV/002/b0.wgt";);
+               assertFalse(err == null||err.equals(""));
+       }       
+       @Test
+       public void c1(){
+               String err = 
processWidgetWithErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-RGNHRBWNZV/003/c1.wgt";);
+               assertFalse(err == null||err.equals(""));
+       }       
+       @Test
+       public void c2(){
+               String err = 
processWidgetWithErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-RGNHRBWNZV/004/c2.wgt";);
+               assertFalse(err == null||err.equals(""));
+       }       
+       @Test
+       public void c3(){
+               String err = 
processWidgetWithErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-RGNHRBWNZV/005/c3.wgt";);
+               assertFalse(err == null||err.equals(""));
+       }       
+       @Test
+       public void c4(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-RGNHRBWNZV/006/c4.wgt";);
+               String start = locateStartFile(widget);
+               assertEquals("index.html",start);
+       }
+       @Test
+       public void c5(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-RGNHRBWNZV/007/c5.wgt";);
+               String start = locateStartFile(widget);
+               assertEquals("index.html",start);
+       }
+       // 49 Icons
+       @Test
+       public void bj(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-FAFYMEGELU/000/bj.wgt";);
+               assertEquals("icon.png",getIcon(widget));       
+       }
+       @Test
+       public void bk(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-FAFYMEGELU/001/bk.wgt";);
+               assertEquals("locales/en/icon.png",getIcon(widget));    
+       }
+       @Test
+       public void bl(){
+               //Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-FAFYMEGELU/002/bl.wgt";);
+               // TODO requires an icons list = we just currently have one 
icon.
+               fail("multiple icons not supported");
+       }
+       @Test
+       public void bm(){
+               //Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-FAFYMEGELU/003/bm.wgt";);
+               // TODO requires an icons list = we just currently have one 
icon.
+               fail("multiple icons not supported");
+       }
+       @Test
+       public void bn(){
+               //Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-FAFYMEGELU/004/bn.wgt";);
+               // TODO requires an icons list = we just currently have one 
icon.
+               fail("multiple icons not supported");
+       }
+       @Test
+       public void bo(){
+               //Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-FAFYMEGELU/005/bo.wgt";);
+               // TODO requires an icons list = we just currently have one 
icon.
+               fail("multiple icons not supported");
+       }
+       @Test
+       public void bp(){
+               //Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-FAFYMEGELU/006/bp.wgt";);
+               // TODO requires an icons list = we just currently have one 
icon.
+               fail("multiple icons not supported");
+       }
+       @Test
+       public void ad(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-FAFYMEGELU/007/ad.wgt";);
+               assertEquals("icon.png",getIcon(widget));       }
+       @Test
+       public void ae(){
+               Element widget = 
processWidgetNoErrors("http://samaxes.svn.beanstalkapp.com/widgets_compatibility_matrix/trunk/test-cases/ta-FAFYMEGELU/008/ae.wgt";);
+               assertEquals("locales/en/icon.png",getIcon(widget));
+       }
+
+       // Utility methods
+       private Element processWidgetNoErrors(String widgetfname){
+               try {
+                       //File file = new 
File("src-tests/testdata/conformance/"+widgetfname);
+                       String error = WidgetUploader.uploadWidget(widgetfname);
+                       if (error != null){
+                               fail("widget failed to upload 
correctly:"+error);
+                       }
+                       Element widget = WidgetUploader.getLastWidget();
+                       assertNotNull(widget);
+                       return widget;
+               } catch (Exception e) {
+                       //e.printStackTrace();
+                       fail("couldn't upload widget");
+               }               
+               fail("widget not found after upload");
+               return null;
+       }
+
+       private String instantiateWidget(Element widget){
+               String response = null;
+               String widgetUri = widget.getAttributeValue("identifier");
+               // instantiate widget and parse results
+               try {
+                       HttpClient client = new HttpClient();
+                       PostMethod post = new 
PostMethod(TEST_INSTANCES_SERVICE_URL_VALID);
+                       
post.setQueryString("api_key="+API_KEY_VALID+"&widgetid="+widgetUri+"&userid=test&shareddatakey=test");
+                       client.executeMethod(post);
+                       response = 
IOUtils.toString(post.getResponseBodyAsStream());
+                       post.releaseConnection();
+               }
+               catch (Exception e) {
+                       //e.printStackTrace();
+                       fail("failed to instantiate widget");
+               }
+               return response;                
+       }
+
+       private String getStartFile(String response){
+               SAXBuilder builder = new SAXBuilder();
+               Reader in = new StringReader(response);
+               Document doc;
+               try {
+                       doc = builder.build(in);
+               } catch (Exception e) {
+                       return null;
+               } 
+               return doc.getRootElement().getChild("url").getText();
+       }
+
+       private String getStartFileContentType(Element widget){
+               String response = instantiateWidget(widget);
+               String startFile = getStartFile(response);
+               // Download and check content-type
+               try {
+                       HttpClient client = new HttpClient();
+                       GetMethod get = new GetMethod(startFile);
+                       client.executeMethod(get);
+                       int code = get.getStatusCode();
+                       assertEquals(200,code);
+                       get.releaseConnection();
+                       return get.getResponseHeader("CONTENT-TYPE").getValue();
+               }
+               catch (Exception e) {
+                       //e.printStackTrace();
+                       fail("failed to get start file");
+               }
+               return null;
+       }
+
+       private String locateStartFile(Element widget){
+
+               String response = instantiateWidget(widget);
+               String start = getStartFile(response);
+
+               // split off the end file name
+               // http://localhost:8080/wookie/wservices/ + uid + / + name + 
?idkey=...
+               URL url;
+               try {
+                       url = new URL(start);
+               } catch (MalformedURLException e) {
+                       return null;
+               }
+               String[] parts = url.getPath().split("/");
+               start = parts[parts.length-1];
+               return start;
+       }
+
+       private String processWidgetWithErrors(String widgetfname){
+               try {
+                       return WidgetUploader.uploadWidget(widgetfname);
+               } catch (Exception e) {
+                       e.printStackTrace();
+                       fail("couldn't upload widget");
+               }               
+               fail("widget not found after upload");
+               return null;            
+       }
+
+       private String getIcon(Element widget){
+               String icon = null;
+               // split off the end icon path
+               // http://localhost:8080/wookie/wservices/ + uid + / 
+               String baseUrl = 
"http://localhost:8080/wookie/wservices/"+widget.getAttributeValue("identifier")+"/";
+               String iconUrl = widget.getChild("icon").getText();
+               icon = StringUtils.difference(baseUrl,iconUrl);
+               return icon;
+       }
+
+       private String getWidgetShortName(Element widget){
+               return widget.getChild("title").getAttributeValue("short");
+       }
+
+       private String getWidgetTitle(Element widget){
+               return widget.getChild("title").getText();
+       }
+
+       private String getWidgetWidth(Element widget){
+               return widget.getAttributeValue("width");
+       }
+       private String getWidgetHeight(Element widget){
+               return widget.getAttributeValue("height");
+       }
+
+}

Added: 
incubator/wookie/trunk/src-tests/org/apache/wookie/tests/helpers/WidgetUploader.java
URL: 
http://svn.apache.org/viewvc/incubator/wookie/trunk/src-tests/org/apache/wookie/tests/helpers/WidgetUploader.java?rev=835390&view=auto
==============================================================================
--- 
incubator/wookie/trunk/src-tests/org/apache/wookie/tests/helpers/WidgetUploader.java
 (added)
+++ 
incubator/wookie/trunk/src-tests/org/apache/wookie/tests/helpers/WidgetUploader.java
 Thu Nov 12 14:27:10 2009
@@ -0,0 +1,153 @@
+package org.apache.wookie.tests.helpers;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.Reader;
+import java.io.StringReader;
+import java.util.List;
+
+import org.apache.commons.httpclient.HttpClient;
+import org.apache.commons.httpclient.UsernamePasswordCredentials;
+import org.apache.commons.httpclient.auth.AuthScope;
+import org.apache.commons.httpclient.methods.GetMethod;
+import org.apache.commons.httpclient.methods.PostMethod;
+import org.apache.commons.httpclient.methods.multipart.FilePart;
+import org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity;
+import org.apache.commons.httpclient.methods.multipart.Part;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.IOUtils;
+import org.htmlcleaner.HtmlCleaner;
+import org.htmlcleaner.TagNode;
+import org.jdom.Document;
+import org.jdom.Element;
+import org.jdom.input.SAXBuilder;
+
+/**
+ * Helper class for uploading widgets and gathering any errors generated
+ * @author scott
+ *
+ */
+public class WidgetUploader {
+       
+       public static final String SERVICE_URL = 
"http://localhost:8080/wookie/admin/WidgetAdminServlet?operation=UPLOADWIDGET";;
+
+       /**
+        * Upload a widget from a file at a given URL
+        * @param url
+        * @return
+        * @throws IOException
+        */
+       public static String uploadWidget(String url) throws IOException{
+               HttpClient httpclient = new HttpClient();
+               GetMethod get = new GetMethod(url);
+               int status = httpclient.executeMethod(get);
+               if (status != 200){
+                       fail("problem with download:"+url);
+               }
+               File file = File.createTempFile("w3c", ".wgt");
+               FileUtils.writeByteArrayToFile(file, 
IOUtils.toByteArray(get.getResponseBodyAsStream()));
+               get.releaseConnection();
+               return uploadWidget(file);              
+       }
+       
+       /**
+        * Upload a widget
+        * @param file
+        * @return
+        * @throws IOException
+        */
+       public static String uploadWidget(File file) throws IOException{
+               HttpClient httpclient = new HttpClient();
+               httpclient.getState().setCredentials(
+                                new AuthScope("localhost", 8080, "wookie"),
+                                new UsernamePasswordCredentials("java", "java")
+                                );
+               PostMethod post = new PostMethod(SERVICE_URL);
+               Part[] parts = { new FilePart(file.getName(), file) };
+               post.setRequestEntity(new MultipartRequestEntity(parts, post
+                               .getParams()));
+               int status = httpclient.executeMethod(post);
+               if (status != 200 && status != 201){
+                       fail("problem with upload");
+               }
+               String response = 
IOUtils.toString(post.getResponseBodyAsStream());
+               post.releaseConnection();
+               return getError(response);
+       }
+       
+       private static String getError(String response) throws IOException{
+               String error = null;
+               HtmlCleaner cleaner = new HtmlCleaner();
+               TagNode html = cleaner.clean(response);
+               TagNode errortag = html.findElementByAttValue("id", "error", 
true, true);
+               if (errortag != null){
+                       error = errortag.getAttributeByName("title");
+               }
+               return error;
+       }
+       
+       /**
+        * Get the current set of installed widgets
+        * @return
+        */
+       @SuppressWarnings("unchecked")
+       public static Element[] getWidgets(){
+           try {
+               HttpClient client = new HttpClient();
+               GetMethod get = new 
GetMethod("http://localhost:8080/wookie/widgets?all=true";);
+               client.executeMethod(get);
+               int code = get.getStatusCode();
+               assertEquals(200,code);
+               String response = 
IOUtils.toString(get.getResponseBodyAsStream());
+               
+               get.releaseConnection();
+               
+                       SAXBuilder builder = new SAXBuilder();
+                       Reader in = new StringReader(response);
+                       try {
+                               Document doc = builder.build(in);
+                               List widgets = 
doc.getRootElement().getChildren("widget");
+                               if (widgets != null){
+                                       return (Element[])widgets.toArray(new 
Element[widgets.size()]);
+                               }
+                       } catch (Exception e) {
+                               //e.printStackTrace();
+                               fail("Bad XML returned by server");
+                               return null;
+                       } 
+           }
+           catch (Exception e) {
+               //e.printStackTrace();
+               fail("get failed");
+           }
+               return null;            
+       }
+
+       /**
+        * Get a specific widget by its URI
+        * @param uid
+        * @return
+        */
+       public static Element getWidget(String uri){
+               Element[] widgets = getWidgets();
+               if (widgets == null) return  null;
+               for (Element widget:widgets){
+                       if (widget.getAttributeValue("identifier").equals(uri)) 
return widget;
+               }
+               return null;
+       }
+       
+       /**
+        * Get the last installed widget
+        * @return
+        */
+       public static Element getLastWidget(){
+               Element[] widgets = getWidgets();
+               if (widgets == null) return  null;
+               return widgets[widgets.length-1];
+       }
+
+}


Reply via email to