Trying to work on getting xml backed stuff working; next challenge, lists (and arrays)

diff --git a/build-test.xml b/build-test.xml
index 5884d68..929cc20 100644
--- a/build-test.xml
+++ b/build-test.xml
@@ -132,8 +132,6 @@
             <batchtest fork="no" todir="${dir.test.xmlresults}">
                 <fileset dir="${dir.test.classes}">
                     <exclude name="**/*$*.class"/>
-                    <include name="org/codehaus/jackson/map/ext/Test*.class"/>
-                    <include name="org/codehaus/jackson/map/xml/Test*.class"/>
                     <!-- 25-Nov-2009, tatu: Argh. Looks like classloading
                         is problematic for this test; works when run
                         separately as single test... but not in sequence
@@ -159,6 +157,7 @@
             <batchtest fork="no" todir="${dir.test.xmlresults}">
                 <fileset dir="${dir.test.classes}">
                     <exclude name="**/*$*.class"/>
+                    <exclude name="org/codehaus/jackson/xml/XmlTestBase.class"/>
                     <include name="org/codehaus/jackson/jaxrs/*.class"/>
                     <include name="org/codehaus/jackson/xml/*.class"/>
                 </fileset>
diff --git a/src/test/org/codehaus/jackson/xml/TestDeserialization.java b/src/test/org/codehaus/jackson/xml/TestDeserialization.java
index ca36058..331b25f 100644
--- a/src/test/org/codehaus/jackson/xml/TestDeserialization.java
+++ b/src/test/org/codehaus/jackson/xml/TestDeserialization.java
@@ -1,7 +1,23 @@
 package org.codehaus.jackson.xml;
 
+import java.util.ArrayList;
+import java.util.List;
+
+import org.codehaus.jackson.xml.annotate.JacksonXmlProperty;
+
 public class TestDeserialization extends main.BaseTest
 {
+    static class AttributeBean
+    {
+        @JacksonXmlProperty(isAttribute=true, localName="attr")
+        public String text = "?";
+    }
+
+    static class ListBean
+    {
+        public final List<Integer> values = new ArrayList<Integer>();
+    }
+    
     /*
     /**********************************************************
     /* Unit tests
@@ -21,4 +37,26 @@
         FiveMinuteUser result = mapper.readValue(xml, FiveMinuteUser.class);
         assertEquals(user, result);
     }
+
+    public void testFromAttribute() throws Exception
+    {
+        XmlMapper mapper = new XmlMapper();
+        AttributeBean bean = mapper.readValue("<AttributeBean attr=\"abc\"></AttributeBean>", AttributeBean.class);
+        assertNotNull(bean);
+        assertEquals("abc", bean.text);
+    }
+
+    public void testListBean() throws Exception
+    {
+        XmlMapper mapper = new XmlMapper();
+        ListBean bean = mapper.readValue(
+                "<ListBean><values><values>1</values><values>2</values><values>3</values></values></ListBean>",
+                ListBean.class);
+        assertNotNull(bean);
+        assertNotNull(bean.values);
+        assertEquals(3, bean.values.size());
+        assertEquals(Integer.valueOf(1), bean.values.get(0));
+        assertEquals(Integer.valueOf(2), bean.values.get(1));
+        assertEquals(Integer.valueOf(3), bean.values.get(2));
+    }
 }
diff --git a/src/test/org/codehaus/jackson/xml/TestSerialization.java b/src/test/org/codehaus/jackson/xml/TestSerialization.java
index 3b9d39e..e40b3af 100644
--- a/src/test/org/codehaus/jackson/xml/TestSerialization.java
+++ b/src/test/org/codehaus/jackson/xml/TestSerialization.java
@@ -4,9 +4,14 @@
 
 //import org.codehaus.jackson.xc.JaxbAnnotationIntrospector;
 
+import java.io.*;
+import java.util.*;
+
+import javax.xml.bind.JAXB;
+
 import org.codehaus.jackson.xml.annotate.JacksonXmlProperty;
 
-public class TestSerialization extends BaseXmlTest
+public class TestSerialization extends XmlTestBase
 {
     static class StringBean
     {
@@ -31,6 +36,18 @@
         @JacksonXmlProperty(isAttribute=true, localName="id")
         public int attr = 42;
     }
+
+    static class ListBean
+    {
+        public final List<Integer> values = new ArrayList<Integer>();
+
+        public ListBean() { }
+        public ListBean(int... ints) {
+            for (int i : ints) {
+                values.add(Integer.valueOf(i));
+            }
+        }
+    }
     
     /*
     /**********************************************************
@@ -41,7 +58,7 @@
     /**
      * Unit test to verify that root name is properly set
      */
-    public void testRootName() throws Exception
+    public void testRootName() throws IOException
     {
         XmlMapper mapper = new XmlMapper();
         String xml = mapper.writeValueAsString(new StringBean());
@@ -54,19 +71,39 @@
         }
     }
     
