Hi, I am using doctest and I am struggling with newlines characters (see below). One is the newline escape (backslash) for a long dictionary definition. The other is an embedded \n in the output. I used the +NORMALIZE_WHITESPACE directive. I also tried using a triple-quoted raw docstring. Any ideas?
While we're at it: is this a good book? http://www.packtpub.com/python-testing-beginners-guide/book It should be complete, not too shallow, nor so detailed that is becomes too impractical. Thanks! import doctest import copy def _setMultRespDefsEx(multRespDefs): """>>> multRespDefs = {'mesetx': {'countedValue': '1', 'firstVarIsLabel': True, \ 'label': '', 'setType': 'E','varNames': ['mevar1', 'mevar2', \ 'var3']}, 'mesety': {'countedValue': 'Yes', 'firstVarIsLabel': \ False, 'label': 'Enhanced set with user specified label', \ 'setType': 'E', 'varNames': ['mevar4', 'mevar5', 'mevar6']}} >>> _setMultRespDefsEx(multRespDefs) $mesetx=E 11 1 1 0 mevar1 mevar2 mevar3 $mesety=E 1 3 Yes 38 Enhanced set with user specified label mevar4 mevar5 mevar6 # doctest: +NORMALIZE_WHITESPACE""" mrDefs = [] for setName, rest in multRespDefs.iteritems(): if rest["setType"] != "E": return {} rest["setName"] = setName v = int(rest["firstVarIsLabel"]) rest["firstVarIsLabel"] = v if v == 1 else "" rest["valueLen"] = len(rest["countedValue"]) rest["lblLen"] = len(rest["label"]) rest["label"] = rest["label"] rest["varNames"] = " ".join(rest["varNames"]) mrDef = "$%(setName)s=%(setType)s 1%(firstVarIsLabel)s %(valueLen)s " mrDef += "%(countedValue)s %(lblLen)s %(label)s %(varNames)s" mrDefs.append((mrDef % rest).replace(" ", " ")) return "\n".join(mrDefs) if __name__ == "__main__": x = {"setType": "E", "label": "Enhanced set with user specified label", "varNames": ["mevar4", "mevar5", "mevar6"], "countedValue": "Yes", "firstVarIsLabel": False} d = {'testme': copy.deepcopy(x), 'testmeMore': copy.deepcopy(x)} print _setMultRespDefsEx(d) # prints desired result doctest.testmod() # fails because of newline! See below ********************************************************************** File "__main__", line 3, in __main__._setMultRespDefsEx Failed example: _setMultRespDefsEx(multRespDefs) Expected: $mesetx=E 11 1 1 0 mevar1 mevar2 mevar3 $mesety=E 1 3 Yes 38 Enhanced set with user specified label mevar4 mevar5 mevar6 # doctest: +NORMALIZE_WHITESPACE Got: mesetx {'countedValue': '1', 'firstVarIsLabel': True, 'setType': 'E', 'varNames': ['mevar1', 'mevar2', 'var3'], 'label': ''} mesety {'countedValue': 'Yes', 'firstVarIsLabel': False, 'setType': 'E', 'varNames': ['mevar4', 'mevar5', 'mevar6'], 'label': 'Enhanced set with user specified label'} '$mesetx=E 11 1 1 0 mevar1 mevar2 var3\n$mesety=E 1 3 Yes 38 Enhanced set with user specified label mevar4 mevar5 mevar6' ********************************************************************** 1 items had failures: 1 of 2 in __main__._setMultRespDefsEx ***Test Failed*** 1 failures. ********************************************************************** 1st error with r-escaped docstring ********************************************************************** File "__main__", line 5, in __main__._setMultRespDefsEx Failed example: multRespDefs = {'mesetx': {'countedValue': '1', 'firstVarIsLabel': True, \ Exception raised: Traceback (most recent call last): File "C:\Python26\lib\doctest.py", line 1241, in __run compileflags, 1) in test.globs File "<doctest __main__._setMultRespDefsEx[0]>", line 1 multRespDefs = {'mesetx': {'countedValue': '1', 'firstVarIsLabel': True, \ ^ SyntaxError: unexpected EOF while parsing ***************************************************** _______________________________________________ Tutor maillist - [email protected] To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor
