Author: ryan
Date: Thu Jun  5 13:10:28 2008
New Revision: 663723

URL: http://svn.apache.org/viewvc?rev=663723&view=rev
Log:
SOLR-193 -- increaseing code coverage on SolrDocument.  Fixing some missing 
logic on adding vs. setting an Iterable field

Modified:
    lucene/solr/trunk/src/java/org/apache/solr/common/SolrDocument.java
    lucene/solr/trunk/src/test/org/apache/solr/common/SolrDocumentTest.java

Modified: lucene/solr/trunk/src/java/org/apache/solr/common/SolrDocument.java
URL: 
http://svn.apache.org/viewvc/lucene/solr/trunk/src/java/org/apache/solr/common/SolrDocument.java?rev=663723&r1=663722&r2=663723&view=diff
==============================================================================
--- lucene/solr/trunk/src/java/org/apache/solr/common/SolrDocument.java 
(original)
+++ lucene/solr/trunk/src/java/org/apache/solr/common/SolrDocument.java Thu Jun 
 5 13:10:28 2008
@@ -19,6 +19,7 @@
 
 import java.io.Serializable;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -83,12 +84,17 @@
   public void setField(String name, Object value) 
   {
     if( value instanceof Object[] ) {
-      Object[] arr = (Object[])value;
-      Collection<Object> c = new ArrayList<Object>( arr.length );
-      for( Object o : arr ) {
-        c.add( o );
+      value = Arrays.asList( (Object[])value );
+    }
+    else if( value instanceof Collection ) {
+      // nothing
+    }
+    else if( value instanceof Iterable ) {
+      ArrayList<Object> lst = new ArrayList<Object>();
+      for( Object o : (Iterable)value ) {
+        lst.add( o );
       }
-      value = c;
+      value = lst;
     }
     _fields.put(name, value);
   }
@@ -201,18 +207,6 @@
         return getFieldValues( (String)key ); 
       }
       
-      /** Set the field Value */
-      public Collection<Object> put(String key, Collection<Object> value) {
-        setField( key, value );
-        return null;
-      }
-
-      /** Remove the field Value */
-      public Collection<Object> remove(Object key) {
-        removeFields( (String)key ); 
-        return null;
-      }
-      
       // Easily Supported methods
       public boolean containsKey(Object key) { return _fields.containsKey( key 
); }
       public Set<String>  keySet()           { return _fields.keySet();  }
@@ -225,6 +219,8 @@
       public Set<java.util.Map.Entry<String, Collection<Object>>> entrySet() 
{throw new UnsupportedOperationException();}
       public void putAll(Map<? extends String, ? extends Collection<Object>> 
t) {throw new UnsupportedOperationException();}
       public Collection<Collection<Object>> values() {throw new 
UnsupportedOperationException();}
+      public Collection<Object> put(String key, Collection<Object> value) 
{throw new UnsupportedOperationException();}
+      public Collection<Object> remove(Object key) {throw new 
UnsupportedOperationException();}      
     };
   }
 
@@ -238,18 +234,6 @@
         return getFirstValue( (String)key ); 
       }
       
-      /** Set the field Value */
-      public Object put(String key, Object value) {
-        setField( key, value );
-        return null;
-      }
-
-      /** Remove the field Value */
-      public Object remove(Object key) {
-        removeFields( (String)key ); 
-        return null;
-      }
-      
       // Easily Supported methods
       public boolean containsKey(Object key) { return _fields.containsKey( key 
); }
       public Set<String>  keySet()           { return _fields.keySet();  }
@@ -262,6 +246,8 @@
       public Set<java.util.Map.Entry<String, Object>> entrySet() {throw new 
UnsupportedOperationException();}
       public void putAll(Map<? extends String, ? extends Object> t) {throw new 
UnsupportedOperationException();}
       public Collection<Object> values() {throw new 
UnsupportedOperationException();}
-    };
+      public Collection<Object> put(String key, Object value) {throw new 
UnsupportedOperationException();}
+      public Collection<Object> remove(Object key) {throw new 
UnsupportedOperationException();}      
+   };
   }
 }

Modified: 
lucene/solr/trunk/src/test/org/apache/solr/common/SolrDocumentTest.java
URL: 
http://svn.apache.org/viewvc/lucene/solr/trunk/src/test/org/apache/solr/common/SolrDocumentTest.java?rev=663723&r1=663722&r2=663723&view=diff
==============================================================================
--- lucene/solr/trunk/src/test/org/apache/solr/common/SolrDocumentTest.java 
(original)
+++ lucene/solr/trunk/src/test/org/apache/solr/common/SolrDocumentTest.java Thu 
Jun  5 13:10:28 2008
@@ -20,6 +20,7 @@
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.Iterator;
 import java.util.List;
 
 import org.apache.solr.common.SolrDocument;
