/* Copyright (C) 2004 - 2008  db4objects Inc.  http://www.db4o.com

This file is part of the db4o open source object database.

db4o is free software; you can redistribute it and/or modify it under
the terms of version 2 of the GNU General Public License as published
by the Free Software Foundation and as clarified by db4objects' GPL 
interpretation policy, available at
http://www.db4o.com/about/company/legalpolicies/gplinterpretation/
Alternatively you can write to db4objects, Inc., 1900 S Norfolk Street,
Suite 350, San Mateo, CA 94403, USA.

db4o is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
for more details.

You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. */
package com.db4o.db4ounit.jre12.collections;

import java.util.*;

import com.db4o.*;

import db4ounit.*;
import db4ounit.extensions.*;

public class TreeSetCustomComparableTestCase extends AbstractDb4oTestCase {
    
    
    public static class Item implements Comparable {
        
        public Item() {
            this.path = new TreeSet();
        }
        
        public Set path;
        
        public int compareTo(Object that) {
            return hashCode()-that.hashCode();
        }
        
    }
    
    public void store(){
        Map map=new TreeMap();
        map.put(new Item(),new TreeSet());
        store(map);
    }
    
    public void testRetrieveOnlyInstance(){
        TreeMap tm = (TreeMap) retrieveOnlyInstance(TreeMap.class);
        assertMap(tm);
    }

    public void testQueryByExample() {
    	TreeMap map = new TreeMap();
        ObjectSet result = db().queryByExample(map);
        Assert.areEqual(1, result.size());
        TreeMap tm = (TreeMap) result.next();
        assertMap(tm);
    }
    
    private void assertMap(TreeMap tm) {
	Assert.areEqual(1, tm.size());
        Iterator i = tm.keySet().iterator();
        Assert.isTrue(i.hasNext());
        Item item  = (Item)i.next();
        TreeSet ts = (TreeSet)tm.get(item);
        Assert.isNotNull(ts);
    }

}
