xref: /aosp_15_r20/external/yapf/yapftests/reformatter_verify_test.py (revision 7249d1a64f4850ccf838e62a46276f891f72998e)
1*7249d1a6SKrzysztof Kosiński# Copyright 2016 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.reformatter."""
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 py3compat
20*7249d1a6SKrzysztof Kosińskifrom yapf.yapflib import reformatter
21*7249d1a6SKrzysztof Kosińskifrom yapf.yapflib import style
22*7249d1a6SKrzysztof Kosińskifrom yapf.yapflib import verifier
23*7249d1a6SKrzysztof Kosiński
24*7249d1a6SKrzysztof Kosińskifrom yapftests import yapf_test_helper
25*7249d1a6SKrzysztof Kosiński
26*7249d1a6SKrzysztof Kosiński
27*7249d1a6SKrzysztof Kosiński@unittest.skipIf(py3compat.PY3, 'Requires Python 2')
28*7249d1a6SKrzysztof Kosińskiclass TestVerifyNoVerify(yapf_test_helper.YAPFTest):
29*7249d1a6SKrzysztof Kosiński
30*7249d1a6SKrzysztof Kosiński  @classmethod
31*7249d1a6SKrzysztof Kosiński  def setUpClass(cls):
32*7249d1a6SKrzysztof Kosiński    style.SetGlobalStyle(style.CreatePEP8Style())
33*7249d1a6SKrzysztof Kosiński
34*7249d1a6SKrzysztof Kosiński  def testVerifyException(self):
35*7249d1a6SKrzysztof Kosiński    unformatted_code = textwrap.dedent("""\
36*7249d1a6SKrzysztof Kosiński        class ABC(metaclass=type):
37*7249d1a6SKrzysztof Kosiński          pass
38*7249d1a6SKrzysztof Kosiński        """)
39*7249d1a6SKrzysztof Kosiński    llines = yapf_test_helper.ParseAndUnwrap(unformatted_code)
40*7249d1a6SKrzysztof Kosiński    with self.assertRaises(verifier.InternalError):
41*7249d1a6SKrzysztof Kosiński      reformatter.Reformat(llines, verify=True)
42*7249d1a6SKrzysztof Kosiński    reformatter.Reformat(llines)  # verify should be False by default.
43*7249d1a6SKrzysztof Kosiński
44*7249d1a6SKrzysztof Kosiński  def testNoVerify(self):
45*7249d1a6SKrzysztof Kosiński    unformatted_code = textwrap.dedent("""\
46*7249d1a6SKrzysztof Kosiński        class ABC(metaclass=type):
47*7249d1a6SKrzysztof Kosiński          pass
48*7249d1a6SKrzysztof Kosiński        """)
49*7249d1a6SKrzysztof Kosiński    expected_formatted_code = textwrap.dedent("""\
50*7249d1a6SKrzysztof Kosiński        class ABC(metaclass=type):
51*7249d1a6SKrzysztof Kosiński            pass
52*7249d1a6SKrzysztof Kosiński        """)
53*7249d1a6SKrzysztof Kosiński    llines = yapf_test_helper.ParseAndUnwrap(unformatted_code)
54*7249d1a6SKrzysztof Kosiński    self.assertCodeEqual(expected_formatted_code,
55*7249d1a6SKrzysztof Kosiński                         reformatter.Reformat(llines, verify=False))
56*7249d1a6SKrzysztof Kosiński
57*7249d1a6SKrzysztof Kosiński  def testVerifyFutureImport(self):
58*7249d1a6SKrzysztof Kosiński    unformatted_code = textwrap.dedent("""\
59*7249d1a6SKrzysztof Kosiński        from __future__ import print_function
60*7249d1a6SKrzysztof Kosiński
61*7249d1a6SKrzysztof Kosiński        def call_my_function(the_function):
62*7249d1a6SKrzysztof Kosiński          the_function("hi")
63*7249d1a6SKrzysztof Kosiński
64*7249d1a6SKrzysztof Kosiński        if __name__ == "__main__":
65*7249d1a6SKrzysztof Kosiński          call_my_function(print)
66*7249d1a6SKrzysztof Kosiński        """)
67*7249d1a6SKrzysztof Kosiński    llines = yapf_test_helper.ParseAndUnwrap(unformatted_code)
68*7249d1a6SKrzysztof Kosiński    with self.assertRaises(verifier.InternalError):
69*7249d1a6SKrzysztof Kosiński      reformatter.Reformat(llines, verify=True)
70*7249d1a6SKrzysztof Kosiński
71*7249d1a6SKrzysztof Kosiński    expected_formatted_code = textwrap.dedent("""\
72*7249d1a6SKrzysztof Kosiński        from __future__ import print_function
73*7249d1a6SKrzysztof Kosiński
74*7249d1a6SKrzysztof Kosiński
75*7249d1a6SKrzysztof Kosiński        def call_my_function(the_function):
76*7249d1a6SKrzysztof Kosiński            the_function("hi")
77*7249d1a6SKrzysztof Kosiński
78*7249d1a6SKrzysztof Kosiński
79*7249d1a6SKrzysztof Kosiński        if __name__ == "__main__":
80*7249d1a6SKrzysztof Kosiński            call_my_function(print)
81*7249d1a6SKrzysztof Kosiński        """)
82*7249d1a6SKrzysztof Kosiński    llines = yapf_test_helper.ParseAndUnwrap(unformatted_code)
83*7249d1a6SKrzysztof Kosiński    self.assertCodeEqual(expected_formatted_code,
84*7249d1a6SKrzysztof Kosiński                         reformatter.Reformat(llines, verify=False))
85*7249d1a6SKrzysztof Kosiński
86*7249d1a6SKrzysztof Kosiński  def testContinuationLineShouldBeDistinguished(self):
87*7249d1a6SKrzysztof Kosiński    code = textwrap.dedent("""\
88*7249d1a6SKrzysztof Kosiński        class Foo(object):
89*7249d1a6SKrzysztof Kosiński
90*7249d1a6SKrzysztof Kosiński            def bar(self):
91*7249d1a6SKrzysztof Kosiński                if self.solo_generator_that_is_long is None and len(
92*7249d1a6SKrzysztof Kosiński                        self.generators + self.next_batch) == 1:
93*7249d1a6SKrzysztof Kosiński                    pass
94*7249d1a6SKrzysztof Kosiński        """)
95*7249d1a6SKrzysztof Kosiński    llines = yapf_test_helper.ParseAndUnwrap(code)
96*7249d1a6SKrzysztof Kosiński    self.assertCodeEqual(code, reformatter.Reformat(llines, verify=False))
97*7249d1a6SKrzysztof Kosiński
98*7249d1a6SKrzysztof Kosiński
99*7249d1a6SKrzysztof Kosińskiif __name__ == '__main__':
100*7249d1a6SKrzysztof Kosiński  unittest.main()
101