*/
package org.opendaylight.yangtools.yang.stmt;
+import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNotSame;
import static org.junit.Assert.assertSame;
import java.net.URI;
+import java.util.List;
+import java.util.stream.Collectors;
import org.junit.Test;
import org.opendaylight.yangtools.yang.common.QNameModule;
import org.opendaylight.yangtools.yang.model.api.stmt.AnyxmlEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.ContainerEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.GroupingEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.LeafEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.ModuleEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.NotificationEffectiveStatement;
public class YT1212Test {
@Test
// The 'type' is not context-independent, but it being copy-insensitive and statements get reused
assertSame(foo.effectiveSubstatements(), grpFoo.effectiveSubstatements());
}
+
+ @Test
+ public void testContainerStatementReuse() throws Exception {
+ final ModuleEffectiveStatement module = StmtTestUtils.parseYangSource("/bugs/YT1212/container.yang")
+ .getModuleStatements()
+ .get(QNameModule.create(URI.create("foo")));
+ assertNotNull(module);
+
+ final NotificationEffectiveStatement notif =
+ module.findFirstEffectiveSubstatement(NotificationEffectiveStatement.class).orElseThrow();
+ final List<GroupingEffectiveStatement> groupings = notif.effectiveSubstatements().stream()
+ .filter(GroupingEffectiveStatement.class::isInstance).map(GroupingEffectiveStatement.class::cast)
+ .collect(Collectors.toList());
+ assertEquals(2, groupings.size());
+ final GroupingEffectiveStatement grp = groupings.get(0);
+ assertEquals("grp", grp.argument().getLocalName());
+ final GroupingEffectiveStatement barGrp = groupings.get(1);
+ assertEquals("bar", barGrp.argument().getLocalName());
+ final ContainerEffectiveStatement bar = notif.findFirstEffectiveSubstatement(ContainerEffectiveStatement.class)
+ .orElseThrow();
+
+ // Container needs to be reused
+ assertSame(bar.findFirstEffectiveSubstatement(ContainerEffectiveStatement.class).orElseThrow(),
+ barGrp.findFirstEffectiveSubstatement(ContainerEffectiveStatement.class).orElseThrow());
+ }
}