xref: /aosp_15_r20/external/yapf/yapftests/logical_line_test.py (revision 7249d1a64f4850ccf838e62a46276f891f72998e)
1*7249d1a6SKrzysztof Kosiński# Copyright 2015 Google Inc. All Rights Reserved.
2*7249d1a6SKrzysztof Kosiński#
3*7249d1a6SKrzysztof Kosiński# Licensed under the Apache License, Version 2.0 (the "License");
4*7249d1a6SKrzysztof Kosiński# you may not use this file except in compliance with the License.
5*7249d1a6SKrzysztof Kosiński# You may obtain a copy of the License at
6*7249d1a6SKrzysztof Kosiński#
7*7249d1a6SKrzysztof Kosiński#     http://www.apache.org/licenses/LICENSE-2.0
8*7249d1a6SKrzysztof Kosiński#
9*7249d1a6SKrzysztof Kosiński# Unless required by applicable law or agreed to in writing, software
10*7249d1a6SKrzysztof Kosiński# distributed under the License is distributed on an "AS IS" BASIS,
11*7249d1a6SKrzysztof Kosiński# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*7249d1a6SKrzysztof Kosiński# See the License for the specific language governing permissions and
13*7249d1a6SKrzysztof Kosiński# limitations under the License.
14*7249d1a6SKrzysztof Kosiński"""Tests for yapf.logical_line."""
15*7249d1a6SKrzysztof Kosiński
16*7249d1a6SKrzysztof Kosińskiimport textwrap
17*7249d1a6SKrzysztof Kosińskiimport unittest
18*7249d1a6SKrzysztof Kosiński
19*7249d1a6SKrzysztof Kosińskifrom lib2to3 import pytree
20*7249d1a6SKrzysztof Kosińskifrom lib2to3.pgen2 import token
21*7249d1a6SKrzysztof Kosiński
22*7249d1a6SKrzysztof Kosińskifrom yapf.yapflib import format_token
23*7249d1a6SKrzysztof Kosińskifrom yapf.yapflib import logical_line
24*7249d1a6SKrzysztof Kosińskifrom yapf.yapflib import split_penalty
25*7249d1a6SKrzysztof Kosiński
26*7249d1a6SKrzysztof Kosińskifrom yapftests import yapf_test_helper
27*7249d1a6SKrzysztof Kosiński
28*7249d1a6SKrzysztof Kosiński
29*7249d1a6SKrzysztof Kosińskiclass LogicalLineBasicTest(unittest.TestCase):
30*7249d1a6SKrzysztof Kosiński
31*7249d1a6SKrzysztof Kosiński  def testConstruction(self):
32*7249d1a6SKrzysztof Kosiński    toks = _MakeFormatTokenList([(token.DOT, '.'), (token.VBAR, '|')])
33*7249d1a6SKrzysztof Kosiński    lline = logical_line.LogicalLine(20, toks)
34*7249d1a6SKrzysztof Kosiński    self.assertEqual(20, lline.depth)
35*7249d1a6SKrzysztof Kosiński    self.assertEqual(['DOT', 'VBAR'], [tok.name for tok in lline.tokens])
36*7249d1a6SKrzysztof Kosiński
37*7249d1a6SKrzysztof Kosiński  def testFirstLast(self):
38*7249d1a6SKrzysztof Kosiński    toks = _MakeFormatTokenList([(token.DOT, '.'), (token.LPAR, '('),
39*7249d1a6SKrzysztof Kosiński                                 (token.VBAR, '|')])
40*7249d1a6SKrzysztof Kosiński    lline = logical_line.LogicalLine(20, toks)
41*7249d1a6SKrzysztof Kosiński    self.assertEqual(20, lline.depth)
42*7249d1a6SKrzysztof Kosiński    self.assertEqual('DOT', lline.first.name)
43*7249d1a6SKrzysztof Kosiński    self.assertEqual('VBAR', lline.last.name)
44*7249d1a6SKrzysztof Kosiński
45*7249d1a6SKrzysztof Kosiński  def testAsCode(self):
46*7249d1a6SKrzysztof Kosiński    toks = _MakeFormatTokenList([(token.DOT, '.'), (token.LPAR, '('),
47*7249d1a6SKrzysztof Kosiński                                 (token.VBAR, '|')])
48*7249d1a6SKrzysztof Kosiński    lline = logical_line.LogicalLine(2, toks)
49*7249d1a6SKrzysztof Kosiński    self.assertEqual('    . ( |', lline.AsCode())
50*7249d1a6SKrzysztof Kosiński
51*7249d1a6SKrzysztof Kosiński  def testAppendToken(self):
52*7249d1a6SKrzysztof Kosiński    lline = logical_line.LogicalLine(0)
53*7249d1a6SKrzysztof Kosiński    lline.AppendToken(_MakeFormatTokenLeaf(token.LPAR, '('))
54*7249d1a6SKrzysztof Kosiński    lline.AppendToken(_MakeFormatTokenLeaf(token.RPAR, ')'))
55*7249d1a6SKrzysztof Kosiński    self.assertEqual(['LPAR', 'RPAR'], [tok.name for tok in lline.tokens])
56*7249d1a6SKrzysztof Kosiński
57*7249d1a6SKrzysztof Kosiński  def testAppendNode(self):
58*7249d1a6SKrzysztof Kosiński    lline = logical_line.LogicalLine(0)
59*7249d1a6SKrzysztof Kosiński    lline.AppendNode(pytree.Leaf(token.LPAR, '('))
60*7249d1a6SKrzysztof Kosiński    lline.AppendNode(pytree.Leaf(token.RPAR, ')'))
61*7249d1a6SKrzysztof Kosiński    self.assertEqual(['LPAR', 'RPAR'], [tok.name for tok in lline.tokens])
62*7249d1a6SKrzysztof Kosiński
63*7249d1a6SKrzysztof Kosiński
64*7249d1a6SKrzysztof Kosińskiclass LogicalLineFormattingInformationTest(yapf_test_helper.YAPFTest):
65*7249d1a6SKrzysztof Kosiński
66*7249d1a6SKrzysztof Kosiński  def testFuncDef(self):
67*7249d1a6SKrzysztof Kosiński    code = textwrap.dedent(r"""
68*7249d1a6SKrzysztof Kosiński        def f(a, b):
69*7249d1a6SKrzysztof Kosiński          pass
70*7249d1a6SKrzysztof Kosiński        """)
71*7249d1a6SKrzysztof Kosiński    llines = yapf_test_helper.ParseAndUnwrap(code)
72*7249d1a6SKrzysztof Kosiński
73*7249d1a6SKrzysztof Kosiński    f = llines[0].tokens[1]
74*7249d1a6SKrzysztof Kosiński    self.assertFalse(f.can_break_before)
75*7249d1a6SKrzysztof Kosiński    self.assertFalse(f.must_break_before)
76*7249d1a6SKrzysztof Kosiński    self.assertEqual(f.split_penalty, split_penalty.UNBREAKABLE)
77*7249d1a6SKrzysztof Kosiński
78*7249d1a6SKrzysztof Kosiński    lparen = llines[0].tokens[2]
79*7249d1a6SKrzysztof Kosiński    self.assertFalse(lparen.can_break_before)
80*7249d1a6SKrzysztof Kosiński    self.assertFalse(lparen.must_break_before)
81*7249d1a6SKrzysztof Kosiński    self.assertEqual(lparen.split_penalty, split_penalty.UNBREAKABLE)
82*7249d1a6SKrzysztof Kosiński
83*7249d1a6SKrzysztof Kosiński
84*7249d1a6SKrzysztof Kosińskidef _MakeFormatTokenLeaf(token_type, token_value):
85*7249d1a6SKrzysztof Kosiński  return format_token.FormatToken(pytree.Leaf(token_type, token_value))
86*7249d1a6SKrzysztof Kosiński
87*7249d1a6SKrzysztof Kosiński
88*7249d1a6SKrzysztof Kosińskidef _MakeFormatTokenList(token_type_values):
89*7249d1a6SKrzysztof Kosiński  return [
90*7249d1a6SKrzysztof Kosiński      _MakeFormatTokenLeaf(token_type, token_value)
91*7249d1a6SKrzysztof Kosiński      for token_type, token_value in token_type_values
92*7249d1a6SKrzysztof Kosiński  ]
93*7249d1a6SKrzysztof Kosiński
94*7249d1a6SKrzysztof Kosiński
95*7249d1a6SKrzysztof Kosińskiif __name__ == '__main__':
96*7249d1a6SKrzysztof Kosiński  unittest.main()
97