### Question:
BaseProjectProperty implements IProjectProperty<T> { @SuppressWarnings("unchecked") public T getCascadingValue() { if (null == getKey()) { throw new IllegalArgumentException(INVALID_PROPERTY_KEY_EXCEPTION); } return getJob().hasCascadingProject() ? (T) getJob().getCascadingProject().getProperty(propertyKey, this.getClass()).getValue() : getDefaultValue(); } BaseProjectProperty(ICascadingJob job); void setKey(String propertyKey); String getKey(); void setJob(ICascadingJob job); void setOverridden(boolean overridden); @SuppressWarnings("unchecked") T getCascadingValue(); boolean isOverridden(); T getDefaultValue(); T getValue(); @SuppressWarnings("unchecked") void setValue(T value); void resetValue(); boolean allowOverrideValue(T cascadingValue, T candidateValue); T getOriginalValue(); final void onCascadingProjectChanged();  }### Answer:
@Test public void testGetCascadingValue() { parentProperty.setValue(null); assertEquals(property.getDefaultValue(), property.getCascadingValue()); project.setCascadingProject(parent); property = new BaseProjectProperty(project); property.setKey(propertyKey); assertEquals(property.getDefaultValue(), property.getCascadingValue()); project.setCascadingProject(parent); property = new BaseProjectProperty(project); property.setKey(propertyKey); property.setValue(parentPropertyValue); assertEquals(parentProperty.getOriginalValue(), property.getCascadingValue()); }