Example #1
0
    def test_parse_strings_no_terminating_delimiter(self):
        text = '(foo'
        with self.assertRaisesRegex(
                MacroParsingError,
                re.escape("No closing bracket: {}".format(text))):
            parse_strings(text)

        text = '{foo)'
        with self.assertRaisesRegex(
                MacroParsingError,
                re.escape("No closing bracket: {}".format(text))):
            parse_strings(text)

        text = '[foo}'
        with self.assertRaisesRegex(
                MacroParsingError,
                re.escape("No closing bracket: {}".format(text))):
            parse_strings(text)

        text = '/foo,bar/'
        with self.assertRaisesRegex(
                MacroParsingError,
                "No terminating delimiter: {}".format(text)):
            parse_strings(text)

        text = '//foo/bar/'
        with self.assertRaisesRegex(
                MacroParsingError,
                "No terminating delimiter: {}".format(text)):
            parse_strings(text)
Example #2
0
 def test_parse_strings_too_many_parameters(self):
     text = '(foo,bar,baz)'
     with self.assertRaises(TooManyParametersError) as cm:
         parse_strings(text, num=2)
     self.assertEqual(
         cm.exception.args[0],
         "Too many parameters (expected 2): '{}'".format(text[1:-1]))
     self.assertEqual(cm.exception.args[1], len(text))
Example #3
0
    def test_parse_strings_missing_parameters(self):
        text = '(foo,bar)'
        with self.assertRaises(MissingParameterError) as cm:
            parse_strings(text, num=3)
        self.assertEqual(cm.exception.args[0], "Not enough parameters (expected 3): '{}'".format(text[1:-1]))
        self.assertEqual(cm.exception.args[1], len(text))

        text = '{foo,bar}'
        with self.assertRaises(MissingParameterError) as cm:
            parse_strings(text, num=5, defaults=('qux',))
        self.assertEqual(cm.exception.args[0], "Not enough parameters (expected 4): '{}'".format(text[1:-1]))
        self.assertEqual(cm.exception.args[1], len(text))
Example #4
0
    def test_parse_strings_missing_parameters(self):
        text = '(foo,bar)'
        with self.assertRaises(MissingParameterError) as cm:
            parse_strings(text, num=3)
        self.assertEqual(
            cm.exception.args[0],
            "Not enough parameters (expected 3): '{}'".format(text[1:-1]))
        self.assertEqual(cm.exception.args[1], len(text))

        text = '{foo,bar}'
        with self.assertRaises(MissingParameterError) as cm:
            parse_strings(text, num=5, defaults=('qux', ))
        self.assertEqual(
            cm.exception.args[0],
            "Not enough parameters (expected 4): '{}'".format(text[1:-1]))
        self.assertEqual(cm.exception.args[1], len(text))
Example #5
0
 def _get_text_width(self, template_name, **subs):
     template = self.templates[template_name]
     text_f = '{text'
     if text_f in template:
         text_f = skoolmacro.parse_strings(template, template.index(text_f),
                                           1)[1]
     return self.line_width - len(
         template.replace(text_f, 'text').format(text='', **subs))
Example #6
0
    def test_parse_strings_no_terminating_delimiter(self):
        text = '(foo'
        with self.assertRaisesRegex(MacroParsingError, re.escape("No closing bracket: {}".format(text))):
            parse_strings(text)

        text = '{foo)'
        with self.assertRaisesRegex(MacroParsingError, re.escape("No closing bracket: {}".format(text))):
            parse_strings(text)

        text = '[foo}'
        with self.assertRaisesRegex(MacroParsingError, re.escape("No closing bracket: {}".format(text))):
            parse_strings(text)

        text = '/foo,bar/'
        with self.assertRaisesRegex(MacroParsingError, "No terminating delimiter: {}".format(text)):
            parse_strings(text)

        text = '//foo/bar/'
        with self.assertRaisesRegex(MacroParsingError, "No terminating delimiter: {}".format(text)):
            parse_strings(text)
Example #7
0
    def test_parse_strings_no_parameters(self):
        msg = "No text parameter"

        with self.assertRaisesRegex(NoParametersError, msg):
            parse_strings('')

        with self.assertRaisesRegex(NoParametersError, msg):
            parse_strings(' (')

        with self.assertRaisesRegex(NoParametersError, msg):
            parse_strings('\t{')
Example #8
0
    def test_parse_strings_no_parameters(self):
        msg = "No text parameter"

        with self.assertRaisesRegex(NoParametersError, msg):
            parse_strings('')

        with self.assertRaisesRegex(NoParametersError, msg):
            parse_strings(' (')

        with self.assertRaisesRegex(NoParametersError, msg):
            parse_strings('\t{')
