aboutsummaryrefslogtreecommitdiff
path: root/yapftests/subtype_assigner_test.py
diff options
context:
space:
mode:
Diffstat (limited to 'yapftests/subtype_assigner_test.py')
-rw-r--r--yapftests/subtype_assigner_test.py323
1 files changed, 205 insertions, 118 deletions
diff --git a/yapftests/subtype_assigner_test.py b/yapftests/subtype_assigner_test.py
index 8daead9..145a96e 100644
--- a/yapftests/subtype_assigner_test.py
+++ b/yapftests/subtype_assigner_test.py
@@ -18,24 +18,25 @@ import unittest
from yapf.yapflib import format_token
from yapf.yapflib import pytree_utils
+from yapf.yapflib import subtypes
from yapftests import yapf_test_helper
class SubtypeAssignerTest(yapf_test_helper.YAPFTest):
- def _CheckFormatTokenSubtypes(self, uwlines, list_of_expected):
- """Check that the tokens in the UnwrappedLines have the expected subtypes.
+ def _CheckFormatTokenSubtypes(self, llines, list_of_expected):
+ """Check that the tokens in the LogicalLines have the expected subtypes.
Args:
- uwlines: list of UnwrappedLine.
+ llines: list of LogicalLine.
list_of_expected: list of (name, subtype) pairs. Non-semantic tokens are
filtered out from the expected values.
"""
actual = []
- for uwl in uwlines:
+ for lline in llines:
filtered_values = [(ft.value, ft.subtypes)
- for ft in uwl.tokens
+ for ft in lline.tokens
if ft.name not in pytree_utils.NONSEMANTIC_TOKENS]
if filtered_values:
actual.append(filtered_values)
@@ -43,140 +44,222 @@ class SubtypeAssignerTest(yapf_test_helper.YAPFTest):
self.assertEqual(list_of_expected, actual)
def testFuncDefDefaultAssign(self):
+ self.maxDiff = None # pylint: disable=invalid-name
code = textwrap.dedent(r"""
def foo(a=37, *b, **c):
return -x[:42]
""")
- uwlines = yapf_test_helper.ParseAndUnwrap(code)
- self._CheckFormatTokenSubtypes(uwlines, [
- [('def', [format_token.Subtype.NONE]),
- ('foo', {format_token.Subtype.FUNC_DEF}),
- ('(', [format_token.Subtype.NONE]),
- ('a', {format_token.Subtype.NONE,
- format_token.Subtype.DEFAULT_OR_NAMED_ASSIGN_ARG_LIST}),
- ('=', {format_token.Subtype.DEFAULT_OR_NAMED_ASSIGN,
- format_token.Subtype.DEFAULT_OR_NAMED_ASSIGN_ARG_LIST}),
- ('37', {format_token.Subtype.NONE,
- format_token.Subtype.DEFAULT_OR_NAMED_ASSIGN_ARG_LIST}),
- (',', {format_token.Subtype.NONE}),
- ('*', {format_token.Subtype.VARARGS_STAR,
- format_token.Subtype.DEFAULT_OR_NAMED_ASSIGN_ARG_LIST}),
- ('b', {format_token.Subtype.NONE,
- format_token.Subtype.DEFAULT_OR_NAMED_ASSIGN_ARG_LIST}),
- (',', {format_token.Subtype.NONE}),
- ('**', {format_token.Subtype.KWARGS_STAR_STAR,
- format_token.Subtype.DEFAULT_OR_NAMED_ASSIGN_ARG_LIST}),
- ('c', {format_token.Subtype.NONE,
- format_token.Subtype.DEFAULT_OR_NAMED_ASSIGN_ARG_LIST}),
- (')', [format_token.Subtype.NONE]),
- (':', [format_token.Subtype.NONE])],
- [('return', [format_token.Subtype.NONE]),
- ('-', {format_token.Subtype.UNARY_OPERATOR}),
- ('x', [format_token.Subtype.NONE]),
- ('[', {format_token.Subtype.SUBSCRIPT_BRACKET}),
- (':', {format_token.Subtype.SUBSCRIPT_COLON}),
- ('42', [format_token.Subtype.NONE]),
- (']', {format_token.Subtype.SUBSCRIPT_BRACKET})],
- ]) # yapf: disable
+ llines = yapf_test_helper.ParseAndUnwrap(code)
+ self._CheckFormatTokenSubtypes(llines, [
+ [
+ ('def', {subtypes.NONE}),
+ ('foo', {subtypes.FUNC_DEF}),
+ ('(', {subtypes.NONE}),
+ ('a', {
+ subtypes.NONE,
+ subtypes.DEFAULT_OR_NAMED_ASSIGN_ARG_LIST,
+ subtypes.PARAMETER_START,
+ }),
+ ('=', {
+ subtypes.DEFAULT_OR_NAMED_ASSIGN,
+ subtypes.DEFAULT_OR_NAMED_ASSIGN_ARG_LIST,
+ }),
+ ('37', {
+ subtypes.NONE,
+ subtypes.PARAMETER_STOP,
+ subtypes.DEFAULT_OR_NAMED_ASSIGN_ARG_LIST,
+ }),
+ (',', {subtypes.NONE}),
+ ('*', {
+ subtypes.PARAMETER_START,
+ subtypes.VARARGS_STAR,
+ subtypes.DEFAULT_OR_NAMED_ASSIGN_ARG_LIST,
+ }),
+ ('b', {
+ subtypes.NONE,
+ subtypes.PARAMETER_STOP,
+ subtypes.DEFAULT_OR_NAMED_ASSIGN_ARG_LIST,
+ }),
+ (',', {subtypes.NONE}),
+ ('**', {
+ subtypes.PARAMETER_START,
+ subtypes.KWARGS_STAR_STAR,
+ subtypes.DEFAULT_OR_NAMED_ASSIGN_ARG_LIST,
+ }),
+ ('c', {
+ subtypes.NONE,
+ subtypes.PARAMETER_STOP,
+ subtypes.DEFAULT_OR_NAMED_ASSIGN_ARG_LIST,
+ }),
+ (')', {subtypes.NONE}),
+ (':', {subtypes.NONE}),
+ ],
+ [
+ ('return', {subtypes.NONE}),
+ ('-', {subtypes.UNARY_OPERATOR}),
+ ('x', {subtypes.NONE}),
+ ('[', {subtypes.SUBSCRIPT_BRACKET}),
+ (':', {subtypes.SUBSCRIPT_COLON}),
+ ('42', {subtypes.NONE}),
+ (']', {subtypes.SUBSCRIPT_BRACKET}),
+ ],
+ ])
def testFuncCallWithDefaultAssign(self):
code = textwrap.dedent(r"""
foo(x, a='hello world')
""")
- uwlines = yapf_test_helper.ParseAndUnwrap(code)
- self._CheckFormatTokenSubtypes(uwlines, [
- [('foo', [format_token.Subtype.NONE]),
- ('(', [format_token.Subtype.NONE]),
- ('x', {format_token.Subtype.NONE,
- format_token.Subtype.DEFAULT_OR_NAMED_ASSIGN_ARG_LIST}),
- (',', {format_token.Subtype.NONE}),
- ('a', {format_token.Subtype.NONE,
- format_token.Subtype.DEFAULT_OR_NAMED_ASSIGN_ARG_LIST}),
- ('=', {format_token.Subtype.DEFAULT_OR_NAMED_ASSIGN}),
- ("'hello world'", {format_token.Subtype.NONE}),
- (')', [format_token.Subtype.NONE])],
- ]) # yapf: disable
+ llines = yapf_test_helper.ParseAndUnwrap(code)
+ self._CheckFormatTokenSubtypes(llines, [
+ [
+ ('foo', {subtypes.NONE}),
+ ('(', {subtypes.NONE}),
+ ('x', {
+ subtypes.NONE,
+ subtypes.DEFAULT_OR_NAMED_ASSIGN_ARG_LIST,
+ }),
+ (',', {subtypes.NONE}),
+ ('a', {
+ subtypes.NONE,
+ subtypes.DEFAULT_OR_NAMED_ASSIGN_ARG_LIST,
+ }),
+ ('=', {subtypes.DEFAULT_OR_NAMED_ASSIGN}),
+ ("'hello world'", {subtypes.NONE}),
+ (')', {subtypes.NONE}),
+ ],
+ ])
def testSetComprehension(self):
code = textwrap.dedent("""\
def foo(strs):
return {s.lower() for s in strs}
""")
- uwlines = yapf_test_helper.ParseAndUnwrap(code)
- self._CheckFormatTokenSubtypes(uwlines, [
- [('def', [format_token.Subtype.NONE]),
- ('foo', {format_token.Subtype.FUNC_DEF}),
- ('(', [format_token.Subtype.NONE]),
- ('strs', [format_token.Subtype.NONE]),
- (')', [format_token.Subtype.NONE]),
- (':', [format_token.Subtype.NONE])],
- [('return', [format_token.Subtype.NONE]),
- ('{', [format_token.Subtype.NONE]),
- ('s', {format_token.Subtype.COMP_EXPR}),
- ('.', {format_token.Subtype.COMP_EXPR}),
- ('lower', {format_token.Subtype.COMP_EXPR}),
- ('(', {format_token.Subtype.COMP_EXPR}),
- (')', {format_token.Subtype.COMP_EXPR}),
- ('for', {format_token.Subtype.DICT_SET_GENERATOR,
- format_token.Subtype.COMP_FOR}),
- ('s', {format_token.Subtype.COMP_FOR}),
- ('in', {format_token.Subtype.COMP_FOR}),
- ('strs', {format_token.Subtype.COMP_FOR}),
- ('}', [format_token.Subtype.NONE])]
- ]) # yapf: disable
+ llines = yapf_test_helper.ParseAndUnwrap(code)
+ self._CheckFormatTokenSubtypes(llines, [
+ [
+ ('def', {subtypes.NONE}),
+ ('foo', {subtypes.FUNC_DEF}),
+ ('(', {subtypes.NONE}),
+ ('strs', {
+ subtypes.NONE,
+ subtypes.PARAMETER_START,
+ subtypes.PARAMETER_STOP,
+ }),
+ (')', {subtypes.NONE}),
+ (':', {subtypes.NONE}),
+ ],
+ [
+ ('return', {subtypes.NONE}),
+ ('{', {subtypes.NONE}),
+ ('s', {subtypes.COMP_EXPR}),
+ ('.', {subtypes.COMP_EXPR}),
+ ('lower', {subtypes.COMP_EXPR}),
+ ('(', {subtypes.COMP_EXPR}),
+ (')', {subtypes.COMP_EXPR}),
+ ('for', {
+ subtypes.DICT_SET_GENERATOR,
+ subtypes.COMP_FOR,
+ }),
+ ('s', {subtypes.COMP_FOR}),
+ ('in', {subtypes.COMP_FOR}),
+ ('strs', {subtypes.COMP_FOR}),
+ ('}', {subtypes.NONE}),
+ ],
+ ])
def testUnaryNotOperator(self):
code = textwrap.dedent("""\
not a
""")
- uwlines = yapf_test_helper.ParseAndUnwrap(code)
- self._CheckFormatTokenSubtypes(uwlines, [
- [('not', {format_token.Subtype.UNARY_OPERATOR}),
- ('a', [format_token.Subtype.NONE])]
- ]) # yapf: disable
+ llines = yapf_test_helper.ParseAndUnwrap(code)
+ self._CheckFormatTokenSubtypes(llines, [[('not', {subtypes.UNARY_OPERATOR}),
+ ('a', {subtypes.NONE})]])
def testBitwiseOperators(self):
code = textwrap.dedent("""\
x = ((a | (b ^ 3) & c) << 3) >> 1
""")
- uwlines = yapf_test_helper.ParseAndUnwrap(code)
- self._CheckFormatTokenSubtypes(uwlines, [
- [('x', [format_token.Subtype.NONE]),
- ('=', {format_token.Subtype.ASSIGN_OPERATOR}),
- ('(', [format_token.Subtype.NONE]),
- ('(', [format_token.Subtype.NONE]),
- ('a', [format_token.Subtype.NONE]),
- ('|', {format_token.Subtype.BINARY_OPERATOR}),
- ('(', [format_token.Subtype.NONE]),
- ('b', [format_token.Subtype.NONE]),
- ('^', {format_token.Subtype.BINARY_OPERATOR}),
- ('3', [format_token.Subtype.NONE]),
- (')', [format_token.Subtype.NONE]),
- ('&', {format_token.Subtype.BINARY_OPERATOR}),
- ('c', [format_token.Subtype.NONE]),
- (')', [format_token.Subtype.NONE]),
- ('<<', {format_token.Subtype.BINARY_OPERATOR}),
- ('3', [format_token.Subtype.NONE]),
- (')', [format_token.Subtype.NONE]),
- ('>>', {format_token.Subtype.BINARY_OPERATOR}),
- ('1', [format_token.Subtype.NONE]),],
- ]) # yapf: disable
+ llines = yapf_test_helper.ParseAndUnwrap(code)
+ self._CheckFormatTokenSubtypes(llines, [
+ [
+ ('x', {subtypes.NONE}),
+ ('=', {subtypes.ASSIGN_OPERATOR}),
+ ('(', {subtypes.NONE}),
+ ('(', {subtypes.NONE}),
+ ('a', {subtypes.NONE}),
+ ('|', {subtypes.BINARY_OPERATOR}),
+ ('(', {subtypes.NONE}),
+ ('b', {subtypes.NONE}),
+ ('^', {subtypes.BINARY_OPERATOR}),
+ ('3', {subtypes.NONE}),
+ (')', {subtypes.NONE}),
+ ('&', {subtypes.BINARY_OPERATOR}),
+ ('c', {subtypes.NONE}),
+ (')', {subtypes.NONE}),
+ ('<<', {subtypes.BINARY_OPERATOR}),
+ ('3', {subtypes.NONE}),
+ (')', {subtypes.NONE}),
+ ('>>', {subtypes.BINARY_OPERATOR}),
+ ('1', {subtypes.NONE}),
+ ],
+ ])
+
+ def testArithmeticOperators(self):
+ code = textwrap.dedent("""\
+ x = ((a + (b - 3) * (1 % c) @ d) / 3) // 1
+ """)
+ llines = yapf_test_helper.ParseAndUnwrap(code)
+ self._CheckFormatTokenSubtypes(llines, [
+ [
+ ('x', {subtypes.NONE}),
+ ('=', {subtypes.ASSIGN_OPERATOR}),
+ ('(', {subtypes.NONE}),
+ ('(', {subtypes.NONE}),
+ ('a', {subtypes.NONE}),
+ ('+', {subtypes.BINARY_OPERATOR}),
+ ('(', {subtypes.NONE}),
+ ('b', {subtypes.NONE}),
+ ('-', {
+ subtypes.BINARY_OPERATOR,
+ subtypes.SIMPLE_EXPRESSION,
+ }),
+ ('3', {subtypes.NONE}),
+ (')', {subtypes.NONE}),
+ ('*', {subtypes.BINARY_OPERATOR}),
+ ('(', {subtypes.NONE}),
+ ('1', {subtypes.NONE}),
+ ('%', {
+ subtypes.BINARY_OPERATOR,
+ subtypes.SIMPLE_EXPRESSION,
+ }),
+ ('c', {subtypes.NONE}),
+ (')', {subtypes.NONE}),
+ ('@', {subtypes.BINARY_OPERATOR}),
+ ('d', {subtypes.NONE}),
+ (')', {subtypes.NONE}),
+ ('/', {subtypes.BINARY_OPERATOR}),
+ ('3', {subtypes.NONE}),
+ (')', {subtypes.NONE}),
+ ('//', {subtypes.BINARY_OPERATOR}),
+ ('1', {subtypes.NONE}),
+ ],
+ ])
def testSubscriptColon(self):
code = textwrap.dedent("""\
x[0:42:1]
""")
- uwlines = yapf_test_helper.ParseAndUnwrap(code)
- self._CheckFormatTokenSubtypes(uwlines, [
+ llines = yapf_test_helper.ParseAndUnwrap(code)
+ self._CheckFormatTokenSubtypes(llines, [
[
- ('x', [format_token.Subtype.NONE]),
- ('[', {format_token.Subtype.SUBSCRIPT_BRACKET}),
- ('0', [format_token.Subtype.NONE]),
- (':', {format_token.Subtype.SUBSCRIPT_COLON}),
- ('42', [format_token.Subtype.NONE]),
- (':', {format_token.Subtype.SUBSCRIPT_COLON}),
- ('1', [format_token.Subtype.NONE]),
- (']', {format_token.Subtype.SUBSCRIPT_BRACKET}),
+ ('x', {subtypes.NONE}),
+ ('[', {subtypes.SUBSCRIPT_BRACKET}),
+ ('0', {subtypes.NONE}),
+ (':', {subtypes.SUBSCRIPT_COLON}),
+ ('42', {subtypes.NONE}),
+ (':', {subtypes.SUBSCRIPT_COLON}),
+ ('1', {subtypes.NONE}),
+ (']', {subtypes.SUBSCRIPT_BRACKET}),
],
])
@@ -184,16 +267,20 @@ class SubtypeAssignerTest(yapf_test_helper.YAPFTest):
code = textwrap.dedent("""\
[a, *b]
""")
- uwlines = yapf_test_helper.ParseAndUnwrap(code)
- self._CheckFormatTokenSubtypes(uwlines, [
- [('[', [format_token.Subtype.NONE]),
- ('a', [format_token.Subtype.NONE]),
- (',', [format_token.Subtype.NONE]),
- ('*', {format_token.Subtype.UNARY_OPERATOR,
- format_token.Subtype.VARARGS_STAR}),
- ('b', [format_token.Subtype.NONE]),
- (']', [format_token.Subtype.NONE]),],
- ]) # yapf: disable
+ llines = yapf_test_helper.ParseAndUnwrap(code)
+ self._CheckFormatTokenSubtypes(llines, [
+ [
+ ('[', {subtypes.NONE}),
+ ('a', {subtypes.NONE}),
+ (',', {subtypes.NONE}),
+ ('*', {
+ subtypes.UNARY_OPERATOR,
+ subtypes.VARARGS_STAR,
+ }),
+ ('b', {subtypes.NONE}),
+ (']', {subtypes.NONE}),
+ ],
+ ])
if __name__ == '__main__':