package org.javersion.path;
import static org.assertj.core.api.Assertions.assertThat;
import static org.javersion.path.NodeId.ANY_KEY;
import static org.javersion.path.NodeId.ANY_PROPERTY;
import static org.javersion.path.NodeId.ROOT_ID;
import static org.javersion.path.NodeId.index;
import static org.javersion.path.NodeId.key;
import static org.javersion.path.NodeId.property;
import static org.javersion.path.PropertyPath.ROOT;
import org.javersion.path.NodeId.IndexId;
import org.javersion.path.NodeId.KeyId;
import org.javersion.path.NodeId.PropertyId;
import org.junit.Test;
public class NodeIdTest {
@Test
public void root_node_toPath_returns_parent() {
assertThat((Object) ROOT.node(ROOT_ID)).isEqualTo(ROOT);
}
@Test
public void is_index() {
assertThat(index(1).isIndex()).isTrue();
assertThat(key("key").isIndex()).isFalse();
assertThat(ROOT_ID.isIndex()).isFalse();
}
@Test
public void is_key() {
assertThat(key("key").isKey()).isTrue();
assertThat(index(1).isKey()).isFalse();
assertThat(ROOT_ID.isKey()).isFalse();
}
@Test
public void cached_indexes() {
assertThat(index(1)).isSameAs(index(1));
assertThat(index(123456789)).isNotSameAs(index(123456789));
}
@Test
public void hash_codes() {
assertNotEqual(index(1), index(2));
assertNotEqual(key("a"), key("A"));
assertNotEqual(property("a"), property("A"));
assertNotEqual(ANY_KEY, ANY_PROPERTY);
}
@Test
public void node_types() {
IndexId index = index(1);
KeyId key = key("1");
PropertyId property = property("1"); // illegal property, but not validated here
assertNotEqual(index, key);
assertNotEqual(key, index);
assertNotEqual(property, key);
assertNotEqual(key, property);
assertNotEqual(property, index);
assertNotEqual(index, property);
}
private void assertNotEqual(NodeId a, NodeId b) {
assertThat(a).isNotEqualTo(b);
assertThat(a).isNotEqualByComparingTo(b);
assertThat(a.hashCode()).isNotEqualTo(b.hashCode());
}
}