package org.reactfx.value;

import static org.junit.Assert.*;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import javafx.beans.binding.IntegerBinding;
import javafx.beans.property.IntegerProperty;
import javafx.beans.property.SimpleIntegerProperty;

import org.junit.Test;
import org.reactfx.EventStreams;

public class VarFromValTest {

    @Test
    public void test() {
        IntegerProperty src = new SimpleIntegerProperty(0);
        IntegerBinding twice = src.multiply(2);
        Var<Number> twiceVar = Var.fromVal(twice, n -> src.set(n.intValue() / 2));

        List<Number> values = new ArrayList<>();
        EventStreams.valuesOf(twiceVar).subscribe(values::add);

        src.set(1);
        twiceVar.setValue(4);
        twiceVar.setValue(5); // no effect
        twiceVar.setValue(7); // will become 6

        assertEquals(Arrays.asList(0, 2, 4, 6), values);
    }

}