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"""PEP8 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ński 23*7249d1a6SKrzysztof Kosińskifrom yapftests import yapf_test_helper 24*7249d1a6SKrzysztof Kosiński 25*7249d1a6SKrzysztof Kosiński 26*7249d1a6SKrzysztof Kosińskiclass TestsForPEP8Style(yapf_test_helper.YAPFTest): 27*7249d1a6SKrzysztof Kosiński 28*7249d1a6SKrzysztof Kosiński @classmethod 29*7249d1a6SKrzysztof Kosiński def setUpClass(cls): # pylint: disable=g-missing-super-call 30*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle(style.CreatePEP8Style()) 31*7249d1a6SKrzysztof Kosiński 32*7249d1a6SKrzysztof Kosiński def testIndent4(self): 33*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 34*7249d1a6SKrzysztof Kosiński if a+b: 35*7249d1a6SKrzysztof Kosiński pass 36*7249d1a6SKrzysztof Kosiński """) 37*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 38*7249d1a6SKrzysztof Kosiński if a + b: 39*7249d1a6SKrzysztof Kosiński pass 40*7249d1a6SKrzysztof Kosiński """) 41*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 42*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 43*7249d1a6SKrzysztof Kosiński 44*7249d1a6SKrzysztof Kosiński def testSingleLineIfStatements(self): 45*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 46*7249d1a6SKrzysztof Kosiński if True: a = 42 47*7249d1a6SKrzysztof Kosiński elif False: b = 42 48*7249d1a6SKrzysztof Kosiński else: c = 42 49*7249d1a6SKrzysztof Kosiński """) 50*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 51*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 52*7249d1a6SKrzysztof Kosiński 53*7249d1a6SKrzysztof Kosiński def testBlankBetweenClassAndDef(self): 54*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 55*7249d1a6SKrzysztof Kosiński class Foo: 56*7249d1a6SKrzysztof Kosiński def joe(): 57*7249d1a6SKrzysztof Kosiński pass 58*7249d1a6SKrzysztof Kosiński """) 59*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 60*7249d1a6SKrzysztof Kosiński class Foo: 61*7249d1a6SKrzysztof Kosiński 62*7249d1a6SKrzysztof Kosiński def joe(): 63*7249d1a6SKrzysztof Kosiński pass 64*7249d1a6SKrzysztof Kosiński """) 65*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 66*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 67*7249d1a6SKrzysztof Kosiński 68*7249d1a6SKrzysztof Kosiński def testBlankBetweenDefsInClass(self): 69*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent('''\ 70*7249d1a6SKrzysztof Kosiński class TestClass: 71*7249d1a6SKrzysztof Kosiński def __init__(self): 72*7249d1a6SKrzysztof Kosiński self.running = False 73*7249d1a6SKrzysztof Kosiński def run(self): 74*7249d1a6SKrzysztof Kosiński """Override in subclass""" 75*7249d1a6SKrzysztof Kosiński def is_running(self): 76*7249d1a6SKrzysztof Kosiński return self.running 77*7249d1a6SKrzysztof Kosiński ''') 78*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent('''\ 79*7249d1a6SKrzysztof Kosiński class TestClass: 80*7249d1a6SKrzysztof Kosiński 81*7249d1a6SKrzysztof Kosiński def __init__(self): 82*7249d1a6SKrzysztof Kosiński self.running = False 83*7249d1a6SKrzysztof Kosiński 84*7249d1a6SKrzysztof Kosiński def run(self): 85*7249d1a6SKrzysztof Kosiński """Override in subclass""" 86*7249d1a6SKrzysztof Kosiński 87*7249d1a6SKrzysztof Kosiński def is_running(self): 88*7249d1a6SKrzysztof Kosiński return self.running 89*7249d1a6SKrzysztof Kosiński ''') 90*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 91*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 92*7249d1a6SKrzysztof Kosiński 93*7249d1a6SKrzysztof Kosiński def testSingleWhiteBeforeTrailingComment(self): 94*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 95*7249d1a6SKrzysztof Kosiński if a+b: # comment 96*7249d1a6SKrzysztof Kosiński pass 97*7249d1a6SKrzysztof Kosiński """) 98*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 99*7249d1a6SKrzysztof Kosiński if a + b: # comment 100*7249d1a6SKrzysztof Kosiński pass 101*7249d1a6SKrzysztof Kosiński """) 102*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 103*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 104*7249d1a6SKrzysztof Kosiński 105*7249d1a6SKrzysztof Kosiński def testSpaceBetweenEndingCommandAndClosingBracket(self): 106*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 107*7249d1a6SKrzysztof Kosiński a = ( 108*7249d1a6SKrzysztof Kosiński 1, 109*7249d1a6SKrzysztof Kosiński ) 110*7249d1a6SKrzysztof Kosiński """) 111*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 112*7249d1a6SKrzysztof Kosiński a = (1, ) 113*7249d1a6SKrzysztof Kosiński """) 114*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 115*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 116*7249d1a6SKrzysztof Kosiński 117*7249d1a6SKrzysztof Kosiński def testContinuedNonOutdentedLine(self): 118*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 119*7249d1a6SKrzysztof Kosiński class eld(d): 120*7249d1a6SKrzysztof Kosiński if str(geom.geom_type).upper( 121*7249d1a6SKrzysztof Kosiński ) != self.geom_type and not self.geom_type == 'GEOMETRY': 122*7249d1a6SKrzysztof Kosiński ror(code='om_type') 123*7249d1a6SKrzysztof Kosiński """) 124*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 125*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 126*7249d1a6SKrzysztof Kosiński 127*7249d1a6SKrzysztof Kosiński def testWrappingPercentExpressions(self): 128*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 129*7249d1a6SKrzysztof Kosiński def f(): 130*7249d1a6SKrzysztof Kosiński if True: 131*7249d1a6SKrzysztof Kosiński zzzzz = '%s-%s' % (xxxxxxxxxxxxxxxxxxxxxxxxxx + 1, xxxxxxxxxxxxxxxxx.yyy + 1) 132*7249d1a6SKrzysztof Kosiński zzzzz = '%s-%s'.ww(xxxxxxxxxxxxxxxxxxxxxxxxxx + 1, xxxxxxxxxxxxxxxxx.yyy + 1) 133*7249d1a6SKrzysztof Kosiński zzzzz = '%s-%s' % (xxxxxxxxxxxxxxxxxxxxxxx + 1, xxxxxxxxxxxxxxxxxxxxx + 1) 134*7249d1a6SKrzysztof Kosiński zzzzz = '%s-%s'.ww(xxxxxxxxxxxxxxxxxxxxxxx + 1, xxxxxxxxxxxxxxxxxxxxx + 1) 135*7249d1a6SKrzysztof Kosiński """) # noqa 136*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 137*7249d1a6SKrzysztof Kosiński def f(): 138*7249d1a6SKrzysztof Kosiński if True: 139*7249d1a6SKrzysztof Kosiński zzzzz = '%s-%s' % (xxxxxxxxxxxxxxxxxxxxxxxxxx + 1, 140*7249d1a6SKrzysztof Kosiński xxxxxxxxxxxxxxxxx.yyy + 1) 141*7249d1a6SKrzysztof Kosiński zzzzz = '%s-%s'.ww(xxxxxxxxxxxxxxxxxxxxxxxxxx + 1, 142*7249d1a6SKrzysztof Kosiński xxxxxxxxxxxxxxxxx.yyy + 1) 143*7249d1a6SKrzysztof Kosiński zzzzz = '%s-%s' % (xxxxxxxxxxxxxxxxxxxxxxx + 1, 144*7249d1a6SKrzysztof Kosiński xxxxxxxxxxxxxxxxxxxxx + 1) 145*7249d1a6SKrzysztof Kosiński zzzzz = '%s-%s'.ww(xxxxxxxxxxxxxxxxxxxxxxx + 1, 146*7249d1a6SKrzysztof Kosiński xxxxxxxxxxxxxxxxxxxxx + 1) 147*7249d1a6SKrzysztof Kosiński """) 148*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 149*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 150*7249d1a6SKrzysztof Kosiński 151*7249d1a6SKrzysztof Kosiński def testAlignClosingBracketWithVisualIndentation(self): 152*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 153*7249d1a6SKrzysztof Kosiński TEST_LIST = ('foo', 'bar', # first comment 154*7249d1a6SKrzysztof Kosiński 'baz' # second comment 155*7249d1a6SKrzysztof Kosiński ) 156*7249d1a6SKrzysztof Kosiński """) 157*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 158*7249d1a6SKrzysztof Kosiński TEST_LIST = ( 159*7249d1a6SKrzysztof Kosiński 'foo', 160*7249d1a6SKrzysztof Kosiński 'bar', # first comment 161*7249d1a6SKrzysztof Kosiński 'baz' # second comment 162*7249d1a6SKrzysztof Kosiński ) 163*7249d1a6SKrzysztof Kosiński """) 164*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 165*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 166*7249d1a6SKrzysztof Kosiński 167*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 168*7249d1a6SKrzysztof Kosiński def f(): 169*7249d1a6SKrzysztof Kosiński 170*7249d1a6SKrzysztof Kosiński def g(): 171*7249d1a6SKrzysztof Kosiński while (xxxxxxxxxxxxxxxxxxxx(yyyyyyyyyyyyy[zzzzz]) == 'aaaaaaaaaaa' and 172*7249d1a6SKrzysztof Kosiński xxxxxxxxxxxxxxxxxxxx(yyyyyyyyyyyyy[zzzzz].aaaaaaaa[0]) == 'bbbbbbb' 173*7249d1a6SKrzysztof Kosiński ): 174*7249d1a6SKrzysztof Kosiński pass 175*7249d1a6SKrzysztof Kosiński """) # noqa 176*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 177*7249d1a6SKrzysztof Kosiński def f(): 178*7249d1a6SKrzysztof Kosiński 179*7249d1a6SKrzysztof Kosiński def g(): 180*7249d1a6SKrzysztof Kosiński while (xxxxxxxxxxxxxxxxxxxx(yyyyyyyyyyyyy[zzzzz]) == 'aaaaaaaaaaa' 181*7249d1a6SKrzysztof Kosiński and xxxxxxxxxxxxxxxxxxxx( 182*7249d1a6SKrzysztof Kosiński yyyyyyyyyyyyy[zzzzz].aaaaaaaa[0]) == 'bbbbbbb'): 183*7249d1a6SKrzysztof Kosiński pass 184*7249d1a6SKrzysztof Kosiński """) # noqa 185*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 186*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 187*7249d1a6SKrzysztof Kosiński 188*7249d1a6SKrzysztof Kosiński def testIndentSizeChanging(self): 189*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 190*7249d1a6SKrzysztof Kosiński if True: 191*7249d1a6SKrzysztof Kosiński runtime_mins = (program_end_time - program_start_time).total_seconds() / 60.0 192*7249d1a6SKrzysztof Kosiński """) # noqa 193*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 194*7249d1a6SKrzysztof Kosiński if True: 195*7249d1a6SKrzysztof Kosiński runtime_mins = (program_end_time - 196*7249d1a6SKrzysztof Kosiński program_start_time).total_seconds() / 60.0 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 testHangingIndentCollision(self): 202*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 203*7249d1a6SKrzysztof Kosiński if (aaaaaaaaaaaaaa + bbbbbbbbbbbbbbbb == ccccccccccccccccc and xxxxxxxxxxxxx or yyyyyyyyyyyyyyyyy): 204*7249d1a6SKrzysztof Kosiński pass 205*7249d1a6SKrzysztof Kosiński elif (xxxxxxxxxxxxxxx(aaaaaaaaaaa, bbbbbbbbbbbbbb, cccccccccccc, dddddddddd=None)): 206*7249d1a6SKrzysztof Kosiński pass 207*7249d1a6SKrzysztof Kosiński 208*7249d1a6SKrzysztof Kosiński 209*7249d1a6SKrzysztof Kosiński def h(): 210*7249d1a6SKrzysztof Kosiński if (xxxxxxxxxxxx.yyyyyyyy(zzzzzzzzzzzzz[0]) == 'aaaaaaaaaaa' and xxxxxxxxxxxx.yyyyyyyy(zzzzzzzzzzzzz[0].mmmmmmmm[0]) == 'bbbbbbb'): 211*7249d1a6SKrzysztof Kosiński pass 212*7249d1a6SKrzysztof Kosiński 213*7249d1a6SKrzysztof Kosiński for connection in itertools.chain(branch.contact, branch.address, morestuff.andmore.andmore.andmore.andmore.andmore.andmore.andmore): 214*7249d1a6SKrzysztof Kosiński dosomething(connection) 215*7249d1a6SKrzysztof Kosiński """) # noqa 216*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 217*7249d1a6SKrzysztof Kosiński if (aaaaaaaaaaaaaa + bbbbbbbbbbbbbbbb == ccccccccccccccccc and xxxxxxxxxxxxx 218*7249d1a6SKrzysztof Kosiński or yyyyyyyyyyyyyyyyy): 219*7249d1a6SKrzysztof Kosiński pass 220*7249d1a6SKrzysztof Kosiński elif (xxxxxxxxxxxxxxx(aaaaaaaaaaa, 221*7249d1a6SKrzysztof Kosiński bbbbbbbbbbbbbb, 222*7249d1a6SKrzysztof Kosiński cccccccccccc, 223*7249d1a6SKrzysztof Kosiński dddddddddd=None)): 224*7249d1a6SKrzysztof Kosiński pass 225*7249d1a6SKrzysztof Kosiński 226*7249d1a6SKrzysztof Kosiński 227*7249d1a6SKrzysztof Kosiński def h(): 228*7249d1a6SKrzysztof Kosiński if (xxxxxxxxxxxx.yyyyyyyy(zzzzzzzzzzzzz[0]) == 'aaaaaaaaaaa' and 229*7249d1a6SKrzysztof Kosiński xxxxxxxxxxxx.yyyyyyyy(zzzzzzzzzzzzz[0].mmmmmmmm[0]) == 'bbbbbbb'): 230*7249d1a6SKrzysztof Kosiński pass 231*7249d1a6SKrzysztof Kosiński 232*7249d1a6SKrzysztof Kosiński for connection in itertools.chain( 233*7249d1a6SKrzysztof Kosiński branch.contact, branch.address, 234*7249d1a6SKrzysztof Kosiński morestuff.andmore.andmore.andmore.andmore.andmore.andmore.andmore): 235*7249d1a6SKrzysztof Kosiński dosomething(connection) 236*7249d1a6SKrzysztof Kosiński """) # noqa 237*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 238*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 239*7249d1a6SKrzysztof Kosiński 240*7249d1a6SKrzysztof Kosiński def testSplittingBeforeLogicalOperator(self): 241*7249d1a6SKrzysztof Kosiński try: 242*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle( 243*7249d1a6SKrzysztof Kosiński style.CreateStyleFromConfig( 244*7249d1a6SKrzysztof Kosiński '{based_on_style: pep8, split_before_logical_operator: True}')) 245*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 246*7249d1a6SKrzysztof Kosiński def foo(): 247*7249d1a6SKrzysztof Kosiński return bool(update.message.new_chat_member or update.message.left_chat_member or 248*7249d1a6SKrzysztof Kosiński update.message.new_chat_title or update.message.new_chat_photo or 249*7249d1a6SKrzysztof Kosiński update.message.delete_chat_photo or update.message.group_chat_created or 250*7249d1a6SKrzysztof Kosiński update.message.supergroup_chat_created or update.message.channel_chat_created 251*7249d1a6SKrzysztof Kosiński or update.message.migrate_to_chat_id or update.message.migrate_from_chat_id or 252*7249d1a6SKrzysztof Kosiński update.message.pinned_message) 253*7249d1a6SKrzysztof Kosiński """) # noqa 254*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 255*7249d1a6SKrzysztof Kosiński def foo(): 256*7249d1a6SKrzysztof Kosiński return bool( 257*7249d1a6SKrzysztof Kosiński update.message.new_chat_member or update.message.left_chat_member 258*7249d1a6SKrzysztof Kosiński or update.message.new_chat_title or update.message.new_chat_photo 259*7249d1a6SKrzysztof Kosiński or update.message.delete_chat_photo 260*7249d1a6SKrzysztof Kosiński or update.message.group_chat_created 261*7249d1a6SKrzysztof Kosiński or update.message.supergroup_chat_created 262*7249d1a6SKrzysztof Kosiński or update.message.channel_chat_created 263*7249d1a6SKrzysztof Kosiński or update.message.migrate_to_chat_id 264*7249d1a6SKrzysztof Kosiński or update.message.migrate_from_chat_id 265*7249d1a6SKrzysztof Kosiński or update.message.pinned_message) 266*7249d1a6SKrzysztof Kosiński """) # noqa 267*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 268*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, 269*7249d1a6SKrzysztof Kosiński reformatter.Reformat(llines)) 270*7249d1a6SKrzysztof Kosiński finally: 271*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle(style.CreatePEP8Style()) 272*7249d1a6SKrzysztof Kosiński 273*7249d1a6SKrzysztof Kosiński def testContiguousListEndingWithComment(self): 274*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 275*7249d1a6SKrzysztof Kosiński if True: 276*7249d1a6SKrzysztof Kosiński if True: 277*7249d1a6SKrzysztof Kosiński keys.append(aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) # may be unassigned. 278*7249d1a6SKrzysztof Kosiński """) # noqa 279*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 280*7249d1a6SKrzysztof Kosiński if True: 281*7249d1a6SKrzysztof Kosiński if True: 282*7249d1a6SKrzysztof Kosiński keys.append( 283*7249d1a6SKrzysztof Kosiński aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) # may be unassigned. 284*7249d1a6SKrzysztof Kosiński """) # noqa 285*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 286*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 287*7249d1a6SKrzysztof Kosiński 288*7249d1a6SKrzysztof Kosiński def testSplittingBeforeFirstArgument(self): 289*7249d1a6SKrzysztof Kosiński try: 290*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle( 291*7249d1a6SKrzysztof Kosiński style.CreateStyleFromConfig( 292*7249d1a6SKrzysztof Kosiński '{based_on_style: pep8, split_before_first_argument: True}')) 293*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 294*7249d1a6SKrzysztof Kosiński a_very_long_function_name(long_argument_name_1=1, long_argument_name_2=2, 295*7249d1a6SKrzysztof Kosiński long_argument_name_3=3, long_argument_name_4=4) 296*7249d1a6SKrzysztof Kosiński """) # noqa 297*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 298*7249d1a6SKrzysztof Kosiński a_very_long_function_name( 299*7249d1a6SKrzysztof Kosiński long_argument_name_1=1, 300*7249d1a6SKrzysztof Kosiński long_argument_name_2=2, 301*7249d1a6SKrzysztof Kosiński long_argument_name_3=3, 302*7249d1a6SKrzysztof Kosiński long_argument_name_4=4) 303*7249d1a6SKrzysztof Kosiński """) 304*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 305*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, 306*7249d1a6SKrzysztof Kosiński reformatter.Reformat(llines)) 307*7249d1a6SKrzysztof Kosiński finally: 308*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle(style.CreatePEP8Style()) 309*7249d1a6SKrzysztof Kosiński 310*7249d1a6SKrzysztof Kosiński def testSplittingExpressionsInsideSubscripts(self): 311*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 312*7249d1a6SKrzysztof Kosiński def foo(): 313*7249d1a6SKrzysztof Kosiński df = df[(df['campaign_status'] == 'LIVE') & (df['action_status'] == 'LIVE')] 314*7249d1a6SKrzysztof Kosiński """) # noqa 315*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 316*7249d1a6SKrzysztof Kosiński def foo(): 317*7249d1a6SKrzysztof Kosiński df = df[(df['campaign_status'] == 'LIVE') 318*7249d1a6SKrzysztof Kosiński & (df['action_status'] == 'LIVE')] 319*7249d1a6SKrzysztof Kosiński """) 320*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 321*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 322*7249d1a6SKrzysztof Kosiński 323*7249d1a6SKrzysztof Kosiński def testSplitListsAndDictSetMakersIfCommaTerminated(self): 324*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 325*7249d1a6SKrzysztof Kosiński DJANGO_TEMPLATES_OPTIONS = {"context_processors": []} 326*7249d1a6SKrzysztof Kosiński DJANGO_TEMPLATES_OPTIONS = {"context_processors": [],} 327*7249d1a6SKrzysztof Kosiński x = ["context_processors"] 328*7249d1a6SKrzysztof Kosiński x = ["context_processors",] 329*7249d1a6SKrzysztof Kosiński """) 330*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 331*7249d1a6SKrzysztof Kosiński DJANGO_TEMPLATES_OPTIONS = {"context_processors": []} 332*7249d1a6SKrzysztof Kosiński DJANGO_TEMPLATES_OPTIONS = { 333*7249d1a6SKrzysztof Kosiński "context_processors": [], 334*7249d1a6SKrzysztof Kosiński } 335*7249d1a6SKrzysztof Kosiński x = ["context_processors"] 336*7249d1a6SKrzysztof Kosiński x = [ 337*7249d1a6SKrzysztof Kosiński "context_processors", 338*7249d1a6SKrzysztof Kosiński ] 339*7249d1a6SKrzysztof Kosiński """) 340*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 341*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 342*7249d1a6SKrzysztof Kosiński 343*7249d1a6SKrzysztof Kosiński def testSplitAroundNamedAssigns(self): 344*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 345*7249d1a6SKrzysztof Kosiński class a(): 346*7249d1a6SKrzysztof Kosiński 347*7249d1a6SKrzysztof Kosiński def a(): return a( 348*7249d1a6SKrzysztof Kosiński aaaaaaaaaa=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) 349*7249d1a6SKrzysztof Kosiński """) 350*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 351*7249d1a6SKrzysztof Kosiński class a(): 352*7249d1a6SKrzysztof Kosiński 353*7249d1a6SKrzysztof Kosiński def a(): 354*7249d1a6SKrzysztof Kosiński return a( 355*7249d1a6SKrzysztof Kosiński aaaaaaaaaa=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 356*7249d1a6SKrzysztof Kosiński ) 357*7249d1a6SKrzysztof Kosiński """) 358*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 359*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 360*7249d1a6SKrzysztof Kosiński 361*7249d1a6SKrzysztof Kosiński def testUnaryOperator(self): 362*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 363*7249d1a6SKrzysztof Kosiński if not -3 < x < 3: 364*7249d1a6SKrzysztof Kosiński pass 365*7249d1a6SKrzysztof Kosiński if -3 < x < 3: 366*7249d1a6SKrzysztof Kosiński pass 367*7249d1a6SKrzysztof Kosiński """) 368*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 369*7249d1a6SKrzysztof Kosiński if not -3 < x < 3: 370*7249d1a6SKrzysztof Kosiński pass 371*7249d1a6SKrzysztof Kosiński if -3 < x < 3: 372*7249d1a6SKrzysztof Kosiński pass 373*7249d1a6SKrzysztof Kosiński """) 374*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 375*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 376*7249d1a6SKrzysztof Kosiński 377*7249d1a6SKrzysztof Kosiński def testNoSplitBeforeDictValue(self): 378*7249d1a6SKrzysztof Kosiński try: 379*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle( 380*7249d1a6SKrzysztof Kosiński style.CreateStyleFromConfig('{based_on_style: pep8, ' 381*7249d1a6SKrzysztof Kosiński 'allow_split_before_dict_value: false, ' 382*7249d1a6SKrzysztof Kosiński 'coalesce_brackets: true, ' 383*7249d1a6SKrzysztof Kosiński 'dedent_closing_brackets: true, ' 384*7249d1a6SKrzysztof Kosiński 'each_dict_entry_on_separate_line: true, ' 385*7249d1a6SKrzysztof Kosiński 'split_before_logical_operator: true}')) 386*7249d1a6SKrzysztof Kosiński 387*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 388*7249d1a6SKrzysztof Kosiński some_dict = { 389*7249d1a6SKrzysztof Kosiński 'title': _("I am example data"), 390*7249d1a6SKrzysztof Kosiński 'description': _("Lorem ipsum dolor met sit amet elit, si vis pacem para bellum " 391*7249d1a6SKrzysztof Kosiński "elites nihi very long string."), 392*7249d1a6SKrzysztof Kosiński } 393*7249d1a6SKrzysztof Kosiński """) # noqa 394*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 395*7249d1a6SKrzysztof Kosiński some_dict = { 396*7249d1a6SKrzysztof Kosiński 'title': _("I am example data"), 397*7249d1a6SKrzysztof Kosiński 'description': _( 398*7249d1a6SKrzysztof Kosiński "Lorem ipsum dolor met sit amet elit, si vis pacem para bellum " 399*7249d1a6SKrzysztof Kosiński "elites nihi very long string." 400*7249d1a6SKrzysztof Kosiński ), 401*7249d1a6SKrzysztof Kosiński } 402*7249d1a6SKrzysztof Kosiński """) # noqa 403*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 404*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, 405*7249d1a6SKrzysztof Kosiński reformatter.Reformat(llines)) 406*7249d1a6SKrzysztof Kosiński 407*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 408*7249d1a6SKrzysztof Kosiński X = {'a': 1, 'b': 2, 'key': this_is_a_function_call_that_goes_over_the_column_limit_im_pretty_sure()} 409*7249d1a6SKrzysztof Kosiński """) # noqa 410*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 411*7249d1a6SKrzysztof Kosiński X = { 412*7249d1a6SKrzysztof Kosiński 'a': 1, 413*7249d1a6SKrzysztof Kosiński 'b': 2, 414*7249d1a6SKrzysztof Kosiński 'key': this_is_a_function_call_that_goes_over_the_column_limit_im_pretty_sure() 415*7249d1a6SKrzysztof Kosiński } 416*7249d1a6SKrzysztof Kosiński """) # noqa 417*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 418*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, 419*7249d1a6SKrzysztof Kosiński reformatter.Reformat(llines)) 420*7249d1a6SKrzysztof Kosiński 421*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 422*7249d1a6SKrzysztof Kosiński attrs = { 423*7249d1a6SKrzysztof Kosiński 'category': category, 424*7249d1a6SKrzysztof Kosiński 'role': forms.ModelChoiceField(label=_("Role"), required=False, queryset=category_roles, initial=selected_role, empty_label=_("No access"),), 425*7249d1a6SKrzysztof Kosiński } 426*7249d1a6SKrzysztof Kosiński """) # noqa 427*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 428*7249d1a6SKrzysztof Kosiński attrs = { 429*7249d1a6SKrzysztof Kosiński 'category': category, 430*7249d1a6SKrzysztof Kosiński 'role': forms.ModelChoiceField( 431*7249d1a6SKrzysztof Kosiński label=_("Role"), 432*7249d1a6SKrzysztof Kosiński required=False, 433*7249d1a6SKrzysztof Kosiński queryset=category_roles, 434*7249d1a6SKrzysztof Kosiński initial=selected_role, 435*7249d1a6SKrzysztof Kosiński empty_label=_("No access"), 436*7249d1a6SKrzysztof Kosiński ), 437*7249d1a6SKrzysztof Kosiński } 438*7249d1a6SKrzysztof Kosiński """) 439*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 440*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, 441*7249d1a6SKrzysztof Kosiński reformatter.Reformat(llines)) 442*7249d1a6SKrzysztof Kosiński 443*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 444*7249d1a6SKrzysztof Kosiński css_class = forms.CharField( 445*7249d1a6SKrzysztof Kosiński label=_("CSS class"), 446*7249d1a6SKrzysztof Kosiński required=False, 447*7249d1a6SKrzysztof Kosiński help_text=_("Optional CSS class used to customize this category appearance from templates."), 448*7249d1a6SKrzysztof Kosiński ) 449*7249d1a6SKrzysztof Kosiński """) # noqa 450*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 451*7249d1a6SKrzysztof Kosiński css_class = forms.CharField( 452*7249d1a6SKrzysztof Kosiński label=_("CSS class"), 453*7249d1a6SKrzysztof Kosiński required=False, 454*7249d1a6SKrzysztof Kosiński help_text=_( 455*7249d1a6SKrzysztof Kosiński "Optional CSS class used to customize this category appearance from templates." 456*7249d1a6SKrzysztof Kosiński ), 457*7249d1a6SKrzysztof Kosiński ) 458*7249d1a6SKrzysztof Kosiński """) # noqa 459*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 460*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, 461*7249d1a6SKrzysztof Kosiński reformatter.Reformat(llines)) 462*7249d1a6SKrzysztof Kosiński finally: 463*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle(style.CreatePEP8Style()) 464*7249d1a6SKrzysztof Kosiński 465*7249d1a6SKrzysztof Kosiński def testBitwiseOperandSplitting(self): 466*7249d1a6SKrzysztof Kosiński unformatted_code = """\ 467*7249d1a6SKrzysztof Kosińskidef _(): 468*7249d1a6SKrzysztof Kosiński include_values = np.where( 469*7249d1a6SKrzysztof Kosiński (cdffile['Quality_Flag'][:] >= 5) & ( 470*7249d1a6SKrzysztof Kosiński cdffile['Day_Night_Flag'][:] == 1) & ( 471*7249d1a6SKrzysztof Kosiński cdffile['Longitude'][:] >= select_lon - radius) & ( 472*7249d1a6SKrzysztof Kosiński cdffile['Longitude'][:] <= select_lon + radius) & ( 473*7249d1a6SKrzysztof Kosiński cdffile['Latitude'][:] >= select_lat - radius) & ( 474*7249d1a6SKrzysztof Kosiński cdffile['Latitude'][:] <= select_lat + radius)) 475*7249d1a6SKrzysztof Kosiński""" 476*7249d1a6SKrzysztof Kosiński expected_code = """\ 477*7249d1a6SKrzysztof Kosińskidef _(): 478*7249d1a6SKrzysztof Kosiński include_values = np.where( 479*7249d1a6SKrzysztof Kosiński (cdffile['Quality_Flag'][:] >= 5) & (cdffile['Day_Night_Flag'][:] == 1) 480*7249d1a6SKrzysztof Kosiński & (cdffile['Longitude'][:] >= select_lon - radius) 481*7249d1a6SKrzysztof Kosiński & (cdffile['Longitude'][:] <= select_lon + radius) 482*7249d1a6SKrzysztof Kosiński & (cdffile['Latitude'][:] >= select_lat - radius) 483*7249d1a6SKrzysztof Kosiński & (cdffile['Latitude'][:] <= select_lat + radius)) 484*7249d1a6SKrzysztof Kosiński""" 485*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 486*7249d1a6SKrzysztof Kosiński self.assertEqual(expected_code, reformatter.Reformat(llines)) 487*7249d1a6SKrzysztof Kosiński 488*7249d1a6SKrzysztof Kosiński def testNoBlankLinesOnlyForFirstNestedObject(self): 489*7249d1a6SKrzysztof Kosiński unformatted_code = '''\ 490*7249d1a6SKrzysztof Kosińskiclass Demo: 491*7249d1a6SKrzysztof Kosiński """ 492*7249d1a6SKrzysztof Kosiński Demo docs 493*7249d1a6SKrzysztof Kosiński """ 494*7249d1a6SKrzysztof Kosiński def foo(self): 495*7249d1a6SKrzysztof Kosiński """ 496*7249d1a6SKrzysztof Kosiński foo docs 497*7249d1a6SKrzysztof Kosiński """ 498*7249d1a6SKrzysztof Kosiński def bar(self): 499*7249d1a6SKrzysztof Kosiński """ 500*7249d1a6SKrzysztof Kosiński bar docs 501*7249d1a6SKrzysztof Kosiński """ 502*7249d1a6SKrzysztof Kosiński''' 503*7249d1a6SKrzysztof Kosiński expected_code = '''\ 504*7249d1a6SKrzysztof Kosińskiclass Demo: 505*7249d1a6SKrzysztof Kosiński """ 506*7249d1a6SKrzysztof Kosiński Demo docs 507*7249d1a6SKrzysztof Kosiński """ 508*7249d1a6SKrzysztof Kosiński 509*7249d1a6SKrzysztof Kosiński def foo(self): 510*7249d1a6SKrzysztof Kosiński """ 511*7249d1a6SKrzysztof Kosiński foo docs 512*7249d1a6SKrzysztof Kosiński """ 513*7249d1a6SKrzysztof Kosiński 514*7249d1a6SKrzysztof Kosiński def bar(self): 515*7249d1a6SKrzysztof Kosiński """ 516*7249d1a6SKrzysztof Kosiński bar docs 517*7249d1a6SKrzysztof Kosiński """ 518*7249d1a6SKrzysztof Kosiński''' 519*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 520*7249d1a6SKrzysztof Kosiński self.assertEqual(expected_code, reformatter.Reformat(llines)) 521*7249d1a6SKrzysztof Kosiński 522*7249d1a6SKrzysztof Kosiński def testSplitBeforeArithmeticOperators(self): 523*7249d1a6SKrzysztof Kosiński try: 524*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle( 525*7249d1a6SKrzysztof Kosiński style.CreateStyleFromConfig( 526*7249d1a6SKrzysztof Kosiński '{based_on_style: pep8, split_before_arithmetic_operator: true}')) 527*7249d1a6SKrzysztof Kosiński 528*7249d1a6SKrzysztof Kosiński unformatted_code = """\ 529*7249d1a6SKrzysztof Kosińskidef _(): 530*7249d1a6SKrzysztof Kosiński raise ValueError('This is a long message that ends with an argument: ' + str(42)) 531*7249d1a6SKrzysztof Kosiński""" # noqa 532*7249d1a6SKrzysztof Kosiński expected_formatted_code = """\ 533*7249d1a6SKrzysztof Kosińskidef _(): 534*7249d1a6SKrzysztof Kosiński raise ValueError('This is a long message that ends with an argument: ' 535*7249d1a6SKrzysztof Kosiński + str(42)) 536*7249d1a6SKrzysztof Kosiński""" 537*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 538*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, 539*7249d1a6SKrzysztof Kosiński reformatter.Reformat(llines)) 540*7249d1a6SKrzysztof Kosiński finally: 541*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle(style.CreatePEP8Style()) 542*7249d1a6SKrzysztof Kosiński 543*7249d1a6SKrzysztof Kosiński def testListSplitting(self): 544*7249d1a6SKrzysztof Kosiński unformatted_code = """\ 545*7249d1a6SKrzysztof Kosińskifoo([(1,1), (1,1), (1,1), (1,1), (1,1), (1,1), (1,1), 546*7249d1a6SKrzysztof Kosiński (1,1), (1,1), (1,1), (1,1), (1,1), (1,1), (1,1), 547*7249d1a6SKrzysztof Kosiński (1,10), (1,11), (1, 10), (1,11), (10,11)]) 548*7249d1a6SKrzysztof Kosiński""" 549*7249d1a6SKrzysztof Kosiński expected_code = """\ 550*7249d1a6SKrzysztof Kosińskifoo([(1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), 551*7249d1a6SKrzysztof Kosiński (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 10), (1, 11), (1, 10), 552*7249d1a6SKrzysztof Kosiński (1, 11), (10, 11)]) 553*7249d1a6SKrzysztof Kosiński""" 554*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 555*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_code, reformatter.Reformat(llines)) 556*7249d1a6SKrzysztof Kosiński 557*7249d1a6SKrzysztof Kosiński def testNoBlankLineBeforeNestedFuncOrClass(self): 558*7249d1a6SKrzysztof Kosiński try: 559*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle( 560*7249d1a6SKrzysztof Kosiński style.CreateStyleFromConfig( 561*7249d1a6SKrzysztof Kosiński '{based_on_style: pep8, ' 562*7249d1a6SKrzysztof Kosiński 'blank_line_before_nested_class_or_def: false}')) 563*7249d1a6SKrzysztof Kosiński 564*7249d1a6SKrzysztof Kosiński unformatted_code = '''\ 565*7249d1a6SKrzysztof Kosińskidef normal_function(): 566*7249d1a6SKrzysztof Kosiński """Return the nested function.""" 567*7249d1a6SKrzysztof Kosiński 568*7249d1a6SKrzysztof Kosiński def nested_function(): 569*7249d1a6SKrzysztof Kosiński """Do nothing just nest within.""" 570*7249d1a6SKrzysztof Kosiński 571*7249d1a6SKrzysztof Kosiński @nested(klass) 572*7249d1a6SKrzysztof Kosiński class nested_class(): 573*7249d1a6SKrzysztof Kosiński pass 574*7249d1a6SKrzysztof Kosiński 575*7249d1a6SKrzysztof Kosiński pass 576*7249d1a6SKrzysztof Kosiński 577*7249d1a6SKrzysztof Kosiński return nested_function 578*7249d1a6SKrzysztof Kosiński''' 579*7249d1a6SKrzysztof Kosiński expected_formatted_code = '''\ 580*7249d1a6SKrzysztof Kosińskidef normal_function(): 581*7249d1a6SKrzysztof Kosiński """Return the nested function.""" 582*7249d1a6SKrzysztof Kosiński def nested_function(): 583*7249d1a6SKrzysztof Kosiński """Do nothing just nest within.""" 584*7249d1a6SKrzysztof Kosiński @nested(klass) 585*7249d1a6SKrzysztof Kosiński class nested_class(): 586*7249d1a6SKrzysztof Kosiński pass 587*7249d1a6SKrzysztof Kosiński 588*7249d1a6SKrzysztof Kosiński pass 589*7249d1a6SKrzysztof Kosiński 590*7249d1a6SKrzysztof Kosiński return nested_function 591*7249d1a6SKrzysztof Kosiński''' 592*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 593*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, 594*7249d1a6SKrzysztof Kosiński reformatter.Reformat(llines)) 595*7249d1a6SKrzysztof Kosiński finally: 596*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle(style.CreatePEP8Style()) 597*7249d1a6SKrzysztof Kosiński 598*7249d1a6SKrzysztof Kosiński def testParamListIndentationCollision1(self): 599*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 600*7249d1a6SKrzysztof Kosińskiclass _(): 601*7249d1a6SKrzysztof Kosiński 602*7249d1a6SKrzysztof Kosiński def __init__(self, title: Optional[str], diffs: Collection[BinaryDiff] = (), charset: Union[Type[AsciiCharset], Type[LineCharset]] = AsciiCharset, preprocess: Callable[[str], str] = identity, 603*7249d1a6SKrzysztof Kosiński # TODO(somebody): Make this a Literal type. 604*7249d1a6SKrzysztof Kosiński justify: str = 'rjust'): 605*7249d1a6SKrzysztof Kosiński self._cs = charset 606*7249d1a6SKrzysztof Kosiński self._preprocess = preprocess 607*7249d1a6SKrzysztof Kosiński """) # noqa 608*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 609*7249d1a6SKrzysztof Kosińskiclass _(): 610*7249d1a6SKrzysztof Kosiński 611*7249d1a6SKrzysztof Kosiński def __init__( 612*7249d1a6SKrzysztof Kosiński self, 613*7249d1a6SKrzysztof Kosiński title: Optional[str], 614*7249d1a6SKrzysztof Kosiński diffs: Collection[BinaryDiff] = (), 615*7249d1a6SKrzysztof Kosiński charset: Union[Type[AsciiCharset], 616*7249d1a6SKrzysztof Kosiński Type[LineCharset]] = AsciiCharset, 617*7249d1a6SKrzysztof Kosiński preprocess: Callable[[str], str] = identity, 618*7249d1a6SKrzysztof Kosiński # TODO(somebody): Make this a Literal type. 619*7249d1a6SKrzysztof Kosiński justify: str = 'rjust'): 620*7249d1a6SKrzysztof Kosiński self._cs = charset 621*7249d1a6SKrzysztof Kosiński self._preprocess = preprocess 622*7249d1a6SKrzysztof Kosiński """) 623*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 624*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 625*7249d1a6SKrzysztof Kosiński 626*7249d1a6SKrzysztof Kosiński def testParamListIndentationCollision2(self): 627*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 628*7249d1a6SKrzysztof Kosiński def simple_pass_function_with_an_extremely_long_name_and_some_arguments( 629*7249d1a6SKrzysztof Kosiński argument0, argument1): 630*7249d1a6SKrzysztof Kosiński pass 631*7249d1a6SKrzysztof Kosiński """) 632*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 633*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 634*7249d1a6SKrzysztof Kosiński 635*7249d1a6SKrzysztof Kosiński def testParamListIndentationCollision3(self): 636*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 637*7249d1a6SKrzysztof Kosiński def func1( 638*7249d1a6SKrzysztof Kosiński arg1, 639*7249d1a6SKrzysztof Kosiński arg2, 640*7249d1a6SKrzysztof Kosiński ) -> None: 641*7249d1a6SKrzysztof Kosiński pass 642*7249d1a6SKrzysztof Kosiński 643*7249d1a6SKrzysztof Kosiński 644*7249d1a6SKrzysztof Kosiński def func2( 645*7249d1a6SKrzysztof Kosiński arg1, 646*7249d1a6SKrzysztof Kosiński arg2, 647*7249d1a6SKrzysztof Kosiński ): 648*7249d1a6SKrzysztof Kosiński pass 649*7249d1a6SKrzysztof Kosiński """) 650*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 651*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 652*7249d1a6SKrzysztof Kosiński 653*7249d1a6SKrzysztof Kosiński def testTwoWordComparisonOperators(self): 654*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 655*7249d1a6SKrzysztof Kosiński _ = (klsdfjdklsfjksdlfjdklsfjdslkfjsdkl is not ksldfjsdklfjdklsfjdklsfjdklsfjdsklfjdklsfj) 656*7249d1a6SKrzysztof Kosiński _ = (klsdfjdklsfjksdlfjdklsfjdslkfjsdkl not in {ksldfjsdklfjdklsfjdklsfjdklsfjdsklfjdklsfj}) 657*7249d1a6SKrzysztof Kosiński """) # noqa 658*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 659*7249d1a6SKrzysztof Kosiński _ = (klsdfjdklsfjksdlfjdklsfjdslkfjsdkl 660*7249d1a6SKrzysztof Kosiński is not ksldfjsdklfjdklsfjdklsfjdklsfjdsklfjdklsfj) 661*7249d1a6SKrzysztof Kosiński _ = (klsdfjdklsfjksdlfjdklsfjdslkfjsdkl 662*7249d1a6SKrzysztof Kosiński not in {ksldfjsdklfjdklsfjdklsfjdklsfjdsklfjdklsfj}) 663*7249d1a6SKrzysztof Kosiński """) 664*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 665*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 666*7249d1a6SKrzysztof Kosiński 667*7249d1a6SKrzysztof Kosiński @unittest.skipUnless(not py3compat.PY3, 'Requires Python 2.7') 668*7249d1a6SKrzysztof Kosiński def testAsyncAsNonKeyword(self): 669*7249d1a6SKrzysztof Kosiński # In Python 2, async may be used as a non-keyword identifier. 670*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 671*7249d1a6SKrzysztof Kosiński from util import async 672*7249d1a6SKrzysztof Kosiński 673*7249d1a6SKrzysztof Kosiński 674*7249d1a6SKrzysztof Kosiński class A(object): 675*7249d1a6SKrzysztof Kosiński 676*7249d1a6SKrzysztof Kosiński def foo(self): 677*7249d1a6SKrzysztof Kosiński async.run() 678*7249d1a6SKrzysztof Kosiński 679*7249d1a6SKrzysztof Kosiński def bar(self): 680*7249d1a6SKrzysztof Kosiński pass 681*7249d1a6SKrzysztof Kosiński """) 682*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 683*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines, verify=False)) 684*7249d1a6SKrzysztof Kosiński 685*7249d1a6SKrzysztof Kosiński def testStableInlinedDictionaryFormatting(self): 686*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 687*7249d1a6SKrzysztof Kosiński def _(): 688*7249d1a6SKrzysztof Kosiński url = "http://{0}/axis-cgi/admin/param.cgi?{1}".format( 689*7249d1a6SKrzysztof Kosiński value, urllib.urlencode({'action': 'update', 'parameter': value})) 690*7249d1a6SKrzysztof Kosiński """) # noqa 691*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 692*7249d1a6SKrzysztof Kosiński def _(): 693*7249d1a6SKrzysztof Kosiński url = "http://{0}/axis-cgi/admin/param.cgi?{1}".format( 694*7249d1a6SKrzysztof Kosiński value, urllib.urlencode({ 695*7249d1a6SKrzysztof Kosiński 'action': 'update', 696*7249d1a6SKrzysztof Kosiński 'parameter': value 697*7249d1a6SKrzysztof Kosiński })) 698*7249d1a6SKrzysztof Kosiński """) 699*7249d1a6SKrzysztof Kosiński 700*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 701*7249d1a6SKrzysztof Kosiński reformatted_code = reformatter.Reformat(llines) 702*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatted_code) 703*7249d1a6SKrzysztof Kosiński 704*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(reformatted_code) 705*7249d1a6SKrzysztof Kosiński reformatted_code = reformatter.Reformat(llines) 706*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatted_code) 707*7249d1a6SKrzysztof Kosiński 708*7249d1a6SKrzysztof Kosiński @unittest.skipUnless(py3compat.PY36, 'Requires Python 3.6') 709*7249d1a6SKrzysztof Kosiński def testSpaceBetweenColonAndElipses(self): 710*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle(style.CreatePEP8Style()) 711*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 712*7249d1a6SKrzysztof Kosiński class MyClass(ABC): 713*7249d1a6SKrzysztof Kosiński 714*7249d1a6SKrzysztof Kosiński place: ... 715*7249d1a6SKrzysztof Kosiński """) 716*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 717*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines, verify=False)) 718*7249d1a6SKrzysztof Kosiński 719*7249d1a6SKrzysztof Kosiński @unittest.skipUnless(py3compat.PY36, 'Requires Python 3.6') 720*7249d1a6SKrzysztof Kosiński def testSpaceBetweenDictColonAndElipses(self): 721*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle(style.CreatePEP8Style()) 722*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 723*7249d1a6SKrzysztof Kosiński {0:"...", 1:...} 724*7249d1a6SKrzysztof Kosiński """) 725*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 726*7249d1a6SKrzysztof Kosiński {0: "...", 1: ...} 727*7249d1a6SKrzysztof Kosiński """) 728*7249d1a6SKrzysztof Kosiński 729*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 730*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 731*7249d1a6SKrzysztof Kosiński 732*7249d1a6SKrzysztof Kosiński 733*7249d1a6SKrzysztof Kosińskiclass TestsForSpacesInsideBrackets(yapf_test_helper.YAPFTest): 734*7249d1a6SKrzysztof Kosiński """Test the SPACE_INSIDE_BRACKETS style option.""" 735*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 736*7249d1a6SKrzysztof Kosiński foo() 737*7249d1a6SKrzysztof Kosiński foo(1) 738*7249d1a6SKrzysztof Kosiński foo(1,2) 739*7249d1a6SKrzysztof Kosiński foo((1,)) 740*7249d1a6SKrzysztof Kosiński foo((1, 2)) 741*7249d1a6SKrzysztof Kosiński foo((1, 2,)) 742*7249d1a6SKrzysztof Kosiński foo(bar['baz'][0]) 743*7249d1a6SKrzysztof Kosiński set1 = {1, 2, 3} 744*7249d1a6SKrzysztof Kosiński dict1 = {1: 1, foo: 2, 3: bar} 745*7249d1a6SKrzysztof Kosiński dict2 = { 746*7249d1a6SKrzysztof Kosiński 1: 1, 747*7249d1a6SKrzysztof Kosiński foo: 2, 748*7249d1a6SKrzysztof Kosiński 3: bar, 749*7249d1a6SKrzysztof Kosiński } 750*7249d1a6SKrzysztof Kosiński dict3[3][1][get_index(*args,**kwargs)] 751*7249d1a6SKrzysztof Kosiński dict4[3][1][get_index(**kwargs)] 752*7249d1a6SKrzysztof Kosiński x = dict5[4](foo(*args)) 753*7249d1a6SKrzysztof Kosiński a = list1[:] 754*7249d1a6SKrzysztof Kosiński b = list2[slice_start:] 755*7249d1a6SKrzysztof Kosiński c = list3[slice_start:slice_end] 756*7249d1a6SKrzysztof Kosiński d = list4[slice_start:slice_end:] 757*7249d1a6SKrzysztof Kosiński e = list5[slice_start:slice_end:slice_step] 758*7249d1a6SKrzysztof Kosiński # Print gets special handling 759*7249d1a6SKrzysztof Kosiński print(set2) 760*7249d1a6SKrzysztof Kosiński compound = ((10+3)/(5-2**(6+x))) 761*7249d1a6SKrzysztof Kosiński string_idx = "mystring"[3] 762*7249d1a6SKrzysztof Kosiński """) 763*7249d1a6SKrzysztof Kosiński 764*7249d1a6SKrzysztof Kosiński def testEnabled(self): 765*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle( 766*7249d1a6SKrzysztof Kosiński style.CreateStyleFromConfig('{space_inside_brackets: True}')) 767*7249d1a6SKrzysztof Kosiński 768*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 769*7249d1a6SKrzysztof Kosiński foo() 770*7249d1a6SKrzysztof Kosiński foo( 1 ) 771*7249d1a6SKrzysztof Kosiński foo( 1, 2 ) 772*7249d1a6SKrzysztof Kosiński foo( ( 1, ) ) 773*7249d1a6SKrzysztof Kosiński foo( ( 1, 2 ) ) 774*7249d1a6SKrzysztof Kosiński foo( ( 775*7249d1a6SKrzysztof Kosiński 1, 776*7249d1a6SKrzysztof Kosiński 2, 777*7249d1a6SKrzysztof Kosiński ) ) 778*7249d1a6SKrzysztof Kosiński foo( bar[ 'baz' ][ 0 ] ) 779*7249d1a6SKrzysztof Kosiński set1 = { 1, 2, 3 } 780*7249d1a6SKrzysztof Kosiński dict1 = { 1: 1, foo: 2, 3: bar } 781*7249d1a6SKrzysztof Kosiński dict2 = { 782*7249d1a6SKrzysztof Kosiński 1: 1, 783*7249d1a6SKrzysztof Kosiński foo: 2, 784*7249d1a6SKrzysztof Kosiński 3: bar, 785*7249d1a6SKrzysztof Kosiński } 786*7249d1a6SKrzysztof Kosiński dict3[ 3 ][ 1 ][ get_index( *args, **kwargs ) ] 787*7249d1a6SKrzysztof Kosiński dict4[ 3 ][ 1 ][ get_index( **kwargs ) ] 788*7249d1a6SKrzysztof Kosiński x = dict5[ 4 ]( foo( *args ) ) 789*7249d1a6SKrzysztof Kosiński a = list1[ : ] 790*7249d1a6SKrzysztof Kosiński b = list2[ slice_start: ] 791*7249d1a6SKrzysztof Kosiński c = list3[ slice_start:slice_end ] 792*7249d1a6SKrzysztof Kosiński d = list4[ slice_start:slice_end: ] 793*7249d1a6SKrzysztof Kosiński e = list5[ slice_start:slice_end:slice_step ] 794*7249d1a6SKrzysztof Kosiński # Print gets special handling 795*7249d1a6SKrzysztof Kosiński print( set2 ) 796*7249d1a6SKrzysztof Kosiński compound = ( ( 10 + 3 ) / ( 5 - 2**( 6 + x ) ) ) 797*7249d1a6SKrzysztof Kosiński string_idx = "mystring"[ 3 ] 798*7249d1a6SKrzysztof Kosiński """) 799*7249d1a6SKrzysztof Kosiński 800*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(self.unformatted_code) 801*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 802*7249d1a6SKrzysztof Kosiński 803*7249d1a6SKrzysztof Kosiński def testDefault(self): 804*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle(style.CreatePEP8Style()) 805*7249d1a6SKrzysztof Kosiński 806*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 807*7249d1a6SKrzysztof Kosiński foo() 808*7249d1a6SKrzysztof Kosiński foo(1) 809*7249d1a6SKrzysztof Kosiński foo(1, 2) 810*7249d1a6SKrzysztof Kosiński foo((1, )) 811*7249d1a6SKrzysztof Kosiński foo((1, 2)) 812*7249d1a6SKrzysztof Kosiński foo(( 813*7249d1a6SKrzysztof Kosiński 1, 814*7249d1a6SKrzysztof Kosiński 2, 815*7249d1a6SKrzysztof Kosiński )) 816*7249d1a6SKrzysztof Kosiński foo(bar['baz'][0]) 817*7249d1a6SKrzysztof Kosiński set1 = {1, 2, 3} 818*7249d1a6SKrzysztof Kosiński dict1 = {1: 1, foo: 2, 3: bar} 819*7249d1a6SKrzysztof Kosiński dict2 = { 820*7249d1a6SKrzysztof Kosiński 1: 1, 821*7249d1a6SKrzysztof Kosiński foo: 2, 822*7249d1a6SKrzysztof Kosiński 3: bar, 823*7249d1a6SKrzysztof Kosiński } 824*7249d1a6SKrzysztof Kosiński dict3[3][1][get_index(*args, **kwargs)] 825*7249d1a6SKrzysztof Kosiński dict4[3][1][get_index(**kwargs)] 826*7249d1a6SKrzysztof Kosiński x = dict5[4](foo(*args)) 827*7249d1a6SKrzysztof Kosiński a = list1[:] 828*7249d1a6SKrzysztof Kosiński b = list2[slice_start:] 829*7249d1a6SKrzysztof Kosiński c = list3[slice_start:slice_end] 830*7249d1a6SKrzysztof Kosiński d = list4[slice_start:slice_end:] 831*7249d1a6SKrzysztof Kosiński e = list5[slice_start:slice_end:slice_step] 832*7249d1a6SKrzysztof Kosiński # Print gets special handling 833*7249d1a6SKrzysztof Kosiński print(set2) 834*7249d1a6SKrzysztof Kosiński compound = ((10 + 3) / (5 - 2**(6 + x))) 835*7249d1a6SKrzysztof Kosiński string_idx = "mystring"[3] 836*7249d1a6SKrzysztof Kosiński """) 837*7249d1a6SKrzysztof Kosiński 838*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(self.unformatted_code) 839*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 840*7249d1a6SKrzysztof Kosiński 841*7249d1a6SKrzysztof Kosiński @unittest.skipUnless(py3compat.PY36, 'Requires Python 3.6') 842*7249d1a6SKrzysztof Kosiński def testAwait(self): 843*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle( 844*7249d1a6SKrzysztof Kosiński style.CreateStyleFromConfig('{space_inside_brackets: True}')) 845*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 846*7249d1a6SKrzysztof Kosiński import asyncio 847*7249d1a6SKrzysztof Kosiński import time 848*7249d1a6SKrzysztof Kosiński 849*7249d1a6SKrzysztof Kosiński @print_args 850*7249d1a6SKrzysztof Kosiński async def slow_operation(): 851*7249d1a6SKrzysztof Kosiński await asyncio.sleep(1) 852*7249d1a6SKrzysztof Kosiński # print("Slow operation {} complete".format(n)) 853*7249d1a6SKrzysztof Kosiński async def main(): 854*7249d1a6SKrzysztof Kosiński start = time.time() 855*7249d1a6SKrzysztof Kosiński if (await get_html()): 856*7249d1a6SKrzysztof Kosiński pass 857*7249d1a6SKrzysztof Kosiński """) 858*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 859*7249d1a6SKrzysztof Kosiński import asyncio 860*7249d1a6SKrzysztof Kosiński import time 861*7249d1a6SKrzysztof Kosiński 862*7249d1a6SKrzysztof Kosiński 863*7249d1a6SKrzysztof Kosiński @print_args 864*7249d1a6SKrzysztof Kosiński async def slow_operation(): 865*7249d1a6SKrzysztof Kosiński await asyncio.sleep( 1 ) 866*7249d1a6SKrzysztof Kosiński 867*7249d1a6SKrzysztof Kosiński # print("Slow operation {} complete".format(n)) 868*7249d1a6SKrzysztof Kosiński async def main(): 869*7249d1a6SKrzysztof Kosiński start = time.time() 870*7249d1a6SKrzysztof Kosiński if ( await get_html() ): 871*7249d1a6SKrzysztof Kosiński pass 872*7249d1a6SKrzysztof Kosiński """) 873*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 874*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 875*7249d1a6SKrzysztof Kosiński 876*7249d1a6SKrzysztof Kosiński 877*7249d1a6SKrzysztof Kosińskiclass TestsForSpacesAroundSubscriptColon(yapf_test_helper.YAPFTest): 878*7249d1a6SKrzysztof Kosiński """Test the SPACES_AROUND_SUBSCRIPT_COLON style option.""" 879*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 880*7249d1a6SKrzysztof Kosiński a = list1[ : ] 881*7249d1a6SKrzysztof Kosiński b = list2[ slice_start: ] 882*7249d1a6SKrzysztof Kosiński c = list3[ slice_start:slice_end ] 883*7249d1a6SKrzysztof Kosiński d = list4[ slice_start:slice_end: ] 884*7249d1a6SKrzysztof Kosiński e = list5[ slice_start:slice_end:slice_step ] 885*7249d1a6SKrzysztof Kosiński a1 = list1[ : ] 886*7249d1a6SKrzysztof Kosiński b1 = list2[ 1: ] 887*7249d1a6SKrzysztof Kosiński c1 = list3[ 1:20 ] 888*7249d1a6SKrzysztof Kosiński d1 = list4[ 1:20: ] 889*7249d1a6SKrzysztof Kosiński e1 = list5[ 1:20:3 ] 890*7249d1a6SKrzysztof Kosiński """) 891*7249d1a6SKrzysztof Kosiński 892*7249d1a6SKrzysztof Kosiński def testEnabled(self): 893*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle( 894*7249d1a6SKrzysztof Kosiński style.CreateStyleFromConfig('{spaces_around_subscript_colon: True}')) 895*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 896*7249d1a6SKrzysztof Kosiński a = list1[:] 897*7249d1a6SKrzysztof Kosiński b = list2[slice_start :] 898*7249d1a6SKrzysztof Kosiński c = list3[slice_start : slice_end] 899*7249d1a6SKrzysztof Kosiński d = list4[slice_start : slice_end :] 900*7249d1a6SKrzysztof Kosiński e = list5[slice_start : slice_end : slice_step] 901*7249d1a6SKrzysztof Kosiński a1 = list1[:] 902*7249d1a6SKrzysztof Kosiński b1 = list2[1 :] 903*7249d1a6SKrzysztof Kosiński c1 = list3[1 : 20] 904*7249d1a6SKrzysztof Kosiński d1 = list4[1 : 20 :] 905*7249d1a6SKrzysztof Kosiński e1 = list5[1 : 20 : 3] 906*7249d1a6SKrzysztof Kosiński """) 907*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(self.unformatted_code) 908*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 909*7249d1a6SKrzysztof Kosiński 910*7249d1a6SKrzysztof Kosiński def testWithSpaceInsideBrackets(self): 911*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle( 912*7249d1a6SKrzysztof Kosiński style.CreateStyleFromConfig('{' 913*7249d1a6SKrzysztof Kosiński 'spaces_around_subscript_colon: true, ' 914*7249d1a6SKrzysztof Kosiński 'space_inside_brackets: true,' 915*7249d1a6SKrzysztof Kosiński '}')) 916*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 917*7249d1a6SKrzysztof Kosiński a = list1[ : ] 918*7249d1a6SKrzysztof Kosiński b = list2[ slice_start : ] 919*7249d1a6SKrzysztof Kosiński c = list3[ slice_start : slice_end ] 920*7249d1a6SKrzysztof Kosiński d = list4[ slice_start : slice_end : ] 921*7249d1a6SKrzysztof Kosiński e = list5[ slice_start : slice_end : slice_step ] 922*7249d1a6SKrzysztof Kosiński a1 = list1[ : ] 923*7249d1a6SKrzysztof Kosiński b1 = list2[ 1 : ] 924*7249d1a6SKrzysztof Kosiński c1 = list3[ 1 : 20 ] 925*7249d1a6SKrzysztof Kosiński d1 = list4[ 1 : 20 : ] 926*7249d1a6SKrzysztof Kosiński e1 = list5[ 1 : 20 : 3 ] 927*7249d1a6SKrzysztof Kosiński """) 928*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(self.unformatted_code) 929*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 930*7249d1a6SKrzysztof Kosiński 931*7249d1a6SKrzysztof Kosiński def testDefault(self): 932*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle(style.CreatePEP8Style()) 933*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 934*7249d1a6SKrzysztof Kosiński a = list1[:] 935*7249d1a6SKrzysztof Kosiński b = list2[slice_start:] 936*7249d1a6SKrzysztof Kosiński c = list3[slice_start:slice_end] 937*7249d1a6SKrzysztof Kosiński d = list4[slice_start:slice_end:] 938*7249d1a6SKrzysztof Kosiński e = list5[slice_start:slice_end:slice_step] 939*7249d1a6SKrzysztof Kosiński a1 = list1[:] 940*7249d1a6SKrzysztof Kosiński b1 = list2[1:] 941*7249d1a6SKrzysztof Kosiński c1 = list3[1:20] 942*7249d1a6SKrzysztof Kosiński d1 = list4[1:20:] 943*7249d1a6SKrzysztof Kosiński e1 = list5[1:20:3] 944*7249d1a6SKrzysztof Kosiński """) 945*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(self.unformatted_code) 946*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 947*7249d1a6SKrzysztof Kosiński 948*7249d1a6SKrzysztof Kosiński 949*7249d1a6SKrzysztof Kosińskiif __name__ == '__main__': 950*7249d1a6SKrzysztof Kosiński unittest.main() 951