def testItemXMLPackUnpack(nwDummy): theProject = NWProject(nwDummy) theItem = NWItem(theProject) nwXML = etree.Element("novelWriterXML") theItem.setHandle("0123456789abc") theItem.setParent("0123456789abc") theItem.setOrder(1) theItem.setName("A Name") theItem.setClass("NOVEL") theItem.setType("FILE") theItem.setStatus("Main") theItem.setLayout("NOTE") theItem.setExpanded(True) theItem.setParaCount(3) theItem.setWordCount(5) theItem.setCharCount(7) theItem.setCursorPos(11) # Pack xContent = etree.SubElement(nwXML, "content") theItem.packXML(xContent) assert etree.tostring(xContent, pretty_print=False, encoding="utf-8") == ( b"<content>" b"<item handle=\"0123456789abc\" order=\"1\" parent=\"0123456789abc\">" b"<name>A Name</name><type>FILE</type><class>NOVEL</class><status>New</status>" b"<exported>True</exported><layout>NOTE</layout><charCount>7</charCount>" b"<wordCount>5</wordCount><paraCount>3</paraCount><cursorPos>11</cursorPos></item>" b"</content>") # Unpack assert theItem.unpackXML(xContent[0]) assert theItem.itemHandle == "0123456789abc" assert theItem.itemParent == "0123456789abc" assert theItem.itemOrder == 1 assert theItem.isExpanded assert theItem.paraCount == 3 assert theItem.wordCount == 5 assert theItem.charCount == 7 assert theItem.cursorPos == 11 assert theItem.itemClass == nwItemClass.NOVEL assert theItem.itemType == nwItemType.FILE assert theItem.itemLayout == nwItemLayout.NOTE # Errors ## Not an Item xDummy = etree.SubElement(nwXML, "stuff") assert not theItem.unpackXML(xDummy) ## Item without Handle xDummy = etree.SubElement(nwXML, "item", attrib={"stuff": "nah"}) assert not theItem.unpackXML(xDummy) ## Item with Invalid SubElement xDummy = etree.SubElement(nwXML, "item", attrib={"handle": "0123456789abc"}) xParam = etree.SubElement(xDummy, "invalid") xParam.text = "stuff" assert not theItem.unpackXML(xDummy) # Pack Valid Item xDummy = etree.SubElement(nwXML, "group") theItem._subPack(xDummy, "subGroup", {"one": "two"}, "value", False) assert etree.tostring(xDummy, pretty_print=False, encoding="utf-8") == ( b"<group><subGroup one=\"two\">value</subGroup></group>") # Pack Not Allowed None xDummy = etree.SubElement(nwXML, "group") assert theItem._subPack(xDummy, "subGroup", {}, None, False) is None assert theItem._subPack(xDummy, "subGroup", {}, "None", False) is None assert etree.tostring(xDummy, pretty_print=False, encoding="utf-8") == (b"<group/>")
def testItemClassSetter(nwDummy): theProject = NWProject(nwDummy) theItem = NWItem(theProject) # Class theItem.setClass(None) assert theItem.itemClass == nwItemClass.NO_CLASS theItem.setClass("NONSENSE") assert theItem.itemClass == nwItemClass.NO_CLASS theItem.setClass("NO_CLASS") assert theItem.itemClass == nwItemClass.NO_CLASS theItem.setClass("NOVEL") assert theItem.itemClass == nwItemClass.NOVEL theItem.setClass("PLOT") assert theItem.itemClass == nwItemClass.PLOT theItem.setClass("CHARACTER") assert theItem.itemClass == nwItemClass.CHARACTER theItem.setClass("WORLD") assert theItem.itemClass == nwItemClass.WORLD theItem.setClass("TIMELINE") assert theItem.itemClass == nwItemClass.TIMELINE theItem.setClass("OBJECT") assert theItem.itemClass == nwItemClass.OBJECT theItem.setClass("ENTITY") assert theItem.itemClass == nwItemClass.ENTITY theItem.setClass("CUSTOM") assert theItem.itemClass == nwItemClass.CUSTOM theItem.setClass("ARCHIVE") assert theItem.itemClass == nwItemClass.ARCHIVE theItem.setClass("TRASH") assert theItem.itemClass == nwItemClass.TRASH