@Test
  public void testGeneretedTypesBitsTest() throws Exception {
    final URI yangTypesPath = getClass().getResource("/simple-bits-demo.yang").toURI();

    final SchemaContext context = RetestUtils.parseYangSources(new File(yangTypesPath));
    assertTrue(context != null);

    final BindingGenerator bindingGen = new BindingGeneratorImpl(true);
    final List<Type> genTypes = bindingGen.generateTypes(context);
    assertTrue(genTypes != null);

    List<MethodSignature> methodSignaturesList = null;

    boolean leafParentFound = false;

    boolean byteTypeFound = false;
    int classPropertiesNumb = 0;
    int toStringPropertiesNum = 0;
    int equalPropertiesNum = 0;
    int hashPropertiesNum = 0;

    String nameReturnParamType = "";
    boolean getByteLeafMethodFound = false;
    boolean setByteLeafMethodFound = false;
    int setByteLeafMethodParamNum = 0;

    for (final Type type : genTypes) {
      if (type instanceof GeneratedTransferObject) { // searching for
        // ByteType
        final GeneratedTransferObject genTO = (GeneratedTransferObject) type;
        if (genTO.getName().equals("ByteType")) {
          byteTypeFound = true;
          List<GeneratedProperty> genProperties = genTO.getProperties();
          classPropertiesNumb = genProperties.size();

          genProperties = null;
          genProperties = genTO.getToStringIdentifiers();
          toStringPropertiesNum = genProperties.size();

          genProperties = null;
          genProperties = genTO.getEqualsIdentifiers();
          equalPropertiesNum = genProperties.size();

          genProperties = null;
          genProperties = genTO.getHashCodeIdentifiers();
          hashPropertiesNum = genProperties.size();
        }
      } else if (type instanceof GeneratedType) { // searching for
        // interface
        // LeafParameterContainer
        final GeneratedType genType = (GeneratedType) type;
        if (genType.getName().equals("LeafParentContainer")) {
          leafParentFound = true;
          // check of methods
          methodSignaturesList = genType.getMethodDefinitions();
          if (methodSignaturesList != null) {
            for (MethodSignature methodSignature : methodSignaturesList) { // loop
              // through
              // all
              // methods
              if (methodSignature.getName().equals("getByteLeaf")) {
                getByteLeafMethodFound = true;

                nameReturnParamType = methodSignature.getReturnType().getName();
              } else if (methodSignature.getName().equals("setByteLeaf")) {
                setByteLeafMethodFound = true;

                List<Parameter> parameters = methodSignature.getParameters();
                setByteLeafMethodParamNum = parameters.size();
              }
            }
          }
        }
      }
    }

    assertTrue(byteTypeFound);

    assertEquals(8, classPropertiesNumb);

    assertEquals(8, toStringPropertiesNum);
    assertEquals(8, equalPropertiesNum);
    assertEquals(8, hashPropertiesNum);
    assertTrue(leafParentFound);

    assertNotNull(methodSignaturesList);

    assertTrue(getByteLeafMethodFound);
    assertEquals("ByteType", nameReturnParamType);

    assertFalse(setByteLeafMethodFound);
    assertEquals(0, setByteLeafMethodParamNum);
  }
  @Test
  public void testInnerClassCreationForBitsAndUnionsInLeafes() throws URISyntaxException {
    final URI yangTypesPath = getClass().getResource("/bit_and_union_in_leaf.yang").toURI();

    final SchemaContext context = resolveSchemaContextFromFiles(yangTypesPath);
    assertTrue(context != null);

    final BindingGenerator bindingGen = new BindingGeneratorImpl();
    final List<Type> genTypes = bindingGen.generateTypes(context);
    assertTrue(genTypes != null);

    boolean parentContainerFound = false;
    boolean bitLeafTOFound = false;
    boolean unionLeafTOFound = false;

    boolean firstBitPropertyFound = false;
    boolean secondBitPropertyFound = false;
    boolean thirdBitPropertyFound = false;

    boolean firstBitPropertyTypeOK = false;
    boolean secondBitPropertyTypeOK = false;
    boolean thirdBitPropertyTypeOK = false;

    boolean int32UnionPropertyFound = false;
    boolean int32UnionPropertyTypeOK = false;
    boolean stringUnionPropertyFound = false;
    boolean stringUnionPropertyTypeOK = false;
    boolean uint8UnionPropertyFound = false;
    boolean uint8UnionPropertyTypeOK = false;

    for (Type type : genTypes) {
      if (type instanceof GeneratedType && !(type instanceof GeneratedTransferObject)) {
        if (type.getName().equals("ParentContainer")) {
          parentContainerFound = true;
          GeneratedType parentContainer = (GeneratedType) type;
          List<GeneratedType> enclosedTypes = parentContainer.getEnclosedTypes();
          for (GeneratedType genType : enclosedTypes) {
            if (genType instanceof GeneratedTransferObject) {
              if (genType.getName().equals("BitLeaf")) {
                bitLeafTOFound = true;
                GeneratedTransferObject bitLeafTO = (GeneratedTransferObject) genType;

                List<GeneratedProperty> bitLeafProperties = bitLeafTO.getProperties();
                for (GeneratedProperty bitLeafProperty : bitLeafProperties) {
                  String bitLeafPropertyType = bitLeafProperty.getReturnType().getName();
                  if (bitLeafProperty.getName().equals("firstBit")) {
                    firstBitPropertyFound = true;
                    if (bitLeafPropertyType.equals("Boolean")) {
                      firstBitPropertyTypeOK = true;
                    }
                  } else if (bitLeafProperty.getName().equals("secondBit")) {
                    secondBitPropertyFound = true;
                    if (bitLeafPropertyType.equals("Boolean")) {
                      secondBitPropertyTypeOK = true;
                    }
                  } else if (bitLeafProperty.getName().equals("thirdBit")) {
                    thirdBitPropertyFound = true;
                    if (bitLeafPropertyType.equals("Boolean")) {
                      thirdBitPropertyTypeOK = true;
                    }
                  }
                }

              } else if (genType.getName().equals("UnionLeaf")) {
                unionLeafTOFound = true;
                GeneratedTransferObject unionLeafTO = (GeneratedTransferObject) genType;

                List<GeneratedProperty> unionLeafProperties = unionLeafTO.getProperties();
                for (GeneratedProperty unionLeafProperty : unionLeafProperties) {
                  String unionLeafPropertyType = unionLeafProperty.getReturnType().getName();
                  if (unionLeafProperty.getName().equals("int32")) {
                    int32UnionPropertyFound = true;
                    if (unionLeafPropertyType.equals("Integer")) {
                      int32UnionPropertyTypeOK = true;
                    }
                  } else if (unionLeafProperty.getName().equals("string")) {
                    stringUnionPropertyFound = true;
                    if (unionLeafPropertyType.equals("String")) {
                      stringUnionPropertyTypeOK = true;
                    }
                  } else if (unionLeafProperty.getName().equals("uint8")) {
                    uint8UnionPropertyFound = true;
                    if (unionLeafPropertyType.equals("Short")) {
                      uint8UnionPropertyTypeOK = true;
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
    assertTrue(parentContainerFound);

    assertTrue(bitLeafTOFound);
    assertTrue(firstBitPropertyFound);
    assertTrue(secondBitPropertyFound);
    assertTrue(thirdBitPropertyFound);

    assertTrue(firstBitPropertyTypeOK);
    assertTrue(secondBitPropertyTypeOK);
    assertTrue(thirdBitPropertyTypeOK);

    assertTrue(unionLeafTOFound);
    assertTrue(int32UnionPropertyFound);
    assertTrue(int32UnionPropertyTypeOK);
    assertTrue(stringUnionPropertyFound);
    assertTrue(stringUnionPropertyTypeOK);
    assertTrue(uint8UnionPropertyFound);
    assertTrue(uint8UnionPropertyTypeOK);
  }