1515 */
1616package com .vaadin .flow .dom ;
1717
18+ import java .util .LinkedList ;
19+
1820import org .junit .After ;
1921import org .junit .AfterClass ;
22+ import org .junit .Assert ;
2023import org .junit .Before ;
2124import org .junit .BeforeClass ;
2225import org .junit .Test ;
2528import com .vaadin .experimental .FeatureFlags ;
2629import com .vaadin .flow .component .UI ;
2730import com .vaadin .flow .internal .CurrentInstance ;
31+ import com .vaadin .flow .server .ErrorEvent ;
2832import com .vaadin .flow .server .MockVaadinServletService ;
2933import com .vaadin .flow .server .MockVaadinSession ;
3034import com .vaadin .flow .server .VaadinService ;
31- import com .vaadin .flow .server .VaadinSession ;
3235import com .vaadin .signals .BindingActiveException ;
3336import com .vaadin .signals .Signal ;
3437import com .vaadin .signals .ValueSignal ;
@@ -47,6 +50,8 @@ public class ElementBindTextTest {
4750
4851 private MockedStatic <FeatureFlags > featureFlagStaticMock ;
4952
53+ private LinkedList <ErrorEvent > events ;
54+
5055 @ BeforeClass
5156 public static void init () {
5257 var featureFlagStaticMock = mockStatic (FeatureFlags .class );
@@ -65,15 +70,13 @@ public static void clean() {
6570 public void before () {
6671 featureFlagStaticMock = mockStatic (FeatureFlags .class );
6772 featureFlagEnabled (featureFlagStaticMock );
68- VaadinService .setCurrent (service );
69- VaadinSession session = new MockVaadinSession (service );
70- session .lock ();
71- new MockUI (session );
73+ events = mockLockedSessionWithErrorHandler ();
7274 }
7375
7476 @ After
7577 public void after () {
7678 close (featureFlagStaticMock );
79+ events = null ;
7780 }
7881
7982 private static void featureFlagEnabled (
@@ -91,6 +94,19 @@ private static void close(
9194 featureFlagStaticMock .close ();
9295 }
9396
97+ private LinkedList <ErrorEvent > mockLockedSessionWithErrorHandler () {
98+ VaadinService .setCurrent (service );
99+
100+ var session = new MockVaadinSession (service );
101+ session .lock ();
102+
103+ var ui = new MockUI (session );
104+ var events = new LinkedList <ErrorEvent >();
105+ session .setErrorHandler (events ::add );
106+
107+ return events ;
108+ }
109+
94110 @ Test
95111 public void bindTextComputedSignal_getText_returnsCorrectValue () {
96112 Element element = new Element ("span" );
@@ -154,6 +170,27 @@ public void bindText_setTextWithExistingInactiveBinding_throws() {
154170 () -> element .setText ("text2" ));
155171 }
156172
173+ @ Test
174+ public void bindText_initialNullSignalValue_treatAsBlank () {
175+ Element element = new Element ("span" );
176+ UI .getCurrent ().getElement ().appendChild (element );
177+ ValueSignal <String > signal = new ValueSignal <>(String .class );
178+ element .bindText (signal );
179+ assertEquals ("" , element .getText ());
180+ Assert .assertTrue (events .isEmpty ());
181+ }
182+
183+ @ Test
184+ public void bindText_setNullSignalValue_treatAsBlank () {
185+ Element element = new Element ("span" );
186+ UI .getCurrent ().getElement ().appendChild (element );
187+ ValueSignal <String > signal = new ValueSignal <>("text" );
188+ element .bindText (signal );
189+ signal .value (null );
190+ Assert .assertTrue (events .isEmpty ());
191+ assertEquals ("" , element .getText ());
192+ }
193+
157194 @ Test
158195 public void bindText_bindTextWithExistingActiveBinding_throws () {
159196 Element element = new Element ("span" );
0 commit comments