### Question:
BaseProjectProperty implements IProjectProperty<T> { public T getValue() { if (returnOriginalValue()) { return getOriginalValue(); } return getCascadingValue(); } 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 testGetValue() { property.setValue(parentPropertyValue); assertEquals(parentPropertyValue, property.getValue()); property.setValue(null); assertNull(property.getValue()); parentProperty.setValue(parentPropertyValue); project.setCascadingProject(parent); property = new BaseProjectProperty(project); property.setKey(propertyKey); assertNull(property.getOriginalValue()); assertEquals(parentPropertyValue, property.getValue()); property.setOverridden(true); assertNull(property.getOriginalValue()); assertNull(property.getValue()); }