Source code for contracts.testing.test_docstring_parsing

import unittest

from ..docstring_parsing import DocStringInfo, Arg, number_of_spaces
from contracts.interface import add_prefix


examples = {"""
        Provides a RGB representation of the values by interpolating the range
        [min(value),max(value)] into the colorspace [min_color, max_color].

        :param value: The field to represent.
        :type  value: HxW array

        :param max_value: If specified, everything *above* is clipped.
        :type max_value: float
        :param min_value: If specified, everything *below* is clipped.
        :type min_value: float

        :param min_color:  Color to give to the minimum values.


        :return: A RGB image.
        :rtype: HxWx3 uint8

        :return: gray

    """: DocStringInfo(docstring='\n        Provides a RGB representation of the values by interpolating the range\n'
                         '        [min(value),max(value)] into the colorspace [min_color, max_color].\n',
  params={
        'value': Arg('The field to represent.', 'HxW array'),
        'max_value': Arg('If specified, everything *above* is clipped.', 'float'),
        'min_value': Arg('If specified, everything *below* is clipped.', 'float'),
        'min_color': Arg('Color to give to the minimum values.', None),
  },
  returns=[Arg('A RGB image.', "HxWx3 uint8"), Arg('gray', None)]
)
}


[docs]class DocStringTest(unittest.TestCase):
[docs] def test_parsing(self): for string in examples: parsed = DocStringInfo.parse(string) "%s" % parsed "%r" % parsed result = examples[string] self.assertEqual(result, parsed)
[docs] def test_number_of_spaces(self): self.assertEqual(number_of_spaces(''), 0) self.assertEqual(number_of_spaces(' '), 1) self.assertEqual(number_of_spaces(' '), 2) self.assertEqual(number_of_spaces('11'), 0) self.assertEqual(number_of_spaces(' 223'), 1) self.assertEqual(number_of_spaces(' 4343'), 2)
[docs] def test_reparsing(self): for string, result in examples.items(): #@UnusedVariable parsed = DocStringInfo.parse(string) converted = "%s" % parsed reparsed = DocStringInfo.parse(converted) msg = ('First string:\n%s\nParsed as:\n%s\n' % (add_prefix(string, '|'), add_prefix('%r' % parsed, '|'))) msg += ('Converted:\n%s\nReparsed as:\n%s\n' % (add_prefix(converted, '|'), add_prefix('%r' % reparsed, '|'))) self.assertEqual(parsed, reparsed, msg=msg)
[docs] def test_inline_params(self): def test_inline_parsing(docstring, expected_type="type", expected_desc="desc"): info = DocStringInfo.parse(docstring) self.assertTrue("name" in info.params) self.assertEqual(info.params["name"].type, expected_type) self.assertEqual(info.params["name"].desc, expected_desc) # Proper syntax test_inline_parsing(":param type name: desc") test_inline_parsing(":param name: desc", None) test_inline_parsing(":param name:", None, None) # Weird syntax for people who like to break things. test_inline_parsing(" : param type name : desc ") test_inline_parsing(" : param name : desc ", None) test_inline_parsing(" : param name : ", None, None) test_inline_parsing(" : param type , > 0 name : ", "type , > 0", None)
[docs] def test_inline_returns(self): def test_inline_parsing(docstring, expected_type="type", expected_desc="desc"): info = DocStringInfo.parse(docstring) self.assertTrue(len(info.returns) > 0) self.assertEqual(info.returns[0].type, expected_type) self.assertEqual(info.returns[0].desc, expected_desc) # Proper syntax test_inline_parsing(":returns type: desc") test_inline_parsing(":returns: desc", None) test_inline_parsing(":returns:", None, None) # Weird syntax for people who like to break things. test_inline_parsing(" : returns type : desc ") test_inline_parsing(" : returns : desc ", None) test_inline_parsing(" : returns : ", None, None) test_inline_parsing(" : returns type , > 0 : ", "type , > 0", None)