### Question:
BaseProjectProperty implements IProjectProperty<T> { public final void onCascadingProjectChanged() { if (getJob().hasCascadingProject()) { onCascadingProjectSet(); } else { onCascadingProjectRemoved(); } } 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 testOnCascadingProjectChanged() { property.setOverridden(true); property.onCascadingProjectChanged(); assertFalse(property.isOverridden()); property.setValue(parentPropertyValue); project.setCascadingProject(parent); property.setOverridden(true); assertTrue(property.isOverridden()); assertFalse(property.allowOverrideValue(parentProperty.getOriginalValue(), property.getValue())); property.onCascadingProjectChanged(); assertFalse(property.isOverridden()); }