Example #9
0
    def test_parse_strings(self):
        # One string, blank
        self.assertEqual((2, ''), parse_strings('()', num=1))
        self.assertEqual((2, ''), parse_strings('{}', num=1))
        self.assertEqual((2, ''), parse_strings('[]', num=1))
        self.assertEqual((2, ''), parse_strings('//', num=1))
        self.assertEqual((2, ''), parse_strings('||', num=1))

        # One string, not blank
        self.assertEqual((5, 'foo'), parse_strings('(foo)', num=1))
        self.assertEqual((5, 'bar'), parse_strings('{bar}', num=1))
        self.assertEqual((5, 'baz'), parse_strings('[baz]', num=1))
        self.assertEqual((5, 'qux'), parse_strings('/qux/', num=1))
        self.assertEqual((7, 'xyzzy'), parse_strings('|xyzzy|', num=1))

        # One string, containing commas
        self.assertEqual((9, 'foo,bar'), parse_strings('(foo,bar)', num=1))
        self.assertEqual((13, 'bar,baz,qux'),
                         parse_strings('{bar,baz,qux}', num=1))
        self.assertEqual((13, 'baz,qux,y,z'),
                         parse_strings('[baz,qux,y,z]', num=1))
        self.assertEqual((9, 'qux,yyy'), parse_strings('/qux,yyy/', num=1))
        self.assertEqual((9, 'yyy,zzz'), parse_strings('|yyy,zzz|', num=1))

        # Two strings
        self.assertEqual((9, ['foo', 'bar']), parse_strings('(foo,bar)',
                                                            num=2))
        self.assertEqual((9, ['foo', 'bar']), parse_strings('{foo,bar}',
                                                            num=2))
        self.assertEqual((9, ['foo', 'bar']), parse_strings('[foo,bar]',
                                                            num=2))
        self.assertEqual((11, ['foo', 'bar']),
                         parse_strings('/,foo,bar,/', num=2))
        self.assertEqual((11, ['foo', 'bar']),
                         parse_strings('||foo|bar||', num=2))

        # Three strings, default values
        self.assertEqual((2, ['', 'bar', 'baz']),
                         parse_strings('()', num=3, defaults=('bar', 'baz')))
        self.assertEqual((5, ['foo', 'bar', 'baz']),
                         parse_strings('{foo}', num=3,
                                       defaults=('bar', 'baz')))
        self.assertEqual((9, ['foo', 'bar', 'baz']),
                         parse_strings('[foo,bar]', num=3, defaults=('baz', )))
        self.assertEqual((8, ['foo', '', 'baz']),
                         parse_strings(':;foo;;:',
                                       num=3,
                                       defaults=('bim', 'baz')))

        # Unlimited strings
        self.assertEqual((2, ['']), parse_strings('()', num=0))
        self.assertEqual((5, ['foo']), parse_strings('(foo)', num=0))
        self.assertEqual((9, ['foo', 'bar']), parse_strings('{foo,bar}',
                                                            num=0))
        self.assertEqual((13, ['foo', 'bar', 'baz']),
                         parse_strings('[foo,bar,baz]', num=0))
        self.assertEqual((19, ['foo', 'bar', 'baz', 'qux']),
                         parse_strings('/ foo bar baz qux /', num=0))
        self.assertEqual((19, ['foo', '', 'baz', '', 'xyzzy']),
                         parse_strings('|;foo;;baz;;xyzzy;|', num=0))
Example #10
0
 def test_parse_strings_too_many_parameters(self):
     text = '(foo,bar,baz)'
     with self.assertRaises(TooManyParametersError) as cm:
         parse_strings(text, num=2)
     self.assertEqual(cm.exception.args[0], "Too many parameters (expected 2): '{}'".format(text[1:-1]))
     self.assertEqual(cm.exception.args[1], len(text))
Example #11
0
    def test_parse_strings(self):
        # One string, blank
        self.assertEqual((2, ''), parse_strings('()', num=1))
        self.assertEqual((2, ''), parse_strings('{}', num=1))
        self.assertEqual((2, ''), parse_strings('[]', num=1))
        self.assertEqual((2, ''), parse_strings('//', num=1))
        self.assertEqual((2, ''), parse_strings('||', num=1))

        # One string, not blank
        self.assertEqual((5, 'foo'), parse_strings('(foo)', num=1))
        self.assertEqual((5, 'bar'), parse_strings('{bar}', num=1))
        self.assertEqual((5, 'baz'), parse_strings('[baz]', num=1))
        self.assertEqual((5, 'qux'), parse_strings('/qux/', num=1))
        self.assertEqual((7, 'xyzzy'), parse_strings('|xyzzy|', num=1))

        # Two strings
        self.assertEqual((9, ['foo', 'bar']), parse_strings('(foo,bar)', num=2))
        self.assertEqual((9, ['foo', 'bar']), parse_strings('{foo,bar}', num=2))
        self.assertEqual((9, ['foo', 'bar']), parse_strings('[foo,bar]', num=2))
        self.assertEqual((11, ['foo', 'bar']), parse_strings('/,foo,bar,/', num=2))
        self.assertEqual((11, ['foo', 'bar']), parse_strings('||foo|bar||', num=2))

        # Three strings, default values
        self.assertEqual((2, ['', 'bar', 'baz']), parse_strings('()', num=3, defaults=('bar', 'baz')))
        self.assertEqual((5, ['foo', 'bar', 'baz']), parse_strings('{foo}', num=3, defaults=('bar', 'baz')))
        self.assertEqual((9, ['foo', 'bar', 'baz']), parse_strings('[foo,bar]', num=3, defaults=('baz',)))
        self.assertEqual((8, ['foo', '', 'baz']), parse_strings(':;foo;;:', num=3, defaults=('bim', 'baz')))

        # Unlimited strings
        self.assertEqual((2, ['']), parse_strings('()', num=0))
        self.assertEqual((5, ['foo']), parse_strings('(foo)', num=0))
        self.assertEqual((9, ['foo', 'bar']), parse_strings('{foo,bar}', num=0))
        self.assertEqual((13, ['foo', 'bar', 'baz']), parse_strings('[foo,bar,baz]', num=0))
        self.assertEqual((19, ['foo', 'bar', 'baz', 'qux']), parse_strings('/ foo bar baz qux /', num=0))
        self.assertEqual((19, ['foo', '', 'baz', '', 'xyzzy']), parse_strings('|;foo;;baz;;xyzzy;|', num=0))
Example #12
0
def parse_s(text, index, case):
    end, s = parse_strings(text, index, 1)
    return end, s.lower() if case == 1 else s