package org.opendaylight.mdsal.binding.dom.codec.test;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertNotSame;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertSame;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.mdsal.test.binding.rev140701.two.level.list.TopLevelList;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.mdsal.test.binding.rev140701.two.level.list.TopLevelListBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.mdsal.test.binding.rev140701.two.level.list.TopLevelListKey;
+import org.opendaylight.yang.gen.v1.urn.test.leaf.caching.codec.rev190201.Cont;
+import org.opendaylight.yang.gen.v1.urn.test.leaf.caching.codec.rev190201.ContBuilder;
+import org.opendaylight.yang.gen.v1.urn.test.leaf.caching.codec.rev190201.MyType;
+import org.opendaylight.yangtools.yang.binding.BindingObject;
import org.opendaylight.yangtools.yang.binding.DataObject;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
import org.opendaylight.yangtools.yang.data.api.schema.DataContainerNode;
import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
private static final Top TOP_TWO_LIST_DATA = new TopBuilder().setTopLevelList(TWO_LIST).build();
private static final Top TOP_THREE_LIST_DATA = new TopBuilder().setTopLevelList(THREE_LIST).build();
+ private static final NodeIdentifier LEAF_ARG = new NodeIdentifier(QName.create(Cont.QNAME, "caching"));
+ private static final InstanceIdentifier<Cont> CONT_PATH = InstanceIdentifier.create(Cont.class);
+ private static final Cont CONT_DATA = new ContBuilder().setCaching(new MyType(1)).setNonCaching("test").build();
+ private static final Cont CONT2_DATA = new ContBuilder().setCaching(new MyType(1)).setNonCaching("test2").build();
+
private BindingDataObjectCodecTreeNode<Top> topNode;
+ private BindingDataObjectCodecTreeNode<Cont> contNode;
@Override
@Before
public void before() {
super.before();
topNode = registry.getCodecContext().getSubtreeCodec(TOP_PATH);
+ contNode = registry.getCodecContext().getSubtreeCodec(CONT_PATH);
}
private static List<TopLevelList> createList(final int num) {
verifyListItemSame(first, third);
}
+ @Test
+ public void testLeafCache() {
+ final BindingNormalizedNodeCachingCodec<Cont> cachingCodec = createContCachingCodec(Cont.class, MyType.class);
+ final NormalizedNode<?, ?> first = cachingCodec.serialize(CONT_DATA);
+ final NormalizedNode<?, ?> second = cachingCodec.serialize(CONT2_DATA);
+
+ assertNotEquals(first, second);
+ verifyLeafItemSame(first, second);
+ }
+
@Test
public void testDefaultInvocation() {
final BindingNormalizedNodeCachingCodec<Top> cachingCodec = createCachingCodec(Top.class, TopLevelList.class);
return topNode.createCachingCodec(ImmutableSet.copyOf(classes));
}
+ @SafeVarargs
+ private final BindingNormalizedNodeCachingCodec<Cont> createContCachingCodec(
+ final Class<? extends BindingObject>... classes) {
+ return contNode.createCachingCodec(ImmutableSet.copyOf(classes));
+ }
+
private static void verifyListItemSame(final NormalizedNode<?, ?> firstTop, final NormalizedNode<?, ?> secondTop) {
final Collection<MapEntryNode> initialNodes = getListItems(firstTop).getValue();
final MapNode secondMap = getListItems(secondTop);
private static MapNode getListItems(final NormalizedNode<?, ?> top) {
return (MapNode) ((DataContainerNode<?>) top).getChild(TOP_LEVEL_LIST_ARG).get();
}
+
+ private static void verifyLeafItemSame(final NormalizedNode<?, ?> firstCont,
+ final NormalizedNode<?, ?> secondCont) {
+ assertSame(((DataContainerNode<?>) firstCont).getChild(LEAF_ARG).get(),
+ ((DataContainerNode<?>) secondCont).getChild(LEAF_ARG).get());
+ }
}