package simple.escp.data; import org.junit.Test; import simple.escp.exception.InvalidPlaceholder; import static org.junit.Assert.*; import java.beans.MethodDescriptor; import java.beans.PropertyDescriptor; import java.util.Arrays; import java.util.List; public class BeanDataSourceTest { @Test public void getMethod() { Employee emp = new Employee("test", 10.0, 24.0); BeanDataSource ds = new BeanDataSource(emp); MethodDescriptor md = ds.getMethod("grossIncome"); assertEquals("grossIncome", md.getName()); } @Test public void getProperty() { Employee emp = new Employee("test", 10.0, 24.0); BeanDataSource ds = new BeanDataSource(emp); PropertyDescriptor pd = ds.getProperty("name"); assertEquals("name", pd.getName()); pd = ds.getProperty("hourRate"); assertEquals("hourRate", pd.getName()); pd = ds.getProperty("workHours"); assertEquals("workHours", pd.getName()); } @Test public void hasMember() { Employee emp = new Employee("test", 10.0, 24.0); BeanDataSource ds = new BeanDataSource(emp); assertTrue(ds.has("name")); assertTrue(ds.has("hourRate")); assertTrue(ds.has("workHours")); assertTrue(ds.has("@grossIncome")); assertFalse(ds.has("nickname")); assertFalse(ds.has("@tax")); } @Test public void getMember() { Employee emp = new Employee("test", 10.0, 24.0); BeanDataSource ds = new BeanDataSource(emp); assertEquals("test", ds.get("name")); assertEquals(10.0, ds.get("hourRate")); assertEquals(24.0, ds.get("workHours")); assertEquals(240.0, ds.get("@grossIncome")); } public void getMembers() { Employee emp = new Employee("test", 10.0, 24.0); BeanDataSource ds = new BeanDataSource(emp); assertEquals(4, ds.getMembers().length); List<String> result = Arrays.asList(ds.getMembers()); assertTrue(result.contains("name")); assertTrue(result.contains("hourRate")); assertTrue(result.contains("workHours")); assertTrue(result.contains("address")); } @Test(expected = InvalidPlaceholder.class) public void getInvalidMember() { Employee emp = new Employee("test", 10.0, 24.0); BeanDataSource ds = new BeanDataSource(emp); ds.get("invalid"); } @Test public void getSource() { Employee emp = new Employee("test", 10.0, 24.0); BeanDataSource ds = new BeanDataSource(emp); assertEquals(emp, ds.getSource()); } @Test public void nestedProperty() { Employee emp = new Employee("test", 10.0, 24.0); City city = new City("CA", "City"); Address address = new Address("Line1", "Line2", city); emp.setAddress(address); BeanDataSource ds = new BeanDataSource(emp); assertTrue(ds.has("address.line1")); assertFalse(ds.has("address.line3")); assertEquals("Line1", ds.get("address.line1")); assertEquals("Line2", ds.get("address.line2")); assertEquals("CA", ds.get("address.city.code")); assertEquals("City", ds.get("address.city.name")); } @Test public void nestedMethod() { Employee emp = new Employee("test", 10.0, 24.0); City city = new City("CA", "City"); Address address = new Address("Line1", "Line2", city); emp.setAddress(address); BeanDataSource ds = new BeanDataSource(emp); assertTrue(ds.has("address.@shortAddress")); assertFalse(ds.has("address.@longAddress")); assertEquals("Line1 City", ds.get("address.@shortAddress")); } public static class Employee { private String name; private double hourRate; private double workHours; private Address address; public Employee(String name, double hourRate, double workHours) { this.name = name; this.hourRate = hourRate; this.workHours = workHours; } public String getName() { return name; } public void setName(String name) { this.name = name; } public double getHourRate() { return hourRate; } public void setHourRate(double hourRate) { this.hourRate = hourRate; } public double getWorkHours() { return workHours; } public void setWorkHours(double workHours) { this.workHours = workHours; } public Address getAddress() { return address; } public void setAddress(Address address) { this.address = address; } public double grossIncome() { return hourRate * workHours; } } public static class Address { private String line1; private String line2; private City city; public Address(String line1, String line2, City city) { this.line1 = line1; this.line2 = line2; this.city = city; } public String getLine1() { return line1; } public void setLine1(String line1) { this.line1 = line1; } public String getLine2() { return line2; } public void setLine2(String line2) { this.line2 = line2; } public City getCity() { return city; } public void setCity(City city) { this.city = city; } public String shortAddress() { return line1 + " " + city.getName(); } } public static class City { private String code; private String name; public City(String code, String name) { this.code = code; this.name = name; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } public String getName() { return name; } public void setName(String name) { this.name = name; } } }