package cn.jimmyshi.beanquery.selectors;
import static org.hamcrest.Matchers.hasKey;
import static org.hamcrest.Matchers.hasSize;
import static org.hamcrest.Matchers.not;
import static org.junit.Assert.assertThat;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import org.junit.Test;
import cn.jimmyshi.beanquery.example.Book;
public class CompositeSelectorTest extends SelectorTestBase{
@Test
public void testConstructWithNull(){
KeyValueMapSelector subSelector=null;
CompositeSelector selector=new CompositeSelector(subSelector);
assertSelectResultKeySizeIsZero(selector);
}
@Test
public void testConstructWithNullArray(){
CompositeSelector selector=new CompositeSelector((KeyValueMapSelector[])null);
assertSelectResultKeySizeIsZero(selector);
}
@Test
public void testConstructWithSelectorArray(){
CompositeSelector selector=new CompositeSelector(new PropertySelector("abc"),new PropertySelector("edf"));
assertSelectResultKeys(selector,"abc","edf");
}
@Test
public void testDefaultConstructor(){
CompositeSelector selector=new CompositeSelector();
assertSelectResultKeySizeIsZero(selector);
}
@Test
public void testConstructWithNullList(){
List<KeyValueMapSelector> subSelectors=null;
CompositeSelector selector=new CompositeSelector(subSelectors);
assertSelectResultKeySizeIsZero(selector);
}
@Test
public void testConstructWithEmptyList(){
List<KeyValueMapSelector> subSelectors=Collections.emptyList();
CompositeSelector selector=new CompositeSelector(subSelectors);
assertSelectResultKeySizeIsZero(selector);
}
@Test
public void testConstructWithSelectorList(){
CompositeSelector selector=new CompositeSelector(Arrays.asList(new PropertySelector("abc"),null,new PropertySelector("edf")));
assertSelectResultKeys(selector,"abc","edf");
}
@Test
public void testAddSubSelector(){
//given
CompositeSelector selector=new CompositeSelector(new ClassSelector(Book.class));
Map<String, Object> result = selector.select(new Book());
int resultKeySizeBeforeAddSubSelector=result.size();
assertThat(result,not(hasKey("abc")));
//when
selector.addSubSelector(new PropertySelector("abc"));
//then
result = selector.select(new Book());
assertThat(result.keySet(),hasSize(resultKeySizeBeforeAddSubSelector+1));
assertThat(result,hasKey("abc"));
}
@Test
public void testAddNullSubSelector(){
//given
CompositeSelector selector=new CompositeSelector(new ClassSelector(Book.class));
Map<String, Object> result = selector.select(new Book());
int resultKeySizeBeforeAddSubSelector=result.size();
//when
selector.addSubSelector(null);
//then
result = selector.select(new Book());
assertThat(result.keySet(),hasSize(resultKeySizeBeforeAddSubSelector));
}
}