This file is indexed.

/usr/lib/python3/dist-packages/bpython/test/test_preprocess.py is in bpython3 0.15-2.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
from code import compile_command as compiler
from functools import partial
import difflib
import inspect
import re

from bpython.curtsiesfrontend.interpreter import code_finished_will_parse
from bpython.curtsiesfrontend.preprocess import preprocess
from bpython.test import unittest
from bpython.test.fodder import original, processed


skip = unittest.skip
preproc = partial(preprocess, compiler=compiler)


def get_fodder_source(test_name):
    pattern = r'#StartTest-%s\n(.*?)#EndTest' % (test_name,)
    orig, xformed = [re.search(pattern, inspect.getsource(module), re.DOTALL)
                     for module in [original, processed]]

    if not orig:
        raise ValueError("Can't locate test %s in original fodder file" %
                         (test_name,))
    if not xformed:
        raise ValueError("Can't locate test %s in processed fodder file" %
                         (test_name,))
    return orig.group(1), xformed.group(1)


class TestPreprocessing(unittest.TestCase):

    def assertCompiles(self, source):
        finished, parsable = code_finished_will_parse(source, compiler)
        return finished and parsable

    def test_indent_empty_lines_nops(self):
        self.assertEqual(preproc('hello'), 'hello')
        self.assertEqual(preproc('hello\ngoodbye'), 'hello\ngoodbye')
        self.assertEqual(preproc('a\n    b\nc\n'), 'a\n    b\nc\n')

    def assertShowWhitespaceEqual(self, a, b):
        self.assertEqual(
            a, b,
            ''.join(difflib.context_diff(a.replace(' ', '~').splitlines(True),
                                         b.replace(' ', '~').splitlines(True),
                                         fromfile='actual',
                                         tofile='expected',
                                         n=5)))

    def assertDefinitionIndented(self, obj):
        name = obj.__name__
        obj2 = getattr(processed, name)
        orig = inspect.getsource(obj)
        xformed = inspect.getsource(obj2)
        self.assertShowWhitespaceEqual(preproc(orig), xformed)
        self.assertCompiles(xformed)

    def assertLinesIndented(self, test_name):
        orig, xformed = get_fodder_source(test_name)
        self.assertShowWhitespaceEqual(preproc(orig), xformed)
        self.assertCompiles(xformed)

    def assertIndented(self, obj_or_name):
        if isinstance(obj_or_name, str):
            self.assertLinesIndented(obj_or_name)
        else:
            self.assertDefinitionIndented(obj_or_name)

    def test_empty_line_between_methods(self):
        self.assertIndented(original.BlankLineBetweenMethods)

    def test_empty_line_within_class(self):
        self.assertIndented(original.BlankLineInFunction)

    def test_blank_lines_in_for_loop(self):
        self.assertIndented('blank_lines_in_for_loop')

    @skip("More advanced technique required: need to try compiling and "
          "backtracking")
    def test_blank_line_in_try_catch(self):
        self.assertIndented('blank_line_in_try_catch')

    @skip("More advanced technique required: need to try compiling and "
          "backtracking")
    def test_blank_line_in_try_catch_else(self):
        self.assertIndented('blank_line_in_try_catch_else')

    def test_blank_trailing_line(self):
        self.assertIndented('blank_trailing_line')

    def test_tabs(self):
        self.assertIndented(original.tabs)