+/*
+ * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.yang.stmt;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.io.FileNotFoundException;
+import java.net.URISyntaxException;
+import java.util.List;
+import org.junit.Test;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
+import org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition;
+import org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition.Bit;
+import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition;
+import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition.EnumPair;
+import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
+import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
+
+public class Bug6316 {
+ @Test
+ public void test() throws SourceException, FileNotFoundException, ReactorException, URISyntaxException {
+ final SchemaContext context = StmtTestUtils.parseYangSources("/bugs/bug6316");
+ assertNotNull(context);
+ verifyEnumTypedefinition(context);
+ verifyBitsTypedefinition(context);
+ }
+
+ private void verifyEnumTypedefinition(final SchemaContext context) {
+ final DataSchemaNode dataChildByName = context.getDataChildByName(QName
+ .create("foo", "1970-01-01", "enum-leaf"));
+ assertTrue(dataChildByName instanceof LeafSchemaNode);
+ final LeafSchemaNode enumLeaf = (LeafSchemaNode) dataChildByName;
+ final TypeDefinition<? extends TypeDefinition<?>> type = enumLeaf.getType();
+ assertTrue(type instanceof EnumTypeDefinition);
+ final EnumTypeDefinition myEnumeration = (EnumTypeDefinition) type;
+ final List<EnumPair> values = myEnumeration.getValues();
+ for (final EnumPair enumPair : values) {
+ final String name = enumPair.getName();
+ switch (name) {
+ case "zero":
+ assertEquals(0, enumPair.getValue());
+ break;
+ case "twenty":
+ assertEquals(20, enumPair.getValue());
+ break;
+ case "twenty-one":
+ assertEquals(21, enumPair.getValue());
+ break;
+ case "two":
+ assertEquals(2, enumPair.getValue());
+ break;
+ case "twenty-two":
+ assertEquals(22, enumPair.getValue());
+ break;
+ default:
+ fail("Unexpected enum name.");
+ }
+ }
+ }
+
+ private void verifyBitsTypedefinition(final SchemaContext context) {
+ final DataSchemaNode dataChildByName = context.getDataChildByName(QName
+ .create("foo", "1970-01-01", "bits-leaf"));
+ assertTrue(dataChildByName instanceof LeafSchemaNode);
+ final LeafSchemaNode bitsLeaf = (LeafSchemaNode) dataChildByName;
+ final TypeDefinition<? extends TypeDefinition<?>> type = bitsLeaf.getType();
+ assertTrue(type instanceof BitsTypeDefinition);
+ final BitsTypeDefinition myBits = (BitsTypeDefinition) type;
+ final List<Bit> positions = myBits.getBits();
+ for (final Bit bit : positions) {
+ final String name = bit.getName();
+ switch (name) {
+ case "zero":
+ assertEquals(0, bit.getPosition());
+ break;
+ case "twenty":
+ assertEquals(20, bit.getPosition());
+ break;
+ case "twenty-one":
+ assertEquals(21, bit.getPosition());
+ break;
+ case "two":
+ assertEquals(2, bit.getPosition());
+ break;
+ case "twenty-two":
+ assertEquals(22, bit.getPosition());
+ break;
+ default:
+ fail("Unexpected bit name.");
+ }
+ }
+ }
+}