def test_startElementNS_handlerootelement():
    schemacontext = SchemaContext()

    directorytype = XmlElementType(None, None)
    directoryhandler = directorytype.create_elementhandler("directory")

    namespace = XmlNamespace("somename.org")
    namespace.root_elementhandlers[directoryhandler.name] = directoryhandler
    schemacontext.namespaces[namespace.name] = namespace

    xmldochandler = XmlDocHandler()
    xmldochandler.schemacontext = schemacontext

    xmldochandler.startElementNS(("somename.org", "directory"), None, None)
    def build_complextype(self, xsdtype, container_element):
        elementtype = None

        if xsdtype.simplecontent and xsdtype.simplecontent.extension:
            basetype = xsdtype.simplecontent.extension.basetypereference.type

            if basetype.schema.target_namespace.uri == "http://www.w3.org/2001/XMLSchema":
                if basetype.name == "string":
                    elementtype = xmlschema_string.XmlSchema_string()
                if basetype.name == "date":
                    elementtype = xmlschema_string.XmlSchema_string()
        else:
            if xsdtype.name != None:
                elementtype = XmlElementType(xsdtype.name, None)
            else:
                elementtype = XmlElementType(None, None)
                self.complextypes[container_element.build_fullname()] = elementtype

        if xsdtype.complexcontent:
            if xsdtype.complexcontent.extension:
                basetypereference = XmlElementTypeRef(xsdtype.complexcontent.extension.basetypereference)
                elementtype.base = basetypereference
                self.schemacontext.basetypereferences.append(basetypereference)

        if xsdtype.basetyperef != None:
            basetyperelation = BaseTypeRelation(elementtype, str(xsdtype.basetyperef.type.namespace.uri), str(xsdtype.basetyperef.type.name))
            self.xmlnamespace.basetyperelations.append(basetyperelation)

        if len(xsdtype.attributes) > 0:
            for attribute in xsdtype.attributes:
                #elementtype.addAttribute(AttributeHandler(attribute.name))
                raise Exception("Attribute support not implemented yet")

        attribute_names = []

        for child in xsdtype.get_children():
            if isinstance(child, schematypes.Attribute):
                attribute = child
                attribute_names.append(str(attribute.name))

        elementtype.attributes = set(attribute_names)

        elementhandlers = self.build_elementhandlers(xsdtype)

        elementtype.add_child_elementhandlers(elementhandlers)

        self.schemacontext.all_types.append(elementtype)

        return elementtype
    def build_schemacontext(generated_schemacontext):
        """
        Sets up all schema XML element handlers
        """
        namespace = xmlnamespace.XmlNamespace(u"http://www.w3.org/2001/XMLSchema")

        schema_type = XmlElementType(None, None)
        schema_type.attributes = set(["targetNamespace"])
        schema_handler = schema_type.create_elementhandler("schema")
        schema_handler.on_element_start = generated_schemacontext.startschema

        namespace.root_elementhandlers[schema_handler.name] = schema_handler

        import_type = XmlElementType(None, None)
        import_type.attributes = set(["namespace", "schemaLocation"])
        import_handler = import_type.create_elementhandler("import")
        import_handler.on_element_start = generated_schemacontext.start_import
        import_handler.on_element_end = generated_schemacontext.endelement

        include_type = XmlElementType(None, None)
        include_type.attributes = set(["targetNamespace", "schemaLocation"])
        include_handler = include_type.create_elementhandler("include")
        include_handler.on_element_start = generated_schemacontext.start_include
        include_handler.on_element_end = generated_schemacontext.endelement

        simpletype_type = XmlElementType(None, None)
        simpletype_type.attributes = set(["name"])
        simpletype_handler = simpletype_type.create_elementhandler("simpleType")
        simpletype_handler.on_element_start = generated_schemacontext.start_simpletype
        simpletype_handler.on_element_end = generated_schemacontext.endelement

        list_type = XmlElementType(None, None)
        list_type.attributes = set(["itemType"])
        list_handler = list_type.create_elementhandler("list")
        list_handler.on_element_start = generated_schemacontext.start_list
        list_handler.on_element_end = generated_schemacontext.endelement

        restriction_type = XmlElementType(None, None)
        restriction_type.attributes = set(["base"])
        restriction_handler = restriction_type.create_elementhandler("restriction")
        restriction_handler.on_element_start = generated_schemacontext.start_restriction
        restriction_handler.on_element_end = generated_schemacontext.endelement

        enumeration_type = XmlElementType(None, None)
        enumeration_type.attributes = set(["value"])
        enumeration_handler = enumeration_type.create_elementhandler("enumeration")
        enumeration_handler.on_element_start = generated_schemacontext.start_enumeration
        enumeration_handler.on_element_end = generated_schemacontext.endelement

        maxlength_type = XmlElementType(None, None)
        maxlength_type.attributes = set(["value"])
        maxlength_handler = maxlength_type.create_elementhandler("maxLength")
        maxlength_handler.on_element_start = generated_schemacontext.start_maxlength
        maxlength_handler.on_element_end = generated_schemacontext.endelement

        mininclusive_type = XmlElementType(None, None)
        mininclusive_type.attributes = set(["value"])
        mininclusive_handler = mininclusive_type.create_elementhandler("minInclusive")
        mininclusive_handler.on_element_start = generated_schemacontext.start_mininclusive
        mininclusive_handler.on_element_end = generated_schemacontext.endelement

        maxinclusive_type = XmlElementType(None, None)
        maxinclusive_type.attributes = set(["value"])
        maxinclusive_handler = maxinclusive_type.create_elementhandler("maxInclusive")
        maxinclusive_handler.on_element_start = generated_schemacontext.start_maxinclusive
        maxinclusive_handler.on_element_end = generated_schemacontext.endelement

        fractiondigits_type = XmlElementType(None, None)
        fractiondigits_handler = fractiondigits_type.create_elementhandler("fractionDigits")
        fractiondigits_handler.on_element_start = generated_schemacontext.start_fractiondigits
        fractiondigits_handler.on_element_end = generated_schemacontext.endelement

        union_type = XmlElementType(None, None)
        union_handler = union_type.create_elementhandler("union")
        union_handler.on_element_start = generated_schemacontext.start_union
        union_handler.on_element_end = generated_schemacontext.endelement

        element_type = XmlElementType(None, None)
        element_type.attributes = set(["name", "ref", "type", "substitutionGroup", "minOccurs", "maxOccurs"])
        element_handler = element_type.create_elementhandler("element")
        element_handler.on_element_start = generated_schemacontext.start_element
        element_handler.on_element_end = generated_schemacontext.endelement

        complextype_type = XmlElementType(None, None)
        complextype_type.attributes = set(["name", "abstract"])
        complextype_handler = complextype_type.create_elementhandler("complexType")
        complextype_handler.on_element_start = generated_schemacontext.start_complextype
        complextype_handler.on_element_end = generated_schemacontext.endelement

        attribute_type = XmlElementType(None, None)
        attribute_type.attributes = set(["name", "type", "use"])
        attribute_handler = attribute_type.create_elementhandler("attribute")
        attribute_handler.on_element_start = generated_schemacontext.start_attribute
        attribute_handler.on_element_end = generated_schemacontext.endelement

        complexcontent_type = XmlElementType(None, None)
        complexcontent_handler = complexcontent_type.create_elementhandler("complexContent")
        complexcontent_handler.on_element_start = generated_schemacontext.start_complexcontent
        complexcontent_handler.on_element_end = generated_schemacontext.endelement

        simplecontent_type = XmlElementType(None, None)
        simplecontent_handler = simplecontent_type.create_elementhandler("simpleContent")
        simplecontent_handler.on_element_start = generated_schemacontext.start_simplecontent
        simplecontent_handler.on_element_end = generated_schemacontext.endelement

        extension_type = XmlElementType(None, None)
        extension_type.attributes = set(["base"])
        extension_handler = extension_type.create_elementhandler("extension")
        extension_handler.on_element_start = generated_schemacontext.start_extension
        extension_handler.on_element_end = generated_schemacontext.endelement

        sequence_type = XmlElementType(None, None)
        sequence_handler = sequence_type.create_elementhandler("sequence")
        sequence_handler.on_element_start = generated_schemacontext.start_sequence
        sequence_handler.on_element_end = generated_schemacontext.endelement

        all_type = XmlElementType(None, None)
        all_handler = all_type.create_elementhandler("all")
        all_handler.on_element_start = generated_schemacontext.start_all
        all_handler.on_element_end = generated_schemacontext.endelement

        choice_type = XmlElementType(None, None)
        choice_handler = choice_type.create_elementhandler("choice")
        choice_handler.on_element_start = generated_schemacontext.start_choice
        choice_handler.on_element_end = generated_schemacontext.endelement

        # Link all tree elements together
        schema_handler.elementtype.add_child_elementhandlers(import_handler, include_handler, simpletype_handler, element_handler, complextype_handler)
        list_handler.elementtype.add_child_elementhandlers(simpletype_handler)
        simpletype_handler.elementtype.add_child_elementhandlers(list_handler, restriction_handler, union_handler)
        restriction_handler.elementtype.add_child_elementhandlers(enumeration_handler, maxlength_handler, mininclusive_handler, maxinclusive_handler, fractiondigits_handler)
        union_handler.elementtype.add_child_elementhandlers(simpletype_handler)
        element_handler.elementtype.add_child_elementhandlers(simpletype_handler, complextype_handler)
        attribute_handler.elementtype.add_child_elementhandlers(simpletype_handler)
        complextype_handler.elementtype.add_child_elementhandlers(attribute_handler, complexcontent_handler, simplecontent_handler, sequence_handler, all_handler, choice_handler)
        complexcontent_handler.elementtype.add_child_elementhandlers(extension_handler)
        simplecontent_handler.elementtype.add_child_elementhandlers(extension_handler)
        extension_handler.elementtype.add_child_elementhandlers(sequence_handler, attribute_handler)
        extension_handler.elementtype.add_child_elementhandlers(sequence_handler, all_handler)
        all_handler.elementtype.add_child_elementhandlers(element_handler)
        sequence_handler.elementtype.add_child_elementhandlers(element_handler, choice_handler)
        choice_handler.elementtype.add_child_elementhandlers(element_handler)

        schemacontext = SchemaContext()

        schemacontext.namespaces[namespace.name] = namespace

        return schemacontext