package com.codepoetics.octarine;
import com.codepoetics.octarine.records.*;
import com.codepoetics.octarine.testutils.ARecord;
import org.junit.Test;
import org.pcollections.HashTreePMap;
import java.util.HashMap;
import java.util.Map;
import static com.codepoetics.octarine.Octarine.*;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.MatcherAssert.assertThat;
public class OctarineTest {
@Test public void
dollar_methods() {
Key<String> name = $("name");
Key<Integer> age = $("age");
MapKey<String> phoneNumbers = $M("phoneNumbers");
RecordKey address = $R("address");
ListKey<String> addressLines = $L("addressLines");
Key<String> postcode = $("postcode");
Record person = $$(
name.of("Peter Warlock"),
age.of(43));
Record numbers = $$(phoneNumbers.of(
"home", "01234 567890",
"work", "0208 1234567",
"mobile", "07771 234567"
));
Record personWithNumbers = $$(person, numbers);
Record completePerson = $$(personWithNumbers, address.of(
addressLines.of(
"23 Acacia Avenue",
"Sunderland"
),
postcode.of("VB6 5UX")
));
Map<String, String> expectedNumbers = new HashMap<>();
expectedNumbers.put("home", "01234 567890");
expectedNumbers.put("work", "0208 1234567");
expectedNumbers.put("mobile", "07771 234567");
assertThat(completePerson, ARecord.instance()
.with(name, "Peter Warlock")
.with(age, 43)
.with(phoneNumbers, HashTreePMap.from(expectedNumbers))
.with(address, $$(
addressLines.of("23 Acacia Avenue", "Sunderland"),
postcode.of("VB6 5UX")
)
));
}
@Test public void
dollar_methods_with_metadata() {
Key<String> displayName = $("displayName");
Key<String> name = $("name", displayName.of("Name"));
Key<Integer> age = $("age", $$(displayName.of("Age")));
MapKey<String> phoneNumbers = $M("phoneNumbers", $$(displayName.of("Phone Numbers")));
RecordKey address = $R("address", $$(displayName.of("Address")));
ListKey<String> addressLines = $L("addressLines", $$(displayName.of("Address Lines")));
Key<String> postcode = $("postcode", $$(displayName.of("Postcode")));
assertThat(displayName.extract(name.metadata()), equalTo("Name"));
assertThat(displayName.extract(age.metadata()), equalTo("Age"));
assertThat(displayName.extract(phoneNumbers.metadata()), equalTo("Phone Numbers"));
assertThat(displayName.extract(address.metadata()), equalTo("Address"));
assertThat(displayName.extract(addressLines.metadata()), equalTo("Address Lines"));
assertThat(displayName.extract(postcode.metadata()), equalTo("Postcode"));
}
}