package fr.openwide.core.test.wicket.more.model; import java.util.Arrays; import java.util.Collection; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; import com.google.common.base.Equivalence; import com.google.common.base.Supplier; import fr.openwide.core.commons.util.functional.Suppliers2; import fr.openwide.core.test.wicket.more.business.person.model.Person; import fr.openwide.core.test.wicket.more.business.person.model.PersonComparator; import fr.openwide.core.wicket.more.markup.repeater.collection.ICollectionModel; import fr.openwide.core.wicket.more.model.CollectionCopyModel; import fr.openwide.core.wicket.more.model.GenericEntityModel; @RunWith(Parameterized.class) public class TestGenericEntityCollectionCopyModel<C extends Collection<Person>> extends AbstractTestGenericEntityCollectionModel<C> { @Parameters(name = "{index}: {0}, {1}") public static Iterable<Object[]> data() { return Arrays.asList(new Object[][] { { Suppliers2.arrayList(), Equivalence.equals() }, { Suppliers2.linkedList(), Equivalence.equals() }, { Suppliers2.hashSet(), UNORDERED_SET_EQUIVALENCE }, { Suppliers2.linkedHashSet(), ORDERED_SET_EQUIVALENCE }, // { Suppliers2.treeSet(), FIXED_TREESET_EQUIVALENCE }, // Won't work since we have two transient entities { Suppliers2.treeSet(PersonComparator.get()), ORDERED_SET_EQUIVALENCE } }); } private final Supplier<? extends C> collectionSupplier; public TestGenericEntityCollectionCopyModel(Supplier<? extends C> collectionSupplier, Equivalence<? super C> equivalence) { super(equivalence); this.collectionSupplier = collectionSupplier; } @Override protected ICollectionModel<Person, C> createModel() { return CollectionCopyModel.custom(collectionSupplier, GenericEntityModel.<Person>factory()); } @Override protected C createCollection(Person... person) { C collection = collectionSupplier.get(); collection.addAll(Arrays.asList(person)); return collection; } @Override protected C clone(C collection) { C clone = collectionSupplier.get(); clone.addAll(collection); return clone; } }