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