@@ -0,0 +1,1798 @@
+package arez.integration.observed;%0A%0Aimport arez.Arez;%0Aimport arez.Observer;%0Aimport arez.annotations.ArezComponent;%0Aimport arez.annotations.Observable;%0Aimport arez.annotations.Observed;%0Aimport arez.annotations.ObserverRef;%0Aimport arez.integration.AbstractArezIntegrationTest;%0Aimport org.realityforge.guiceyloops.shared.ValueUtil;%0Aimport org.testng.annotations.Test;%0Aimport static org.testng.Assert.*;%0A%0Apublic class ObservedNonArezDependenciesTest%0A  extends AbstractArezIntegrationTest%0A%7B%0A  @ArezComponent%0A  public static abstract class TestComponent1%0A  %7B%0A    int _renderCallCount;%0A%0A    @Observed( arezOnlyDependencies = false )%0A    void render()%0A    %7B%0A      getValue();%0A      _renderCallCount++;%0A    %7D%0A%0A    @ObserverRef%0A    abstract Observer getRenderObserver();%0A%0A    @SuppressWarnings( %22UnusedReturnValue%22 )%0A    @Observable%0A    abstract long getValue();%0A%0A    abstract void setValue( long value );%0A  %7D%0A%0A  @Test%0A  public void scenario()%0A    throws Exception%0A  %7B%0A    final TestComponent1 component = new ObservedNonArezDependenciesTest_Arez_TestComponent1();%0A%0A    assertEquals( component._renderCallCount, 1 );%0A%0A    // reportStale should result in re-render invocation%0A    Arez.context().safeAction( null, true, false, () -%3E component.getRenderObserver().reportStale() );%0A%0A    assertEquals( component._renderCallCount, 2 );%0A%0A    // Trigger a dependency change, mark observer as dirty%0A    safeAction( () -%3E component.setValue( ValueUtil.randomLong() ) );%0A%0A    assertEquals( component._renderCallCount, 3 );%0A%0A    // reportStale and dependency change should result in single re-render invocation%0A    Arez.context().safeAction( () -%3E %7B%0A      component.setValue( ValueUtil.randomLong() );%0A      component.getRenderObserver().reportStale();%0A    %7D );%0A%0A    assertEquals( component._renderCallCount, 4 );%0A  %7D%0A%7D%0A

Add integration tests for non-arez dependencies