package com.blazebit.reflection; import static org.junit.Assert.assertEquals; import org.junit.Test; public class PropertyPathExpressionTest { private PropertyPathExpression<Car, String> nameExpression = new PropertyPathExpression<Car, String>( Car.class, "name"); private PropertyPathExpression<Car, String> vendorNameExpression = new PropertyPathExpression<Car, String>( Car.class, "vendor.name"); @Test public void testSetValue() { Car o = new Car(null); nameExpression.setValue(o, "Test"); assertEquals(o.getName(), "Test"); } @Test public void testGetValue() { Car o; o = new Car(null); assertEquals(o.getName(), nameExpression.getValue(o)); o = new Car("Test"); assertEquals(o.getName(), nameExpression.getValue(o)); } @SuppressWarnings("unchecked") @Test public void testGetValueWithUnresolveableTypeParameters() { GenericId<String> genericId = new GenericId<String>("test"); assertEquals("test", new PropertyPathExpression<GenericId<String>, String>( (Class<GenericId<String>>) (Class<?>) GenericId.class, "id").getValue(genericId)); } @Test public void testGetNullSafeValue() { Car o; o = new Car(null); assertEquals(null, vendorNameExpression.getNullSafeValue(o)); o = new Car("Test", "Test"); assertEquals(o.getVendor().getName(), vendorNameExpression.getNullSafeValue(o)); } @Test(expected = NullPointerException.class) public void testGetValueExpectNPE() { vendorNameExpression.getValue(new Car(null)); } @Test(expected = NullPointerException.class) public void testSetValueWithNull() { vendorNameExpression.setValue(new Car(null), "Test"); } public class GenericId<X> { X id; public GenericId(X id) { this.id = id; } public X getId() { return id; } public void setId(X id) { this.id = id; } } public class Vendor { String name; public Vendor(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } } public class Car { String name; Vendor vendor; public Car() { } public Car(String name) { this.name = name; } public Car(String name, String vendorName) { this.name = name; this.vendor = new Vendor(vendorName); } public String getName() { return name; } public void setName(String name) { this.name = name; } public Vendor getVendor() { return vendor; } public void setVendor(Vendor vendor) { this.vendor = vendor; } } }