package cn.jimmyshi.beanquery.selectors; import static org.hamcrest.Matchers.contains; import static org.hamcrest.Matchers.containsInAnyOrder; import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertThat; import java.util.Map; import org.apache.commons.lang3.ArrayUtils; import org.junit.Test; import cn.jimmyshi.beanquery.example.Address; import cn.jimmyshi.beanquery.selectors.ClassSelector; public class ClassSelectorTest { String[] defaultPropertyNamesOfAddress = new String[] { "address", "postCode" }; @Test public void testConstructWithNull() { // given ClassSelector selector = new ClassSelector(null); // when Map<String, Object> result = selector.select(new Address()); // then assertThat(result.keySet().size(), is(0)); } @Test public void testConstructWithClassWithoutReadableProperty() { // given ClassSelector selector = new ClassSelector(ClassWithNotReadableProperty.class); // when Map<String, Object> result = selector.select(new ClassWithNotReadableProperty()); // then assertThat(result.keySet(), contains("name")); } public static class ClassWithNotReadableProperty { private String name; private String notReadable; public String getName() { return name; } public void setName(String name) { this.name = name; } public void setNotReadable(String notReadable) { this.notReadable = notReadable; } } @Test public void testExceptEmptyArray() { // given ClassSelector selector = new ClassSelector(Address.class); assertThat(selector.select(new Address()).keySet(), containsInAnyOrder(defaultPropertyNamesOfAddress)); // when selector.except(); // then assertThat(selector.select(new Address()).keySet(), containsInAnyOrder(defaultPropertyNamesOfAddress)); } @Test public void testExceptNull() { // given ClassSelector selector = new ClassSelector(Address.class); assertThat(selector.select(new Address()).keySet(), containsInAnyOrder(defaultPropertyNamesOfAddress)); // when selector.except(null); // then assertThat(selector.select(new Address()).keySet(), containsInAnyOrder(defaultPropertyNamesOfAddress)); } @Test public void testExceptNullAndBlanks() { // given ClassSelector selector = new ClassSelector(Address.class); assertThat(selector.select(new Address()).keySet(), containsInAnyOrder(defaultPropertyNamesOfAddress)); // when selector.except(null, "", " "); // then assertThat(selector.select(new Address()).keySet(), containsInAnyOrder(defaultPropertyNamesOfAddress)); } @Test public void testExcept() { // given ClassSelector selector = new ClassSelector(Address.class); assertThat(selector.select(new Address()).keySet(), containsInAnyOrder(defaultPropertyNamesOfAddress)); // when selector.except("address", "officeAddress"); // then assertThat(selector.select(new Address()).keySet(), containsInAnyOrder(ArrayUtils.removeElements(defaultPropertyNamesOfAddress, "address","officeAddress"))); } @Test public void testAddEmptyArray() { // given ClassSelector selector = new ClassSelector(Address.class); assertThat(selector.select(new Address()).keySet(), containsInAnyOrder(defaultPropertyNamesOfAddress)); // when selector.add(); // then assertThat(selector.select(new Address()).keySet(), containsInAnyOrder(defaultPropertyNamesOfAddress)); } @Test public void testAddNull() { // given ClassSelector selector = new ClassSelector(Address.class); assertThat(selector.select(new Address()).keySet(), containsInAnyOrder(defaultPropertyNamesOfAddress)); // when selector.add(null); // then assertThat(selector.select(new Address()).keySet(), containsInAnyOrder(defaultPropertyNamesOfAddress)); } @Test public void testAddNullAndBlanks() { // given ClassSelector selector = new ClassSelector(Address.class); assertThat(selector.select(new Address()).keySet(), containsInAnyOrder(defaultPropertyNamesOfAddress)); // when selector.add(null, "", " "); // then assertThat(selector.select(new Address()).keySet(), containsInAnyOrder(defaultPropertyNamesOfAddress)); } @Test public void testAdd() { // given ClassSelector selector = new ClassSelector(Address.class); assertThat(selector.select(new Address()).keySet(), containsInAnyOrder(defaultPropertyNamesOfAddress)); // when selector.add("address", "officeAddress"); // then assertThat(selector.select(new Address()).keySet(), containsInAnyOrder(ArrayUtils.add(defaultPropertyNamesOfAddress, "officeAddress"))); } }