-    public void testSimpleAttribute() throws Exception
+    public void testSimpleAttribute() throws IOException
     {
         XmlMapper mapper = new XmlMapper();
         String xml = mapper.writeValueAsString(new AttributeBean());
         xml = removeSjsxpNamespace(xml);
-        assertEquals("<AttributeBean attr=\"something\"></AttributeBean>", xml);
+        assertEquals("<AttributeBean attr=\"something\"/>", xml);
     }
 
-    public void testSimpleAttrAndElem() throws Exception
+    public void testSimpleAttrAndElem() throws IOException
     {
         XmlMapper mapper = new XmlMapper();
         String xml = mapper.writeValueAsString(new AttrAndElem());
         xml = removeSjsxpNamespace(xml);
         assertEquals("<AttrAndElem id=\"42\"><elem>whatever</elem></AttrAndElem>", xml);
     }
+
+    public void testSimpleList() throws IOException
+    {
+        XmlMapper mapper = new XmlMapper();
+        String xml = mapper.writeValueAsString(new ListBean(1, 2, 3));
+        xml = removeSjsxpNamespace(xml);
+        // 06-Dec-2010, tatu: Not completely ok; should default to not using wrapper...
+        assertEquals("<ListBean><values><values>1</values><values>2</values><values>3</values></values></ListBean>", xml);
+        
+    }
+
+    /*
+      // manual 'test':
+    public void testJAXB() throws Exception
+    {
+        StringWriter sw = new StringWriter();
+        JAXB.marshal(new ListBean(1, 2, 3), sw);
+        System.out.println("JAXB -> "+sw);
+    }
+    */
 }
diff --git a/src/test/org/codehaus/jackson/xml/TestXmlGenerator.java b/src/test/org/codehaus/jackson/xml/TestXmlGenerator.java
index 590103b..350eee5 100644
--- a/src/test/org/codehaus/jackson/xml/TestXmlGenerator.java
+++ b/src/test/org/codehaus/jackson/xml/TestXmlGenerator.java
@@ -2,7 +2,7 @@
 
 import java.io.*;
 
-public class TestXmlGenerator extends BaseXmlTest
+public class TestXmlGenerator extends XmlTestBase
 {
     /*
     public void testSimpleElement() throws Exception
@@ -41,7 +41,7 @@
         String xml = out.toString();
         // one more thing: remove that annoying 'xmlns' decl, if it's there:
         xml = removeSjsxpNamespace(xml);
-        assertEquals("<root attr=\"value\"></root>", xml);
+        assertEquals("<root attr=\"value\"/>", xml);
     }
 
     public void testSecondLevelAttribute() throws Exception
@@ -63,7 +63,7 @@
         String xml = out.toString();
         // one more thing: remove that annoying 'xmlns' decl, if it's there:
         xml = removeSjsxpNamespace(xml);
-        assertEquals("<root><elem attr=\"value\"></elem></root>", xml);
+        assertEquals("<root><elem attr=\"value\"/></root>", xml);
     }
 
     public void testAttrAndElem() throws Exception
diff --git a/src/test/org/codehaus/jackson/xml/BaseXmlTest.java b/src/test/org/codehaus/jackson/xml/XmlTestBase.java
similarity index 80%
rename from src/test/org/codehaus/jackson/xml/BaseXmlTest.java
rename to src/test/org/codehaus/jackson/xml/XmlTestBase.java
index 62c9603..3d28ba0 100644
--- a/src/test/org/codehaus/jackson/xml/BaseXmlTest.java
+++ b/src/test/org/codehaus/jackson/xml/XmlTestBase.java
@@ -1,10 +1,12 @@
 package org.codehaus.jackson.xml;
 
-import junit.framework.TestCase;
-
-public abstract class BaseXmlTest
-    extends TestCase
+public abstract class XmlTestBase
+    extends main.BaseTest
 {
+    protected XmlTestBase() {
+        super();
+    }
+    
     /**
      * Helper method that tries to remove unnecessary namespace
      * declaration that default JDK XML parser (SJSXP) seems fit