package com.codepoetics.octarine.records;
import com.codepoetics.octarine.records.example.Address;
import com.codepoetics.octarine.records.example.Person;
import org.junit.Test;
import java.awt.*;
import java.util.Optional;
import static com.codepoetics.octarine.Octarine.$$;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.hasItem;
import static org.hamcrest.MatcherAssert.assertThat;
public class MutableRecordTest {
@SuppressWarnings("unchecked")
@Test
public void
mutable_records_capture_additions_and_removals() {
MutableRecord mutable = $$(Person.name.of("Dominic"),
Person.age.of(39),
Person.favouriteColour.of(Color.RED),
Person.address.of(Address.addressLines.of("13 Rue Morgue", "PO3 1TP"))).mutable();
mutable.set(Person.age.of(40), Person.favouriteColour.of(Color.GRAY));
mutable.unset(Person.address);
assertThat(mutable.get(Person.age).get(), equalTo(40));
assertThat(mutable.get(Person.favouriteColour).get(), equalTo(Color.GRAY));
assertThat(mutable.get(Person.address), equalTo(Optional.empty()));
assertThat(mutable.added(), equalTo($$(Person.age.of(40), Person.favouriteColour.of(Color.GRAY))));
assertThat(mutable.removed(), hasItem(Person.address));
assertThat(mutable, equalTo($$(
Person.name.of("Dominic"),
Person.age.of(40),
Person.favouriteColour.of(Color.GRAY)
)));
assertThat(mutable.immutable(), equalTo($$(
Person.name.of("Dominic"),
Person.age.of(40),
Person.favouriteColour.of(Color.GRAY)
)));
}
}