summaryrefslogtreecommitdiffstats
path: root/server/src/test/java/com/vaadin/data/ReadOnlyHasValueTest.java
blob: 6ed172a56a89675abc894e9e74540550cb42fbe1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
package com.vaadin.data;

import com.vaadin.shared.Registration;
import com.vaadin.ui.Label;
import org.junit.Before;
import org.junit.Test;

import java.util.Objects;

import static org.junit.Assert.*;

public class ReadOnlyHasValueTest {
    private static final String SAY_SOMETHING = "Say something";
    private static final String SAY_SOMETHING_ELSE = "Say something else";
    private static final String NO_VALUE = "-no-value-";
    private Label label;
    private ReadOnlyHasValue<String> hasValue;

    @Before
    public void setup() {
        label = new Label();
        hasValue = new ReadOnlyHasValue<>(label::setCaption);
    }

    @Test
    public void testBase() {
        hasValue.setReadOnly(true);
        hasValue.setRequiredIndicatorVisible(false);
        Registration registration = hasValue.addValueChangeListener(e -> {
        });
        registration.remove();
        hasValue.setValue(SAY_SOMETHING);
        assertEquals(SAY_SOMETHING, hasValue.getValue());
        assertEquals(SAY_SOMETHING, label.getCaption());
        hasValue.setValue(SAY_SOMETHING_ELSE);
        assertEquals(SAY_SOMETHING_ELSE, hasValue.getValue());
        assertEquals(SAY_SOMETHING_ELSE, label.getCaption());
    }

    @Test(expected = IllegalArgumentException.class)
    public void testRO() {
        hasValue.setReadOnly(false);
    }

    @Test(expected = IllegalArgumentException.class)
    public void testIndicator() {
        hasValue.setRequiredIndicatorVisible(true);
    }

    @Test
    public void testBind() {
        Binder<Bean> beanBinder = new Binder<>(Bean.class);
        Label label = new Label();
        ReadOnlyHasValue<Long> intHasValue = new ReadOnlyHasValue<>(
                i -> label.setValue(Objects.toString(i, "")));

        beanBinder.forField(intHasValue).bind("v");

        beanBinder.readBean(new Bean(42));
        assertEquals("42", label.getValue());
        assertEquals(42L, intHasValue.getValue().longValue());

        Registration registration = intHasValue.addValueChangeListener(e -> {
            assertEquals(42L, e.getOldValue().longValue());
            assertSame(intHasValue, e.getSource());
            assertSame(null, e.getComponent());
            assertSame(null, e.getComponent());
            assertFalse(e.isUserOriginated());
        });
        beanBinder.readBean(new Bean(1984));
        assertEquals("1984", label.getValue());
        assertEquals(1984L, intHasValue.getValue().longValue());

        registration.remove();

        beanBinder.readBean(null);
        assertEquals("", label.getValue());
        assertEquals(null, intHasValue.getValue());

    }

    @Test
    public void testEmptyValue() {
        Binder<Bean> beanBinder = new Binder<>(Bean.class);
        Label label = new Label();
        ReadOnlyHasValue<String> strHasValue = new ReadOnlyHasValue<>(
                label::setValue, NO_VALUE);

        beanBinder.forField(strHasValue)
                .withConverter(Long::parseLong, (Long i) -> "" + i).bind("v");

        beanBinder.readBean(new Bean(42));
        assertEquals("42", label.getValue());

        beanBinder.readBean(null);
        assertEquals(NO_VALUE, label.getValue());
        assertTrue(strHasValue.isEmpty());
    }

    public static class Bean {
        public Bean(long v) {
            this.v = v;
        }

        private long v;

        public long getV() {
            return v;
        }

        public void setV(long v) {
            this.v = v;
        }
    }
}