@@ -80,38 +81,83 @@
   public void testUnsupportedStuff()
   {
     SolrDocument doc = new SolrDocument();
-
-    try { doc.getFieldValueMap().clear();               fail( "should be 
unsupported!" ); } catch( Exception ex ){}
-    try { doc.getFieldValueMap().containsValue( null ); fail( "should be 
unsupported!" ); } catch( Exception ex ){}
-    try { doc.getFieldValueMap().entrySet();            fail( "should be 
unsupported!" ); } catch( Exception ex ){}
-    try { doc.getFieldValueMap().putAll( null );        fail( "should be 
unsupported!" ); } catch( Exception ex ){}
-    try { doc.getFieldValueMap().values();              fail( "should be 
unsupported!" ); } catch( Exception ex ){}
+    
+    try { doc.getFieldValueMap().clear();               fail( "should be 
unsupported!" ); } catch( UnsupportedOperationException ex ){}
+    try { doc.getFieldValueMap().containsValue( null ); fail( "should be 
unsupported!" ); } catch( UnsupportedOperationException ex ){}
+    try { doc.getFieldValueMap().entrySet();            fail( "should be 
unsupported!" ); } catch( UnsupportedOperationException ex ){}
+    try { doc.getFieldValueMap().putAll( null );        fail( "should be 
unsupported!" ); } catch( UnsupportedOperationException ex ){}
+    try { doc.getFieldValueMap().values();              fail( "should be 
unsupported!" ); } catch( UnsupportedOperationException ex ){}
+    try { doc.getFieldValueMap().remove( "key" );       fail( "should be 
unsupported!" ); } catch( UnsupportedOperationException ex ){}
+    try { doc.getFieldValueMap().put( "key", "value" ); fail( "should be 
unsupported!" ); } catch( UnsupportedOperationException ex ){}
+
+    try { doc.getFieldValuesMap().clear();               fail( "should be 
unsupported!" ); } catch( UnsupportedOperationException ex ){}
+    try { doc.getFieldValuesMap().containsValue( null ); fail( "should be 
unsupported!" ); } catch( UnsupportedOperationException ex ){}
+    try { doc.getFieldValuesMap().entrySet();            fail( "should be 
unsupported!" ); } catch( UnsupportedOperationException ex ){}
+    try { doc.getFieldValuesMap().putAll( null );        fail( "should be 
unsupported!" ); } catch( UnsupportedOperationException ex ){}
+    try { doc.getFieldValuesMap().values();              fail( "should be 
unsupported!" ); } catch( UnsupportedOperationException ex ){}
+    try { doc.getFieldValuesMap().remove( "key" );       fail( "should be 
unsupported!" ); } catch( UnsupportedOperationException ex ){}
+    try { doc.getFieldValueMap().put( "key", Collections.EMPTY_LIST ); fail( 
"should be unsupported!" ); } catch( UnsupportedOperationException ex ){}
 
     assertEquals( null, doc.getFieldValueMap().get( "aaa" ) );
     doc.setField( "aaa", "bbb" );
     assertEquals( "bbb", doc.getFieldValueMap().get( "aaa" ) );
-    doc.getFieldValueMap().remove( "aaa" );
-    assertEquals( null, doc.getFieldValueMap().get( "aaa" ) );
   }
   
   public void testAddCollections()
   {
-    List<String> c0 = new ArrayList<String>();
+    final List<String> c0 = new ArrayList<String>();
     c0.add( "aaa" );
     c0.add( "aaa" );
     c0.add( "aaa" );
     c0.add( "bbb" );
     c0.add( "ccc" );
+    c0.add( "ddd" );
     
     SolrDocument doc = new SolrDocument();
     doc.addField( "v", c0 );
     assertEquals( c0.size(), doc.getFieldValues("v").size() );
+    assertEquals( c0.get(0), doc.getFirstValue( "v" ) );
     
     // Same thing with an array
     Object[] arr = new Object[] { "aaa", "aaa", "aaa", 10, 'b' };
     doc = new SolrDocument();
-    doc.addField( "v", c0 );
+    doc.addField( "v", arr );
     assertEquals( arr.length, doc.getFieldValues("v").size() );
+    // try the same thing with 'setField'
+    doc.setField( "v", arr );
+    assertEquals( arr.length, doc.getFieldValues("v").size() );
+    
+    doc.clear();
+    assertEquals( 0, doc.getFieldNames().size() );
+    
+    Iterable iter = new Iterable() {
+      public Iterator iterator() {
+        return c0.iterator();
+      }
+    };
+    doc.addField( "v", iter );
+    assertEquals( c0.size(), doc.getFieldValues("v").size() );
+    // do it again to get twice the size...
+    doc.addField( "v", iter );
+    assertEquals( c0.size()*2, doc.getFieldValues("v").size() );
+    
+    // An empty list:
+    doc.setField( "empty", new ArrayList<String>() );
+    assertNull( doc.getFirstValue( "empty" ) );
+
+    // Try the JSTL accessor functions...
+    assertFalse( doc.getFieldValueMap().isEmpty() );
+    assertFalse( doc.getFieldValuesMap().isEmpty() );
+    assertEquals( 2, doc.getFieldValueMap().size() );
+    assertEquals( 2, doc.getFieldValuesMap().size() );
+    assertTrue( doc.getFieldValueMap().containsKey( "v" ) );
+    assertTrue( doc.getFieldValuesMap().containsKey( "v" ) );
+    assertTrue( doc.getFieldValueMap().keySet().contains( "v" ) );
+    assertTrue( doc.getFieldValuesMap().keySet().contains( "v" ) );
+    assertFalse( doc.getFieldValueMap().containsKey( "g" ) );
+    assertFalse( doc.getFieldValuesMap().containsKey( "g" ) );
+    assertFalse( doc.getFieldValueMap().keySet().contains( "g" ) );
+    assertFalse( doc.getFieldValuesMap().keySet().contains( "g" ) );
   }
    
   public void testDuplicate() 


Reply via email to