/* See LICENSE for licensing and NOTICE for copyright. */
package org.ldaptive;
import java.util.HashSet;
import java.util.Set;
import org.testng.AssertJUnit;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
/**
* Unit test for {@link SearchResult}.
*
* @author Middleware Services
*/
public class SearchResultTest
{
/**
* Ldap entry test data.
*
* @return ldap entries
*/
@DataProvider(name = "entries")
public Object[][] createSerializable()
{
return new Object[][] {
new Object[] {new LdapEntry("uid=1"), new LdapEntry("uid=2"), },
};
}
/** Tests default sort behavior. */
@Test(groups = {"bean"})
public void defaultSortBehavior()
{
final SearchResult sr = new SearchResult();
AssertJUnit.assertEquals(SortBehavior.getDefaultSortBehavior(), sr.getSortBehavior());
AssertJUnit.assertEquals(0, sr.size());
AssertJUnit.assertNull(sr.getEntry());
sr.clear();
AssertJUnit.assertEquals(0, sr.size());
}
/**
* Tests ordered sort behavior.
*
* @param entry1 ldap entry
* @param entry2 ldap entry
*/
@Test(groups = {"bean"}, dataProvider = "entries")
public void orderedSortBehavior(final LdapEntry entry1, final LdapEntry entry2)
{
final SearchResult sr = new SearchResult(SortBehavior.ORDERED);
AssertJUnit.assertEquals(SortBehavior.ORDERED, sr.getSortBehavior());
sr.addEntry(entry2, entry1);
final LdapEntry[] entries = sr.getEntries().toArray(new LdapEntry[2]);
AssertJUnit.assertEquals(entry2, entries[0]);
AssertJUnit.assertEquals(entry1, entries[1]);
sr.clear();
AssertJUnit.assertEquals(0, sr.size());
}
/**
* Tests sorted sort behavior.
*
* @param entry1 ldap entry
* @param entry2 ldap entry
*/
@Test(groups = {"bean"}, dataProvider = "entries")
public void sortedSortBehavior(final LdapEntry entry1, final LdapEntry entry2)
{
final SearchResult sr = new SearchResult(SortBehavior.SORTED);
AssertJUnit.assertEquals(SortBehavior.SORTED, sr.getSortBehavior());
sr.addEntry(entry2, entry1);
final LdapEntry[] entries = sr.getEntries().toArray(new LdapEntry[2]);
AssertJUnit.assertEquals(entry1, entries[0]);
AssertJUnit.assertEquals(entry2, entries[1]);
sr.clear();
AssertJUnit.assertEquals(0, sr.size());
}
/**
* Tests create with one entry.
*
* @param entry1 ldap entry
* @param entry2 ldap entry
*/
@Test(groups = {"bean"}, dataProvider = "entries")
public void createOne(final LdapEntry entry1, final LdapEntry entry2)
{
final SearchResult sr = new SearchResult(entry1);
AssertJUnit.assertEquals(entry1, sr.getEntry());
AssertJUnit.assertEquals(entry1, sr.getEntry("uid=1"));
AssertJUnit.assertEquals(entry1, sr.getEntry("UID=1"));
AssertJUnit.assertEquals("uid=1", sr.getEntryDns()[0]);
AssertJUnit.assertEquals(1, sr.size());
AssertJUnit.assertEquals(sr, new SearchResult(entry1));
sr.clear();
AssertJUnit.assertEquals(0, sr.size());
}
/**
* Tests create with two entries.
*
* @param entry1 ldap entry
* @param entry2 ldap entry
*/
@Test(groups = {"bean"}, dataProvider = "entries")
public void createTwo(final LdapEntry entry1, final LdapEntry entry2)
{
final SearchResult sr = new SearchResult(entry2, entry1);
AssertJUnit.assertEquals(entry1, sr.getEntry("uid=1"));
AssertJUnit.assertEquals(entry2, sr.getEntry("UID=2"));
AssertJUnit.assertEquals(2, sr.getEntryDns().length);
AssertJUnit.assertEquals(2, sr.size());
AssertJUnit.assertEquals(sr, new SearchResult(entry1, entry2));
sr.removeEntry(entry2);
AssertJUnit.assertEquals(1, sr.size());
sr.clear();
AssertJUnit.assertEquals(0, sr.size());
}
/**
* Tests create with a collection.
*
* @param entry1 ldap entry
* @param entry2 ldap entry
*/
@Test(groups = {"bean"}, dataProvider = "entries")
public void createCollection(final LdapEntry entry1, final LdapEntry entry2)
{
final Set<LdapEntry> s = new HashSet<>();
s.add(entry1);
final SearchResult sr = new SearchResult(s);
sr.addEntry(entry2);
AssertJUnit.assertEquals(entry1, sr.getEntry("UID=1"));
AssertJUnit.assertEquals(entry2, sr.getEntry("uid=2"));
AssertJUnit.assertEquals(2, sr.getEntryDns().length);
AssertJUnit.assertEquals(2, sr.size());
AssertJUnit.assertEquals(sr, new SearchResult(entry1, entry2));
sr.removeEntry("UID=1");
AssertJUnit.assertEquals(1, sr.size());
sr.clear();
AssertJUnit.assertEquals(0, sr.size());
}
/**
* Unit test for {@link SearchResult#subResult(int, int)}.
*
* @param entry1 ldap entry
* @param entry2 ldap entry
*/
@Test(groups = {"bean"}, dataProvider = "entries")
public void subResult(final LdapEntry entry1, final LdapEntry entry2)
{
final SearchResult sr = new SearchResult(SortBehavior.SORTED);
sr.addEntry(entry2, entry1);
AssertJUnit.assertEquals(0, sr.subResult(2, 2).size());
AssertJUnit.assertEquals(1, sr.subResult(1, 2).size());
AssertJUnit.assertEquals(2, sr.subResult(0, 2).size());
try {
sr.subResult(-1, 1);
AssertJUnit.fail("Should have thrown IndexOutOfBoundsException");
} catch (Exception e) {
AssertJUnit.assertEquals(IndexOutOfBoundsException.class, e.getClass());
}
try {
sr.subResult(0, 3);
AssertJUnit.fail("Should have thrown IndexOutOfBoundsException");
} catch (Exception e) {
AssertJUnit.assertEquals(IndexOutOfBoundsException.class, e.getClass());
}
try {
sr.subResult(1, 0);
AssertJUnit.fail("Should have thrown IndexOutOfBoundsException");
} catch (Exception e) {
AssertJUnit.assertEquals(IndexOutOfBoundsException.class, e.getClass());
}
}
}