Class AbstractSignalsTest

java.lang.Object
com.vaadin.tests.AbstractSignalsTest

public class AbstractSignalsTest extends Object
Base class for testing components with full-stack signals. Since signal bindings are only active when components are attached, this class sets up a mock UI instance for attaching components under test.
  • Field Details

  • Constructor Details

    • AbstractSignalsTest

      public AbstractSignalsTest()
  • Method Details

    • generateBindingTests

      protected <C extends com.vaadin.flow.component.Component, T> Stream<org.junit.jupiter.api.DynamicTest> generateBindingTests(Supplier<C> componentFactory, BiConsumer<C,com.vaadin.flow.signals.local.ValueSignal<T>> bind, Function<C,T> getter, BiConsumer<C,T> setter, T initialValue, T updatedValue)
      Generates a suite of JUnit 5 dynamic tests that verify the standard behavior of a signal binding on a component property. The returned stream is intended to be used with TestFactory.

      The following test cases are generated:

      • synchronizesWhileAttached – verifies that the component property reflects the signal's initial value after binding and updates when the signal value changes, while the component is attached to a UI.
      • appliesInitialValueWhileDetached – verifies that the signal's initial value is applied to the component property immediately upon binding, even when the component is not attached to a UI.
      • doesNotSynchronizeWhileDetached – verifies that subsequent signal value changes are not propagated to the component property while the component is detached.
      • resynchronizesAfterAttach – verifies that the component property catches up with the latest signal value when the component is attached to a UI after the signal was updated while detached.
      • resynchronizesAfterReattach – verifies that signal value changes are not propagated after an attached component is detached, and that the component property catches up with the latest signal value when the component is attached again.
      • manualSetWhileBoundThrows – verifies that imperative updates to a bound property via its setter throws a BindingActiveException.
      • rebindWhileBoundThrows – verifies that calling the bind method again while a binding is already active throws a BindingActiveException.
      • bindNullSignalThrows – verifies that passing a null signal to the bind method throws a NullPointerException.

      NOTE: The tests are not necessarily exhaustive for all aspects of a specific signal binding, but only cover common expected behaviors. Additional test cases may be needed for edge cases or specific implementation details of a particular binding.

      Type Parameters:
      C - the component type
      T - the property value type
      Parameters:
      componentFactory - supplier that creates a new component instance for each test
      bind - the bind method under test (e.g. DatePicker::bindMin)
      getter - the getter for the bound property (e.g. DatePicker::getMin)
      setter - the setter for the bound property (e.g. DatePicker::setMin), used to verify that imperative updates are rejected while a binding is active
      initialValue - the initial value of the signal created for each test
      updatedValue - a value different from initialValue, used to test synchronization behavior
      Returns:
      a stream of dynamic tests to be returned from a TestFactory method