xref: /aosp_15_r20/external/yapf/yapftests/reformatter_python3_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"""Python 3 tests for yapf.reformatter."""
15*7249d1a6SKrzysztof Kosiński
16*7249d1a6SKrzysztof Kosińskiimport sys
17*7249d1a6SKrzysztof Kosińskiimport textwrap
18*7249d1a6SKrzysztof Kosińskiimport unittest
19*7249d1a6SKrzysztof Kosiński
20*7249d1a6SKrzysztof Kosińskifrom yapf.yapflib import py3compat
21*7249d1a6SKrzysztof Kosińskifrom yapf.yapflib import reformatter
22*7249d1a6SKrzysztof Kosińskifrom yapf.yapflib import style
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.skipUnless(py3compat.PY3, 'Requires Python 3')
28*7249d1a6SKrzysztof Kosińskiclass TestsForPython3Code(yapf_test_helper.YAPFTest):
29*7249d1a6SKrzysztof Kosiński  """Test a few constructs that are new Python 3 syntax."""
30*7249d1a6SKrzysztof Kosiński
31*7249d1a6SKrzysztof Kosiński  @classmethod
32*7249d1a6SKrzysztof Kosiński  def setUpClass(cls):  # pylint: disable=g-missing-super-call
33*7249d1a6SKrzysztof Kosiński    style.SetGlobalStyle(style.CreatePEP8Style())
34*7249d1a6SKrzysztof Kosiński
35*7249d1a6SKrzysztof Kosiński  def testTypedNames(self):
36*7249d1a6SKrzysztof Kosiński    unformatted_code = textwrap.dedent("""\
37*7249d1a6SKrzysztof Kosiński        def x(aaaaaaaaaaaaaaa:int,bbbbbbbbbbbbbbbb:str,ccccccccccccccc:dict,eeeeeeeeeeeeee:set={1, 2, 3})->bool:
38*7249d1a6SKrzysztof Kosiński          pass
39*7249d1a6SKrzysztof Kosiński        """)  # noqa
40*7249d1a6SKrzysztof Kosiński    expected_formatted_code = textwrap.dedent("""\
41*7249d1a6SKrzysztof Kosiński        def x(aaaaaaaaaaaaaaa: int,
42*7249d1a6SKrzysztof Kosiński              bbbbbbbbbbbbbbbb: str,
43*7249d1a6SKrzysztof Kosiński              ccccccccccccccc: dict,
44*7249d1a6SKrzysztof Kosiński              eeeeeeeeeeeeee: set = {1, 2, 3}) -> bool:
45*7249d1a6SKrzysztof Kosiński            pass
46*7249d1a6SKrzysztof Kosiński        """)
47*7249d1a6SKrzysztof Kosiński    llines = yapf_test_helper.ParseAndUnwrap(unformatted_code)
48*7249d1a6SKrzysztof Kosiński    self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines))
49*7249d1a6SKrzysztof Kosiński
50*7249d1a6SKrzysztof Kosiński  def testTypedNameWithLongNamedArg(self):
51*7249d1a6SKrzysztof Kosiński    unformatted_code = textwrap.dedent("""\
52*7249d1a6SKrzysztof Kosiński        def func(arg=long_function_call_that_pushes_the_line_over_eighty_characters()) -> ReturnType:
53*7249d1a6SKrzysztof Kosiński          pass
54*7249d1a6SKrzysztof Kosiński        """)  # noqa
55*7249d1a6SKrzysztof Kosiński    expected_formatted_code = textwrap.dedent("""\
56*7249d1a6SKrzysztof Kosiński        def func(arg=long_function_call_that_pushes_the_line_over_eighty_characters()
57*7249d1a6SKrzysztof Kosiński                 ) -> ReturnType:
58*7249d1a6SKrzysztof Kosiński            pass
59*7249d1a6SKrzysztof Kosiński        """)  # noqa
60*7249d1a6SKrzysztof Kosiński    llines = yapf_test_helper.ParseAndUnwrap(unformatted_code)
61*7249d1a6SKrzysztof Kosiński    self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines))
62*7249d1a6SKrzysztof Kosiński
63*7249d1a6SKrzysztof Kosiński  def testKeywordOnlyArgSpecifier(self):
64*7249d1a6SKrzysztof Kosiński    unformatted_code = textwrap.dedent("""\
65*7249d1a6SKrzysztof Kosiński        def foo(a, *, kw):
66*7249d1a6SKrzysztof Kosiński          return a+kw
67*7249d1a6SKrzysztof Kosiński        """)
68*7249d1a6SKrzysztof Kosiński    expected_formatted_code = textwrap.dedent("""\
69*7249d1a6SKrzysztof Kosiński        def foo(a, *, kw):
70*7249d1a6SKrzysztof Kosiński            return a + kw
71*7249d1a6SKrzysztof Kosiński        """)
72*7249d1a6SKrzysztof Kosiński    llines = yapf_test_helper.ParseAndUnwrap(unformatted_code)
73*7249d1a6SKrzysztof Kosiński    self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines))
74*7249d1a6SKrzysztof Kosiński
75*7249d1a6SKrzysztof Kosiński  @unittest.skipUnless(py3compat.PY36, 'Requires Python 3.6')
76*7249d1a6SKrzysztof Kosiński  def testPEP448ParameterExpansion(self):
77*7249d1a6SKrzysztof Kosiński    unformatted_code = textwrap.dedent("""\
78*7249d1a6SKrzysztof Kosiński    { ** x }
79*7249d1a6SKrzysztof Kosiński    {   **{}   }
80*7249d1a6SKrzysztof Kosiński    { **{   **x },  **x }
81*7249d1a6SKrzysztof Kosiński    {'a': 1,   **kw , 'b':3,  **kw2   }
82*7249d1a6SKrzysztof Kosiński    """)
83*7249d1a6SKrzysztof Kosiński    expected_formatted_code = textwrap.dedent("""\
84*7249d1a6SKrzysztof Kosiński    {**x}
85*7249d1a6SKrzysztof Kosiński    {**{}}
86*7249d1a6SKrzysztof Kosiński    {**{**x}, **x}
87*7249d1a6SKrzysztof Kosiński    {'a': 1, **kw, 'b': 3, **kw2}
88*7249d1a6SKrzysztof Kosiński    """)
89*7249d1a6SKrzysztof Kosiński    llines = yapf_test_helper.ParseAndUnwrap(unformatted_code)
90*7249d1a6SKrzysztof Kosiński    self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines))
91*7249d1a6SKrzysztof Kosiński
92*7249d1a6SKrzysztof Kosiński  def testAnnotations(self):
93*7249d1a6SKrzysztof Kosiński    unformatted_code = textwrap.dedent("""\
94*7249d1a6SKrzysztof Kosiński        def foo(a: list, b: "bar") -> dict:
95*7249d1a6SKrzysztof Kosiński          return a+b
96*7249d1a6SKrzysztof Kosiński        """)
97*7249d1a6SKrzysztof Kosiński    expected_formatted_code = textwrap.dedent("""\
98*7249d1a6SKrzysztof Kosiński        def foo(a: list, b: "bar") -> dict:
99*7249d1a6SKrzysztof Kosiński            return a + b
100*7249d1a6SKrzysztof Kosiński        """)
101*7249d1a6SKrzysztof Kosiński    llines = yapf_test_helper.ParseAndUnwrap(unformatted_code)
102*7249d1a6SKrzysztof Kosiński    self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines))
103*7249d1a6SKrzysztof Kosiński
104*7249d1a6SKrzysztof Kosiński  def testExecAsNonKeyword(self):
105*7249d1a6SKrzysztof Kosiński    unformatted_code = 'methods.exec( sys.modules[name])\n'
106*7249d1a6SKrzysztof Kosiński    expected_formatted_code = 'methods.exec(sys.modules[name])\n'
107*7249d1a6SKrzysztof Kosiński    llines = yapf_test_helper.ParseAndUnwrap(unformatted_code)
108*7249d1a6SKrzysztof Kosiński    self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines))
109*7249d1a6SKrzysztof Kosiński
110*7249d1a6SKrzysztof Kosiński  def testAsyncFunctions(self):
111*7249d1a6SKrzysztof Kosiński    if sys.version_info[1] < 5:
112*7249d1a6SKrzysztof Kosiński      return
113*7249d1a6SKrzysztof Kosiński    code = textwrap.dedent("""\
114*7249d1a6SKrzysztof Kosiński        import asyncio
115*7249d1a6SKrzysztof Kosiński        import time
116*7249d1a6SKrzysztof Kosiński
117*7249d1a6SKrzysztof Kosiński
118*7249d1a6SKrzysztof Kosiński        @print_args
119*7249d1a6SKrzysztof Kosiński        async def slow_operation():
120*7249d1a6SKrzysztof Kosiński            await asyncio.sleep(1)
121*7249d1a6SKrzysztof Kosiński            # print("Slow operation {} complete".format(n))
122*7249d1a6SKrzysztof Kosiński
123*7249d1a6SKrzysztof Kosiński
124*7249d1a6SKrzysztof Kosiński        async def main():
125*7249d1a6SKrzysztof Kosiński            start = time.time()
126*7249d1a6SKrzysztof Kosiński            if (await get_html()):
127*7249d1a6SKrzysztof Kosiński                pass
128*7249d1a6SKrzysztof Kosiński        """)
129*7249d1a6SKrzysztof Kosiński    llines = yapf_test_helper.ParseAndUnwrap(code)
130*7249d1a6SKrzysztof Kosiński    self.assertCodeEqual(code, reformatter.Reformat(llines, verify=False))
131*7249d1a6SKrzysztof Kosiński
132*7249d1a6SKrzysztof Kosiński  def testNoSpacesAroundPowerOperator(self):
133*7249d1a6SKrzysztof Kosiński    unformatted_code = textwrap.dedent("""\
134*7249d1a6SKrzysztof Kosiński        a**b
135*7249d1a6SKrzysztof Kosiński        """)
136*7249d1a6SKrzysztof Kosiński    expected_formatted_code = textwrap.dedent("""\
137*7249d1a6SKrzysztof Kosiński        a ** b
138*7249d1a6SKrzysztof Kosiński        """)
139*7249d1a6SKrzysztof Kosiński
140*7249d1a6SKrzysztof Kosiński    try:
141*7249d1a6SKrzysztof Kosiński      style.SetGlobalStyle(
142*7249d1a6SKrzysztof Kosiński          style.CreateStyleFromConfig(
143*7249d1a6SKrzysztof Kosiński              '{based_on_style: pep8, SPACES_AROUND_POWER_OPERATOR: True}'))
144*7249d1a6SKrzysztof Kosiński
145*7249d1a6SKrzysztof Kosiński      llines = yapf_test_helper.ParseAndUnwrap(unformatted_code)
146*7249d1a6SKrzysztof Kosiński      self.assertCodeEqual(expected_formatted_code,
147*7249d1a6SKrzysztof Kosiński                           reformatter.Reformat(llines))
148*7249d1a6SKrzysztof Kosiński    finally:
149*7249d1a6SKrzysztof Kosiński      style.SetGlobalStyle(style.CreatePEP8Style())
150*7249d1a6SKrzysztof Kosiński
151*7249d1a6SKrzysztof Kosiński  def testSpacesAroundDefaultOrNamedAssign(self):
152*7249d1a6SKrzysztof Kosiński    unformatted_code = textwrap.dedent("""\
153*7249d1a6SKrzysztof Kosiński        f(a=5)
154*7249d1a6SKrzysztof Kosiński        """)
155*7249d1a6SKrzysztof Kosiński    expected_formatted_code = textwrap.dedent("""\
156*7249d1a6SKrzysztof Kosiński        f(a = 5)
157*7249d1a6SKrzysztof Kosiński        """)
158*7249d1a6SKrzysztof Kosiński
159*7249d1a6SKrzysztof Kosiński    try:
160*7249d1a6SKrzysztof Kosiński      style.SetGlobalStyle(
161*7249d1a6SKrzysztof Kosiński          style.CreateStyleFromConfig(
162*7249d1a6SKrzysztof Kosiński              '{based_on_style: pep8, '
163*7249d1a6SKrzysztof Kosiński              'SPACES_AROUND_DEFAULT_OR_NAMED_ASSIGN: True}'))
164*7249d1a6SKrzysztof Kosiński
165*7249d1a6SKrzysztof Kosiński      llines = yapf_test_helper.ParseAndUnwrap(unformatted_code)
166*7249d1a6SKrzysztof Kosiński      self.assertCodeEqual(expected_formatted_code,
167*7249d1a6SKrzysztof Kosiński                           reformatter.Reformat(llines))
168*7249d1a6SKrzysztof Kosiński    finally:
169*7249d1a6SKrzysztof Kosiński      style.SetGlobalStyle(style.CreatePEP8Style())
170*7249d1a6SKrzysztof Kosiński
171*7249d1a6SKrzysztof Kosiński  def testTypeHint(self):
172*7249d1a6SKrzysztof Kosiński    unformatted_code = textwrap.dedent("""\
173*7249d1a6SKrzysztof Kosiński        def foo(x: int=42):
174*7249d1a6SKrzysztof Kosiński            pass
175*7249d1a6SKrzysztof Kosiński
176*7249d1a6SKrzysztof Kosiński
177*7249d1a6SKrzysztof Kosiński        def foo2(x: 'int' =42):
178*7249d1a6SKrzysztof Kosiński            pass
179*7249d1a6SKrzysztof Kosiński        """)
180*7249d1a6SKrzysztof Kosiński    expected_formatted_code = textwrap.dedent("""\
181*7249d1a6SKrzysztof Kosiński        def foo(x: int = 42):
182*7249d1a6SKrzysztof Kosiński            pass
183*7249d1a6SKrzysztof Kosiński
184*7249d1a6SKrzysztof Kosiński
185*7249d1a6SKrzysztof Kosiński        def foo2(x: 'int' = 42):
186*7249d1a6SKrzysztof Kosiński            pass
187*7249d1a6SKrzysztof Kosiński        """)
188*7249d1a6SKrzysztof Kosiński    llines = yapf_test_helper.ParseAndUnwrap(unformatted_code)
189*7249d1a6SKrzysztof Kosiński    self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines))
190*7249d1a6SKrzysztof Kosiński
191*7249d1a6SKrzysztof Kosiński  def testMatrixMultiplication(self):
192*7249d1a6SKrzysztof Kosiński    unformatted_code = textwrap.dedent("""\
193*7249d1a6SKrzysztof Kosiński        a=b@c
194*7249d1a6SKrzysztof Kosiński        """)
195*7249d1a6SKrzysztof Kosiński    expected_formatted_code = textwrap.dedent("""\
196*7249d1a6SKrzysztof Kosiński        a = b @ c
197*7249d1a6SKrzysztof Kosiński        """)
198*7249d1a6SKrzysztof Kosiński    llines = yapf_test_helper.ParseAndUnwrap(unformatted_code)
199*7249d1a6SKrzysztof Kosiński    self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines))
200*7249d1a6SKrzysztof Kosiński
201*7249d1a6SKrzysztof Kosiński  def testNoneKeyword(self):
202*7249d1a6SKrzysztof Kosiński    code = """\
203*7249d1a6SKrzysztof KosińskiNone.__ne__()
204*7249d1a6SKrzysztof Kosiński"""
205*7249d1a6SKrzysztof Kosiński    llines = yapf_test_helper.ParseAndUnwrap(code)
206*7249d1a6SKrzysztof Kosiński    self.assertCodeEqual(code, reformatter.Reformat(llines))
207*7249d1a6SKrzysztof Kosiński
208*7249d1a6SKrzysztof Kosiński  def testAsyncWithPrecedingComment(self):
209*7249d1a6SKrzysztof Kosiński    if sys.version_info[1] < 5:
210*7249d1a6SKrzysztof Kosiński      return
211*7249d1a6SKrzysztof Kosiński    unformatted_code = textwrap.dedent("""\
212*7249d1a6SKrzysztof Kosiński        import asyncio
213*7249d1a6SKrzysztof Kosiński
214*7249d1a6SKrzysztof Kosiński        # Comment
215*7249d1a6SKrzysztof Kosiński        async def bar():
216*7249d1a6SKrzysztof Kosiński            pass
217*7249d1a6SKrzysztof Kosiński
218*7249d1a6SKrzysztof Kosiński        async def foo():
219*7249d1a6SKrzysztof Kosiński            pass
220*7249d1a6SKrzysztof Kosiński        """)
221*7249d1a6SKrzysztof Kosiński    expected_formatted_code = textwrap.dedent("""\
222*7249d1a6SKrzysztof Kosiński        import asyncio
223*7249d1a6SKrzysztof Kosiński
224*7249d1a6SKrzysztof Kosiński
225*7249d1a6SKrzysztof Kosiński        # Comment
226*7249d1a6SKrzysztof Kosiński        async def bar():
227*7249d1a6SKrzysztof Kosiński            pass
228*7249d1a6SKrzysztof Kosiński
229*7249d1a6SKrzysztof Kosiński
230*7249d1a6SKrzysztof Kosiński        async def foo():
231*7249d1a6SKrzysztof Kosiński            pass
232*7249d1a6SKrzysztof Kosiński        """)
233*7249d1a6SKrzysztof Kosiński    llines = yapf_test_helper.ParseAndUnwrap(unformatted_code)
234*7249d1a6SKrzysztof Kosiński    self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines))
235*7249d1a6SKrzysztof Kosiński
236*7249d1a6SKrzysztof Kosiński  def testAsyncFunctionsNested(self):
237*7249d1a6SKrzysztof Kosiński    if sys.version_info[1] < 5:
238*7249d1a6SKrzysztof Kosiński      return
239*7249d1a6SKrzysztof Kosiński    code = textwrap.dedent("""\
240*7249d1a6SKrzysztof Kosiński        async def outer():
241*7249d1a6SKrzysztof Kosiński
242*7249d1a6SKrzysztof Kosiński            async def inner():
243*7249d1a6SKrzysztof Kosiński                pass
244*7249d1a6SKrzysztof Kosiński        """)
245*7249d1a6SKrzysztof Kosiński    llines = yapf_test_helper.ParseAndUnwrap(code)
246*7249d1a6SKrzysztof Kosiński    self.assertCodeEqual(code, reformatter.Reformat(llines))
247*7249d1a6SKrzysztof Kosiński
248*7249d1a6SKrzysztof Kosiński  def testKeepTypesIntact(self):
249*7249d1a6SKrzysztof Kosiński    if sys.version_info[1] < 5:
250*7249d1a6SKrzysztof Kosiński      return
251*7249d1a6SKrzysztof Kosiński    unformatted_code = textwrap.dedent("""\
252*7249d1a6SKrzysztof Kosiński        def _ReduceAbstractContainers(
253*7249d1a6SKrzysztof Kosiński            self, *args: Optional[automation_converter.PyiCollectionAbc]) -> List[
254*7249d1a6SKrzysztof Kosiński                automation_converter.PyiCollectionAbc]:
255*7249d1a6SKrzysztof Kosiński            pass
256*7249d1a6SKrzysztof Kosiński        """)  # noqa
257*7249d1a6SKrzysztof Kosiński    expected_formatted_code = textwrap.dedent("""\
258*7249d1a6SKrzysztof Kosiński        def _ReduceAbstractContainers(
259*7249d1a6SKrzysztof Kosiński            self, *args: Optional[automation_converter.PyiCollectionAbc]
260*7249d1a6SKrzysztof Kosiński        ) -> List[automation_converter.PyiCollectionAbc]:
261*7249d1a6SKrzysztof Kosiński            pass
262*7249d1a6SKrzysztof Kosiński        """)
263*7249d1a6SKrzysztof Kosiński    llines = yapf_test_helper.ParseAndUnwrap(unformatted_code)
264*7249d1a6SKrzysztof Kosiński    self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines))
265*7249d1a6SKrzysztof Kosiński
266*7249d1a6SKrzysztof Kosiński  def testContinuationIndentWithAsync(self):
267*7249d1a6SKrzysztof Kosiński    if sys.version_info[1] < 5:
268*7249d1a6SKrzysztof Kosiński      return
269*7249d1a6SKrzysztof Kosiński    unformatted_code = textwrap.dedent("""\
270*7249d1a6SKrzysztof Kosiński        async def start_websocket():
271*7249d1a6SKrzysztof Kosiński            async with session.ws_connect(
272*7249d1a6SKrzysztof Kosiński                r"ws://a_really_long_long_long_long_long_long_url") as ws:
273*7249d1a6SKrzysztof Kosiński                pass
274*7249d1a6SKrzysztof Kosiński        """)
275*7249d1a6SKrzysztof Kosiński    expected_formatted_code = textwrap.dedent("""\
276*7249d1a6SKrzysztof Kosiński        async def start_websocket():
277*7249d1a6SKrzysztof Kosiński            async with session.ws_connect(
278*7249d1a6SKrzysztof Kosiński                    r"ws://a_really_long_long_long_long_long_long_url") as ws:
279*7249d1a6SKrzysztof Kosiński                pass
280*7249d1a6SKrzysztof Kosiński        """)
281*7249d1a6SKrzysztof Kosiński    llines = yapf_test_helper.ParseAndUnwrap(unformatted_code)
282*7249d1a6SKrzysztof Kosiński    self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines))
283*7249d1a6SKrzysztof Kosiński
284*7249d1a6SKrzysztof Kosiński  def testSplittingArguments(self):
285*7249d1a6SKrzysztof Kosiński    if sys.version_info[1] < 5:
286*7249d1a6SKrzysztof Kosiński      return
287*7249d1a6SKrzysztof Kosiński
288*7249d1a6SKrzysztof Kosiński    unformatted_code = """\
289*7249d1a6SKrzysztof Kosińskiasync def open_file(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None):
290*7249d1a6SKrzysztof Kosiński    pass
291*7249d1a6SKrzysztof Kosiński
292*7249d1a6SKrzysztof Kosińskiasync def run_sync_in_worker_thread(sync_fn, *args, cancellable=False, limiter=None):
293*7249d1a6SKrzysztof Kosiński    pass
294*7249d1a6SKrzysztof Kosiński
295*7249d1a6SKrzysztof Kosińskidef open_file(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None):
296*7249d1a6SKrzysztof Kosiński    pass
297*7249d1a6SKrzysztof Kosiński
298*7249d1a6SKrzysztof Kosińskidef run_sync_in_worker_thread(sync_fn, *args, cancellable=False, limiter=None):
299*7249d1a6SKrzysztof Kosiński    pass
300*7249d1a6SKrzysztof Kosiński"""  # noqa
301*7249d1a6SKrzysztof Kosiński    expected_formatted_code = """\
302*7249d1a6SKrzysztof Kosińskiasync def open_file(
303*7249d1a6SKrzysztof Kosiński    file,
304*7249d1a6SKrzysztof Kosiński    mode='r',
305*7249d1a6SKrzysztof Kosiński    buffering=-1,
306*7249d1a6SKrzysztof Kosiński    encoding=None,
307*7249d1a6SKrzysztof Kosiński    errors=None,
308*7249d1a6SKrzysztof Kosiński    newline=None,
309*7249d1a6SKrzysztof Kosiński    closefd=True,
310*7249d1a6SKrzysztof Kosiński    opener=None
311*7249d1a6SKrzysztof Kosiński):
312*7249d1a6SKrzysztof Kosiński    pass
313*7249d1a6SKrzysztof Kosiński
314*7249d1a6SKrzysztof Kosiński
315*7249d1a6SKrzysztof Kosińskiasync def run_sync_in_worker_thread(
316*7249d1a6SKrzysztof Kosiński    sync_fn, *args, cancellable=False, limiter=None
317*7249d1a6SKrzysztof Kosiński):
318*7249d1a6SKrzysztof Kosiński    pass
319*7249d1a6SKrzysztof Kosiński
320*7249d1a6SKrzysztof Kosiński
321*7249d1a6SKrzysztof Kosińskidef open_file(
322*7249d1a6SKrzysztof Kosiński    file,
323*7249d1a6SKrzysztof Kosiński    mode='r',
324*7249d1a6SKrzysztof Kosiński    buffering=-1,
325*7249d1a6SKrzysztof Kosiński    encoding=None,
326*7249d1a6SKrzysztof Kosiński    errors=None,
327*7249d1a6SKrzysztof Kosiński    newline=None,
328*7249d1a6SKrzysztof Kosiński    closefd=True,
329*7249d1a6SKrzysztof Kosiński    opener=None
330*7249d1a6SKrzysztof Kosiński):
331*7249d1a6SKrzysztof Kosiński    pass
332*7249d1a6SKrzysztof Kosiński
333*7249d1a6SKrzysztof Kosiński
334*7249d1a6SKrzysztof Kosińskidef run_sync_in_worker_thread(sync_fn, *args, cancellable=False, limiter=None):
335*7249d1a6SKrzysztof Kosiński    pass
336*7249d1a6SKrzysztof Kosiński"""
337*7249d1a6SKrzysztof Kosiński
338*7249d1a6SKrzysztof Kosiński    try:
339*7249d1a6SKrzysztof Kosiński      style.SetGlobalStyle(
340*7249d1a6SKrzysztof Kosiński          style.CreateStyleFromConfig(
341*7249d1a6SKrzysztof Kosiński              '{based_on_style: pep8, '
342*7249d1a6SKrzysztof Kosiński              'dedent_closing_brackets: true, '
343*7249d1a6SKrzysztof Kosiński              'coalesce_brackets: false, '
344*7249d1a6SKrzysztof Kosiński              'space_between_ending_comma_and_closing_bracket: false, '
345*7249d1a6SKrzysztof Kosiński              'split_arguments_when_comma_terminated: true, '
346*7249d1a6SKrzysztof Kosiński              'split_before_first_argument: true}'))
347*7249d1a6SKrzysztof Kosiński
348*7249d1a6SKrzysztof Kosiński      llines = yapf_test_helper.ParseAndUnwrap(unformatted_code)
349*7249d1a6SKrzysztof Kosiński      self.assertCodeEqual(expected_formatted_code,
350*7249d1a6SKrzysztof Kosiński                           reformatter.Reformat(llines))
351*7249d1a6SKrzysztof Kosiński    finally:
352*7249d1a6SKrzysztof Kosiński      style.SetGlobalStyle(style.CreatePEP8Style())
353*7249d1a6SKrzysztof Kosiński
354*7249d1a6SKrzysztof Kosiński  def testDictUnpacking(self):
355*7249d1a6SKrzysztof Kosiński    if sys.version_info[1] < 5:
356*7249d1a6SKrzysztof Kosiński      return
357*7249d1a6SKrzysztof Kosiński    unformatted_code = """\
358*7249d1a6SKrzysztof Kosińskiclass Foo:
359*7249d1a6SKrzysztof Kosiński    def foo(self):
360*7249d1a6SKrzysztof Kosiński        foofoofoofoofoofoofoofoo('foofoofoofoofoo', {
361*7249d1a6SKrzysztof Kosiński
362*7249d1a6SKrzysztof Kosiński            'foo': 'foo',
363*7249d1a6SKrzysztof Kosiński
364*7249d1a6SKrzysztof Kosiński            **foofoofoo
365*7249d1a6SKrzysztof Kosiński        })
366*7249d1a6SKrzysztof Kosiński"""
367*7249d1a6SKrzysztof Kosiński    expected_formatted_code = """\
368*7249d1a6SKrzysztof Kosińskiclass Foo:
369*7249d1a6SKrzysztof Kosiński
370*7249d1a6SKrzysztof Kosiński    def foo(self):
371*7249d1a6SKrzysztof Kosiński        foofoofoofoofoofoofoofoo('foofoofoofoofoo', {
372*7249d1a6SKrzysztof Kosiński            'foo': 'foo',
373*7249d1a6SKrzysztof Kosiński            **foofoofoo
374*7249d1a6SKrzysztof Kosiński        })
375*7249d1a6SKrzysztof Kosiński"""
376*7249d1a6SKrzysztof Kosiński    llines = yapf_test_helper.ParseAndUnwrap(unformatted_code)
377*7249d1a6SKrzysztof Kosiński    self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines))
378*7249d1a6SKrzysztof Kosiński
379*7249d1a6SKrzysztof Kosiński  def testMultilineFormatString(self):
380*7249d1a6SKrzysztof Kosiński    if sys.version_info[1] < 6:
381*7249d1a6SKrzysztof Kosiński      return
382*7249d1a6SKrzysztof Kosiński    code = """\
383*7249d1a6SKrzysztof Kosiński# yapf: disable
384*7249d1a6SKrzysztof Kosiński(f'''
385*7249d1a6SKrzysztof Kosiński  ''')
386*7249d1a6SKrzysztof Kosiński# yapf: enable
387*7249d1a6SKrzysztof Kosiński"""
388*7249d1a6SKrzysztof Kosiński    # https://github.com/google/yapf/issues/513
389*7249d1a6SKrzysztof Kosiński    llines = yapf_test_helper.ParseAndUnwrap(code)
390*7249d1a6SKrzysztof Kosiński    self.assertCodeEqual(code, reformatter.Reformat(llines))
391*7249d1a6SKrzysztof Kosiński
392*7249d1a6SKrzysztof Kosiński  def testEllipses(self):
393*7249d1a6SKrzysztof Kosiński    if sys.version_info[1] < 6:
394*7249d1a6SKrzysztof Kosiński      return
395*7249d1a6SKrzysztof Kosiński    code = """\
396*7249d1a6SKrzysztof Kosińskidef dirichlet(x12345678901234567890123456789012345678901234567890=...) -> None:
397*7249d1a6SKrzysztof Kosiński    return
398*7249d1a6SKrzysztof Kosiński"""
399*7249d1a6SKrzysztof Kosiński    # https://github.com/google/yapf/issues/533
400*7249d1a6SKrzysztof Kosiński    llines = yapf_test_helper.ParseAndUnwrap(code)
401*7249d1a6SKrzysztof Kosiński    self.assertCodeEqual(code, reformatter.Reformat(llines))
402*7249d1a6SKrzysztof Kosiński
403*7249d1a6SKrzysztof Kosiński  def testFunctionTypedReturnNextLine(self):
404*7249d1a6SKrzysztof Kosiński    code = """\
405*7249d1a6SKrzysztof Kosińskidef _GenerateStatsEntries(
406*7249d1a6SKrzysztof Kosiński    process_id: Text,
407*7249d1a6SKrzysztof Kosiński    timestamp: Optional[ffffffff.FFFFFFFFFFF] = None
408*7249d1a6SKrzysztof Kosiński) -> Sequence[ssssssssssss.SSSSSSSSSSSSSSS]:
409*7249d1a6SKrzysztof Kosiński    pass
410*7249d1a6SKrzysztof Kosiński"""
411*7249d1a6SKrzysztof Kosiński    llines = yapf_test_helper.ParseAndUnwrap(code)
412*7249d1a6SKrzysztof Kosiński    self.assertCodeEqual(code, reformatter.Reformat(llines))
413*7249d1a6SKrzysztof Kosiński
414*7249d1a6SKrzysztof Kosiński  def testFunctionTypedReturnSameLine(self):
415*7249d1a6SKrzysztof Kosiński    code = """\
416*7249d1a6SKrzysztof Kosińskidef rrrrrrrrrrrrrrrrrrrrrr(
417*7249d1a6SKrzysztof Kosiński        ccccccccccccccccccccccc: Tuple[Text, Text]) -> List[Tuple[Text, Text]]:
418*7249d1a6SKrzysztof Kosiński    pass
419*7249d1a6SKrzysztof Kosiński"""
420*7249d1a6SKrzysztof Kosiński    llines = yapf_test_helper.ParseAndUnwrap(code)
421*7249d1a6SKrzysztof Kosiński    self.assertCodeEqual(code, reformatter.Reformat(llines))
422*7249d1a6SKrzysztof Kosiński
423*7249d1a6SKrzysztof Kosiński  def testAsyncForElseNotIndentedInsideBody(self):
424*7249d1a6SKrzysztof Kosiński    if sys.version_info[1] < 5:
425*7249d1a6SKrzysztof Kosiński      return
426*7249d1a6SKrzysztof Kosiński    code = textwrap.dedent("""\
427*7249d1a6SKrzysztof Kosiński    async def fn():
428*7249d1a6SKrzysztof Kosiński        async for message in websocket:
429*7249d1a6SKrzysztof Kosiński            for i in range(10):
430*7249d1a6SKrzysztof Kosiński                pass
431*7249d1a6SKrzysztof Kosiński            else:
432*7249d1a6SKrzysztof Kosiński                pass
433*7249d1a6SKrzysztof Kosiński        else:
434*7249d1a6SKrzysztof Kosiński            pass
435*7249d1a6SKrzysztof Kosiński    """)
436*7249d1a6SKrzysztof Kosiński    llines = yapf_test_helper.ParseAndUnwrap(code)
437*7249d1a6SKrzysztof Kosiński    self.assertCodeEqual(code, reformatter.Reformat(llines))
438*7249d1a6SKrzysztof Kosiński
439*7249d1a6SKrzysztof Kosiński  def testForElseInAsyncNotMixedWithAsyncFor(self):
440*7249d1a6SKrzysztof Kosiński    if sys.version_info[1] < 5:
441*7249d1a6SKrzysztof Kosiński      return
442*7249d1a6SKrzysztof Kosiński    code = textwrap.dedent("""\
443*7249d1a6SKrzysztof Kosiński    async def fn():
444*7249d1a6SKrzysztof Kosiński        for i in range(10):
445*7249d1a6SKrzysztof Kosiński            pass
446*7249d1a6SKrzysztof Kosiński        else:
447*7249d1a6SKrzysztof Kosiński            pass
448*7249d1a6SKrzysztof Kosiński    """)
449*7249d1a6SKrzysztof Kosiński    llines = yapf_test_helper.ParseAndUnwrap(code)
450*7249d1a6SKrzysztof Kosiński    self.assertCodeEqual(code, reformatter.Reformat(llines))
451*7249d1a6SKrzysztof Kosiński
452*7249d1a6SKrzysztof Kosiński  def testParameterListIndentationConflicts(self):
453*7249d1a6SKrzysztof Kosiński    unformatted_code = textwrap.dedent("""\
454*7249d1a6SKrzysztof Kosiński        def raw_message(  # pylint: disable=too-many-arguments
455*7249d1a6SKrzysztof Kosiński                    self, text, user_id=1000, chat_type='private', forward_date=None, forward_from=None):
456*7249d1a6SKrzysztof Kosiński                pass
457*7249d1a6SKrzysztof Kosiński        """)  # noqa
458*7249d1a6SKrzysztof Kosiński    expected_formatted_code = textwrap.dedent("""\
459*7249d1a6SKrzysztof Kosiński        def raw_message(  # pylint: disable=too-many-arguments
460*7249d1a6SKrzysztof Kosiński                self,
461*7249d1a6SKrzysztof Kosiński                text,
462*7249d1a6SKrzysztof Kosiński                user_id=1000,
463*7249d1a6SKrzysztof Kosiński                chat_type='private',
464*7249d1a6SKrzysztof Kosiński                forward_date=None,
465*7249d1a6SKrzysztof Kosiński                forward_from=None):
466*7249d1a6SKrzysztof Kosiński            pass
467*7249d1a6SKrzysztof Kosiński        """)
468*7249d1a6SKrzysztof Kosiński    llines = yapf_test_helper.ParseAndUnwrap(unformatted_code)
469*7249d1a6SKrzysztof Kosiński    self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines))
470*7249d1a6SKrzysztof Kosiński
471*7249d1a6SKrzysztof Kosiński
472*7249d1a6SKrzysztof Kosińskiif __name__ == '__main__':
473*7249d1a6SKrzysztof Kosiński  unittest.main()
474