xref: /aosp_15_r20/external/yapf/yapftests/line_joiner_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.line_joiner."""
15*7249d1a6SKrzysztof Kosiński
16*7249d1a6SKrzysztof Kosińskiimport textwrap
17*7249d1a6SKrzysztof Kosińskiimport unittest
18*7249d1a6SKrzysztof Kosiński
19*7249d1a6SKrzysztof Kosińskifrom yapf.yapflib import line_joiner
20*7249d1a6SKrzysztof Kosińskifrom yapf.yapflib import style
21*7249d1a6SKrzysztof Kosiński
22*7249d1a6SKrzysztof Kosińskifrom yapftests import yapf_test_helper
23*7249d1a6SKrzysztof Kosiński
24*7249d1a6SKrzysztof Kosiński
25*7249d1a6SKrzysztof Kosińskiclass LineJoinerTest(yapf_test_helper.YAPFTest):
26*7249d1a6SKrzysztof Kosiński
27*7249d1a6SKrzysztof Kosiński  @classmethod
28*7249d1a6SKrzysztof Kosiński  def setUpClass(cls):
29*7249d1a6SKrzysztof Kosiński    style.SetGlobalStyle(style.CreatePEP8Style())
30*7249d1a6SKrzysztof Kosiński
31*7249d1a6SKrzysztof Kosiński  def _CheckLineJoining(self, code, join_lines):
32*7249d1a6SKrzysztof Kosiński    """Check that the given LogicalLines are joined as expected.
33*7249d1a6SKrzysztof Kosiński
34*7249d1a6SKrzysztof Kosiński    Arguments:
35*7249d1a6SKrzysztof Kosiński      code: The code to check to see if we can join it.
36*7249d1a6SKrzysztof Kosiński      join_lines: True if we expect the lines to be joined.
37*7249d1a6SKrzysztof Kosiński    """
38*7249d1a6SKrzysztof Kosiński    llines = yapf_test_helper.ParseAndUnwrap(code)
39*7249d1a6SKrzysztof Kosiński    self.assertCodeEqual(line_joiner.CanMergeMultipleLines(llines), join_lines)
40*7249d1a6SKrzysztof Kosiński
41*7249d1a6SKrzysztof Kosiński  def testSimpleSingleLineStatement(self):
42*7249d1a6SKrzysztof Kosiński    code = textwrap.dedent(u"""\
43*7249d1a6SKrzysztof Kosiński        if isinstance(a, int): continue
44*7249d1a6SKrzysztof Kosiński        """)
45*7249d1a6SKrzysztof Kosiński    self._CheckLineJoining(code, join_lines=True)
46*7249d1a6SKrzysztof Kosiński
47*7249d1a6SKrzysztof Kosiński  def testSimpleMultipleLineStatement(self):
48*7249d1a6SKrzysztof Kosiński    code = textwrap.dedent(u"""\
49*7249d1a6SKrzysztof Kosiński        if isinstance(b, int):
50*7249d1a6SKrzysztof Kosiński            continue
51*7249d1a6SKrzysztof Kosiński        """)
52*7249d1a6SKrzysztof Kosiński    self._CheckLineJoining(code, join_lines=False)
53*7249d1a6SKrzysztof Kosiński
54*7249d1a6SKrzysztof Kosiński  def testSimpleMultipleLineComplexStatement(self):
55*7249d1a6SKrzysztof Kosiński    code = textwrap.dedent(u"""\
56*7249d1a6SKrzysztof Kosiński        if isinstance(c, int):
57*7249d1a6SKrzysztof Kosiński            while True:
58*7249d1a6SKrzysztof Kosiński                continue
59*7249d1a6SKrzysztof Kosiński        """)
60*7249d1a6SKrzysztof Kosiński    self._CheckLineJoining(code, join_lines=False)
61*7249d1a6SKrzysztof Kosiński
62*7249d1a6SKrzysztof Kosiński  def testSimpleMultipleLineStatementWithComment(self):
63*7249d1a6SKrzysztof Kosiński    code = textwrap.dedent(u"""\
64*7249d1a6SKrzysztof Kosiński        if isinstance(d, int): continue  # We're pleased that d's an int.
65*7249d1a6SKrzysztof Kosiński        """)
66*7249d1a6SKrzysztof Kosiński    self._CheckLineJoining(code, join_lines=True)
67*7249d1a6SKrzysztof Kosiński
68*7249d1a6SKrzysztof Kosiński  def testSimpleMultipleLineStatementWithLargeIndent(self):
69*7249d1a6SKrzysztof Kosiński    code = textwrap.dedent(u"""\
70*7249d1a6SKrzysztof Kosiński        if isinstance(e, int):    continue
71*7249d1a6SKrzysztof Kosiński        """)
72*7249d1a6SKrzysztof Kosiński    self._CheckLineJoining(code, join_lines=True)
73*7249d1a6SKrzysztof Kosiński
74*7249d1a6SKrzysztof Kosiński  def testOverColumnLimit(self):
75*7249d1a6SKrzysztof Kosiński    code = textwrap.dedent(u"""\
76*7249d1a6SKrzysztof Kosiński        if instance(bbbbbbbbbbbbbbbbbbbbbbbbb, int): cccccccccccccccccccccccccc = ddddddddddddddddddddd
77*7249d1a6SKrzysztof Kosiński        """)  # noqa
78*7249d1a6SKrzysztof Kosiński    self._CheckLineJoining(code, join_lines=False)
79*7249d1a6SKrzysztof Kosiński
80*7249d1a6SKrzysztof Kosiński
81*7249d1a6SKrzysztof Kosińskiif __name__ == '__main__':
82*7249d1a6SKrzysztof Kosiński  unittest.main()
83