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"""Basic 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 BasicReformatterTest(yapf_test_helper.YAPFTest): 27*7249d1a6SKrzysztof Kosiński 28*7249d1a6SKrzysztof Kosiński @classmethod 29*7249d1a6SKrzysztof Kosiński def setUpClass(cls): 30*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle(style.CreateYapfStyle()) 31*7249d1a6SKrzysztof Kosiński 32*7249d1a6SKrzysztof Kosiński def testSplittingAllArgs(self): 33*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle( 34*7249d1a6SKrzysztof Kosiński style.CreateStyleFromConfig( 35*7249d1a6SKrzysztof Kosiński '{split_all_comma_separated_values: true, column_limit: 40}')) 36*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 37*7249d1a6SKrzysztof Kosiński responseDict = {"timestamp": timestamp, "someValue": value, "whatever": 120} 38*7249d1a6SKrzysztof Kosiński """) # noqa 39*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 40*7249d1a6SKrzysztof Kosiński responseDict = { 41*7249d1a6SKrzysztof Kosiński "timestamp": timestamp, 42*7249d1a6SKrzysztof Kosiński "someValue": value, 43*7249d1a6SKrzysztof Kosiński "whatever": 120 44*7249d1a6SKrzysztof Kosiński } 45*7249d1a6SKrzysztof Kosiński """) 46*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 47*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 48*7249d1a6SKrzysztof Kosiński 49*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 50*7249d1a6SKrzysztof Kosiński yes = { 'yes': 'no', 'no': 'yes', } 51*7249d1a6SKrzysztof Kosiński """) 52*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 53*7249d1a6SKrzysztof Kosiński yes = { 54*7249d1a6SKrzysztof Kosiński 'yes': 'no', 55*7249d1a6SKrzysztof Kosiński 'no': 'yes', 56*7249d1a6SKrzysztof Kosiński } 57*7249d1a6SKrzysztof Kosiński """) 58*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 59*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 60*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 61*7249d1a6SKrzysztof Kosiński def foo(long_arg, really_long_arg, really_really_long_arg, cant_keep_all_these_args): 62*7249d1a6SKrzysztof Kosiński pass 63*7249d1a6SKrzysztof Kosiński """) # noqa 64*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 65*7249d1a6SKrzysztof Kosiński def foo(long_arg, 66*7249d1a6SKrzysztof Kosiński really_long_arg, 67*7249d1a6SKrzysztof Kosiński really_really_long_arg, 68*7249d1a6SKrzysztof Kosiński cant_keep_all_these_args): 69*7249d1a6SKrzysztof Kosiński pass 70*7249d1a6SKrzysztof Kosiński """) 71*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 72*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 73*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 74*7249d1a6SKrzysztof Kosiński foo_tuple = [long_arg, really_long_arg, really_really_long_arg, cant_keep_all_these_args] 75*7249d1a6SKrzysztof Kosiński """) # noqa 76*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 77*7249d1a6SKrzysztof Kosiński foo_tuple = [ 78*7249d1a6SKrzysztof Kosiński long_arg, 79*7249d1a6SKrzysztof Kosiński really_long_arg, 80*7249d1a6SKrzysztof Kosiński really_really_long_arg, 81*7249d1a6SKrzysztof Kosiński cant_keep_all_these_args 82*7249d1a6SKrzysztof Kosiński ] 83*7249d1a6SKrzysztof Kosiński """) 84*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 85*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 86*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 87*7249d1a6SKrzysztof Kosiński foo_tuple = [short, arg] 88*7249d1a6SKrzysztof Kosiński """) 89*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 90*7249d1a6SKrzysztof Kosiński foo_tuple = [short, arg] 91*7249d1a6SKrzysztof Kosiński """) 92*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 93*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 94*7249d1a6SKrzysztof Kosiński # There is a test for split_all_top_level_comma_separated_values, with 95*7249d1a6SKrzysztof Kosiński # different expected value 96*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 97*7249d1a6SKrzysztof Kosiński someLongFunction(this_is_a_very_long_parameter, 98*7249d1a6SKrzysztof Kosiński abc=(a, this_will_just_fit_xxxxxxx)) 99*7249d1a6SKrzysztof Kosiński """) 100*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 101*7249d1a6SKrzysztof Kosiński someLongFunction( 102*7249d1a6SKrzysztof Kosiński this_is_a_very_long_parameter, 103*7249d1a6SKrzysztof Kosiński abc=(a, 104*7249d1a6SKrzysztof Kosiński this_will_just_fit_xxxxxxx)) 105*7249d1a6SKrzysztof Kosiński """) 106*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 107*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 108*7249d1a6SKrzysztof Kosiński 109*7249d1a6SKrzysztof Kosiński def testSplittingTopLevelAllArgs(self): 110*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle( 111*7249d1a6SKrzysztof Kosiński style.CreateStyleFromConfig( 112*7249d1a6SKrzysztof Kosiński '{split_all_top_level_comma_separated_values: true, ' 113*7249d1a6SKrzysztof Kosiński 'column_limit: 40}')) 114*7249d1a6SKrzysztof Kosiński # Works the same way as split_all_comma_separated_values 115*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 116*7249d1a6SKrzysztof Kosiński responseDict = {"timestamp": timestamp, "someValue": value, "whatever": 120} 117*7249d1a6SKrzysztof Kosiński """) # noqa 118*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 119*7249d1a6SKrzysztof Kosiński responseDict = { 120*7249d1a6SKrzysztof Kosiński "timestamp": timestamp, 121*7249d1a6SKrzysztof Kosiński "someValue": value, 122*7249d1a6SKrzysztof Kosiński "whatever": 120 123*7249d1a6SKrzysztof Kosiński } 124*7249d1a6SKrzysztof Kosiński """) 125*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 126*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 127*7249d1a6SKrzysztof Kosiński # Works the same way as split_all_comma_separated_values 128*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 129*7249d1a6SKrzysztof Kosiński def foo(long_arg, really_long_arg, really_really_long_arg, cant_keep_all_these_args): 130*7249d1a6SKrzysztof Kosiński pass 131*7249d1a6SKrzysztof Kosiński """) # noqa 132*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 133*7249d1a6SKrzysztof Kosiński def foo(long_arg, 134*7249d1a6SKrzysztof Kosiński really_long_arg, 135*7249d1a6SKrzysztof Kosiński really_really_long_arg, 136*7249d1a6SKrzysztof Kosiński cant_keep_all_these_args): 137*7249d1a6SKrzysztof Kosiński pass 138*7249d1a6SKrzysztof Kosiński """) 139*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 140*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 141*7249d1a6SKrzysztof Kosiński # Works the same way as split_all_comma_separated_values 142*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 143*7249d1a6SKrzysztof Kosiński foo_tuple = [long_arg, really_long_arg, really_really_long_arg, cant_keep_all_these_args] 144*7249d1a6SKrzysztof Kosiński """) # noqa 145*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 146*7249d1a6SKrzysztof Kosiński foo_tuple = [ 147*7249d1a6SKrzysztof Kosiński long_arg, 148*7249d1a6SKrzysztof Kosiński really_long_arg, 149*7249d1a6SKrzysztof Kosiński really_really_long_arg, 150*7249d1a6SKrzysztof Kosiński cant_keep_all_these_args 151*7249d1a6SKrzysztof Kosiński ] 152*7249d1a6SKrzysztof Kosiński """) 153*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 154*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 155*7249d1a6SKrzysztof Kosiński # Works the same way as split_all_comma_separated_values 156*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 157*7249d1a6SKrzysztof Kosiński foo_tuple = [short, arg] 158*7249d1a6SKrzysztof Kosiński """) 159*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 160*7249d1a6SKrzysztof Kosiński foo_tuple = [short, arg] 161*7249d1a6SKrzysztof Kosiński """) 162*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 163*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 164*7249d1a6SKrzysztof Kosiński # There is a test for split_all_comma_separated_values, with different 165*7249d1a6SKrzysztof Kosiński # expected value 166*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 167*7249d1a6SKrzysztof Kosiński someLongFunction(this_is_a_very_long_parameter, 168*7249d1a6SKrzysztof Kosiński abc=(a, this_will_just_fit_xxxxxxx)) 169*7249d1a6SKrzysztof Kosiński """) 170*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 171*7249d1a6SKrzysztof Kosiński someLongFunction( 172*7249d1a6SKrzysztof Kosiński this_is_a_very_long_parameter, 173*7249d1a6SKrzysztof Kosiński abc=(a, this_will_just_fit_xxxxxxx)) 174*7249d1a6SKrzysztof Kosiński """) 175*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 176*7249d1a6SKrzysztof Kosiński actual_formatted_code = reformatter.Reformat(llines) 177*7249d1a6SKrzysztof Kosiński self.assertEqual(40, len(actual_formatted_code.splitlines()[-1])) 178*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, actual_formatted_code) 179*7249d1a6SKrzysztof Kosiński 180*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 181*7249d1a6SKrzysztof Kosiński someLongFunction(this_is_a_very_long_parameter, 182*7249d1a6SKrzysztof Kosiński abc=(a, this_will_not_fit_xxxxxxxxx)) 183*7249d1a6SKrzysztof Kosiński """) 184*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 185*7249d1a6SKrzysztof Kosiński someLongFunction( 186*7249d1a6SKrzysztof Kosiński this_is_a_very_long_parameter, 187*7249d1a6SKrzysztof Kosiński abc=(a, 188*7249d1a6SKrzysztof Kosiński this_will_not_fit_xxxxxxxxx)) 189*7249d1a6SKrzysztof Kosiński """) 190*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 191*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 192*7249d1a6SKrzysztof Kosiński 193*7249d1a6SKrzysztof Kosiński # Exercise the case where there's no opening bracket (for a, b) 194*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 195*7249d1a6SKrzysztof Kosiński a, b = f( 196*7249d1a6SKrzysztof Kosiński a_very_long_parameter, yet_another_one, and_another) 197*7249d1a6SKrzysztof Kosiński """) 198*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 199*7249d1a6SKrzysztof Kosiński a, b = f( 200*7249d1a6SKrzysztof Kosiński a_very_long_parameter, yet_another_one, and_another) 201*7249d1a6SKrzysztof Kosiński """) 202*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 203*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 204*7249d1a6SKrzysztof Kosiński 205*7249d1a6SKrzysztof Kosiński # Don't require splitting before comments. 206*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 207*7249d1a6SKrzysztof Kosiński KO = { 208*7249d1a6SKrzysztof Kosiński 'ABC': Abc, # abc 209*7249d1a6SKrzysztof Kosiński 'DEF': Def, # def 210*7249d1a6SKrzysztof Kosiński 'LOL': Lol, # wtf 211*7249d1a6SKrzysztof Kosiński 'GHI': Ghi, 212*7249d1a6SKrzysztof Kosiński 'JKL': Jkl, 213*7249d1a6SKrzysztof Kosiński } 214*7249d1a6SKrzysztof Kosiński """) 215*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 216*7249d1a6SKrzysztof Kosiński KO = { 217*7249d1a6SKrzysztof Kosiński 'ABC': Abc, # abc 218*7249d1a6SKrzysztof Kosiński 'DEF': Def, # def 219*7249d1a6SKrzysztof Kosiński 'LOL': Lol, # wtf 220*7249d1a6SKrzysztof Kosiński 'GHI': Ghi, 221*7249d1a6SKrzysztof Kosiński 'JKL': Jkl, 222*7249d1a6SKrzysztof Kosiński } 223*7249d1a6SKrzysztof Kosiński """) 224*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 225*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 226*7249d1a6SKrzysztof Kosiński 227*7249d1a6SKrzysztof Kosiński def testSimpleFunctionsWithTrailingComments(self): 228*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 229*7249d1a6SKrzysztof Kosiński def g(): # Trailing comment 230*7249d1a6SKrzysztof Kosiński if (xxxxxxxxxxxx.yyyyyyyy(zzzzzzzzzzzzz[0]) == 'aaaaaaaaaaa' and 231*7249d1a6SKrzysztof Kosiński xxxxxxxxxxxx.yyyyyyyy(zzzzzzzzzzzzz[0].mmmmmmmm[0]) == 'bbbbbbb'): 232*7249d1a6SKrzysztof Kosiński pass 233*7249d1a6SKrzysztof Kosiński 234*7249d1a6SKrzysztof Kosiński def f( # Intermediate comment 235*7249d1a6SKrzysztof Kosiński ): 236*7249d1a6SKrzysztof Kosiński if (xxxxxxxxxxxx.yyyyyyyy(zzzzzzzzzzzzz[0]) == 'aaaaaaaaaaa' and 237*7249d1a6SKrzysztof Kosiński xxxxxxxxxxxx.yyyyyyyy(zzzzzzzzzzzzz[0].mmmmmmmm[0]) == 'bbbbbbb'): 238*7249d1a6SKrzysztof Kosiński pass 239*7249d1a6SKrzysztof Kosiński """) 240*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 241*7249d1a6SKrzysztof Kosiński def g(): # Trailing comment 242*7249d1a6SKrzysztof Kosiński if (xxxxxxxxxxxx.yyyyyyyy(zzzzzzzzzzzzz[0]) == 'aaaaaaaaaaa' and 243*7249d1a6SKrzysztof Kosiński xxxxxxxxxxxx.yyyyyyyy(zzzzzzzzzzzzz[0].mmmmmmmm[0]) == 'bbbbbbb'): 244*7249d1a6SKrzysztof Kosiński pass 245*7249d1a6SKrzysztof Kosiński 246*7249d1a6SKrzysztof Kosiński 247*7249d1a6SKrzysztof Kosiński def f( # Intermediate comment 248*7249d1a6SKrzysztof Kosiński ): 249*7249d1a6SKrzysztof Kosiński if (xxxxxxxxxxxx.yyyyyyyy(zzzzzzzzzzzzz[0]) == 'aaaaaaaaaaa' and 250*7249d1a6SKrzysztof Kosiński xxxxxxxxxxxx.yyyyyyyy(zzzzzzzzzzzzz[0].mmmmmmmm[0]) == 'bbbbbbb'): 251*7249d1a6SKrzysztof Kosiński pass 252*7249d1a6SKrzysztof Kosiński """) 253*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 254*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 255*7249d1a6SKrzysztof Kosiński 256*7249d1a6SKrzysztof Kosiński def testBlankLinesBetweenTopLevelImportsAndVariables(self): 257*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 258*7249d1a6SKrzysztof Kosiński import foo as bar 259*7249d1a6SKrzysztof Kosiński VAR = 'baz' 260*7249d1a6SKrzysztof Kosiński """) 261*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 262*7249d1a6SKrzysztof Kosiński import foo as bar 263*7249d1a6SKrzysztof Kosiński 264*7249d1a6SKrzysztof Kosiński VAR = 'baz' 265*7249d1a6SKrzysztof Kosiński """) 266*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 267*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 268*7249d1a6SKrzysztof Kosiński 269*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 270*7249d1a6SKrzysztof Kosiński import foo as bar 271*7249d1a6SKrzysztof Kosiński 272*7249d1a6SKrzysztof Kosiński VAR = 'baz' 273*7249d1a6SKrzysztof Kosiński """) 274*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 275*7249d1a6SKrzysztof Kosiński import foo as bar 276*7249d1a6SKrzysztof Kosiński 277*7249d1a6SKrzysztof Kosiński 278*7249d1a6SKrzysztof Kosiński VAR = 'baz' 279*7249d1a6SKrzysztof Kosiński """) 280*7249d1a6SKrzysztof Kosiński try: 281*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle( 282*7249d1a6SKrzysztof Kosiński style.CreateStyleFromConfig( 283*7249d1a6SKrzysztof Kosiński '{based_on_style: yapf, ' 284*7249d1a6SKrzysztof Kosiński 'blank_lines_between_top_level_imports_and_variables: 2}')) 285*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 286*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, 287*7249d1a6SKrzysztof Kosiński reformatter.Reformat(llines)) 288*7249d1a6SKrzysztof Kosiński finally: 289*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle(style.CreateYapfStyle()) 290*7249d1a6SKrzysztof Kosiński 291*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 292*7249d1a6SKrzysztof Kosiński import foo as bar 293*7249d1a6SKrzysztof Kosiński # Some comment 294*7249d1a6SKrzysztof Kosiński """) 295*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 296*7249d1a6SKrzysztof Kosiński import foo as bar 297*7249d1a6SKrzysztof Kosiński # Some comment 298*7249d1a6SKrzysztof Kosiński """) 299*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 300*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 301*7249d1a6SKrzysztof Kosiński 302*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 303*7249d1a6SKrzysztof Kosiński import foo as bar 304*7249d1a6SKrzysztof Kosiński class Baz(): 305*7249d1a6SKrzysztof Kosiński pass 306*7249d1a6SKrzysztof Kosiński """) 307*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 308*7249d1a6SKrzysztof Kosiński import foo as bar 309*7249d1a6SKrzysztof Kosiński 310*7249d1a6SKrzysztof Kosiński 311*7249d1a6SKrzysztof Kosiński class Baz(): 312*7249d1a6SKrzysztof Kosiński pass 313*7249d1a6SKrzysztof Kosiński """) 314*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 315*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 316*7249d1a6SKrzysztof Kosiński 317*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 318*7249d1a6SKrzysztof Kosiński import foo as bar 319*7249d1a6SKrzysztof Kosiński def foobar(): 320*7249d1a6SKrzysztof Kosiński pass 321*7249d1a6SKrzysztof Kosiński """) 322*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 323*7249d1a6SKrzysztof Kosiński import foo as bar 324*7249d1a6SKrzysztof Kosiński 325*7249d1a6SKrzysztof Kosiński 326*7249d1a6SKrzysztof Kosiński def foobar(): 327*7249d1a6SKrzysztof Kosiński pass 328*7249d1a6SKrzysztof Kosiński """) 329*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 330*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 331*7249d1a6SKrzysztof Kosiński 332*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 333*7249d1a6SKrzysztof Kosiński def foobar(): 334*7249d1a6SKrzysztof Kosiński from foo import Bar 335*7249d1a6SKrzysztof Kosiński Bar.baz() 336*7249d1a6SKrzysztof Kosiński """) 337*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 338*7249d1a6SKrzysztof Kosiński def foobar(): 339*7249d1a6SKrzysztof Kosiński from foo import Bar 340*7249d1a6SKrzysztof Kosiński Bar.baz() 341*7249d1a6SKrzysztof Kosiński """) 342*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 343*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 344*7249d1a6SKrzysztof Kosiński 345*7249d1a6SKrzysztof Kosiński def testBlankLinesAtEndOfFile(self): 346*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 347*7249d1a6SKrzysztof Kosiński def foobar(): # foo 348*7249d1a6SKrzysztof Kosiński pass 349*7249d1a6SKrzysztof Kosiński 350*7249d1a6SKrzysztof Kosiński 351*7249d1a6SKrzysztof Kosiński 352*7249d1a6SKrzysztof Kosiński """) 353*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 354*7249d1a6SKrzysztof Kosiński def foobar(): # foo 355*7249d1a6SKrzysztof Kosiński pass 356*7249d1a6SKrzysztof Kosiński """) 357*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 358*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 359*7249d1a6SKrzysztof Kosiński 360*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 361*7249d1a6SKrzysztof Kosiński x = { 'a':37,'b':42, 362*7249d1a6SKrzysztof Kosiński 363*7249d1a6SKrzysztof Kosiński 'c':927} 364*7249d1a6SKrzysztof Kosiński 365*7249d1a6SKrzysztof Kosiński """) 366*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 367*7249d1a6SKrzysztof Kosiński x = {'a': 37, 'b': 42, 'c': 927} 368*7249d1a6SKrzysztof Kosiński """) 369*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 370*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 371*7249d1a6SKrzysztof Kosiński 372*7249d1a6SKrzysztof Kosiński def testIndentBlankLines(self): 373*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 374*7249d1a6SKrzysztof Kosiński class foo(object): 375*7249d1a6SKrzysztof Kosiński 376*7249d1a6SKrzysztof Kosiński def foobar(self): 377*7249d1a6SKrzysztof Kosiński 378*7249d1a6SKrzysztof Kosiński pass 379*7249d1a6SKrzysztof Kosiński 380*7249d1a6SKrzysztof Kosiński def barfoo(self, x, y): # bar 381*7249d1a6SKrzysztof Kosiński 382*7249d1a6SKrzysztof Kosiński if x: 383*7249d1a6SKrzysztof Kosiński 384*7249d1a6SKrzysztof Kosiński return y 385*7249d1a6SKrzysztof Kosiński 386*7249d1a6SKrzysztof Kosiński 387*7249d1a6SKrzysztof Kosiński def bar(): 388*7249d1a6SKrzysztof Kosiński 389*7249d1a6SKrzysztof Kosiński return 0 390*7249d1a6SKrzysztof Kosiński """) 391*7249d1a6SKrzysztof Kosiński expected_formatted_code = """\ 392*7249d1a6SKrzysztof Kosińskiclass foo(object):\n \n def foobar(self):\n \n pass\n \n def barfoo(self, x, y): # bar\n \n if x:\n \n return y\n\n\ndef bar():\n \n return 0 393*7249d1a6SKrzysztof Kosiński""" # noqa 394*7249d1a6SKrzysztof Kosiński 395*7249d1a6SKrzysztof Kosiński try: 396*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle( 397*7249d1a6SKrzysztof Kosiński style.CreateStyleFromConfig( 398*7249d1a6SKrzysztof Kosiński '{based_on_style: yapf, indent_blank_lines: true}')) 399*7249d1a6SKrzysztof Kosiński 400*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 401*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, 402*7249d1a6SKrzysztof Kosiński reformatter.Reformat(llines)) 403*7249d1a6SKrzysztof Kosiński finally: 404*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle(style.CreateYapfStyle()) 405*7249d1a6SKrzysztof Kosiński 406*7249d1a6SKrzysztof Kosiński unformatted_code, expected_formatted_code = (expected_formatted_code, 407*7249d1a6SKrzysztof Kosiński unformatted_code) 408*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 409*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 410*7249d1a6SKrzysztof Kosiński 411*7249d1a6SKrzysztof Kosiński def testMultipleUgliness(self): 412*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 413*7249d1a6SKrzysztof Kosiński x = { 'a':37,'b':42, 414*7249d1a6SKrzysztof Kosiński 415*7249d1a6SKrzysztof Kosiński 'c':927} 416*7249d1a6SKrzysztof Kosiński 417*7249d1a6SKrzysztof Kosiński y = 'hello ''world' 418*7249d1a6SKrzysztof Kosiński z = 'hello '+'world' 419*7249d1a6SKrzysztof Kosiński a = 'hello {}'.format('world') 420*7249d1a6SKrzysztof Kosiński class foo ( object ): 421*7249d1a6SKrzysztof Kosiński def f (self ): 422*7249d1a6SKrzysztof Kosiński return 37*-+2 423*7249d1a6SKrzysztof Kosiński def g(self, x,y=42): 424*7249d1a6SKrzysztof Kosiński return y 425*7249d1a6SKrzysztof Kosiński def f ( a ) : 426*7249d1a6SKrzysztof Kosiński return 37+-+a[42-x : y**3] 427*7249d1a6SKrzysztof Kosiński """) 428*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 429*7249d1a6SKrzysztof Kosiński x = {'a': 37, 'b': 42, 'c': 927} 430*7249d1a6SKrzysztof Kosiński 431*7249d1a6SKrzysztof Kosiński y = 'hello ' 'world' 432*7249d1a6SKrzysztof Kosiński z = 'hello ' + 'world' 433*7249d1a6SKrzysztof Kosiński a = 'hello {}'.format('world') 434*7249d1a6SKrzysztof Kosiński 435*7249d1a6SKrzysztof Kosiński 436*7249d1a6SKrzysztof Kosiński class foo(object): 437*7249d1a6SKrzysztof Kosiński 438*7249d1a6SKrzysztof Kosiński def f(self): 439*7249d1a6SKrzysztof Kosiński return 37 * -+2 440*7249d1a6SKrzysztof Kosiński 441*7249d1a6SKrzysztof Kosiński def g(self, x, y=42): 442*7249d1a6SKrzysztof Kosiński return y 443*7249d1a6SKrzysztof Kosiński 444*7249d1a6SKrzysztof Kosiński 445*7249d1a6SKrzysztof Kosiński def f(a): 446*7249d1a6SKrzysztof Kosiński return 37 + -+a[42 - x:y**3] 447*7249d1a6SKrzysztof Kosiński """) 448*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 449*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 450*7249d1a6SKrzysztof Kosiński 451*7249d1a6SKrzysztof Kosiński def testComments(self): 452*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 453*7249d1a6SKrzysztof Kosiński class Foo(object): 454*7249d1a6SKrzysztof Kosiński pass 455*7249d1a6SKrzysztof Kosiński 456*7249d1a6SKrzysztof Kosiński # Attached comment 457*7249d1a6SKrzysztof Kosiński class Bar(object): 458*7249d1a6SKrzysztof Kosiński pass 459*7249d1a6SKrzysztof Kosiński 460*7249d1a6SKrzysztof Kosiński global_assignment = 42 461*7249d1a6SKrzysztof Kosiński 462*7249d1a6SKrzysztof Kosiński # Comment attached to class with decorator. 463*7249d1a6SKrzysztof Kosiński # Comment attached to class with decorator. 464*7249d1a6SKrzysztof Kosiński @noop 465*7249d1a6SKrzysztof Kosiński @noop 466*7249d1a6SKrzysztof Kosiński class Baz(object): 467*7249d1a6SKrzysztof Kosiński pass 468*7249d1a6SKrzysztof Kosiński 469*7249d1a6SKrzysztof Kosiński # Intermediate comment 470*7249d1a6SKrzysztof Kosiński 471*7249d1a6SKrzysztof Kosiński class Qux(object): 472*7249d1a6SKrzysztof Kosiński pass 473*7249d1a6SKrzysztof Kosiński """) 474*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 475*7249d1a6SKrzysztof Kosiński class Foo(object): 476*7249d1a6SKrzysztof Kosiński pass 477*7249d1a6SKrzysztof Kosiński 478*7249d1a6SKrzysztof Kosiński 479*7249d1a6SKrzysztof Kosiński # Attached comment 480*7249d1a6SKrzysztof Kosiński class Bar(object): 481*7249d1a6SKrzysztof Kosiński pass 482*7249d1a6SKrzysztof Kosiński 483*7249d1a6SKrzysztof Kosiński 484*7249d1a6SKrzysztof Kosiński global_assignment = 42 485*7249d1a6SKrzysztof Kosiński 486*7249d1a6SKrzysztof Kosiński 487*7249d1a6SKrzysztof Kosiński # Comment attached to class with decorator. 488*7249d1a6SKrzysztof Kosiński # Comment attached to class with decorator. 489*7249d1a6SKrzysztof Kosiński @noop 490*7249d1a6SKrzysztof Kosiński @noop 491*7249d1a6SKrzysztof Kosiński class Baz(object): 492*7249d1a6SKrzysztof Kosiński pass 493*7249d1a6SKrzysztof Kosiński 494*7249d1a6SKrzysztof Kosiński 495*7249d1a6SKrzysztof Kosiński # Intermediate comment 496*7249d1a6SKrzysztof Kosiński 497*7249d1a6SKrzysztof Kosiński 498*7249d1a6SKrzysztof Kosiński class Qux(object): 499*7249d1a6SKrzysztof Kosiński pass 500*7249d1a6SKrzysztof Kosiński """) 501*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 502*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 503*7249d1a6SKrzysztof Kosiński 504*7249d1a6SKrzysztof Kosiński def testSingleComment(self): 505*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 506*7249d1a6SKrzysztof Kosiński # Thing 1 507*7249d1a6SKrzysztof Kosiński """) 508*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 509*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 510*7249d1a6SKrzysztof Kosiński 511*7249d1a6SKrzysztof Kosiński def testCommentsWithTrailingSpaces(self): 512*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 513*7249d1a6SKrzysztof Kosiński # Thing 1 \n# Thing 2 \n""") 514*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 515*7249d1a6SKrzysztof Kosiński # Thing 1 516*7249d1a6SKrzysztof Kosiński # Thing 2 517*7249d1a6SKrzysztof Kosiński """) 518*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 519*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 520*7249d1a6SKrzysztof Kosiński 521*7249d1a6SKrzysztof Kosiński def testCommentsInDataLiteral(self): 522*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 523*7249d1a6SKrzysztof Kosiński def f(): 524*7249d1a6SKrzysztof Kosiński return collections.OrderedDict({ 525*7249d1a6SKrzysztof Kosiński # First comment. 526*7249d1a6SKrzysztof Kosiński 'fnord': 37, 527*7249d1a6SKrzysztof Kosiński 528*7249d1a6SKrzysztof Kosiński # Second comment. 529*7249d1a6SKrzysztof Kosiński # Continuation of second comment. 530*7249d1a6SKrzysztof Kosiński 'bork': 42, 531*7249d1a6SKrzysztof Kosiński 532*7249d1a6SKrzysztof Kosiński # Ending comment. 533*7249d1a6SKrzysztof Kosiński }) 534*7249d1a6SKrzysztof Kosiński """) 535*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 536*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 537*7249d1a6SKrzysztof Kosiński 538*7249d1a6SKrzysztof Kosiński def testEndingWhitespaceAfterSimpleStatement(self): 539*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 540*7249d1a6SKrzysztof Kosiński import foo as bar 541*7249d1a6SKrzysztof Kosiński # Thing 1 542*7249d1a6SKrzysztof Kosiński # Thing 2 543*7249d1a6SKrzysztof Kosiński """) 544*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 545*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 546*7249d1a6SKrzysztof Kosiński 547*7249d1a6SKrzysztof Kosiński def testDocstrings(self): 548*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent('''\ 549*7249d1a6SKrzysztof Kosiński u"""Module-level docstring.""" 550*7249d1a6SKrzysztof Kosiński import os 551*7249d1a6SKrzysztof Kosiński class Foo(object): 552*7249d1a6SKrzysztof Kosiński 553*7249d1a6SKrzysztof Kosiński """Class-level docstring.""" 554*7249d1a6SKrzysztof Kosiński # A comment for qux. 555*7249d1a6SKrzysztof Kosiński def qux(self): 556*7249d1a6SKrzysztof Kosiński 557*7249d1a6SKrzysztof Kosiński 558*7249d1a6SKrzysztof Kosiński """Function-level docstring. 559*7249d1a6SKrzysztof Kosiński 560*7249d1a6SKrzysztof Kosiński A multiline function docstring. 561*7249d1a6SKrzysztof Kosiński """ 562*7249d1a6SKrzysztof Kosiński print('hello {}'.format('world')) 563*7249d1a6SKrzysztof Kosiński return 42 564*7249d1a6SKrzysztof Kosiński ''') 565*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent('''\ 566*7249d1a6SKrzysztof Kosiński u"""Module-level docstring.""" 567*7249d1a6SKrzysztof Kosiński import os 568*7249d1a6SKrzysztof Kosiński 569*7249d1a6SKrzysztof Kosiński 570*7249d1a6SKrzysztof Kosiński class Foo(object): 571*7249d1a6SKrzysztof Kosiński """Class-level docstring.""" 572*7249d1a6SKrzysztof Kosiński 573*7249d1a6SKrzysztof Kosiński # A comment for qux. 574*7249d1a6SKrzysztof Kosiński def qux(self): 575*7249d1a6SKrzysztof Kosiński """Function-level docstring. 576*7249d1a6SKrzysztof Kosiński 577*7249d1a6SKrzysztof Kosiński A multiline function docstring. 578*7249d1a6SKrzysztof Kosiński """ 579*7249d1a6SKrzysztof Kosiński print('hello {}'.format('world')) 580*7249d1a6SKrzysztof Kosiński return 42 581*7249d1a6SKrzysztof Kosiński ''') 582*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 583*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 584*7249d1a6SKrzysztof Kosiński 585*7249d1a6SKrzysztof Kosiński def testDocstringAndMultilineComment(self): 586*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent('''\ 587*7249d1a6SKrzysztof Kosiński """Hello world""" 588*7249d1a6SKrzysztof Kosiński # A multiline 589*7249d1a6SKrzysztof Kosiński # comment 590*7249d1a6SKrzysztof Kosiński class bar(object): 591*7249d1a6SKrzysztof Kosiński """class docstring""" 592*7249d1a6SKrzysztof Kosiński # class multiline 593*7249d1a6SKrzysztof Kosiński # comment 594*7249d1a6SKrzysztof Kosiński def foo(self): 595*7249d1a6SKrzysztof Kosiński """Another docstring.""" 596*7249d1a6SKrzysztof Kosiński # Another multiline 597*7249d1a6SKrzysztof Kosiński # comment 598*7249d1a6SKrzysztof Kosiński pass 599*7249d1a6SKrzysztof Kosiński ''') 600*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent('''\ 601*7249d1a6SKrzysztof Kosiński """Hello world""" 602*7249d1a6SKrzysztof Kosiński 603*7249d1a6SKrzysztof Kosiński 604*7249d1a6SKrzysztof Kosiński # A multiline 605*7249d1a6SKrzysztof Kosiński # comment 606*7249d1a6SKrzysztof Kosiński class bar(object): 607*7249d1a6SKrzysztof Kosiński """class docstring""" 608*7249d1a6SKrzysztof Kosiński 609*7249d1a6SKrzysztof Kosiński # class multiline 610*7249d1a6SKrzysztof Kosiński # comment 611*7249d1a6SKrzysztof Kosiński def foo(self): 612*7249d1a6SKrzysztof Kosiński """Another docstring.""" 613*7249d1a6SKrzysztof Kosiński # Another multiline 614*7249d1a6SKrzysztof Kosiński # comment 615*7249d1a6SKrzysztof Kosiński pass 616*7249d1a6SKrzysztof Kosiński ''') 617*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 618*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 619*7249d1a6SKrzysztof Kosiński 620*7249d1a6SKrzysztof Kosiński def testMultilineDocstringAndMultilineComment(self): 621*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent('''\ 622*7249d1a6SKrzysztof Kosiński """Hello world 623*7249d1a6SKrzysztof Kosiński 624*7249d1a6SKrzysztof Kosiński RIP Dennis Richie. 625*7249d1a6SKrzysztof Kosiński """ 626*7249d1a6SKrzysztof Kosiński # A multiline 627*7249d1a6SKrzysztof Kosiński # comment 628*7249d1a6SKrzysztof Kosiński class bar(object): 629*7249d1a6SKrzysztof Kosiński """class docstring 630*7249d1a6SKrzysztof Kosiński 631*7249d1a6SKrzysztof Kosiński A classy class. 632*7249d1a6SKrzysztof Kosiński """ 633*7249d1a6SKrzysztof Kosiński # class multiline 634*7249d1a6SKrzysztof Kosiński # comment 635*7249d1a6SKrzysztof Kosiński def foo(self): 636*7249d1a6SKrzysztof Kosiński """Another docstring. 637*7249d1a6SKrzysztof Kosiński 638*7249d1a6SKrzysztof Kosiński A functional function. 639*7249d1a6SKrzysztof Kosiński """ 640*7249d1a6SKrzysztof Kosiński # Another multiline 641*7249d1a6SKrzysztof Kosiński # comment 642*7249d1a6SKrzysztof Kosiński pass 643*7249d1a6SKrzysztof Kosiński ''') 644*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent('''\ 645*7249d1a6SKrzysztof Kosiński """Hello world 646*7249d1a6SKrzysztof Kosiński 647*7249d1a6SKrzysztof Kosiński RIP Dennis Richie. 648*7249d1a6SKrzysztof Kosiński """ 649*7249d1a6SKrzysztof Kosiński 650*7249d1a6SKrzysztof Kosiński 651*7249d1a6SKrzysztof Kosiński # A multiline 652*7249d1a6SKrzysztof Kosiński # comment 653*7249d1a6SKrzysztof Kosiński class bar(object): 654*7249d1a6SKrzysztof Kosiński """class docstring 655*7249d1a6SKrzysztof Kosiński 656*7249d1a6SKrzysztof Kosiński A classy class. 657*7249d1a6SKrzysztof Kosiński """ 658*7249d1a6SKrzysztof Kosiński 659*7249d1a6SKrzysztof Kosiński # class multiline 660*7249d1a6SKrzysztof Kosiński # comment 661*7249d1a6SKrzysztof Kosiński def foo(self): 662*7249d1a6SKrzysztof Kosiński """Another docstring. 663*7249d1a6SKrzysztof Kosiński 664*7249d1a6SKrzysztof Kosiński A functional function. 665*7249d1a6SKrzysztof Kosiński """ 666*7249d1a6SKrzysztof Kosiński # Another multiline 667*7249d1a6SKrzysztof Kosiński # comment 668*7249d1a6SKrzysztof Kosiński pass 669*7249d1a6SKrzysztof Kosiński ''') 670*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 671*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 672*7249d1a6SKrzysztof Kosiński 673*7249d1a6SKrzysztof Kosiński def testTupleCommaBeforeLastParen(self): 674*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 675*7249d1a6SKrzysztof Kosiński a = ( 1, ) 676*7249d1a6SKrzysztof Kosiński """) 677*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 678*7249d1a6SKrzysztof Kosiński a = (1,) 679*7249d1a6SKrzysztof Kosiński """) 680*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 681*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 682*7249d1a6SKrzysztof Kosiński 683*7249d1a6SKrzysztof Kosiński def testNoBreakOutsideOfBracket(self): 684*7249d1a6SKrzysztof Kosiński # FIXME(morbo): How this is formatted is not correct. But it's syntactically 685*7249d1a6SKrzysztof Kosiński # correct. 686*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 687*7249d1a6SKrzysztof Kosiński def f(): 688*7249d1a6SKrzysztof Kosiński assert port >= minimum, \ 689*7249d1a6SKrzysztof Kosiński'Unexpected port %d when minimum was %d.' % (port, minimum) 690*7249d1a6SKrzysztof Kosiński """) 691*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 692*7249d1a6SKrzysztof Kosiński def f(): 693*7249d1a6SKrzysztof Kosiński assert port >= minimum, 'Unexpected port %d when minimum was %d.' % (port, 694*7249d1a6SKrzysztof Kosiński minimum) 695*7249d1a6SKrzysztof Kosiński """) # noqa 696*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 697*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 698*7249d1a6SKrzysztof Kosiński 699*7249d1a6SKrzysztof Kosiński def testBlankLinesBeforeDecorators(self): 700*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 701*7249d1a6SKrzysztof Kosiński @foo() 702*7249d1a6SKrzysztof Kosiński class A(object): 703*7249d1a6SKrzysztof Kosiński @bar() 704*7249d1a6SKrzysztof Kosiński @baz() 705*7249d1a6SKrzysztof Kosiński def x(self): 706*7249d1a6SKrzysztof Kosiński pass 707*7249d1a6SKrzysztof Kosiński """) 708*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 709*7249d1a6SKrzysztof Kosiński @foo() 710*7249d1a6SKrzysztof Kosiński class A(object): 711*7249d1a6SKrzysztof Kosiński 712*7249d1a6SKrzysztof Kosiński @bar() 713*7249d1a6SKrzysztof Kosiński @baz() 714*7249d1a6SKrzysztof Kosiński def x(self): 715*7249d1a6SKrzysztof Kosiński pass 716*7249d1a6SKrzysztof Kosiński """) 717*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 718*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 719*7249d1a6SKrzysztof Kosiński 720*7249d1a6SKrzysztof Kosiński def testCommentBetweenDecorators(self): 721*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 722*7249d1a6SKrzysztof Kosiński @foo() 723*7249d1a6SKrzysztof Kosiński # frob 724*7249d1a6SKrzysztof Kosiński @bar 725*7249d1a6SKrzysztof Kosiński def x (self): 726*7249d1a6SKrzysztof Kosiński pass 727*7249d1a6SKrzysztof Kosiński """) 728*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 729*7249d1a6SKrzysztof Kosiński @foo() 730*7249d1a6SKrzysztof Kosiński # frob 731*7249d1a6SKrzysztof Kosiński @bar 732*7249d1a6SKrzysztof Kosiński def x(self): 733*7249d1a6SKrzysztof Kosiński pass 734*7249d1a6SKrzysztof Kosiński """) 735*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 736*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 737*7249d1a6SKrzysztof Kosiński 738*7249d1a6SKrzysztof Kosiński def testListComprehension(self): 739*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 740*7249d1a6SKrzysztof Kosiński def given(y): 741*7249d1a6SKrzysztof Kosiński [k for k in () 742*7249d1a6SKrzysztof Kosiński if k in y] 743*7249d1a6SKrzysztof Kosiński """) 744*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 745*7249d1a6SKrzysztof Kosiński def given(y): 746*7249d1a6SKrzysztof Kosiński [k for k in () if k in y] 747*7249d1a6SKrzysztof Kosiński """) 748*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 749*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 750*7249d1a6SKrzysztof Kosiński 751*7249d1a6SKrzysztof Kosiński def testListComprehensionPreferOneLine(self): 752*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 753*7249d1a6SKrzysztof Kosiński def given(y): 754*7249d1a6SKrzysztof Kosiński long_variable_name = [ 755*7249d1a6SKrzysztof Kosiński long_var_name + 1 756*7249d1a6SKrzysztof Kosiński for long_var_name in () 757*7249d1a6SKrzysztof Kosiński if long_var_name == 2] 758*7249d1a6SKrzysztof Kosiński """) 759*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 760*7249d1a6SKrzysztof Kosiński def given(y): 761*7249d1a6SKrzysztof Kosiński long_variable_name = [ 762*7249d1a6SKrzysztof Kosiński long_var_name + 1 for long_var_name in () if long_var_name == 2 763*7249d1a6SKrzysztof Kosiński ] 764*7249d1a6SKrzysztof Kosiński """) 765*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 766*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 767*7249d1a6SKrzysztof Kosiński 768*7249d1a6SKrzysztof Kosiński def testListComprehensionPreferOneLineOverArithmeticSplit(self): 769*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 770*7249d1a6SKrzysztof Kosiński def given(used_identifiers): 771*7249d1a6SKrzysztof Kosiński return (sum(len(identifier) 772*7249d1a6SKrzysztof Kosiński for identifier in used_identifiers) / len(used_identifiers)) 773*7249d1a6SKrzysztof Kosiński """) # noqa 774*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 775*7249d1a6SKrzysztof Kosiński def given(used_identifiers): 776*7249d1a6SKrzysztof Kosiński return (sum(len(identifier) for identifier in used_identifiers) / 777*7249d1a6SKrzysztof Kosiński len(used_identifiers)) 778*7249d1a6SKrzysztof Kosiński """) 779*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 780*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 781*7249d1a6SKrzysztof Kosiński 782*7249d1a6SKrzysztof Kosiński def testListComprehensionPreferThreeLinesForLineWrap(self): 783*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 784*7249d1a6SKrzysztof Kosiński def given(y): 785*7249d1a6SKrzysztof Kosiński long_variable_name = [ 786*7249d1a6SKrzysztof Kosiński long_var_name + 1 787*7249d1a6SKrzysztof Kosiński for long_var_name, number_two in () 788*7249d1a6SKrzysztof Kosiński if long_var_name == 2 and number_two == 3] 789*7249d1a6SKrzysztof Kosiński """) 790*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 791*7249d1a6SKrzysztof Kosiński def given(y): 792*7249d1a6SKrzysztof Kosiński long_variable_name = [ 793*7249d1a6SKrzysztof Kosiński long_var_name + 1 794*7249d1a6SKrzysztof Kosiński for long_var_name, number_two in () 795*7249d1a6SKrzysztof Kosiński if long_var_name == 2 and number_two == 3 796*7249d1a6SKrzysztof Kosiński ] 797*7249d1a6SKrzysztof Kosiński """) 798*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 799*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 800*7249d1a6SKrzysztof Kosiński 801*7249d1a6SKrzysztof Kosiński def testListComprehensionPreferNoBreakForTrivialExpression(self): 802*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 803*7249d1a6SKrzysztof Kosiński def given(y): 804*7249d1a6SKrzysztof Kosiński long_variable_name = [ 805*7249d1a6SKrzysztof Kosiński long_var_name 806*7249d1a6SKrzysztof Kosiński for long_var_name, number_two in () 807*7249d1a6SKrzysztof Kosiński if long_var_name == 2 and number_two == 3] 808*7249d1a6SKrzysztof Kosiński """) 809*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 810*7249d1a6SKrzysztof Kosiński def given(y): 811*7249d1a6SKrzysztof Kosiński long_variable_name = [ 812*7249d1a6SKrzysztof Kosiński long_var_name for long_var_name, number_two in () 813*7249d1a6SKrzysztof Kosiński if long_var_name == 2 and number_two == 3 814*7249d1a6SKrzysztof Kosiński ] 815*7249d1a6SKrzysztof Kosiński """) 816*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 817*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 818*7249d1a6SKrzysztof Kosiński 819*7249d1a6SKrzysztof Kosiński def testOpeningAndClosingBrackets(self): 820*7249d1a6SKrzysztof Kosiński unformatted_code = """\ 821*7249d1a6SKrzysztof Kosińskifoo( (1, ) ) 822*7249d1a6SKrzysztof Kosińskifoo( ( 1, 2, 3 ) ) 823*7249d1a6SKrzysztof Kosińskifoo( ( 1, 2, 3, ) ) 824*7249d1a6SKrzysztof Kosiński""" 825*7249d1a6SKrzysztof Kosiński expected_formatted_code = """\ 826*7249d1a6SKrzysztof Kosińskifoo((1,)) 827*7249d1a6SKrzysztof Kosińskifoo((1, 2, 3)) 828*7249d1a6SKrzysztof Kosińskifoo(( 829*7249d1a6SKrzysztof Kosiński 1, 830*7249d1a6SKrzysztof Kosiński 2, 831*7249d1a6SKrzysztof Kosiński 3, 832*7249d1a6SKrzysztof Kosiński)) 833*7249d1a6SKrzysztof Kosiński""" 834*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 835*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 836*7249d1a6SKrzysztof Kosiński 837*7249d1a6SKrzysztof Kosiński def testSingleLineFunctions(self): 838*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 839*7249d1a6SKrzysztof Kosiński def foo(): return 42 840*7249d1a6SKrzysztof Kosiński """) 841*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 842*7249d1a6SKrzysztof Kosiński def foo(): 843*7249d1a6SKrzysztof Kosiński return 42 844*7249d1a6SKrzysztof Kosiński """) 845*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 846*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 847*7249d1a6SKrzysztof Kosiński 848*7249d1a6SKrzysztof Kosiński def testNoQueueSeletionInMiddleOfLine(self): 849*7249d1a6SKrzysztof Kosiński # If the queue isn't properly constructed, then a token in the middle of the 850*7249d1a6SKrzysztof Kosiński # line may be selected as the one with least penalty. The tokens after that 851*7249d1a6SKrzysztof Kosiński # one are then splatted at the end of the line with no formatting. 852*7249d1a6SKrzysztof Kosiński unformatted_code = """\ 853*7249d1a6SKrzysztof Kosińskifind_symbol(node.type) + "< " + " ".join(find_pattern(n) for n in node.child) + " >" 854*7249d1a6SKrzysztof Kosiński""" # noqa 855*7249d1a6SKrzysztof Kosiński expected_formatted_code = """\ 856*7249d1a6SKrzysztof Kosińskifind_symbol(node.type) + "< " + " ".join( 857*7249d1a6SKrzysztof Kosiński find_pattern(n) for n in node.child) + " >" 858*7249d1a6SKrzysztof Kosiński""" 859*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 860*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 861*7249d1a6SKrzysztof Kosiński 862*7249d1a6SKrzysztof Kosiński def testNoSpacesBetweenSubscriptsAndCalls(self): 863*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 864*7249d1a6SKrzysztof Kosiński aaaaaaaaaa = bbbbbbbb.ccccccccc() [42] (a, 2) 865*7249d1a6SKrzysztof Kosiński """) 866*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 867*7249d1a6SKrzysztof Kosiński aaaaaaaaaa = bbbbbbbb.ccccccccc()[42](a, 2) 868*7249d1a6SKrzysztof Kosiński """) 869*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 870*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 871*7249d1a6SKrzysztof Kosiński 872*7249d1a6SKrzysztof Kosiński def testNoSpacesBetweenOpeningBracketAndStartingOperator(self): 873*7249d1a6SKrzysztof Kosiński # Unary operator. 874*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 875*7249d1a6SKrzysztof Kosiński aaaaaaaaaa = bbbbbbbb.ccccccccc[ -1 ]( -42 ) 876*7249d1a6SKrzysztof Kosiński """) 877*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 878*7249d1a6SKrzysztof Kosiński aaaaaaaaaa = bbbbbbbb.ccccccccc[-1](-42) 879*7249d1a6SKrzysztof Kosiński """) 880*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 881*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 882*7249d1a6SKrzysztof Kosiński 883*7249d1a6SKrzysztof Kosiński # Varargs and kwargs. 884*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 885*7249d1a6SKrzysztof Kosiński aaaaaaaaaa = bbbbbbbb.ccccccccc( *varargs ) 886*7249d1a6SKrzysztof Kosiński aaaaaaaaaa = bbbbbbbb.ccccccccc( **kwargs ) 887*7249d1a6SKrzysztof Kosiński """) 888*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 889*7249d1a6SKrzysztof Kosiński aaaaaaaaaa = bbbbbbbb.ccccccccc(*varargs) 890*7249d1a6SKrzysztof Kosiński aaaaaaaaaa = bbbbbbbb.ccccccccc(**kwargs) 891*7249d1a6SKrzysztof Kosiński """) 892*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 893*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 894*7249d1a6SKrzysztof Kosiński 895*7249d1a6SKrzysztof Kosiński def testMultilineCommentReformatted(self): 896*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 897*7249d1a6SKrzysztof Kosiński if True: 898*7249d1a6SKrzysztof Kosiński # This is a multiline 899*7249d1a6SKrzysztof Kosiński # comment. 900*7249d1a6SKrzysztof Kosiński pass 901*7249d1a6SKrzysztof Kosiński """) 902*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 903*7249d1a6SKrzysztof Kosiński if True: 904*7249d1a6SKrzysztof Kosiński # This is a multiline 905*7249d1a6SKrzysztof Kosiński # comment. 906*7249d1a6SKrzysztof Kosiński pass 907*7249d1a6SKrzysztof Kosiński """) 908*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 909*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 910*7249d1a6SKrzysztof Kosiński 911*7249d1a6SKrzysztof Kosiński def testDictionaryMakerFormatting(self): 912*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 913*7249d1a6SKrzysztof Kosiński _PYTHON_STATEMENTS = frozenset({ 914*7249d1a6SKrzysztof Kosiński lambda x, y: 'simple_stmt': 'small_stmt', 'expr_stmt': 'print_stmt', 'del_stmt': 915*7249d1a6SKrzysztof Kosiński 'pass_stmt', lambda: 'break_stmt': 'continue_stmt', 'return_stmt': 'raise_stmt', 916*7249d1a6SKrzysztof Kosiński 'yield_stmt': 'import_stmt', lambda: 'global_stmt': 'exec_stmt', 'assert_stmt': 917*7249d1a6SKrzysztof Kosiński 'if_stmt', 'while_stmt': 'for_stmt', 918*7249d1a6SKrzysztof Kosiński }) 919*7249d1a6SKrzysztof Kosiński """) # noqa 920*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 921*7249d1a6SKrzysztof Kosiński _PYTHON_STATEMENTS = frozenset({ 922*7249d1a6SKrzysztof Kosiński lambda x, y: 'simple_stmt': 'small_stmt', 923*7249d1a6SKrzysztof Kosiński 'expr_stmt': 'print_stmt', 924*7249d1a6SKrzysztof Kosiński 'del_stmt': 'pass_stmt', 925*7249d1a6SKrzysztof Kosiński lambda: 'break_stmt': 'continue_stmt', 926*7249d1a6SKrzysztof Kosiński 'return_stmt': 'raise_stmt', 927*7249d1a6SKrzysztof Kosiński 'yield_stmt': 'import_stmt', 928*7249d1a6SKrzysztof Kosiński lambda: 'global_stmt': 'exec_stmt', 929*7249d1a6SKrzysztof Kosiński 'assert_stmt': 'if_stmt', 930*7249d1a6SKrzysztof Kosiński 'while_stmt': 'for_stmt', 931*7249d1a6SKrzysztof Kosiński }) 932*7249d1a6SKrzysztof Kosiński """) 933*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 934*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 935*7249d1a6SKrzysztof Kosiński 936*7249d1a6SKrzysztof Kosiński def testSimpleMultilineCode(self): 937*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 938*7249d1a6SKrzysztof Kosiński if True: 939*7249d1a6SKrzysztof Kosiński aaaaaaaaaaaaaa.bbbbbbbbbbbbbb.ccccccc(zzzzzzzzzzzz, \ 940*7249d1a6SKrzysztof Kosińskixxxxxxxxxxx, yyyyyyyyyyyy, vvvvvvvvv) 941*7249d1a6SKrzysztof Kosiński aaaaaaaaaaaaaa.bbbbbbbbbbbbbb.ccccccc(zzzzzzzzzzzz, \ 942*7249d1a6SKrzysztof Kosińskixxxxxxxxxxx, yyyyyyyyyyyy, vvvvvvvvv) 943*7249d1a6SKrzysztof Kosiński """) 944*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 945*7249d1a6SKrzysztof Kosiński if True: 946*7249d1a6SKrzysztof Kosiński aaaaaaaaaaaaaa.bbbbbbbbbbbbbb.ccccccc(zzzzzzzzzzzz, xxxxxxxxxxx, yyyyyyyyyyyy, 947*7249d1a6SKrzysztof Kosiński vvvvvvvvv) 948*7249d1a6SKrzysztof Kosiński aaaaaaaaaaaaaa.bbbbbbbbbbbbbb.ccccccc(zzzzzzzzzzzz, xxxxxxxxxxx, yyyyyyyyyyyy, 949*7249d1a6SKrzysztof Kosiński vvvvvvvvv) 950*7249d1a6SKrzysztof Kosiński """) # noqa 951*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 952*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 953*7249d1a6SKrzysztof Kosiński 954*7249d1a6SKrzysztof Kosiński def testMultilineComment(self): 955*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 956*7249d1a6SKrzysztof Kosiński if Foo: 957*7249d1a6SKrzysztof Kosiński # Hello world 958*7249d1a6SKrzysztof Kosiński # Yo man. 959*7249d1a6SKrzysztof Kosiński # Yo man. 960*7249d1a6SKrzysztof Kosiński # Yo man. 961*7249d1a6SKrzysztof Kosiński # Yo man. 962*7249d1a6SKrzysztof Kosiński a = 42 963*7249d1a6SKrzysztof Kosiński """) 964*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 965*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 966*7249d1a6SKrzysztof Kosiński 967*7249d1a6SKrzysztof Kosiński def testSpaceBetweenStringAndParentheses(self): 968*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 969*7249d1a6SKrzysztof Kosiński b = '0' ('hello') 970*7249d1a6SKrzysztof Kosiński """) 971*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 972*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 973*7249d1a6SKrzysztof Kosiński 974*7249d1a6SKrzysztof Kosiński def testMultilineString(self): 975*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 976*7249d1a6SKrzysztof Kosiński code = textwrap.dedent('''\ 977*7249d1a6SKrzysztof Kosiński if Foo: 978*7249d1a6SKrzysztof Kosiński # Hello world 979*7249d1a6SKrzysztof Kosiński # Yo man. 980*7249d1a6SKrzysztof Kosiński # Yo man. 981*7249d1a6SKrzysztof Kosiński # Yo man. 982*7249d1a6SKrzysztof Kosiński # Yo man. 983*7249d1a6SKrzysztof Kosiński a = 42 984*7249d1a6SKrzysztof Kosiński ''') 985*7249d1a6SKrzysztof Kosiński """) 986*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 987*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 988*7249d1a6SKrzysztof Kosiński 989*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent('''\ 990*7249d1a6SKrzysztof Kosiński def f(): 991*7249d1a6SKrzysztof Kosiński email_text += """<html>This is a really long docstring that goes over the column limit and is multi-line.<br><br> 992*7249d1a6SKrzysztof Kosiński <b>Czar: </b>"""+despot["Nicholas"]+"""<br> 993*7249d1a6SKrzysztof Kosiński <b>Minion: </b>"""+serf["Dmitri"]+"""<br> 994*7249d1a6SKrzysztof Kosiński <b>Residence: </b>"""+palace["Winter"]+"""<br> 995*7249d1a6SKrzysztof Kosiński </body> 996*7249d1a6SKrzysztof Kosiński </html>""" 997*7249d1a6SKrzysztof Kosiński ''') # noqa 998*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent('''\ 999*7249d1a6SKrzysztof Kosiński def f(): 1000*7249d1a6SKrzysztof Kosiński email_text += """<html>This is a really long docstring that goes over the column limit and is multi-line.<br><br> 1001*7249d1a6SKrzysztof Kosiński <b>Czar: </b>""" + despot["Nicholas"] + """<br> 1002*7249d1a6SKrzysztof Kosiński <b>Minion: </b>""" + serf["Dmitri"] + """<br> 1003*7249d1a6SKrzysztof Kosiński <b>Residence: </b>""" + palace["Winter"] + """<br> 1004*7249d1a6SKrzysztof Kosiński </body> 1005*7249d1a6SKrzysztof Kosiński </html>""" 1006*7249d1a6SKrzysztof Kosiński ''') # noqa 1007*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 1008*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 1009*7249d1a6SKrzysztof Kosiński 1010*7249d1a6SKrzysztof Kosiński def testSimpleMultilineWithComments(self): 1011*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 1012*7249d1a6SKrzysztof Kosiński if ( # This is the first comment 1013*7249d1a6SKrzysztof Kosiński a and # This is the second comment 1014*7249d1a6SKrzysztof Kosiński # This is the third comment 1015*7249d1a6SKrzysztof Kosiński b): # A trailing comment 1016*7249d1a6SKrzysztof Kosiński # Whoa! A normal comment!! 1017*7249d1a6SKrzysztof Kosiński pass # Another trailing comment 1018*7249d1a6SKrzysztof Kosiński """) 1019*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 1020*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 1021*7249d1a6SKrzysztof Kosiński 1022*7249d1a6SKrzysztof Kosiński def testMatchingParenSplittingMatching(self): 1023*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 1024*7249d1a6SKrzysztof Kosiński def f(): 1025*7249d1a6SKrzysztof Kosiński raise RuntimeError('unable to find insertion point for target node', 1026*7249d1a6SKrzysztof Kosiński (target,)) 1027*7249d1a6SKrzysztof Kosiński """) 1028*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 1029*7249d1a6SKrzysztof Kosiński def f(): 1030*7249d1a6SKrzysztof Kosiński raise RuntimeError('unable to find insertion point for target node', 1031*7249d1a6SKrzysztof Kosiński (target,)) 1032*7249d1a6SKrzysztof Kosiński """) 1033*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 1034*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 1035*7249d1a6SKrzysztof Kosiński 1036*7249d1a6SKrzysztof Kosiński def testContinuationIndent(self): 1037*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent('''\ 1038*7249d1a6SKrzysztof Kosiński class F: 1039*7249d1a6SKrzysztof Kosiński def _ProcessArgLists(self, node): 1040*7249d1a6SKrzysztof Kosiński """Common method for processing argument lists.""" 1041*7249d1a6SKrzysztof Kosiński for child in node.children: 1042*7249d1a6SKrzysztof Kosiński if isinstance(child, pytree.Leaf): 1043*7249d1a6SKrzysztof Kosiński self._SetTokenSubtype( 1044*7249d1a6SKrzysztof Kosiński child, subtype=_ARGLIST_TOKEN_TO_SUBTYPE.get( 1045*7249d1a6SKrzysztof Kosiński child.value, format_token.Subtype.NONE)) 1046*7249d1a6SKrzysztof Kosiński ''') 1047*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent('''\ 1048*7249d1a6SKrzysztof Kosiński class F: 1049*7249d1a6SKrzysztof Kosiński 1050*7249d1a6SKrzysztof Kosiński def _ProcessArgLists(self, node): 1051*7249d1a6SKrzysztof Kosiński """Common method for processing argument lists.""" 1052*7249d1a6SKrzysztof Kosiński for child in node.children: 1053*7249d1a6SKrzysztof Kosiński if isinstance(child, pytree.Leaf): 1054*7249d1a6SKrzysztof Kosiński self._SetTokenSubtype( 1055*7249d1a6SKrzysztof Kosiński child, 1056*7249d1a6SKrzysztof Kosiński subtype=_ARGLIST_TOKEN_TO_SUBTYPE.get(child.value, 1057*7249d1a6SKrzysztof Kosiński format_token.Subtype.NONE)) 1058*7249d1a6SKrzysztof Kosiński ''') # noqa 1059*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 1060*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 1061*7249d1a6SKrzysztof Kosiński 1062*7249d1a6SKrzysztof Kosiński def testTrailingCommaAndBracket(self): 1063*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent('''\ 1064*7249d1a6SKrzysztof Kosiński a = { 42, } 1065*7249d1a6SKrzysztof Kosiński b = ( 42, ) 1066*7249d1a6SKrzysztof Kosiński c = [ 42, ] 1067*7249d1a6SKrzysztof Kosiński ''') 1068*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent('''\ 1069*7249d1a6SKrzysztof Kosiński a = { 1070*7249d1a6SKrzysztof Kosiński 42, 1071*7249d1a6SKrzysztof Kosiński } 1072*7249d1a6SKrzysztof Kosiński b = (42,) 1073*7249d1a6SKrzysztof Kosiński c = [ 1074*7249d1a6SKrzysztof Kosiński 42, 1075*7249d1a6SKrzysztof Kosiński ] 1076*7249d1a6SKrzysztof Kosiński ''') 1077*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 1078*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 1079*7249d1a6SKrzysztof Kosiński 1080*7249d1a6SKrzysztof Kosiński def testI18n(self): 1081*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 1082*7249d1a6SKrzysztof Kosiński N_('Some years ago - never mind how long precisely - having little or no money in my purse, and nothing particular to interest me on shore, I thought I would sail about a little and see the watery part of the world.') # A comment is here. 1083*7249d1a6SKrzysztof Kosiński """) # noqa 1084*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 1085*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 1086*7249d1a6SKrzysztof Kosiński 1087*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 1088*7249d1a6SKrzysztof Kosiński foo('Fake function call') #. Some years ago - never mind how long precisely - having little or no money in my purse, and nothing particular to interest me on shore, I thought I would sail about a little and see the watery part of the world. 1089*7249d1a6SKrzysztof Kosiński """) # noqa 1090*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 1091*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 1092*7249d1a6SKrzysztof Kosiński 1093*7249d1a6SKrzysztof Kosiński def testI18nCommentsInDataLiteral(self): 1094*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 1095*7249d1a6SKrzysztof Kosiński def f(): 1096*7249d1a6SKrzysztof Kosiński return collections.OrderedDict({ 1097*7249d1a6SKrzysztof Kosiński #. First i18n comment. 1098*7249d1a6SKrzysztof Kosiński 'bork': 'foo', 1099*7249d1a6SKrzysztof Kosiński 1100*7249d1a6SKrzysztof Kosiński #. Second i18n comment. 1101*7249d1a6SKrzysztof Kosiński 'snork': 'bar#.*=\\\\0', 1102*7249d1a6SKrzysztof Kosiński }) 1103*7249d1a6SKrzysztof Kosiński """) 1104*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 1105*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 1106*7249d1a6SKrzysztof Kosiński 1107*7249d1a6SKrzysztof Kosiński def testClosingBracketIndent(self): 1108*7249d1a6SKrzysztof Kosiński code = textwrap.dedent('''\ 1109*7249d1a6SKrzysztof Kosiński def f(): 1110*7249d1a6SKrzysztof Kosiński 1111*7249d1a6SKrzysztof Kosiński def g(): 1112*7249d1a6SKrzysztof Kosiński while (xxxxxxxxxxxxxxxxxxxxx(yyyyyyyyyyyyy[zzzzz]) == 'aaaaaaaaaaa' and 1113*7249d1a6SKrzysztof Kosiński xxxxxxxxxxxxxxxxxxxxx( 1114*7249d1a6SKrzysztof Kosiński yyyyyyyyyyyyy[zzzzz].aaaaaaaa[0]) == 'bbbbbbb'): 1115*7249d1a6SKrzysztof Kosiński pass 1116*7249d1a6SKrzysztof Kosiński ''') # noqa 1117*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 1118*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 1119*7249d1a6SKrzysztof Kosiński 1120*7249d1a6SKrzysztof Kosiński def testClosingBracketsInlinedInCall(self): 1121*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 1122*7249d1a6SKrzysztof Kosiński class Foo(object): 1123*7249d1a6SKrzysztof Kosiński 1124*7249d1a6SKrzysztof Kosiński def bar(self): 1125*7249d1a6SKrzysztof Kosiński self.aaaaaaaa = xxxxxxxxxxxxxxxxxxx.yyyyyyyyyyyyy( 1126*7249d1a6SKrzysztof Kosiński self.cccccc.ddddddddd.eeeeeeee, 1127*7249d1a6SKrzysztof Kosiński options={ 1128*7249d1a6SKrzysztof Kosiński "forkforkfork": 1, 1129*7249d1a6SKrzysztof Kosiński "borkborkbork": 2, 1130*7249d1a6SKrzysztof Kosiński "corkcorkcork": 3, 1131*7249d1a6SKrzysztof Kosiński "horkhorkhork": 4, 1132*7249d1a6SKrzysztof Kosiński "porkporkpork": 5, 1133*7249d1a6SKrzysztof Kosiński }) 1134*7249d1a6SKrzysztof Kosiński """) 1135*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 1136*7249d1a6SKrzysztof Kosiński class Foo(object): 1137*7249d1a6SKrzysztof Kosiński 1138*7249d1a6SKrzysztof Kosiński def bar(self): 1139*7249d1a6SKrzysztof Kosiński self.aaaaaaaa = xxxxxxxxxxxxxxxxxxx.yyyyyyyyyyyyy( 1140*7249d1a6SKrzysztof Kosiński self.cccccc.ddddddddd.eeeeeeee, 1141*7249d1a6SKrzysztof Kosiński options={ 1142*7249d1a6SKrzysztof Kosiński "forkforkfork": 1, 1143*7249d1a6SKrzysztof Kosiński "borkborkbork": 2, 1144*7249d1a6SKrzysztof Kosiński "corkcorkcork": 3, 1145*7249d1a6SKrzysztof Kosiński "horkhorkhork": 4, 1146*7249d1a6SKrzysztof Kosiński "porkporkpork": 5, 1147*7249d1a6SKrzysztof Kosiński }) 1148*7249d1a6SKrzysztof Kosiński """) 1149*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 1150*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 1151*7249d1a6SKrzysztof Kosiński 1152*7249d1a6SKrzysztof Kosiński def testLineWrapInForExpression(self): 1153*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 1154*7249d1a6SKrzysztof Kosiński class A: 1155*7249d1a6SKrzysztof Kosiński 1156*7249d1a6SKrzysztof Kosiński def x(self, node, name, n=1): 1157*7249d1a6SKrzysztof Kosiński for i, child in enumerate( 1158*7249d1a6SKrzysztof Kosiński itertools.ifilter(lambda c: pytree_utils.NodeName(c) == name, 1159*7249d1a6SKrzysztof Kosiński node.pre_order())): 1160*7249d1a6SKrzysztof Kosiński pass 1161*7249d1a6SKrzysztof Kosiński """) 1162*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 1163*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 1164*7249d1a6SKrzysztof Kosiński 1165*7249d1a6SKrzysztof Kosiński def testFunctionCallContinuationLine(self): 1166*7249d1a6SKrzysztof Kosiński code = """\ 1167*7249d1a6SKrzysztof Kosińskiclass foo: 1168*7249d1a6SKrzysztof Kosiński 1169*7249d1a6SKrzysztof Kosiński def bar(self, node, name, n=1): 1170*7249d1a6SKrzysztof Kosiński if True: 1171*7249d1a6SKrzysztof Kosiński if True: 1172*7249d1a6SKrzysztof Kosiński return [(aaaaaaaaaa, 1173*7249d1a6SKrzysztof Kosiński bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb( 1174*7249d1a6SKrzysztof Kosiński cccc, ddddddddddddddddddddddddddddddddddddd))] 1175*7249d1a6SKrzysztof Kosiński""" 1176*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 1177*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 1178*7249d1a6SKrzysztof Kosiński 1179*7249d1a6SKrzysztof Kosiński def testI18nNonFormatting(self): 1180*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 1181*7249d1a6SKrzysztof Kosiński class F(object): 1182*7249d1a6SKrzysztof Kosiński 1183*7249d1a6SKrzysztof Kosiński def __init__(self, fieldname, 1184*7249d1a6SKrzysztof Kosiński #. Error message indicating an invalid e-mail address. 1185*7249d1a6SKrzysztof Kosiński message=N_('Please check your email address.'), **kwargs): 1186*7249d1a6SKrzysztof Kosiński pass 1187*7249d1a6SKrzysztof Kosiński """) # noqa 1188*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 1189*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 1190*7249d1a6SKrzysztof Kosiński 1191*7249d1a6SKrzysztof Kosiński def testNoSpaceBetweenUnaryOpAndOpeningParen(self): 1192*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 1193*7249d1a6SKrzysztof Kosiński if ~(a or b): 1194*7249d1a6SKrzysztof Kosiński pass 1195*7249d1a6SKrzysztof Kosiński """) 1196*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 1197*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 1198*7249d1a6SKrzysztof Kosiński 1199*7249d1a6SKrzysztof Kosiński def testCommentBeforeFuncDef(self): 1200*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 1201*7249d1a6SKrzysztof Kosiński class Foo(object): 1202*7249d1a6SKrzysztof Kosiński 1203*7249d1a6SKrzysztof Kosiński a = 42 1204*7249d1a6SKrzysztof Kosiński 1205*7249d1a6SKrzysztof Kosiński # This is a comment. 1206*7249d1a6SKrzysztof Kosiński def __init__(self, 1207*7249d1a6SKrzysztof Kosiński xxxxxxx, 1208*7249d1a6SKrzysztof Kosiński yyyyy=0, 1209*7249d1a6SKrzysztof Kosiński zzzzzzz=None, 1210*7249d1a6SKrzysztof Kosiński aaaaaaaaaaaaaaaaaa=False, 1211*7249d1a6SKrzysztof Kosiński bbbbbbbbbbbbbbb=False): 1212*7249d1a6SKrzysztof Kosiński pass 1213*7249d1a6SKrzysztof Kosiński """) 1214*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 1215*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 1216*7249d1a6SKrzysztof Kosiński 1217*7249d1a6SKrzysztof Kosiński def testExcessLineCountWithDefaultKeywords(self): 1218*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 1219*7249d1a6SKrzysztof Kosiński class Fnord(object): 1220*7249d1a6SKrzysztof Kosiński def Moo(self): 1221*7249d1a6SKrzysztof Kosiński aaaaaaaaaaaaaaaa = self._bbbbbbbbbbbbbbbbbbbbbbb( 1222*7249d1a6SKrzysztof Kosiński ccccccccccccc=ccccccccccccc, ddddddd=ddddddd, eeee=eeee, 1223*7249d1a6SKrzysztof Kosiński fffff=fffff, ggggggg=ggggggg, hhhhhhhhhhhhh=hhhhhhhhhhhhh, 1224*7249d1a6SKrzysztof Kosiński iiiiiii=iiiiiiiiiiiiii) 1225*7249d1a6SKrzysztof Kosiński """) 1226*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 1227*7249d1a6SKrzysztof Kosiński class Fnord(object): 1228*7249d1a6SKrzysztof Kosiński 1229*7249d1a6SKrzysztof Kosiński def Moo(self): 1230*7249d1a6SKrzysztof Kosiński aaaaaaaaaaaaaaaa = self._bbbbbbbbbbbbbbbbbbbbbbb( 1231*7249d1a6SKrzysztof Kosiński ccccccccccccc=ccccccccccccc, 1232*7249d1a6SKrzysztof Kosiński ddddddd=ddddddd, 1233*7249d1a6SKrzysztof Kosiński eeee=eeee, 1234*7249d1a6SKrzysztof Kosiński fffff=fffff, 1235*7249d1a6SKrzysztof Kosiński ggggggg=ggggggg, 1236*7249d1a6SKrzysztof Kosiński hhhhhhhhhhhhh=hhhhhhhhhhhhh, 1237*7249d1a6SKrzysztof Kosiński iiiiiii=iiiiiiiiiiiiii) 1238*7249d1a6SKrzysztof Kosiński """) 1239*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 1240*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 1241*7249d1a6SKrzysztof Kosiński 1242*7249d1a6SKrzysztof Kosiński def testSpaceAfterNotOperator(self): 1243*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 1244*7249d1a6SKrzysztof Kosiński if not (this and that): 1245*7249d1a6SKrzysztof Kosiński pass 1246*7249d1a6SKrzysztof Kosiński """) 1247*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 1248*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 1249*7249d1a6SKrzysztof Kosiński 1250*7249d1a6SKrzysztof Kosiński def testNoPenaltySplitting(self): 1251*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 1252*7249d1a6SKrzysztof Kosiński def f(): 1253*7249d1a6SKrzysztof Kosiński if True: 1254*7249d1a6SKrzysztof Kosiński if True: 1255*7249d1a6SKrzysztof Kosiński python_files.extend( 1256*7249d1a6SKrzysztof Kosiński os.path.join(filename, f) 1257*7249d1a6SKrzysztof Kosiński for f in os.listdir(filename) 1258*7249d1a6SKrzysztof Kosiński if IsPythonFile(os.path.join(filename, f))) 1259*7249d1a6SKrzysztof Kosiński """) 1260*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 1261*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 1262*7249d1a6SKrzysztof Kosiński 1263*7249d1a6SKrzysztof Kosiński def testExpressionPenalties(self): 1264*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 1265*7249d1a6SKrzysztof Kosiński def f(): 1266*7249d1a6SKrzysztof Kosiński if ((left.value == '(' and right.value == ')') or 1267*7249d1a6SKrzysztof Kosiński (left.value == '[' and right.value == ']') or 1268*7249d1a6SKrzysztof Kosiński (left.value == '{' and right.value == '}')): 1269*7249d1a6SKrzysztof Kosiński return False 1270*7249d1a6SKrzysztof Kosiński """) 1271*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 1272*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 1273*7249d1a6SKrzysztof Kosiński 1274*7249d1a6SKrzysztof Kosiński def testLineDepthOfSingleLineStatement(self): 1275*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 1276*7249d1a6SKrzysztof Kosiński while True: continue 1277*7249d1a6SKrzysztof Kosiński for x in range(3): continue 1278*7249d1a6SKrzysztof Kosiński try: a = 42 1279*7249d1a6SKrzysztof Kosiński except: b = 42 1280*7249d1a6SKrzysztof Kosiński with open(a) as fd: a = fd.read() 1281*7249d1a6SKrzysztof Kosiński """) 1282*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 1283*7249d1a6SKrzysztof Kosiński while True: 1284*7249d1a6SKrzysztof Kosiński continue 1285*7249d1a6SKrzysztof Kosiński for x in range(3): 1286*7249d1a6SKrzysztof Kosiński continue 1287*7249d1a6SKrzysztof Kosiński try: 1288*7249d1a6SKrzysztof Kosiński a = 42 1289*7249d1a6SKrzysztof Kosiński except: 1290*7249d1a6SKrzysztof Kosiński b = 42 1291*7249d1a6SKrzysztof Kosiński with open(a) as fd: 1292*7249d1a6SKrzysztof Kosiński a = fd.read() 1293*7249d1a6SKrzysztof Kosiński """) 1294*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 1295*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 1296*7249d1a6SKrzysztof Kosiński 1297*7249d1a6SKrzysztof Kosiński def testSplitListWithTerminatingComma(self): 1298*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 1299*7249d1a6SKrzysztof Kosiński FOO = ['bar', 'baz', 'mux', 'qux', 'quux', 'quuux', 'quuuux', 1300*7249d1a6SKrzysztof Kosiński 'quuuuux', 'quuuuuux', 'quuuuuuux', lambda a, b: 37,] 1301*7249d1a6SKrzysztof Kosiński """) 1302*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 1303*7249d1a6SKrzysztof Kosiński FOO = [ 1304*7249d1a6SKrzysztof Kosiński 'bar', 1305*7249d1a6SKrzysztof Kosiński 'baz', 1306*7249d1a6SKrzysztof Kosiński 'mux', 1307*7249d1a6SKrzysztof Kosiński 'qux', 1308*7249d1a6SKrzysztof Kosiński 'quux', 1309*7249d1a6SKrzysztof Kosiński 'quuux', 1310*7249d1a6SKrzysztof Kosiński 'quuuux', 1311*7249d1a6SKrzysztof Kosiński 'quuuuux', 1312*7249d1a6SKrzysztof Kosiński 'quuuuuux', 1313*7249d1a6SKrzysztof Kosiński 'quuuuuuux', 1314*7249d1a6SKrzysztof Kosiński lambda a, b: 37, 1315*7249d1a6SKrzysztof Kosiński ] 1316*7249d1a6SKrzysztof Kosiński """) 1317*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 1318*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 1319*7249d1a6SKrzysztof Kosiński 1320*7249d1a6SKrzysztof Kosiński def testSplitListWithInterspersedComments(self): 1321*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 1322*7249d1a6SKrzysztof Kosiński FOO = [ 1323*7249d1a6SKrzysztof Kosiński 'bar', # bar 1324*7249d1a6SKrzysztof Kosiński 'baz', # baz 1325*7249d1a6SKrzysztof Kosiński 'mux', # mux 1326*7249d1a6SKrzysztof Kosiński 'qux', # qux 1327*7249d1a6SKrzysztof Kosiński 'quux', # quux 1328*7249d1a6SKrzysztof Kosiński 'quuux', # quuux 1329*7249d1a6SKrzysztof Kosiński 'quuuux', # quuuux 1330*7249d1a6SKrzysztof Kosiński 'quuuuux', # quuuuux 1331*7249d1a6SKrzysztof Kosiński 'quuuuuux', # quuuuuux 1332*7249d1a6SKrzysztof Kosiński 'quuuuuuux', # quuuuuuux 1333*7249d1a6SKrzysztof Kosiński lambda a, b: 37 # lambda 1334*7249d1a6SKrzysztof Kosiński ] 1335*7249d1a6SKrzysztof Kosiński """) 1336*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 1337*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 1338*7249d1a6SKrzysztof Kosiński 1339*7249d1a6SKrzysztof Kosiński def testRelativeImportStatements(self): 1340*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 1341*7249d1a6SKrzysztof Kosiński from ... import bork 1342*7249d1a6SKrzysztof Kosiński """) 1343*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 1344*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 1345*7249d1a6SKrzysztof Kosiński 1346*7249d1a6SKrzysztof Kosiński def testSingleLineList(self): 1347*7249d1a6SKrzysztof Kosiński # A list on a single line should prefer to remain contiguous. 1348*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 1349*7249d1a6SKrzysztof Kosiński bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb = aaaaaaaaaaa( 1350*7249d1a6SKrzysztof Kosiński ("...", "."), "..", 1351*7249d1a6SKrzysztof Kosiński ".............................................." 1352*7249d1a6SKrzysztof Kosiński ) 1353*7249d1a6SKrzysztof Kosiński """) 1354*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 1355*7249d1a6SKrzysztof Kosiński bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb = aaaaaaaaaaa( 1356*7249d1a6SKrzysztof Kosiński ("...", "."), "..", "..............................................") 1357*7249d1a6SKrzysztof Kosiński """) # noqa 1358*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 1359*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 1360*7249d1a6SKrzysztof Kosiński 1361*7249d1a6SKrzysztof Kosiński def testBlankLinesBeforeFunctionsNotInColumnZero(self): 1362*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 1363*7249d1a6SKrzysztof Kosiński import signal 1364*7249d1a6SKrzysztof Kosiński 1365*7249d1a6SKrzysztof Kosiński 1366*7249d1a6SKrzysztof Kosiński try: 1367*7249d1a6SKrzysztof Kosiński signal.SIGALRM 1368*7249d1a6SKrzysztof Kosiński # .................................................................. 1369*7249d1a6SKrzysztof Kosiński # ............................................................... 1370*7249d1a6SKrzysztof Kosiński 1371*7249d1a6SKrzysztof Kosiński 1372*7249d1a6SKrzysztof Kosiński def timeout(seconds=1): 1373*7249d1a6SKrzysztof Kosiński pass 1374*7249d1a6SKrzysztof Kosiński except: 1375*7249d1a6SKrzysztof Kosiński pass 1376*7249d1a6SKrzysztof Kosiński """) 1377*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 1378*7249d1a6SKrzysztof Kosiński import signal 1379*7249d1a6SKrzysztof Kosiński 1380*7249d1a6SKrzysztof Kosiński try: 1381*7249d1a6SKrzysztof Kosiński signal.SIGALRM 1382*7249d1a6SKrzysztof Kosiński 1383*7249d1a6SKrzysztof Kosiński # .................................................................. 1384*7249d1a6SKrzysztof Kosiński # ............................................................... 1385*7249d1a6SKrzysztof Kosiński 1386*7249d1a6SKrzysztof Kosiński 1387*7249d1a6SKrzysztof Kosiński def timeout(seconds=1): 1388*7249d1a6SKrzysztof Kosiński pass 1389*7249d1a6SKrzysztof Kosiński except: 1390*7249d1a6SKrzysztof Kosiński pass 1391*7249d1a6SKrzysztof Kosiński """) # noqa 1392*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 1393*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 1394*7249d1a6SKrzysztof Kosiński 1395*7249d1a6SKrzysztof Kosiński def testNoKeywordArgumentBreakage(self): 1396*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 1397*7249d1a6SKrzysztof Kosiński class A(object): 1398*7249d1a6SKrzysztof Kosiński 1399*7249d1a6SKrzysztof Kosiński def b(self): 1400*7249d1a6SKrzysztof Kosiński if self.aaaaaaaaaaaaaaaaaaaa not in self.bbbbbbbbbb( 1401*7249d1a6SKrzysztof Kosiński cccccccccccccccccccc=True): 1402*7249d1a6SKrzysztof Kosiński pass 1403*7249d1a6SKrzysztof Kosiński """) 1404*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 1405*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 1406*7249d1a6SKrzysztof Kosiński 1407*7249d1a6SKrzysztof Kosiński def testTrailerOnSingleLine(self): 1408*7249d1a6SKrzysztof Kosiński code = """\ 1409*7249d1a6SKrzysztof Kosińskiurlpatterns = patterns('', url(r'^$', 'homepage_view'), 1410*7249d1a6SKrzysztof Kosiński url(r'^/login/$', 'login_view'), 1411*7249d1a6SKrzysztof Kosiński url(r'^/login/$', 'logout_view'), 1412*7249d1a6SKrzysztof Kosiński url(r'^/user/(?P<username>\\w+)/$', 'profile_view')) 1413*7249d1a6SKrzysztof Kosiński""" 1414*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 1415*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 1416*7249d1a6SKrzysztof Kosiński 1417*7249d1a6SKrzysztof Kosiński def testIfConditionalParens(self): 1418*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 1419*7249d1a6SKrzysztof Kosiński class Foo: 1420*7249d1a6SKrzysztof Kosiński 1421*7249d1a6SKrzysztof Kosiński def bar(): 1422*7249d1a6SKrzysztof Kosiński if True: 1423*7249d1a6SKrzysztof Kosiński if (child.type == grammar_token.NAME and 1424*7249d1a6SKrzysztof Kosiński child.value in substatement_names): 1425*7249d1a6SKrzysztof Kosiński pass 1426*7249d1a6SKrzysztof Kosiński """) 1427*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 1428*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 1429*7249d1a6SKrzysztof Kosiński 1430*7249d1a6SKrzysztof Kosiński def testContinuationMarkers(self): 1431*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 1432*7249d1a6SKrzysztof Kosiński text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec a diam lectus. "\\ 1433*7249d1a6SKrzysztof Kosiński "Sed sit amet ipsum mauris. Maecenas congue ligula ac quam viverra nec consectetur "\\ 1434*7249d1a6SKrzysztof Kosiński "ante hendrerit. Donec et mollis dolor. Praesent et diam eget libero egestas mattis "\\ 1435*7249d1a6SKrzysztof Kosiński "sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. "\\ 1436*7249d1a6SKrzysztof Kosiński "Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet" 1437*7249d1a6SKrzysztof Kosiński """) # noqa 1438*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 1439*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 1440*7249d1a6SKrzysztof Kosiński 1441*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 1442*7249d1a6SKrzysztof Kosiński from __future__ import nested_scopes, generators, division, absolute_import, with_statement, \\ 1443*7249d1a6SKrzysztof Kosiński print_function, unicode_literals 1444*7249d1a6SKrzysztof Kosiński """) # noqa 1445*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 1446*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 1447*7249d1a6SKrzysztof Kosiński 1448*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 1449*7249d1a6SKrzysztof Kosiński if aaaaaaaaa == 42 and bbbbbbbbbbbbbb == 42 and \\ 1450*7249d1a6SKrzysztof Kosiński cccccccc == 42: 1451*7249d1a6SKrzysztof Kosiński pass 1452*7249d1a6SKrzysztof Kosiński """) 1453*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 1454*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 1455*7249d1a6SKrzysztof Kosiński 1456*7249d1a6SKrzysztof Kosiński def testCommentsWithContinuationMarkers(self): 1457*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 1458*7249d1a6SKrzysztof Kosiński def fn(arg): 1459*7249d1a6SKrzysztof Kosiński v = fn2(key1=True, 1460*7249d1a6SKrzysztof Kosiński #c1 1461*7249d1a6SKrzysztof Kosiński key2=arg)\\ 1462*7249d1a6SKrzysztof Kosiński .fn3() 1463*7249d1a6SKrzysztof Kosiński """) 1464*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 1465*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 1466*7249d1a6SKrzysztof Kosiński 1467*7249d1a6SKrzysztof Kosiński def testMultipleContinuationMarkers(self): 1468*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 1469*7249d1a6SKrzysztof Kosiński xyz = \\ 1470*7249d1a6SKrzysztof Kosiński \\ 1471*7249d1a6SKrzysztof Kosiński some_thing() 1472*7249d1a6SKrzysztof Kosiński """) 1473*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 1474*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 1475*7249d1a6SKrzysztof Kosiński 1476*7249d1a6SKrzysztof Kosiński def testContinuationMarkerAfterStringWithContinuation(self): 1477*7249d1a6SKrzysztof Kosiński code = """\ 1478*7249d1a6SKrzysztof Kosińskis = 'foo \\ 1479*7249d1a6SKrzysztof Kosiński bar' \\ 1480*7249d1a6SKrzysztof Kosiński .format() 1481*7249d1a6SKrzysztof Kosiński""" 1482*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 1483*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 1484*7249d1a6SKrzysztof Kosiński 1485*7249d1a6SKrzysztof Kosiński def testEmptyContainers(self): 1486*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 1487*7249d1a6SKrzysztof Kosiński flags.DEFINE_list( 1488*7249d1a6SKrzysztof Kosiński 'output_dirs', [], 1489*7249d1a6SKrzysztof Kosiński 'Lorem ipsum dolor sit amet, consetetur adipiscing elit. Donec a diam lectus. ' 1490*7249d1a6SKrzysztof Kosiński 'Sed sit amet ipsum mauris. Maecenas congue.') 1491*7249d1a6SKrzysztof Kosiński """) # noqa 1492*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 1493*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 1494*7249d1a6SKrzysztof Kosiński 1495*7249d1a6SKrzysztof Kosiński def testSplitStringsIfSurroundedByParens(self): 1496*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 1497*7249d1a6SKrzysztof Kosiński a = foo.bar({'xxxxxxxxxxxxxxxxxxxxxxx' 'yyyyyyyyyyyyyyyyyyyyyyyyyy': baz[42]} + 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' 'bbbbbbbbbbbbbbbbbbbbbbbbbb' 'cccccccccccccccccccccccccccccccc' 'ddddddddddddddddddddddddddddd') 1498*7249d1a6SKrzysztof Kosiński """) # noqa 1499*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 1500*7249d1a6SKrzysztof Kosiński a = foo.bar({'xxxxxxxxxxxxxxxxxxxxxxx' 1501*7249d1a6SKrzysztof Kosiński 'yyyyyyyyyyyyyyyyyyyyyyyyyy': baz[42]} + 1502*7249d1a6SKrzysztof Kosiński 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' 1503*7249d1a6SKrzysztof Kosiński 'bbbbbbbbbbbbbbbbbbbbbbbbbb' 1504*7249d1a6SKrzysztof Kosiński 'cccccccccccccccccccccccccccccccc' 1505*7249d1a6SKrzysztof Kosiński 'ddddddddddddddddddddddddddddd') 1506*7249d1a6SKrzysztof Kosiński """) 1507*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 1508*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 1509*7249d1a6SKrzysztof Kosiński 1510*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 1511*7249d1a6SKrzysztof Kosiński a = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' \ 1512*7249d1a6SKrzysztof Kosiński'bbbbbbbbbbbbbbbbbbbbbbbbbb' 'cccccccccccccccccccccccccccccccc' \ 1513*7249d1a6SKrzysztof Kosiński'ddddddddddddddddddddddddddddd' 1514*7249d1a6SKrzysztof Kosiński """) 1515*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 1516*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 1517*7249d1a6SKrzysztof Kosiński 1518*7249d1a6SKrzysztof Kosiński def testMultilineShebang(self): 1519*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 1520*7249d1a6SKrzysztof Kosiński #!/bin/sh 1521*7249d1a6SKrzysztof Kosiński if "true" : '''\' 1522*7249d1a6SKrzysztof Kosiński then 1523*7249d1a6SKrzysztof Kosiński 1524*7249d1a6SKrzysztof Kosiński export FOO=123 1525*7249d1a6SKrzysztof Kosiński exec /usr/bin/env python "$0" "$@" 1526*7249d1a6SKrzysztof Kosiński 1527*7249d1a6SKrzysztof Kosiński exit 127 1528*7249d1a6SKrzysztof Kosiński fi 1529*7249d1a6SKrzysztof Kosiński ''' 1530*7249d1a6SKrzysztof Kosiński 1531*7249d1a6SKrzysztof Kosiński import os 1532*7249d1a6SKrzysztof Kosiński 1533*7249d1a6SKrzysztof Kosiński assert os.environ['FOO'] == '123' 1534*7249d1a6SKrzysztof Kosiński """) 1535*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 1536*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 1537*7249d1a6SKrzysztof Kosiński 1538*7249d1a6SKrzysztof Kosiński def testNoSplittingAroundTermOperators(self): 1539*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 1540*7249d1a6SKrzysztof Kosiński a_very_long_function_call_yada_yada_etc_etc_etc(long_arg1, 1541*7249d1a6SKrzysztof Kosiński long_arg2 / long_arg3) 1542*7249d1a6SKrzysztof Kosiński """) 1543*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 1544*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 1545*7249d1a6SKrzysztof Kosiński 1546*7249d1a6SKrzysztof Kosiński def testNoSplittingWithinSubscriptList(self): 1547*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 1548*7249d1a6SKrzysztof Kosiński somequitelongvariablename.somemember[(a, b)] = { 1549*7249d1a6SKrzysztof Kosiński 'somelongkey': 1, 1550*7249d1a6SKrzysztof Kosiński 'someotherlongkey': 2 1551*7249d1a6SKrzysztof Kosiński } 1552*7249d1a6SKrzysztof Kosiński """) 1553*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 1554*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 1555*7249d1a6SKrzysztof Kosiński 1556*7249d1a6SKrzysztof Kosiński def testExcessCharacters(self): 1557*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 1558*7249d1a6SKrzysztof Kosiński class foo: 1559*7249d1a6SKrzysztof Kosiński 1560*7249d1a6SKrzysztof Kosiński def bar(self): 1561*7249d1a6SKrzysztof Kosiński self.write(s=[ 1562*7249d1a6SKrzysztof Kosiński '%s%s %s' % ('many of really', 'long strings', '+ just makes up 81') 1563*7249d1a6SKrzysztof Kosiński ]) 1564*7249d1a6SKrzysztof Kosiński """) # noqa 1565*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 1566*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 1567*7249d1a6SKrzysztof Kosiński 1568*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 1569*7249d1a6SKrzysztof Kosiński def _(): 1570*7249d1a6SKrzysztof Kosiński if True: 1571*7249d1a6SKrzysztof Kosiński if True: 1572*7249d1a6SKrzysztof Kosiński if contract == allow_contract and attr_dict.get(if_attribute) == has_value: 1573*7249d1a6SKrzysztof Kosiński return True 1574*7249d1a6SKrzysztof Kosiński """) # noqa 1575*7249d1a6SKrzysztof Kosiński expected_code = textwrap.dedent("""\ 1576*7249d1a6SKrzysztof Kosiński def _(): 1577*7249d1a6SKrzysztof Kosiński if True: 1578*7249d1a6SKrzysztof Kosiński if True: 1579*7249d1a6SKrzysztof Kosiński if contract == allow_contract and attr_dict.get( 1580*7249d1a6SKrzysztof Kosiński if_attribute) == has_value: 1581*7249d1a6SKrzysztof Kosiński return True 1582*7249d1a6SKrzysztof Kosiński """) 1583*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 1584*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_code, reformatter.Reformat(llines)) 1585*7249d1a6SKrzysztof Kosiński 1586*7249d1a6SKrzysztof Kosiński def testDictSetGenerator(self): 1587*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 1588*7249d1a6SKrzysztof Kosiński foo = { 1589*7249d1a6SKrzysztof Kosiński variable: 'hello world. How are you today?' 1590*7249d1a6SKrzysztof Kosiński for variable in fnord 1591*7249d1a6SKrzysztof Kosiński if variable != 37 1592*7249d1a6SKrzysztof Kosiński } 1593*7249d1a6SKrzysztof Kosiński """) 1594*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 1595*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 1596*7249d1a6SKrzysztof Kosiński 1597*7249d1a6SKrzysztof Kosiński def testUnaryOpInDictionaryValue(self): 1598*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 1599*7249d1a6SKrzysztof Kosiński beta = "123" 1600*7249d1a6SKrzysztof Kosiński 1601*7249d1a6SKrzysztof Kosiński test = {'alpha': beta[-1]} 1602*7249d1a6SKrzysztof Kosiński 1603*7249d1a6SKrzysztof Kosiński print(beta[-1]) 1604*7249d1a6SKrzysztof Kosiński """) 1605*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 1606*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 1607*7249d1a6SKrzysztof Kosiński 1608*7249d1a6SKrzysztof Kosiński def testUnaryNotOperator(self): 1609*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 1610*7249d1a6SKrzysztof Kosiński if True: 1611*7249d1a6SKrzysztof Kosiński if True: 1612*7249d1a6SKrzysztof Kosiński if True: 1613*7249d1a6SKrzysztof Kosiński if True: 1614*7249d1a6SKrzysztof Kosiński remote_checksum = self.get_checksum(conn, tmp, dest, inject, 1615*7249d1a6SKrzysztof Kosiński not directory_prepended, source) 1616*7249d1a6SKrzysztof Kosiński """) # noqa 1617*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 1618*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 1619*7249d1a6SKrzysztof Kosiński 1620*7249d1a6SKrzysztof Kosiński def testRelaxArraySubscriptAffinity(self): 1621*7249d1a6SKrzysztof Kosiński code = """\ 1622*7249d1a6SKrzysztof Kosińskiclass A(object): 1623*7249d1a6SKrzysztof Kosiński 1624*7249d1a6SKrzysztof Kosiński def f(self, aaaaaaaaa, bbbbbbbbbbbbb, row): 1625*7249d1a6SKrzysztof Kosiński if True: 1626*7249d1a6SKrzysztof Kosiński if True: 1627*7249d1a6SKrzysztof Kosiński if True: 1628*7249d1a6SKrzysztof Kosiński if True: 1629*7249d1a6SKrzysztof Kosiński if row[4] is None or row[5] is None: 1630*7249d1a6SKrzysztof Kosiński bbbbbbbbbbbbb[ 1631*7249d1a6SKrzysztof Kosiński '..............'] = row[5] if row[5] is not None else 5 1632*7249d1a6SKrzysztof Kosiński""" 1633*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 1634*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 1635*7249d1a6SKrzysztof Kosiński 1636*7249d1a6SKrzysztof Kosiński def testFunctionCallInDict(self): 1637*7249d1a6SKrzysztof Kosiński code = "a = {'a': b(c=d, **e)}\n" 1638*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 1639*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 1640*7249d1a6SKrzysztof Kosiński 1641*7249d1a6SKrzysztof Kosiński def testFunctionCallInNestedDict(self): 1642*7249d1a6SKrzysztof Kosiński code = "a = {'a': {'a': {'a': b(c=d, **e)}}}\n" 1643*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 1644*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 1645*7249d1a6SKrzysztof Kosiński 1646*7249d1a6SKrzysztof Kosiński def testUnbreakableNot(self): 1647*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 1648*7249d1a6SKrzysztof Kosiński def test(): 1649*7249d1a6SKrzysztof Kosiński if not "Foooooooooooooooooooooooooooooo" or "Foooooooooooooooooooooooooooooo" == "Foooooooooooooooooooooooooooooo": 1650*7249d1a6SKrzysztof Kosiński pass 1651*7249d1a6SKrzysztof Kosiński """) # noqa 1652*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 1653*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 1654*7249d1a6SKrzysztof Kosiński 1655*7249d1a6SKrzysztof Kosiński def testSplitListWithComment(self): 1656*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 1657*7249d1a6SKrzysztof Kosiński a = [ 1658*7249d1a6SKrzysztof Kosiński 'a', 1659*7249d1a6SKrzysztof Kosiński 'b', 1660*7249d1a6SKrzysztof Kosiński 'c' # hello world 1661*7249d1a6SKrzysztof Kosiński ] 1662*7249d1a6SKrzysztof Kosiński """) 1663*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 1664*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 1665*7249d1a6SKrzysztof Kosiński 1666*7249d1a6SKrzysztof Kosiński def testOverColumnLimit(self): 1667*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 1668*7249d1a6SKrzysztof Kosiński class Test: 1669*7249d1a6SKrzysztof Kosiński 1670*7249d1a6SKrzysztof Kosiński def testSomething(self): 1671*7249d1a6SKrzysztof Kosiński expected = { 1672*7249d1a6SKrzysztof Kosiński ('aaaaaaaaaaaaa', 'bbbb'): 'ccccccccccccccccccccccccccccccccccccccccccc', 1673*7249d1a6SKrzysztof Kosiński ('aaaaaaaaaaaaa', 'bbbb'): 'ccccccccccccccccccccccccccccccccccccccccccc', 1674*7249d1a6SKrzysztof Kosiński ('aaaaaaaaaaaaa', 'bbbb'): 'ccccccccccccccccccccccccccccccccccccccccccc', 1675*7249d1a6SKrzysztof Kosiński } 1676*7249d1a6SKrzysztof Kosiński """) # noqa 1677*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 1678*7249d1a6SKrzysztof Kosiński class Test: 1679*7249d1a6SKrzysztof Kosiński 1680*7249d1a6SKrzysztof Kosiński def testSomething(self): 1681*7249d1a6SKrzysztof Kosiński expected = { 1682*7249d1a6SKrzysztof Kosiński ('aaaaaaaaaaaaa', 'bbbb'): 1683*7249d1a6SKrzysztof Kosiński 'ccccccccccccccccccccccccccccccccccccccccccc', 1684*7249d1a6SKrzysztof Kosiński ('aaaaaaaaaaaaa', 'bbbb'): 1685*7249d1a6SKrzysztof Kosiński 'ccccccccccccccccccccccccccccccccccccccccccc', 1686*7249d1a6SKrzysztof Kosiński ('aaaaaaaaaaaaa', 'bbbb'): 1687*7249d1a6SKrzysztof Kosiński 'ccccccccccccccccccccccccccccccccccccccccccc', 1688*7249d1a6SKrzysztof Kosiński } 1689*7249d1a6SKrzysztof Kosiński """) 1690*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 1691*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 1692*7249d1a6SKrzysztof Kosiński 1693*7249d1a6SKrzysztof Kosiński def testEndingComment(self): 1694*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 1695*7249d1a6SKrzysztof Kosiński a = f( 1696*7249d1a6SKrzysztof Kosiński a="something", 1697*7249d1a6SKrzysztof Kosiński b="something requiring comment which is quite long", # comment about b (pushes line over 79) 1698*7249d1a6SKrzysztof Kosiński c="something else, about which comment doesn't make sense") 1699*7249d1a6SKrzysztof Kosiński """) # noqa 1700*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 1701*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 1702*7249d1a6SKrzysztof Kosiński 1703*7249d1a6SKrzysztof Kosiński def testContinuationSpaceRetention(self): 1704*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 1705*7249d1a6SKrzysztof Kosiński def fn(): 1706*7249d1a6SKrzysztof Kosiński return module \\ 1707*7249d1a6SKrzysztof Kosiński .method(Object(data, 1708*7249d1a6SKrzysztof Kosiński fn2(arg) 1709*7249d1a6SKrzysztof Kosiński )) 1710*7249d1a6SKrzysztof Kosiński """) 1711*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 1712*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 1713*7249d1a6SKrzysztof Kosiński 1714*7249d1a6SKrzysztof Kosiński def testIfExpressionWithFunctionCall(self): 1715*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 1716*7249d1a6SKrzysztof Kosiński if x or z.y( 1717*7249d1a6SKrzysztof Kosiński a, 1718*7249d1a6SKrzysztof Kosiński c, 1719*7249d1a6SKrzysztof Kosiński aaaaaaaaaaaaaaaaaaaaa=aaaaaaaaaaaaaaaaaa, 1720*7249d1a6SKrzysztof Kosiński bbbbbbbbbbbbbbbbbbbbb=bbbbbbbbbbbbbbbbbb): 1721*7249d1a6SKrzysztof Kosiński pass 1722*7249d1a6SKrzysztof Kosiński """) 1723*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 1724*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 1725*7249d1a6SKrzysztof Kosiński 1726*7249d1a6SKrzysztof Kosiński def testUnformattedAfterMultilineString(self): 1727*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 1728*7249d1a6SKrzysztof Kosiński def foo(): 1729*7249d1a6SKrzysztof Kosiński com_text = \\ 1730*7249d1a6SKrzysztof Kosiński ''' 1731*7249d1a6SKrzysztof Kosiński TEST 1732*7249d1a6SKrzysztof Kosiński ''' % (input_fname, output_fname) 1733*7249d1a6SKrzysztof Kosiński """) 1734*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 1735*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 1736*7249d1a6SKrzysztof Kosiński 1737*7249d1a6SKrzysztof Kosiński def testNoSpacesAroundKeywordDefaultValues(self): 1738*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 1739*7249d1a6SKrzysztof Kosiński sources = { 1740*7249d1a6SKrzysztof Kosiński 'json': request.get_json(silent=True) or {}, 1741*7249d1a6SKrzysztof Kosiński 'json2': request.get_json(silent=True), 1742*7249d1a6SKrzysztof Kosiński } 1743*7249d1a6SKrzysztof Kosiński json = request.get_json(silent=True) or {} 1744*7249d1a6SKrzysztof Kosiński """) 1745*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 1746*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 1747*7249d1a6SKrzysztof Kosiński 1748*7249d1a6SKrzysztof Kosiński def testNoSplittingBeforeEndingSubscriptBracket(self): 1749*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 1750*7249d1a6SKrzysztof Kosiński if True: 1751*7249d1a6SKrzysztof Kosiński if True: 1752*7249d1a6SKrzysztof Kosiński status = cf.describe_stacks(StackName=stackname)[u'Stacks'][0][u'StackStatus'] 1753*7249d1a6SKrzysztof Kosiński """) # noqa 1754*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 1755*7249d1a6SKrzysztof Kosiński if True: 1756*7249d1a6SKrzysztof Kosiński if True: 1757*7249d1a6SKrzysztof Kosiński status = cf.describe_stacks( 1758*7249d1a6SKrzysztof Kosiński StackName=stackname)[u'Stacks'][0][u'StackStatus'] 1759*7249d1a6SKrzysztof Kosiński """) 1760*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 1761*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 1762*7249d1a6SKrzysztof Kosiński 1763*7249d1a6SKrzysztof Kosiński def testNoSplittingOnSingleArgument(self): 1764*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 1765*7249d1a6SKrzysztof Kosiński xxxxxxxxxxxxxx = (re.search(r'(\\d+\\.\\d+\\.\\d+\\.)\\d+', 1766*7249d1a6SKrzysztof Kosiński aaaaaaa.bbbbbbbbbbbb).group(1) + 1767*7249d1a6SKrzysztof Kosiński re.search(r'\\d+\\.\\d+\\.\\d+\\.(\\d+)', 1768*7249d1a6SKrzysztof Kosiński ccccccc).group(1)) 1769*7249d1a6SKrzysztof Kosiński xxxxxxxxxxxxxx = (re.search(r'(\\d+\\.\\d+\\.\\d+\\.)\\d+', 1770*7249d1a6SKrzysztof Kosiński aaaaaaa.bbbbbbbbbbbb).group(a.b) + 1771*7249d1a6SKrzysztof Kosiński re.search(r'\\d+\\.\\d+\\.\\d+\\.(\\d+)', 1772*7249d1a6SKrzysztof Kosiński ccccccc).group(c.d)) 1773*7249d1a6SKrzysztof Kosiński """) 1774*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 1775*7249d1a6SKrzysztof Kosiński xxxxxxxxxxxxxx = ( 1776*7249d1a6SKrzysztof Kosiński re.search(r'(\\d+\\.\\d+\\.\\d+\\.)\\d+', aaaaaaa.bbbbbbbbbbbb).group(1) + 1777*7249d1a6SKrzysztof Kosiński re.search(r'\\d+\\.\\d+\\.\\d+\\.(\\d+)', ccccccc).group(1)) 1778*7249d1a6SKrzysztof Kosiński xxxxxxxxxxxxxx = ( 1779*7249d1a6SKrzysztof Kosiński re.search(r'(\\d+\\.\\d+\\.\\d+\\.)\\d+', aaaaaaa.bbbbbbbbbbbb).group(a.b) + 1780*7249d1a6SKrzysztof Kosiński re.search(r'\\d+\\.\\d+\\.\\d+\\.(\\d+)', ccccccc).group(c.d)) 1781*7249d1a6SKrzysztof Kosiński """) # noqa 1782*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 1783*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 1784*7249d1a6SKrzysztof Kosiński 1785*7249d1a6SKrzysztof Kosiński def testSplittingArraysSensibly(self): 1786*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 1787*7249d1a6SKrzysztof Kosiński while True: 1788*7249d1a6SKrzysztof Kosiński while True: 1789*7249d1a6SKrzysztof Kosiński aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa = list['bbbbbbbbbbbbbbbbbbbbbbbbb'].split(',') 1790*7249d1a6SKrzysztof Kosiński aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa = list('bbbbbbbbbbbbbbbbbbbbbbbbb').split(',') 1791*7249d1a6SKrzysztof Kosiński """) # noqa 1792*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 1793*7249d1a6SKrzysztof Kosiński while True: 1794*7249d1a6SKrzysztof Kosiński while True: 1795*7249d1a6SKrzysztof Kosiński aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa = list[ 1796*7249d1a6SKrzysztof Kosiński 'bbbbbbbbbbbbbbbbbbbbbbbbb'].split(',') 1797*7249d1a6SKrzysztof Kosiński aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa = list( 1798*7249d1a6SKrzysztof Kosiński 'bbbbbbbbbbbbbbbbbbbbbbbbb').split(',') 1799*7249d1a6SKrzysztof Kosiński """) 1800*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 1801*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 1802*7249d1a6SKrzysztof Kosiński 1803*7249d1a6SKrzysztof Kosiński def testComprehensionForAndIf(self): 1804*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 1805*7249d1a6SKrzysztof Kosiński class f: 1806*7249d1a6SKrzysztof Kosiński 1807*7249d1a6SKrzysztof Kosiński def __repr__(self): 1808*7249d1a6SKrzysztof Kosiński tokens_repr = ','.join(['{0}({1!r})'.format(tok.name, tok.value) for tok in self._tokens]) 1809*7249d1a6SKrzysztof Kosiński """) # noqa 1810*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 1811*7249d1a6SKrzysztof Kosiński class f: 1812*7249d1a6SKrzysztof Kosiński 1813*7249d1a6SKrzysztof Kosiński def __repr__(self): 1814*7249d1a6SKrzysztof Kosiński tokens_repr = ','.join( 1815*7249d1a6SKrzysztof Kosiński ['{0}({1!r})'.format(tok.name, tok.value) for tok in self._tokens]) 1816*7249d1a6SKrzysztof Kosiński """) # noqa 1817*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 1818*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 1819*7249d1a6SKrzysztof Kosiński 1820*7249d1a6SKrzysztof Kosiński def testFunctionCallArguments(self): 1821*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 1822*7249d1a6SKrzysztof Kosiński def f(): 1823*7249d1a6SKrzysztof Kosiński if True: 1824*7249d1a6SKrzysztof Kosiński pytree_utils.InsertNodesBefore(_CreateCommentsFromPrefix( 1825*7249d1a6SKrzysztof Kosiński comment_prefix, comment_lineno, comment_column, 1826*7249d1a6SKrzysztof Kosiński standalone=True), ancestor_at_indent) 1827*7249d1a6SKrzysztof Kosiński pytree_utils.InsertNodesBefore(_CreateCommentsFromPrefix( 1828*7249d1a6SKrzysztof Kosiński comment_prefix, comment_lineno, comment_column, 1829*7249d1a6SKrzysztof Kosiński standalone=True)) 1830*7249d1a6SKrzysztof Kosiński """) 1831*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 1832*7249d1a6SKrzysztof Kosiński def f(): 1833*7249d1a6SKrzysztof Kosiński if True: 1834*7249d1a6SKrzysztof Kosiński pytree_utils.InsertNodesBefore( 1835*7249d1a6SKrzysztof Kosiński _CreateCommentsFromPrefix( 1836*7249d1a6SKrzysztof Kosiński comment_prefix, comment_lineno, comment_column, standalone=True), 1837*7249d1a6SKrzysztof Kosiński ancestor_at_indent) 1838*7249d1a6SKrzysztof Kosiński pytree_utils.InsertNodesBefore( 1839*7249d1a6SKrzysztof Kosiński _CreateCommentsFromPrefix( 1840*7249d1a6SKrzysztof Kosiński comment_prefix, comment_lineno, comment_column, standalone=True)) 1841*7249d1a6SKrzysztof Kosiński """) # noqa 1842*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 1843*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 1844*7249d1a6SKrzysztof Kosiński 1845*7249d1a6SKrzysztof Kosiński def testBinaryOperators(self): 1846*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 1847*7249d1a6SKrzysztof Kosiński a = b ** 37 1848*7249d1a6SKrzysztof Kosiński c = (20 ** -3) / (_GRID_ROWS ** (code_length - 10)) 1849*7249d1a6SKrzysztof Kosiński """) 1850*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 1851*7249d1a6SKrzysztof Kosiński a = b**37 1852*7249d1a6SKrzysztof Kosiński c = (20**-3) / (_GRID_ROWS**(code_length - 10)) 1853*7249d1a6SKrzysztof Kosiński """) 1854*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 1855*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 1856*7249d1a6SKrzysztof Kosiński 1857*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 1858*7249d1a6SKrzysztof Kosiński def f(): 1859*7249d1a6SKrzysztof Kosiński if True: 1860*7249d1a6SKrzysztof Kosiński if (self.stack[-1].split_before_closing_bracket and 1861*7249d1a6SKrzysztof Kosiński # FIXME(morbo): Use the 'matching_bracket' instead of this. 1862*7249d1a6SKrzysztof Kosiński # FIXME(morbo): Don't forget about tuples! 1863*7249d1a6SKrzysztof Kosiński current.value in ']}'): 1864*7249d1a6SKrzysztof Kosiński pass 1865*7249d1a6SKrzysztof Kosiński """) 1866*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 1867*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 1868*7249d1a6SKrzysztof Kosiński 1869*7249d1a6SKrzysztof Kosiński def testContiguousList(self): 1870*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 1871*7249d1a6SKrzysztof Kosiński [retval1, retval2] = a_very_long_function(argument_1, argument2, argument_3, 1872*7249d1a6SKrzysztof Kosiński argument_4) 1873*7249d1a6SKrzysztof Kosiński """) # noqa 1874*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 1875*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 1876*7249d1a6SKrzysztof Kosiński 1877*7249d1a6SKrzysztof Kosiński def testArgsAndKwargsFormatting(self): 1878*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 1879*7249d1a6SKrzysztof Kosiński a(a=aaaaaaaaaaaaaaaaaaaaa, 1880*7249d1a6SKrzysztof Kosiński b=aaaaaaaaaaaaaaaaaaaaaaaa, 1881*7249d1a6SKrzysztof Kosiński c=aaaaaaaaaaaaaaaaaa, 1882*7249d1a6SKrzysztof Kosiński *d, 1883*7249d1a6SKrzysztof Kosiński **e) 1884*7249d1a6SKrzysztof Kosiński """) 1885*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 1886*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 1887*7249d1a6SKrzysztof Kosiński 1888*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 1889*7249d1a6SKrzysztof Kosiński def foo(): 1890*7249d1a6SKrzysztof Kosiński return [ 1891*7249d1a6SKrzysztof Kosiński Bar(xxx='some string', 1892*7249d1a6SKrzysztof Kosiński yyy='another long string', 1893*7249d1a6SKrzysztof Kosiński zzz='a third long string') 1894*7249d1a6SKrzysztof Kosiński ] 1895*7249d1a6SKrzysztof Kosiński """) 1896*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 1897*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 1898*7249d1a6SKrzysztof Kosiński 1899*7249d1a6SKrzysztof Kosiński def testCommentColumnLimitOverflow(self): 1900*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 1901*7249d1a6SKrzysztof Kosiński def f(): 1902*7249d1a6SKrzysztof Kosiński if True: 1903*7249d1a6SKrzysztof Kosiński TaskManager.get_tags = MagicMock( 1904*7249d1a6SKrzysztof Kosiński name='get_tags_mock', 1905*7249d1a6SKrzysztof Kosiński return_value=[157031694470475], 1906*7249d1a6SKrzysztof Kosiński # side_effect=[(157031694470475), (157031694470475),], 1907*7249d1a6SKrzysztof Kosiński ) 1908*7249d1a6SKrzysztof Kosiński """) 1909*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 1910*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 1911*7249d1a6SKrzysztof Kosiński 1912*7249d1a6SKrzysztof Kosiński def testMultilineLambdas(self): 1913*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 1914*7249d1a6SKrzysztof Kosiński class SomeClass(object): 1915*7249d1a6SKrzysztof Kosiński do_something = True 1916*7249d1a6SKrzysztof Kosiński 1917*7249d1a6SKrzysztof Kosiński def succeeded(self, dddddddddddddd): 1918*7249d1a6SKrzysztof Kosiński d = defer.succeed(None) 1919*7249d1a6SKrzysztof Kosiński 1920*7249d1a6SKrzysztof Kosiński if self.do_something: 1921*7249d1a6SKrzysztof Kosiński d.addCallback(lambda _: self.aaaaaa.bbbbbbbbbbbbbbbb.cccccccccccccccccccccccccccccccc(dddddddddddddd)) 1922*7249d1a6SKrzysztof Kosiński return d 1923*7249d1a6SKrzysztof Kosiński """) # noqa 1924*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 1925*7249d1a6SKrzysztof Kosiński class SomeClass(object): 1926*7249d1a6SKrzysztof Kosiński do_something = True 1927*7249d1a6SKrzysztof Kosiński 1928*7249d1a6SKrzysztof Kosiński def succeeded(self, dddddddddddddd): 1929*7249d1a6SKrzysztof Kosiński d = defer.succeed(None) 1930*7249d1a6SKrzysztof Kosiński 1931*7249d1a6SKrzysztof Kosiński if self.do_something: 1932*7249d1a6SKrzysztof Kosiński d.addCallback(lambda _: self.aaaaaa.bbbbbbbbbbbbbbbb. 1933*7249d1a6SKrzysztof Kosiński cccccccccccccccccccccccccccccccc(dddddddddddddd)) 1934*7249d1a6SKrzysztof Kosiński return d 1935*7249d1a6SKrzysztof Kosiński """) 1936*7249d1a6SKrzysztof Kosiński 1937*7249d1a6SKrzysztof Kosiński try: 1938*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle( 1939*7249d1a6SKrzysztof Kosiński style.CreateStyleFromConfig( 1940*7249d1a6SKrzysztof Kosiński '{based_on_style: yapf, allow_multiline_lambdas: true}')) 1941*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 1942*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, 1943*7249d1a6SKrzysztof Kosiński reformatter.Reformat(llines)) 1944*7249d1a6SKrzysztof Kosiński finally: 1945*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle(style.CreateYapfStyle()) 1946*7249d1a6SKrzysztof Kosiński 1947*7249d1a6SKrzysztof Kosiński def testMultilineDictionaryKeys(self): 1948*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 1949*7249d1a6SKrzysztof Kosiński MAP_WITH_LONG_KEYS = { 1950*7249d1a6SKrzysztof Kosiński ('lorem ipsum', 'dolor sit amet'): 1951*7249d1a6SKrzysztof Kosiński 1, 1952*7249d1a6SKrzysztof Kosiński ('consectetur adipiscing elit.', 'Vestibulum mauris justo, ornare eget dolor eget'): 1953*7249d1a6SKrzysztof Kosiński 2, 1954*7249d1a6SKrzysztof Kosiński ('vehicula convallis nulla. Vestibulum dictum nisl in malesuada finibus.',): 1955*7249d1a6SKrzysztof Kosiński 3 1956*7249d1a6SKrzysztof Kosiński } 1957*7249d1a6SKrzysztof Kosiński """) # noqa 1958*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 1959*7249d1a6SKrzysztof Kosiński MAP_WITH_LONG_KEYS = { 1960*7249d1a6SKrzysztof Kosiński ('lorem ipsum', 'dolor sit amet'): 1961*7249d1a6SKrzysztof Kosiński 1, 1962*7249d1a6SKrzysztof Kosiński ('consectetur adipiscing elit.', 1963*7249d1a6SKrzysztof Kosiński 'Vestibulum mauris justo, ornare eget dolor eget'): 1964*7249d1a6SKrzysztof Kosiński 2, 1965*7249d1a6SKrzysztof Kosiński ('vehicula convallis nulla. Vestibulum dictum nisl in malesuada finibus.',): 1966*7249d1a6SKrzysztof Kosiński 3 1967*7249d1a6SKrzysztof Kosiński } 1968*7249d1a6SKrzysztof Kosiński """) # noqa 1969*7249d1a6SKrzysztof Kosiński 1970*7249d1a6SKrzysztof Kosiński try: 1971*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle( 1972*7249d1a6SKrzysztof Kosiński style.CreateStyleFromConfig('{based_on_style: yapf, ' 1973*7249d1a6SKrzysztof Kosiński 'allow_multiline_dictionary_keys: true}')) 1974*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 1975*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, 1976*7249d1a6SKrzysztof Kosiński reformatter.Reformat(llines)) 1977*7249d1a6SKrzysztof Kosiński finally: 1978*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle(style.CreateYapfStyle()) 1979*7249d1a6SKrzysztof Kosiński 1980*7249d1a6SKrzysztof Kosiński def testStableDictionaryFormatting(self): 1981*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 1982*7249d1a6SKrzysztof Kosiński class A(object): 1983*7249d1a6SKrzysztof Kosiński 1984*7249d1a6SKrzysztof Kosiński def method(self): 1985*7249d1a6SKrzysztof Kosiński filters = { 1986*7249d1a6SKrzysztof Kosiński 'expressions': [{ 1987*7249d1a6SKrzysztof Kosiński 'field': { 1988*7249d1a6SKrzysztof Kosiński 'search_field': { 1989*7249d1a6SKrzysztof Kosiński 'user_field': 'latest_party__number_of_guests' 1990*7249d1a6SKrzysztof Kosiński }, 1991*7249d1a6SKrzysztof Kosiński } 1992*7249d1a6SKrzysztof Kosiński }] 1993*7249d1a6SKrzysztof Kosiński } 1994*7249d1a6SKrzysztof Kosiński """) # noqa 1995*7249d1a6SKrzysztof Kosiński 1996*7249d1a6SKrzysztof Kosiński try: 1997*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle( 1998*7249d1a6SKrzysztof Kosiński style.CreateStyleFromConfig('{based_on_style: pep8, indent_width: 2, ' 1999*7249d1a6SKrzysztof Kosiński 'continuation_indent_width: 4, ' 2000*7249d1a6SKrzysztof Kosiński 'indent_dictionary_value: True}')) 2001*7249d1a6SKrzysztof Kosiński 2002*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 2003*7249d1a6SKrzysztof Kosiński reformatted_code = reformatter.Reformat(llines) 2004*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatted_code) 2005*7249d1a6SKrzysztof Kosiński 2006*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(reformatted_code) 2007*7249d1a6SKrzysztof Kosiński reformatted_code = reformatter.Reformat(llines) 2008*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatted_code) 2009*7249d1a6SKrzysztof Kosiński finally: 2010*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle(style.CreateYapfStyle()) 2011*7249d1a6SKrzysztof Kosiński 2012*7249d1a6SKrzysztof Kosiński def testStableInlinedDictionaryFormatting(self): 2013*7249d1a6SKrzysztof Kosiński try: 2014*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle(style.CreatePEP8Style()) 2015*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 2016*7249d1a6SKrzysztof Kosiński def _(): 2017*7249d1a6SKrzysztof Kosiński url = "http://{0}/axis-cgi/admin/param.cgi?{1}".format( 2018*7249d1a6SKrzysztof Kosiński value, urllib.urlencode({'action': 'update', 'parameter': value})) 2019*7249d1a6SKrzysztof Kosiński """) # noqa 2020*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 2021*7249d1a6SKrzysztof Kosiński def _(): 2022*7249d1a6SKrzysztof Kosiński url = "http://{0}/axis-cgi/admin/param.cgi?{1}".format( 2023*7249d1a6SKrzysztof Kosiński value, urllib.urlencode({ 2024*7249d1a6SKrzysztof Kosiński 'action': 'update', 2025*7249d1a6SKrzysztof Kosiński 'parameter': value 2026*7249d1a6SKrzysztof Kosiński })) 2027*7249d1a6SKrzysztof Kosiński """) 2028*7249d1a6SKrzysztof Kosiński 2029*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 2030*7249d1a6SKrzysztof Kosiński reformatted_code = reformatter.Reformat(llines) 2031*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatted_code) 2032*7249d1a6SKrzysztof Kosiński 2033*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(reformatted_code) 2034*7249d1a6SKrzysztof Kosiński reformatted_code = reformatter.Reformat(llines) 2035*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatted_code) 2036*7249d1a6SKrzysztof Kosiński finally: 2037*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle(style.CreateYapfStyle()) 2038*7249d1a6SKrzysztof Kosiński 2039*7249d1a6SKrzysztof Kosiński def testDontSplitKeywordValueArguments(self): 2040*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 2041*7249d1a6SKrzysztof Kosiński def mark_game_scored(gid): 2042*7249d1a6SKrzysztof Kosiński _connect.execute(_games.update().where(_games.c.gid == gid).values( 2043*7249d1a6SKrzysztof Kosiński scored=True)) 2044*7249d1a6SKrzysztof Kosiński """) 2045*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 2046*7249d1a6SKrzysztof Kosiński def mark_game_scored(gid): 2047*7249d1a6SKrzysztof Kosiński _connect.execute( 2048*7249d1a6SKrzysztof Kosiński _games.update().where(_games.c.gid == gid).values(scored=True)) 2049*7249d1a6SKrzysztof Kosiński """) 2050*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 2051*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 2052*7249d1a6SKrzysztof Kosiński 2053*7249d1a6SKrzysztof Kosiński def testDontAddBlankLineAfterMultilineString(self): 2054*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 2055*7249d1a6SKrzysztof Kosiński query = '''SELECT id 2056*7249d1a6SKrzysztof Kosiński FROM table 2057*7249d1a6SKrzysztof Kosiński WHERE day in {}''' 2058*7249d1a6SKrzysztof Kosiński days = ",".join(days) 2059*7249d1a6SKrzysztof Kosiński """) 2060*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 2061*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 2062*7249d1a6SKrzysztof Kosiński 2063*7249d1a6SKrzysztof Kosiński def testFormattingListComprehensions(self): 2064*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 2065*7249d1a6SKrzysztof Kosiński def a(): 2066*7249d1a6SKrzysztof Kosiński if True: 2067*7249d1a6SKrzysztof Kosiński if True: 2068*7249d1a6SKrzysztof Kosiński if True: 2069*7249d1a6SKrzysztof Kosiński columns = [ 2070*7249d1a6SKrzysztof Kosiński x for x, y in self._heap_this_is_very_long if x.route[0] == choice 2071*7249d1a6SKrzysztof Kosiński ] 2072*7249d1a6SKrzysztof Kosiński self._heap = [x for x in self._heap if x.route and x.route[0] == choice] 2073*7249d1a6SKrzysztof Kosiński """) # noqa 2074*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 2075*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 2076*7249d1a6SKrzysztof Kosiński 2077*7249d1a6SKrzysztof Kosiński def testNoSplittingWhenBinPacking(self): 2078*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 2079*7249d1a6SKrzysztof Kosiński a_very_long_function_name( 2080*7249d1a6SKrzysztof Kosiński long_argument_name_1=1, 2081*7249d1a6SKrzysztof Kosiński long_argument_name_2=2, 2082*7249d1a6SKrzysztof Kosiński long_argument_name_3=3, 2083*7249d1a6SKrzysztof Kosiński long_argument_name_4=4, 2084*7249d1a6SKrzysztof Kosiński ) 2085*7249d1a6SKrzysztof Kosiński 2086*7249d1a6SKrzysztof Kosiński a_very_long_function_name( 2087*7249d1a6SKrzysztof Kosiński long_argument_name_1=1, long_argument_name_2=2, long_argument_name_3=3, 2088*7249d1a6SKrzysztof Kosiński long_argument_name_4=4 2089*7249d1a6SKrzysztof Kosiński ) 2090*7249d1a6SKrzysztof Kosiński """) # noqa 2091*7249d1a6SKrzysztof Kosiński 2092*7249d1a6SKrzysztof Kosiński try: 2093*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle( 2094*7249d1a6SKrzysztof Kosiński style.CreateStyleFromConfig( 2095*7249d1a6SKrzysztof Kosiński '{based_on_style: pep8, indent_width: 2, ' 2096*7249d1a6SKrzysztof Kosiński 'continuation_indent_width: 4, indent_dictionary_value: True, ' 2097*7249d1a6SKrzysztof Kosiński 'dedent_closing_brackets: True, ' 2098*7249d1a6SKrzysztof Kosiński 'split_before_named_assigns: False}')) 2099*7249d1a6SKrzysztof Kosiński 2100*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 2101*7249d1a6SKrzysztof Kosiński reformatted_code = reformatter.Reformat(llines) 2102*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatted_code) 2103*7249d1a6SKrzysztof Kosiński 2104*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(reformatted_code) 2105*7249d1a6SKrzysztof Kosiński reformatted_code = reformatter.Reformat(llines) 2106*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatted_code) 2107*7249d1a6SKrzysztof Kosiński finally: 2108*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle(style.CreateYapfStyle()) 2109*7249d1a6SKrzysztof Kosiński 2110*7249d1a6SKrzysztof Kosiński def testNotSplittingAfterSubscript(self): 2111*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 2112*7249d1a6SKrzysztof Kosiński if not aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.b(c == d[ 2113*7249d1a6SKrzysztof Kosiński 'eeeeee']).ffffff(): 2114*7249d1a6SKrzysztof Kosiński pass 2115*7249d1a6SKrzysztof Kosiński """) 2116*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 2117*7249d1a6SKrzysztof Kosiński if not aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.b( 2118*7249d1a6SKrzysztof Kosiński c == d['eeeeee']).ffffff(): 2119*7249d1a6SKrzysztof Kosiński pass 2120*7249d1a6SKrzysztof Kosiński """) 2121*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 2122*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 2123*7249d1a6SKrzysztof Kosiński 2124*7249d1a6SKrzysztof Kosiński def testSplittingOneArgumentList(self): 2125*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 2126*7249d1a6SKrzysztof Kosiński def _(): 2127*7249d1a6SKrzysztof Kosiński if True: 2128*7249d1a6SKrzysztof Kosiński if True: 2129*7249d1a6SKrzysztof Kosiński if True: 2130*7249d1a6SKrzysztof Kosiński if True: 2131*7249d1a6SKrzysztof Kosiński if True: 2132*7249d1a6SKrzysztof Kosiński boxes[id_] = np.concatenate((points.min(axis=0), qoints.max(axis=0))) 2133*7249d1a6SKrzysztof Kosiński """) # noqa 2134*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 2135*7249d1a6SKrzysztof Kosiński def _(): 2136*7249d1a6SKrzysztof Kosiński if True: 2137*7249d1a6SKrzysztof Kosiński if True: 2138*7249d1a6SKrzysztof Kosiński if True: 2139*7249d1a6SKrzysztof Kosiński if True: 2140*7249d1a6SKrzysztof Kosiński if True: 2141*7249d1a6SKrzysztof Kosiński boxes[id_] = np.concatenate( 2142*7249d1a6SKrzysztof Kosiński (points.min(axis=0), qoints.max(axis=0))) 2143*7249d1a6SKrzysztof Kosiński """) 2144*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 2145*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 2146*7249d1a6SKrzysztof Kosiński 2147*7249d1a6SKrzysztof Kosiński def testSplittingBeforeFirstElementListArgument(self): 2148*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 2149*7249d1a6SKrzysztof Kosiński class _(): 2150*7249d1a6SKrzysztof Kosiński @classmethod 2151*7249d1a6SKrzysztof Kosiński def _pack_results_for_constraint_or(cls, combination, constraints): 2152*7249d1a6SKrzysztof Kosiński if True: 2153*7249d1a6SKrzysztof Kosiński if True: 2154*7249d1a6SKrzysztof Kosiński if True: 2155*7249d1a6SKrzysztof Kosiński return cls._create_investigation_result( 2156*7249d1a6SKrzysztof Kosiński ( 2157*7249d1a6SKrzysztof Kosiński clue for clue in combination if not clue == Verifier.UNMATCHED 2158*7249d1a6SKrzysztof Kosiński ), constraints, InvestigationResult.OR 2159*7249d1a6SKrzysztof Kosiński ) 2160*7249d1a6SKrzysztof Kosiński """) # noqa 2161*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 2162*7249d1a6SKrzysztof Kosiński class _(): 2163*7249d1a6SKrzysztof Kosiński 2164*7249d1a6SKrzysztof Kosiński @classmethod 2165*7249d1a6SKrzysztof Kosiński def _pack_results_for_constraint_or(cls, combination, constraints): 2166*7249d1a6SKrzysztof Kosiński if True: 2167*7249d1a6SKrzysztof Kosiński if True: 2168*7249d1a6SKrzysztof Kosiński if True: 2169*7249d1a6SKrzysztof Kosiński return cls._create_investigation_result( 2170*7249d1a6SKrzysztof Kosiński (clue for clue in combination if not clue == Verifier.UNMATCHED), 2171*7249d1a6SKrzysztof Kosiński constraints, InvestigationResult.OR) 2172*7249d1a6SKrzysztof Kosiński """) # noqa 2173*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 2174*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 2175*7249d1a6SKrzysztof Kosiński 2176*7249d1a6SKrzysztof Kosiński def testSplittingArgumentsTerminatedByComma(self): 2177*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 2178*7249d1a6SKrzysztof Kosiński function_name(argument_name_1=1, argument_name_2=2, argument_name_3=3) 2179*7249d1a6SKrzysztof Kosiński 2180*7249d1a6SKrzysztof Kosiński function_name(argument_name_1=1, argument_name_2=2, argument_name_3=3,) 2181*7249d1a6SKrzysztof Kosiński 2182*7249d1a6SKrzysztof Kosiński a_very_long_function_name(long_argument_name_1=1, long_argument_name_2=2, long_argument_name_3=3, long_argument_name_4=4) 2183*7249d1a6SKrzysztof Kosiński 2184*7249d1a6SKrzysztof Kosiński a_very_long_function_name(long_argument_name_1, long_argument_name_2, long_argument_name_3, long_argument_name_4,) 2185*7249d1a6SKrzysztof Kosiński 2186*7249d1a6SKrzysztof Kosiński r =f0 (1, 2,3,) 2187*7249d1a6SKrzysztof Kosiński """) # noqa 2188*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 2189*7249d1a6SKrzysztof Kosiński function_name(argument_name_1=1, argument_name_2=2, argument_name_3=3) 2190*7249d1a6SKrzysztof Kosiński 2191*7249d1a6SKrzysztof Kosiński function_name( 2192*7249d1a6SKrzysztof Kosiński argument_name_1=1, 2193*7249d1a6SKrzysztof Kosiński argument_name_2=2, 2194*7249d1a6SKrzysztof Kosiński argument_name_3=3, 2195*7249d1a6SKrzysztof Kosiński ) 2196*7249d1a6SKrzysztof Kosiński 2197*7249d1a6SKrzysztof Kosiński a_very_long_function_name( 2198*7249d1a6SKrzysztof Kosiński long_argument_name_1=1, 2199*7249d1a6SKrzysztof Kosiński long_argument_name_2=2, 2200*7249d1a6SKrzysztof Kosiński long_argument_name_3=3, 2201*7249d1a6SKrzysztof Kosiński long_argument_name_4=4) 2202*7249d1a6SKrzysztof Kosiński 2203*7249d1a6SKrzysztof Kosiński a_very_long_function_name( 2204*7249d1a6SKrzysztof Kosiński long_argument_name_1, 2205*7249d1a6SKrzysztof Kosiński long_argument_name_2, 2206*7249d1a6SKrzysztof Kosiński long_argument_name_3, 2207*7249d1a6SKrzysztof Kosiński long_argument_name_4, 2208*7249d1a6SKrzysztof Kosiński ) 2209*7249d1a6SKrzysztof Kosiński 2210*7249d1a6SKrzysztof Kosiński r = f0( 2211*7249d1a6SKrzysztof Kosiński 1, 2212*7249d1a6SKrzysztof Kosiński 2, 2213*7249d1a6SKrzysztof Kosiński 3, 2214*7249d1a6SKrzysztof Kosiński ) 2215*7249d1a6SKrzysztof Kosiński """) 2216*7249d1a6SKrzysztof Kosiński 2217*7249d1a6SKrzysztof Kosiński try: 2218*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle( 2219*7249d1a6SKrzysztof Kosiński style.CreateStyleFromConfig( 2220*7249d1a6SKrzysztof Kosiński '{based_on_style: yapf, ' 2221*7249d1a6SKrzysztof Kosiński 'split_arguments_when_comma_terminated: True}')) 2222*7249d1a6SKrzysztof Kosiński 2223*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 2224*7249d1a6SKrzysztof Kosiński reformatted_code = reformatter.Reformat(llines) 2225*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatted_code) 2226*7249d1a6SKrzysztof Kosiński 2227*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(reformatted_code) 2228*7249d1a6SKrzysztof Kosiński reformatted_code = reformatter.Reformat(llines) 2229*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatted_code) 2230*7249d1a6SKrzysztof Kosiński finally: 2231*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle(style.CreateYapfStyle()) 2232*7249d1a6SKrzysztof Kosiński 2233*7249d1a6SKrzysztof Kosiński def testImportAsList(self): 2234*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 2235*7249d1a6SKrzysztof Kosiński from toto import titi, tata, tutu # noqa 2236*7249d1a6SKrzysztof Kosiński from toto import titi, tata, tutu 2237*7249d1a6SKrzysztof Kosiński from toto import (titi, tata, tutu) 2238*7249d1a6SKrzysztof Kosiński """) 2239*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 2240*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 2241*7249d1a6SKrzysztof Kosiński 2242*7249d1a6SKrzysztof Kosiński def testDictionaryValuesOnOwnLines(self): 2243*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 2244*7249d1a6SKrzysztof Kosiński a = { 2245*7249d1a6SKrzysztof Kosiński 'aaaaaaaaaaaaaaaaaaaaaaaa': 2246*7249d1a6SKrzysztof Kosiński Check('ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ', '=', True), 2247*7249d1a6SKrzysztof Kosiński 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb': 2248*7249d1a6SKrzysztof Kosiński Check('YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY', '=', True), 2249*7249d1a6SKrzysztof Kosiński 'ccccccccccccccc': 2250*7249d1a6SKrzysztof Kosiński Check('XXXXXXXXXXXXXXXXXXX', '!=', 'SUSPENDED'), 2251*7249d1a6SKrzysztof Kosiński 'dddddddddddddddddddddddddddddd': 2252*7249d1a6SKrzysztof Kosiński Check('WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW', '=', False), 2253*7249d1a6SKrzysztof Kosiński 'eeeeeeeeeeeeeeeeeeeeeeeeeeeee': 2254*7249d1a6SKrzysztof Kosiński Check('VVVVVVVVVVVVVVVVVVVVVVVVVVVVVV', '=', False), 2255*7249d1a6SKrzysztof Kosiński 'ffffffffffffffffffffffffff': 2256*7249d1a6SKrzysztof Kosiński Check('UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU', '=', True), 2257*7249d1a6SKrzysztof Kosiński 'ggggggggggggggggg': 2258*7249d1a6SKrzysztof Kosiński Check('TTTTTTTTTTTTTTTTTTTTTTTTTTTTTT', '=', True), 2259*7249d1a6SKrzysztof Kosiński 'hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh': 2260*7249d1a6SKrzysztof Kosiński Check('SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS', '=', True), 2261*7249d1a6SKrzysztof Kosiński 'iiiiiiiiiiiiiiiiiiiiiiii': 2262*7249d1a6SKrzysztof Kosiński Check('RRRRRRRRRRRRRRRRRRRRRRRRRRR', '=', True), 2263*7249d1a6SKrzysztof Kosiński 'jjjjjjjjjjjjjjjjjjjjjjjjjj': 2264*7249d1a6SKrzysztof Kosiński Check('QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ', '=', False), 2265*7249d1a6SKrzysztof Kosiński } 2266*7249d1a6SKrzysztof Kosiński """) 2267*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 2268*7249d1a6SKrzysztof Kosiński a = { 2269*7249d1a6SKrzysztof Kosiński 'aaaaaaaaaaaaaaaaaaaaaaaa': 2270*7249d1a6SKrzysztof Kosiński Check('ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ', '=', True), 2271*7249d1a6SKrzysztof Kosiński 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb': 2272*7249d1a6SKrzysztof Kosiński Check('YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY', '=', True), 2273*7249d1a6SKrzysztof Kosiński 'ccccccccccccccc': 2274*7249d1a6SKrzysztof Kosiński Check('XXXXXXXXXXXXXXXXXXX', '!=', 'SUSPENDED'), 2275*7249d1a6SKrzysztof Kosiński 'dddddddddddddddddddddddddddddd': 2276*7249d1a6SKrzysztof Kosiński Check('WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW', '=', False), 2277*7249d1a6SKrzysztof Kosiński 'eeeeeeeeeeeeeeeeeeeeeeeeeeeee': 2278*7249d1a6SKrzysztof Kosiński Check('VVVVVVVVVVVVVVVVVVVVVVVVVVVVVV', '=', False), 2279*7249d1a6SKrzysztof Kosiński 'ffffffffffffffffffffffffff': 2280*7249d1a6SKrzysztof Kosiński Check('UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU', '=', True), 2281*7249d1a6SKrzysztof Kosiński 'ggggggggggggggggg': 2282*7249d1a6SKrzysztof Kosiński Check('TTTTTTTTTTTTTTTTTTTTTTTTTTTTTT', '=', True), 2283*7249d1a6SKrzysztof Kosiński 'hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh': 2284*7249d1a6SKrzysztof Kosiński Check('SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS', '=', True), 2285*7249d1a6SKrzysztof Kosiński 'iiiiiiiiiiiiiiiiiiiiiiii': 2286*7249d1a6SKrzysztof Kosiński Check('RRRRRRRRRRRRRRRRRRRRRRRRRRR', '=', True), 2287*7249d1a6SKrzysztof Kosiński 'jjjjjjjjjjjjjjjjjjjjjjjjjj': 2288*7249d1a6SKrzysztof Kosiński Check('QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ', '=', False), 2289*7249d1a6SKrzysztof Kosiński } 2290*7249d1a6SKrzysztof Kosiński """) # noqa 2291*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 2292*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 2293*7249d1a6SKrzysztof Kosiński 2294*7249d1a6SKrzysztof Kosiński def testDictionaryOnOwnLine(self): 2295*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 2296*7249d1a6SKrzysztof Kosiński doc = test_utils.CreateTestDocumentViaController( 2297*7249d1a6SKrzysztof Kosiński content={ 'a': 'b' }, 2298*7249d1a6SKrzysztof Kosiński branch_key=branch.key, 2299*7249d1a6SKrzysztof Kosiński collection_key=collection.key) 2300*7249d1a6SKrzysztof Kosiński """) 2301*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 2302*7249d1a6SKrzysztof Kosiński doc = test_utils.CreateTestDocumentViaController( 2303*7249d1a6SKrzysztof Kosiński content={'a': 'b'}, branch_key=branch.key, collection_key=collection.key) 2304*7249d1a6SKrzysztof Kosiński """) # noqa 2305*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 2306*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 2307*7249d1a6SKrzysztof Kosiński 2308*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 2309*7249d1a6SKrzysztof Kosiński doc = test_utils.CreateTestDocumentViaController( 2310*7249d1a6SKrzysztof Kosiński content={ 'a': 'b' }, 2311*7249d1a6SKrzysztof Kosiński branch_key=branch.key, 2312*7249d1a6SKrzysztof Kosiński collection_key=collection.key, 2313*7249d1a6SKrzysztof Kosiński collection_key2=collection.key2) 2314*7249d1a6SKrzysztof Kosiński """) 2315*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 2316*7249d1a6SKrzysztof Kosiński doc = test_utils.CreateTestDocumentViaController( 2317*7249d1a6SKrzysztof Kosiński content={'a': 'b'}, 2318*7249d1a6SKrzysztof Kosiński branch_key=branch.key, 2319*7249d1a6SKrzysztof Kosiński collection_key=collection.key, 2320*7249d1a6SKrzysztof Kosiński collection_key2=collection.key2) 2321*7249d1a6SKrzysztof Kosiński """) 2322*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 2323*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 2324*7249d1a6SKrzysztof Kosiński 2325*7249d1a6SKrzysztof Kosiński def testNestedListsInDictionary(self): 2326*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 2327*7249d1a6SKrzysztof Kosiński _A = { 2328*7249d1a6SKrzysztof Kosiński 'cccccccccc': ('^^1',), 2329*7249d1a6SKrzysztof Kosiński 'rrrrrrrrrrrrrrrrrrrrrrrrr': ('^7913', # AAAAAAAAAAAAAA. 2330*7249d1a6SKrzysztof Kosiński ), 2331*7249d1a6SKrzysztof Kosiński 'eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee': ('^6242', # BBBBBBBBBBBBBBB. 2332*7249d1a6SKrzysztof Kosiński ), 2333*7249d1a6SKrzysztof Kosiński 'vvvvvvvvvvvvvvvvvvv': ('^27959', # CCCCCCCCCCCCCCCCCC. 2334*7249d1a6SKrzysztof Kosiński '^19746', # DDDDDDDDDDDDDDDDDDDDDDD. 2335*7249d1a6SKrzysztof Kosiński '^22907', # EEEEEEEEEEEEEEEEEEEEEEEE. 2336*7249d1a6SKrzysztof Kosiński '^21098', # FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF. 2337*7249d1a6SKrzysztof Kosiński '^22826', # GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG. 2338*7249d1a6SKrzysztof Kosiński '^22769', # HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH. 2339*7249d1a6SKrzysztof Kosiński '^22935', # IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII. 2340*7249d1a6SKrzysztof Kosiński '^3982', # JJJJJJJJJJJJJ. 2341*7249d1a6SKrzysztof Kosiński ), 2342*7249d1a6SKrzysztof Kosiński 'uuuuuuuuuuuu': ('^19745', # LLLLLLLLLLLLLLLLLLLLLLLLLL. 2343*7249d1a6SKrzysztof Kosiński '^21324', # MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM. 2344*7249d1a6SKrzysztof Kosiński '^22831', # NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN. 2345*7249d1a6SKrzysztof Kosiński '^17081', # OOOOOOOOOOOOOOOOOOOOO. 2346*7249d1a6SKrzysztof Kosiński ), 2347*7249d1a6SKrzysztof Kosiński 'eeeeeeeeeeeeee': ( 2348*7249d1a6SKrzysztof Kosiński '^9416', # Reporter email. Not necessarily the reporter. 2349*7249d1a6SKrzysztof Kosiński '^^3', # This appears to be the raw email field. 2350*7249d1a6SKrzysztof Kosiński ), 2351*7249d1a6SKrzysztof Kosiński 'cccccccccc': ('^21109', # PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP. 2352*7249d1a6SKrzysztof Kosiński ), 2353*7249d1a6SKrzysztof Kosiński } 2354*7249d1a6SKrzysztof Kosiński """) # noqa 2355*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 2356*7249d1a6SKrzysztof Kosiński _A = { 2357*7249d1a6SKrzysztof Kosiński 'cccccccccc': ('^^1',), 2358*7249d1a6SKrzysztof Kosiński 'rrrrrrrrrrrrrrrrrrrrrrrrr': ( 2359*7249d1a6SKrzysztof Kosiński '^7913', # AAAAAAAAAAAAAA. 2360*7249d1a6SKrzysztof Kosiński ), 2361*7249d1a6SKrzysztof Kosiński 'eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee': ( 2362*7249d1a6SKrzysztof Kosiński '^6242', # BBBBBBBBBBBBBBB. 2363*7249d1a6SKrzysztof Kosiński ), 2364*7249d1a6SKrzysztof Kosiński 'vvvvvvvvvvvvvvvvvvv': ( 2365*7249d1a6SKrzysztof Kosiński '^27959', # CCCCCCCCCCCCCCCCCC. 2366*7249d1a6SKrzysztof Kosiński '^19746', # DDDDDDDDDDDDDDDDDDDDDDD. 2367*7249d1a6SKrzysztof Kosiński '^22907', # EEEEEEEEEEEEEEEEEEEEEEEE. 2368*7249d1a6SKrzysztof Kosiński '^21098', # FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF. 2369*7249d1a6SKrzysztof Kosiński '^22826', # GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG. 2370*7249d1a6SKrzysztof Kosiński '^22769', # HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH. 2371*7249d1a6SKrzysztof Kosiński '^22935', # IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII. 2372*7249d1a6SKrzysztof Kosiński '^3982', # JJJJJJJJJJJJJ. 2373*7249d1a6SKrzysztof Kosiński ), 2374*7249d1a6SKrzysztof Kosiński 'uuuuuuuuuuuu': ( 2375*7249d1a6SKrzysztof Kosiński '^19745', # LLLLLLLLLLLLLLLLLLLLLLLLLL. 2376*7249d1a6SKrzysztof Kosiński '^21324', # MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM. 2377*7249d1a6SKrzysztof Kosiński '^22831', # NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN. 2378*7249d1a6SKrzysztof Kosiński '^17081', # OOOOOOOOOOOOOOOOOOOOO. 2379*7249d1a6SKrzysztof Kosiński ), 2380*7249d1a6SKrzysztof Kosiński 'eeeeeeeeeeeeee': ( 2381*7249d1a6SKrzysztof Kosiński '^9416', # Reporter email. Not necessarily the reporter. 2382*7249d1a6SKrzysztof Kosiński '^^3', # This appears to be the raw email field. 2383*7249d1a6SKrzysztof Kosiński ), 2384*7249d1a6SKrzysztof Kosiński 'cccccccccc': ( 2385*7249d1a6SKrzysztof Kosiński '^21109', # PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP. 2386*7249d1a6SKrzysztof Kosiński ), 2387*7249d1a6SKrzysztof Kosiński } 2388*7249d1a6SKrzysztof Kosiński """) 2389*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 2390*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 2391*7249d1a6SKrzysztof Kosiński 2392*7249d1a6SKrzysztof Kosiński def testNestedDictionary(self): 2393*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 2394*7249d1a6SKrzysztof Kosiński class _(): 2395*7249d1a6SKrzysztof Kosiński def _(): 2396*7249d1a6SKrzysztof Kosiński breadcrumbs = [{'name': 'Admin', 2397*7249d1a6SKrzysztof Kosiński 'url': url_for(".home")}, 2398*7249d1a6SKrzysztof Kosiński {'title': title},] 2399*7249d1a6SKrzysztof Kosiński breadcrumbs = [{'name': 'Admin', 2400*7249d1a6SKrzysztof Kosiński 'url': url_for(".home")}, 2401*7249d1a6SKrzysztof Kosiński {'title': title}] 2402*7249d1a6SKrzysztof Kosiński """) 2403*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 2404*7249d1a6SKrzysztof Kosiński class _(): 2405*7249d1a6SKrzysztof Kosiński def _(): 2406*7249d1a6SKrzysztof Kosiński breadcrumbs = [ 2407*7249d1a6SKrzysztof Kosiński { 2408*7249d1a6SKrzysztof Kosiński 'name': 'Admin', 2409*7249d1a6SKrzysztof Kosiński 'url': url_for(".home") 2410*7249d1a6SKrzysztof Kosiński }, 2411*7249d1a6SKrzysztof Kosiński { 2412*7249d1a6SKrzysztof Kosiński 'title': title 2413*7249d1a6SKrzysztof Kosiński }, 2414*7249d1a6SKrzysztof Kosiński ] 2415*7249d1a6SKrzysztof Kosiński breadcrumbs = [{'name': 'Admin', 'url': url_for(".home")}, {'title': title}] 2416*7249d1a6SKrzysztof Kosiński """) # noqa 2417*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 2418*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 2419*7249d1a6SKrzysztof Kosiński 2420*7249d1a6SKrzysztof Kosiński def testDictionaryElementsOnOneLine(self): 2421*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 2422*7249d1a6SKrzysztof Kosiński class _(): 2423*7249d1a6SKrzysztof Kosiński 2424*7249d1a6SKrzysztof Kosiński @mock.patch.dict( 2425*7249d1a6SKrzysztof Kosiński os.environ, 2426*7249d1a6SKrzysztof Kosiński {'HTTP_' + xsrf._XSRF_TOKEN_HEADER.replace('-', '_'): 'atoken'}) 2427*7249d1a6SKrzysztof Kosiński def _(): 2428*7249d1a6SKrzysztof Kosiński pass 2429*7249d1a6SKrzysztof Kosiński 2430*7249d1a6SKrzysztof Kosiński 2431*7249d1a6SKrzysztof Kosiński AAAAAAAAAAAAAAAAAAAAAAAA = { 2432*7249d1a6SKrzysztof Kosiński Environment.XXXXXXXXXX: 'some text more text even more tex', 2433*7249d1a6SKrzysztof Kosiński Environment.YYYYYYY: 'some text more text even more text yet ag', 2434*7249d1a6SKrzysztof Kosiński Environment.ZZZZZZZZZZZ: 'some text more text even more text yet again tex', 2435*7249d1a6SKrzysztof Kosiński } 2436*7249d1a6SKrzysztof Kosiński """) # noqa 2437*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 2438*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 2439*7249d1a6SKrzysztof Kosiński 2440*7249d1a6SKrzysztof Kosiński def testNotInParams(self): 2441*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 2442*7249d1a6SKrzysztof Kosiński list("a long line to break the line. a long line to break the brk a long lin", not True) 2443*7249d1a6SKrzysztof Kosiński """) # noqa 2444*7249d1a6SKrzysztof Kosiński expected_code = textwrap.dedent("""\ 2445*7249d1a6SKrzysztof Kosiński list("a long line to break the line. a long line to break the brk a long lin", 2446*7249d1a6SKrzysztof Kosiński not True) 2447*7249d1a6SKrzysztof Kosiński """) # noqa 2448*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 2449*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_code, reformatter.Reformat(llines)) 2450*7249d1a6SKrzysztof Kosiński 2451*7249d1a6SKrzysztof Kosiński def testNamedAssignNotAtEndOfLine(self): 2452*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 2453*7249d1a6SKrzysztof Kosiński def _(): 2454*7249d1a6SKrzysztof Kosiński if True: 2455*7249d1a6SKrzysztof Kosiński with py3compat.open_with_encoding(filename, mode='w', 2456*7249d1a6SKrzysztof Kosiński encoding=encoding) as fd: 2457*7249d1a6SKrzysztof Kosiński pass 2458*7249d1a6SKrzysztof Kosiński """) 2459*7249d1a6SKrzysztof Kosiński expected_code = textwrap.dedent("""\ 2460*7249d1a6SKrzysztof Kosiński def _(): 2461*7249d1a6SKrzysztof Kosiński if True: 2462*7249d1a6SKrzysztof Kosiński with py3compat.open_with_encoding( 2463*7249d1a6SKrzysztof Kosiński filename, mode='w', encoding=encoding) as fd: 2464*7249d1a6SKrzysztof Kosiński pass 2465*7249d1a6SKrzysztof Kosiński """) 2466*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 2467*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_code, reformatter.Reformat(llines)) 2468*7249d1a6SKrzysztof Kosiński 2469*7249d1a6SKrzysztof Kosiński def testBlankLineBeforeClassDocstring(self): 2470*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent('''\ 2471*7249d1a6SKrzysztof Kosiński class A: 2472*7249d1a6SKrzysztof Kosiński 2473*7249d1a6SKrzysztof Kosiński """Does something. 2474*7249d1a6SKrzysztof Kosiński 2475*7249d1a6SKrzysztof Kosiński Also, here are some details. 2476*7249d1a6SKrzysztof Kosiński """ 2477*7249d1a6SKrzysztof Kosiński 2478*7249d1a6SKrzysztof Kosiński def __init__(self): 2479*7249d1a6SKrzysztof Kosiński pass 2480*7249d1a6SKrzysztof Kosiński ''') 2481*7249d1a6SKrzysztof Kosiński expected_code = textwrap.dedent('''\ 2482*7249d1a6SKrzysztof Kosiński class A: 2483*7249d1a6SKrzysztof Kosiński """Does something. 2484*7249d1a6SKrzysztof Kosiński 2485*7249d1a6SKrzysztof Kosiński Also, here are some details. 2486*7249d1a6SKrzysztof Kosiński """ 2487*7249d1a6SKrzysztof Kosiński 2488*7249d1a6SKrzysztof Kosiński def __init__(self): 2489*7249d1a6SKrzysztof Kosiński pass 2490*7249d1a6SKrzysztof Kosiński ''') 2491*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 2492*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_code, reformatter.Reformat(llines)) 2493*7249d1a6SKrzysztof Kosiński 2494*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent('''\ 2495*7249d1a6SKrzysztof Kosiński class A: 2496*7249d1a6SKrzysztof Kosiński 2497*7249d1a6SKrzysztof Kosiński """Does something. 2498*7249d1a6SKrzysztof Kosiński 2499*7249d1a6SKrzysztof Kosiński Also, here are some details. 2500*7249d1a6SKrzysztof Kosiński """ 2501*7249d1a6SKrzysztof Kosiński 2502*7249d1a6SKrzysztof Kosiński def __init__(self): 2503*7249d1a6SKrzysztof Kosiński pass 2504*7249d1a6SKrzysztof Kosiński ''') 2505*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent('''\ 2506*7249d1a6SKrzysztof Kosiński class A: 2507*7249d1a6SKrzysztof Kosiński 2508*7249d1a6SKrzysztof Kosiński """Does something. 2509*7249d1a6SKrzysztof Kosiński 2510*7249d1a6SKrzysztof Kosiński Also, here are some details. 2511*7249d1a6SKrzysztof Kosiński """ 2512*7249d1a6SKrzysztof Kosiński 2513*7249d1a6SKrzysztof Kosiński def __init__(self): 2514*7249d1a6SKrzysztof Kosiński pass 2515*7249d1a6SKrzysztof Kosiński ''') 2516*7249d1a6SKrzysztof Kosiński 2517*7249d1a6SKrzysztof Kosiński try: 2518*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle( 2519*7249d1a6SKrzysztof Kosiński style.CreateStyleFromConfig( 2520*7249d1a6SKrzysztof Kosiński '{based_on_style: yapf, ' 2521*7249d1a6SKrzysztof Kosiński 'blank_line_before_class_docstring: True}')) 2522*7249d1a6SKrzysztof Kosiński 2523*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 2524*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, 2525*7249d1a6SKrzysztof Kosiński reformatter.Reformat(llines)) 2526*7249d1a6SKrzysztof Kosiński finally: 2527*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle(style.CreateYapfStyle()) 2528*7249d1a6SKrzysztof Kosiński 2529*7249d1a6SKrzysztof Kosiński def testBlankLineBeforeModuleDocstring(self): 2530*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent('''\ 2531*7249d1a6SKrzysztof Kosiński #!/usr/bin/env python 2532*7249d1a6SKrzysztof Kosiński # -*- coding: utf-8 name> -*- 2533*7249d1a6SKrzysztof Kosiński 2534*7249d1a6SKrzysztof Kosiński """Some module docstring.""" 2535*7249d1a6SKrzysztof Kosiński 2536*7249d1a6SKrzysztof Kosiński 2537*7249d1a6SKrzysztof Kosiński def foobar(): 2538*7249d1a6SKrzysztof Kosiński pass 2539*7249d1a6SKrzysztof Kosiński ''') 2540*7249d1a6SKrzysztof Kosiński expected_code = textwrap.dedent('''\ 2541*7249d1a6SKrzysztof Kosiński #!/usr/bin/env python 2542*7249d1a6SKrzysztof Kosiński # -*- coding: utf-8 name> -*- 2543*7249d1a6SKrzysztof Kosiński """Some module docstring.""" 2544*7249d1a6SKrzysztof Kosiński 2545*7249d1a6SKrzysztof Kosiński 2546*7249d1a6SKrzysztof Kosiński def foobar(): 2547*7249d1a6SKrzysztof Kosiński pass 2548*7249d1a6SKrzysztof Kosiński ''') 2549*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 2550*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_code, reformatter.Reformat(llines)) 2551*7249d1a6SKrzysztof Kosiński 2552*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent('''\ 2553*7249d1a6SKrzysztof Kosiński #!/usr/bin/env python 2554*7249d1a6SKrzysztof Kosiński # -*- coding: utf-8 name> -*- 2555*7249d1a6SKrzysztof Kosiński """Some module docstring.""" 2556*7249d1a6SKrzysztof Kosiński 2557*7249d1a6SKrzysztof Kosiński 2558*7249d1a6SKrzysztof Kosiński def foobar(): 2559*7249d1a6SKrzysztof Kosiński pass 2560*7249d1a6SKrzysztof Kosiński ''') 2561*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent('''\ 2562*7249d1a6SKrzysztof Kosiński #!/usr/bin/env python 2563*7249d1a6SKrzysztof Kosiński # -*- coding: utf-8 name> -*- 2564*7249d1a6SKrzysztof Kosiński 2565*7249d1a6SKrzysztof Kosiński """Some module docstring.""" 2566*7249d1a6SKrzysztof Kosiński 2567*7249d1a6SKrzysztof Kosiński 2568*7249d1a6SKrzysztof Kosiński def foobar(): 2569*7249d1a6SKrzysztof Kosiński pass 2570*7249d1a6SKrzysztof Kosiński ''') 2571*7249d1a6SKrzysztof Kosiński 2572*7249d1a6SKrzysztof Kosiński try: 2573*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle( 2574*7249d1a6SKrzysztof Kosiński style.CreateStyleFromConfig( 2575*7249d1a6SKrzysztof Kosiński '{based_on_style: pep8, ' 2576*7249d1a6SKrzysztof Kosiński 'blank_line_before_module_docstring: True}')) 2577*7249d1a6SKrzysztof Kosiński 2578*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 2579*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, 2580*7249d1a6SKrzysztof Kosiński reformatter.Reformat(llines)) 2581*7249d1a6SKrzysztof Kosiński finally: 2582*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle(style.CreateYapfStyle()) 2583*7249d1a6SKrzysztof Kosiński 2584*7249d1a6SKrzysztof Kosiński def testTupleCohesion(self): 2585*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 2586*7249d1a6SKrzysztof Kosiński def f(): 2587*7249d1a6SKrzysztof Kosiński this_is_a_very_long_function_name(an_extremely_long_variable_name, ( 2588*7249d1a6SKrzysztof Kosiński 'a string that may be too long %s' % 'M15')) 2589*7249d1a6SKrzysztof Kosiński """) 2590*7249d1a6SKrzysztof Kosiński expected_code = textwrap.dedent("""\ 2591*7249d1a6SKrzysztof Kosiński def f(): 2592*7249d1a6SKrzysztof Kosiński this_is_a_very_long_function_name( 2593*7249d1a6SKrzysztof Kosiński an_extremely_long_variable_name, 2594*7249d1a6SKrzysztof Kosiński ('a string that may be too long %s' % 'M15')) 2595*7249d1a6SKrzysztof Kosiński """) 2596*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 2597*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_code, reformatter.Reformat(llines)) 2598*7249d1a6SKrzysztof Kosiński 2599*7249d1a6SKrzysztof Kosiński def testSubscriptExpression(self): 2600*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 2601*7249d1a6SKrzysztof Kosiński foo = d[not a] 2602*7249d1a6SKrzysztof Kosiński """) 2603*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 2604*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 2605*7249d1a6SKrzysztof Kosiński 2606*7249d1a6SKrzysztof Kosiński def testListWithFunctionCalls(self): 2607*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 2608*7249d1a6SKrzysztof Kosiński def foo(): 2609*7249d1a6SKrzysztof Kosiński return [ 2610*7249d1a6SKrzysztof Kosiński Bar( 2611*7249d1a6SKrzysztof Kosiński xxx='some string', 2612*7249d1a6SKrzysztof Kosiński yyy='another long string', 2613*7249d1a6SKrzysztof Kosiński zzz='a third long string'), Bar( 2614*7249d1a6SKrzysztof Kosiński xxx='some string', 2615*7249d1a6SKrzysztof Kosiński yyy='another long string', 2616*7249d1a6SKrzysztof Kosiński zzz='a third long string') 2617*7249d1a6SKrzysztof Kosiński ] 2618*7249d1a6SKrzysztof Kosiński """) 2619*7249d1a6SKrzysztof Kosiński expected_code = textwrap.dedent("""\ 2620*7249d1a6SKrzysztof Kosiński def foo(): 2621*7249d1a6SKrzysztof Kosiński return [ 2622*7249d1a6SKrzysztof Kosiński Bar(xxx='some string', 2623*7249d1a6SKrzysztof Kosiński yyy='another long string', 2624*7249d1a6SKrzysztof Kosiński zzz='a third long string'), 2625*7249d1a6SKrzysztof Kosiński Bar(xxx='some string', 2626*7249d1a6SKrzysztof Kosiński yyy='another long string', 2627*7249d1a6SKrzysztof Kosiński zzz='a third long string') 2628*7249d1a6SKrzysztof Kosiński ] 2629*7249d1a6SKrzysztof Kosiński """) 2630*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 2631*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_code, reformatter.Reformat(llines)) 2632*7249d1a6SKrzysztof Kosiński 2633*7249d1a6SKrzysztof Kosiński def testEllipses(self): 2634*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 2635*7249d1a6SKrzysztof Kosiński X=... 2636*7249d1a6SKrzysztof Kosiński Y = X if ... else X 2637*7249d1a6SKrzysztof Kosiński """) 2638*7249d1a6SKrzysztof Kosiński expected_code = textwrap.dedent("""\ 2639*7249d1a6SKrzysztof Kosiński X = ... 2640*7249d1a6SKrzysztof Kosiński Y = X if ... else X 2641*7249d1a6SKrzysztof Kosiński """) 2642*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 2643*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_code, reformatter.Reformat(llines)) 2644*7249d1a6SKrzysztof Kosiński 2645*7249d1a6SKrzysztof Kosiński def testPseudoParens(self): 2646*7249d1a6SKrzysztof Kosiński unformatted_code = """\ 2647*7249d1a6SKrzysztof Kosińskimy_dict = { 2648*7249d1a6SKrzysztof Kosiński 'key': # Some comment about the key 2649*7249d1a6SKrzysztof Kosiński {'nested_key': 1, }, 2650*7249d1a6SKrzysztof Kosiński} 2651*7249d1a6SKrzysztof Kosiński""" 2652*7249d1a6SKrzysztof Kosiński expected_code = """\ 2653*7249d1a6SKrzysztof Kosińskimy_dict = { 2654*7249d1a6SKrzysztof Kosiński 'key': # Some comment about the key 2655*7249d1a6SKrzysztof Kosiński { 2656*7249d1a6SKrzysztof Kosiński 'nested_key': 1, 2657*7249d1a6SKrzysztof Kosiński }, 2658*7249d1a6SKrzysztof Kosiński} 2659*7249d1a6SKrzysztof Kosiński""" 2660*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 2661*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_code, reformatter.Reformat(llines)) 2662*7249d1a6SKrzysztof Kosiński 2663*7249d1a6SKrzysztof Kosiński def testSplittingBeforeFirstArgumentOnFunctionCall(self): 2664*7249d1a6SKrzysztof Kosiński """Tests split_before_first_argument on a function call.""" 2665*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 2666*7249d1a6SKrzysztof Kosiński a_very_long_function_name("long string with formatting {0:s}".format( 2667*7249d1a6SKrzysztof Kosiński "mystring")) 2668*7249d1a6SKrzysztof Kosiński """) 2669*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 2670*7249d1a6SKrzysztof Kosiński a_very_long_function_name( 2671*7249d1a6SKrzysztof Kosiński "long string with formatting {0:s}".format("mystring")) 2672*7249d1a6SKrzysztof Kosiński """) 2673*7249d1a6SKrzysztof Kosiński 2674*7249d1a6SKrzysztof Kosiński try: 2675*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle( 2676*7249d1a6SKrzysztof Kosiński style.CreateStyleFromConfig( 2677*7249d1a6SKrzysztof Kosiński '{based_on_style: yapf, split_before_first_argument: True}')) 2678*7249d1a6SKrzysztof Kosiński 2679*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 2680*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, 2681*7249d1a6SKrzysztof Kosiński reformatter.Reformat(llines)) 2682*7249d1a6SKrzysztof Kosiński finally: 2683*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle(style.CreateYapfStyle()) 2684*7249d1a6SKrzysztof Kosiński 2685*7249d1a6SKrzysztof Kosiński def testSplittingBeforeFirstArgumentOnFunctionDefinition(self): 2686*7249d1a6SKrzysztof Kosiński """Tests split_before_first_argument on a function definition.""" 2687*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 2688*7249d1a6SKrzysztof Kosiński def _GetNumberOfSecondsFromElements(year, month, day, hours, 2689*7249d1a6SKrzysztof Kosiński minutes, seconds, microseconds): 2690*7249d1a6SKrzysztof Kosiński return 2691*7249d1a6SKrzysztof Kosiński """) 2692*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 2693*7249d1a6SKrzysztof Kosiński def _GetNumberOfSecondsFromElements( 2694*7249d1a6SKrzysztof Kosiński year, month, day, hours, minutes, seconds, microseconds): 2695*7249d1a6SKrzysztof Kosiński return 2696*7249d1a6SKrzysztof Kosiński """) 2697*7249d1a6SKrzysztof Kosiński 2698*7249d1a6SKrzysztof Kosiński try: 2699*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle( 2700*7249d1a6SKrzysztof Kosiński style.CreateStyleFromConfig( 2701*7249d1a6SKrzysztof Kosiński '{based_on_style: yapf, split_before_first_argument: True}')) 2702*7249d1a6SKrzysztof Kosiński 2703*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 2704*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, 2705*7249d1a6SKrzysztof Kosiński reformatter.Reformat(llines)) 2706*7249d1a6SKrzysztof Kosiński finally: 2707*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle(style.CreateYapfStyle()) 2708*7249d1a6SKrzysztof Kosiński 2709*7249d1a6SKrzysztof Kosiński def testSplittingBeforeFirstArgumentOnCompoundStatement(self): 2710*7249d1a6SKrzysztof Kosiński """Tests split_before_first_argument on a compound statement.""" 2711*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 2712*7249d1a6SKrzysztof Kosiński if (long_argument_name_1 == 1 or 2713*7249d1a6SKrzysztof Kosiński long_argument_name_2 == 2 or 2714*7249d1a6SKrzysztof Kosiński long_argument_name_3 == 3 or 2715*7249d1a6SKrzysztof Kosiński long_argument_name_4 == 4): 2716*7249d1a6SKrzysztof Kosiński pass 2717*7249d1a6SKrzysztof Kosiński """) 2718*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 2719*7249d1a6SKrzysztof Kosiński if (long_argument_name_1 == 1 or long_argument_name_2 == 2 or 2720*7249d1a6SKrzysztof Kosiński long_argument_name_3 == 3 or long_argument_name_4 == 4): 2721*7249d1a6SKrzysztof Kosiński pass 2722*7249d1a6SKrzysztof Kosiński """) 2723*7249d1a6SKrzysztof Kosiński 2724*7249d1a6SKrzysztof Kosiński try: 2725*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle( 2726*7249d1a6SKrzysztof Kosiński style.CreateStyleFromConfig( 2727*7249d1a6SKrzysztof Kosiński '{based_on_style: yapf, split_before_first_argument: True}')) 2728*7249d1a6SKrzysztof Kosiński 2729*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 2730*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, 2731*7249d1a6SKrzysztof Kosiński reformatter.Reformat(llines)) 2732*7249d1a6SKrzysztof Kosiński finally: 2733*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle(style.CreateYapfStyle()) 2734*7249d1a6SKrzysztof Kosiński 2735*7249d1a6SKrzysztof Kosiński def testCoalesceBracketsOnDict(self): 2736*7249d1a6SKrzysztof Kosiński """Tests coalesce_brackets on a dictionary.""" 2737*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 2738*7249d1a6SKrzysztof Kosiński date_time_values = ( 2739*7249d1a6SKrzysztof Kosiński { 2740*7249d1a6SKrzysztof Kosiński u'year': year, 2741*7249d1a6SKrzysztof Kosiński u'month': month, 2742*7249d1a6SKrzysztof Kosiński u'day_of_month': day_of_month, 2743*7249d1a6SKrzysztof Kosiński u'hours': hours, 2744*7249d1a6SKrzysztof Kosiński u'minutes': minutes, 2745*7249d1a6SKrzysztof Kosiński u'seconds': seconds 2746*7249d1a6SKrzysztof Kosiński } 2747*7249d1a6SKrzysztof Kosiński ) 2748*7249d1a6SKrzysztof Kosiński """) 2749*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 2750*7249d1a6SKrzysztof Kosiński date_time_values = ({ 2751*7249d1a6SKrzysztof Kosiński u'year': year, 2752*7249d1a6SKrzysztof Kosiński u'month': month, 2753*7249d1a6SKrzysztof Kosiński u'day_of_month': day_of_month, 2754*7249d1a6SKrzysztof Kosiński u'hours': hours, 2755*7249d1a6SKrzysztof Kosiński u'minutes': minutes, 2756*7249d1a6SKrzysztof Kosiński u'seconds': seconds 2757*7249d1a6SKrzysztof Kosiński }) 2758*7249d1a6SKrzysztof Kosiński """) 2759*7249d1a6SKrzysztof Kosiński 2760*7249d1a6SKrzysztof Kosiński try: 2761*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle( 2762*7249d1a6SKrzysztof Kosiński style.CreateStyleFromConfig( 2763*7249d1a6SKrzysztof Kosiński '{based_on_style: yapf, coalesce_brackets: True}')) 2764*7249d1a6SKrzysztof Kosiński 2765*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 2766*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, 2767*7249d1a6SKrzysztof Kosiński reformatter.Reformat(llines)) 2768*7249d1a6SKrzysztof Kosiński finally: 2769*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle(style.CreateYapfStyle()) 2770*7249d1a6SKrzysztof Kosiński 2771*7249d1a6SKrzysztof Kosiński def testSplitAfterComment(self): 2772*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 2773*7249d1a6SKrzysztof Kosiński if __name__ == "__main__": 2774*7249d1a6SKrzysztof Kosiński with another_resource: 2775*7249d1a6SKrzysztof Kosiński account = { 2776*7249d1a6SKrzysztof Kosiński "validUntil": 2777*7249d1a6SKrzysztof Kosiński int(time() + (6 * 7 * 24 * 60 * 60)) # in 6 weeks time 2778*7249d1a6SKrzysztof Kosiński } 2779*7249d1a6SKrzysztof Kosiński """) 2780*7249d1a6SKrzysztof Kosiński 2781*7249d1a6SKrzysztof Kosiński try: 2782*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle( 2783*7249d1a6SKrzysztof Kosiński style.CreateStyleFromConfig( 2784*7249d1a6SKrzysztof Kosiński '{based_on_style: yapf, coalesce_brackets: True, ' 2785*7249d1a6SKrzysztof Kosiński 'dedent_closing_brackets: true}')) 2786*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 2787*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 2788*7249d1a6SKrzysztof Kosiński finally: 2789*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle(style.CreateYapfStyle()) 2790*7249d1a6SKrzysztof Kosiński 2791*7249d1a6SKrzysztof Kosiński @unittest.skipUnless(not py3compat.PY3, 'Requires Python 2.7') 2792*7249d1a6SKrzysztof Kosiński def testAsyncAsNonKeyword(self): 2793*7249d1a6SKrzysztof Kosiński try: 2794*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle(style.CreatePEP8Style()) 2795*7249d1a6SKrzysztof Kosiński 2796*7249d1a6SKrzysztof Kosiński # In Python 2, async may be used as a non-keyword identifier. 2797*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 2798*7249d1a6SKrzysztof Kosiński from util import async 2799*7249d1a6SKrzysztof Kosiński 2800*7249d1a6SKrzysztof Kosiński 2801*7249d1a6SKrzysztof Kosiński class A(object): 2802*7249d1a6SKrzysztof Kosiński 2803*7249d1a6SKrzysztof Kosiński def foo(self): 2804*7249d1a6SKrzysztof Kosiński async.run() 2805*7249d1a6SKrzysztof Kosiński """) 2806*7249d1a6SKrzysztof Kosiński 2807*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 2808*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 2809*7249d1a6SKrzysztof Kosiński finally: 2810*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle(style.CreateYapfStyle()) 2811*7249d1a6SKrzysztof Kosiński 2812*7249d1a6SKrzysztof Kosiński def testDisableEndingCommaHeuristic(self): 2813*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 2814*7249d1a6SKrzysztof Kosiński x = [1, 2, 3, 4, 5, 6, 7,] 2815*7249d1a6SKrzysztof Kosiński """) 2816*7249d1a6SKrzysztof Kosiński 2817*7249d1a6SKrzysztof Kosiński try: 2818*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle( 2819*7249d1a6SKrzysztof Kosiński style.CreateStyleFromConfig('{based_on_style: yapf,' 2820*7249d1a6SKrzysztof Kosiński ' disable_ending_comma_heuristic: True}')) 2821*7249d1a6SKrzysztof Kosiński 2822*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 2823*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 2824*7249d1a6SKrzysztof Kosiński finally: 2825*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle(style.CreateYapfStyle()) 2826*7249d1a6SKrzysztof Kosiński 2827*7249d1a6SKrzysztof Kosiński def testDedentClosingBracketsWithTypeAnnotationExceedingLineLength(self): 2828*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 2829*7249d1a6SKrzysztof Kosiński def function(first_argument_xxxxxxxxxxxxxxxx=(0,), second_argument=None) -> None: 2830*7249d1a6SKrzysztof Kosiński pass 2831*7249d1a6SKrzysztof Kosiński 2832*7249d1a6SKrzysztof Kosiński 2833*7249d1a6SKrzysztof Kosiński def function(first_argument_xxxxxxxxxxxxxxxxxxxxxxx=(0,), second_argument=None) -> None: 2834*7249d1a6SKrzysztof Kosiński pass 2835*7249d1a6SKrzysztof Kosiński """) # noqa 2836*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 2837*7249d1a6SKrzysztof Kosiński def function( 2838*7249d1a6SKrzysztof Kosiński first_argument_xxxxxxxxxxxxxxxx=(0,), second_argument=None 2839*7249d1a6SKrzysztof Kosiński ) -> None: 2840*7249d1a6SKrzysztof Kosiński pass 2841*7249d1a6SKrzysztof Kosiński 2842*7249d1a6SKrzysztof Kosiński 2843*7249d1a6SKrzysztof Kosiński def function( 2844*7249d1a6SKrzysztof Kosiński first_argument_xxxxxxxxxxxxxxxxxxxxxxx=(0,), second_argument=None 2845*7249d1a6SKrzysztof Kosiński ) -> None: 2846*7249d1a6SKrzysztof Kosiński pass 2847*7249d1a6SKrzysztof Kosiński """) # noqa 2848*7249d1a6SKrzysztof Kosiński 2849*7249d1a6SKrzysztof Kosiński try: 2850*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle( 2851*7249d1a6SKrzysztof Kosiński style.CreateStyleFromConfig('{based_on_style: yapf,' 2852*7249d1a6SKrzysztof Kosiński ' dedent_closing_brackets: True}')) 2853*7249d1a6SKrzysztof Kosiński 2854*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 2855*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, 2856*7249d1a6SKrzysztof Kosiński reformatter.Reformat(llines)) 2857*7249d1a6SKrzysztof Kosiński finally: 2858*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle(style.CreateYapfStyle()) 2859*7249d1a6SKrzysztof Kosiński 2860*7249d1a6SKrzysztof Kosiński def testIndentClosingBracketsWithTypeAnnotationExceedingLineLength(self): 2861*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 2862*7249d1a6SKrzysztof Kosiński def function(first_argument_xxxxxxxxxxxxxxxx=(0,), second_argument=None) -> None: 2863*7249d1a6SKrzysztof Kosiński pass 2864*7249d1a6SKrzysztof Kosiński 2865*7249d1a6SKrzysztof Kosiński 2866*7249d1a6SKrzysztof Kosiński def function(first_argument_xxxxxxxxxxxxxxxxxxxxxxx=(0,), second_argument=None) -> None: 2867*7249d1a6SKrzysztof Kosiński pass 2868*7249d1a6SKrzysztof Kosiński """) # noqa 2869*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 2870*7249d1a6SKrzysztof Kosiński def function( 2871*7249d1a6SKrzysztof Kosiński first_argument_xxxxxxxxxxxxxxxx=(0,), second_argument=None 2872*7249d1a6SKrzysztof Kosiński ) -> None: 2873*7249d1a6SKrzysztof Kosiński pass 2874*7249d1a6SKrzysztof Kosiński 2875*7249d1a6SKrzysztof Kosiński 2876*7249d1a6SKrzysztof Kosiński def function( 2877*7249d1a6SKrzysztof Kosiński first_argument_xxxxxxxxxxxxxxxxxxxxxxx=(0,), second_argument=None 2878*7249d1a6SKrzysztof Kosiński ) -> None: 2879*7249d1a6SKrzysztof Kosiński pass 2880*7249d1a6SKrzysztof Kosiński """) # noqa 2881*7249d1a6SKrzysztof Kosiński 2882*7249d1a6SKrzysztof Kosiński try: 2883*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle( 2884*7249d1a6SKrzysztof Kosiński style.CreateStyleFromConfig('{based_on_style: yapf,' 2885*7249d1a6SKrzysztof Kosiński ' indent_closing_brackets: True}')) 2886*7249d1a6SKrzysztof Kosiński 2887*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 2888*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, 2889*7249d1a6SKrzysztof Kosiński reformatter.Reformat(llines)) 2890*7249d1a6SKrzysztof Kosiński finally: 2891*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle(style.CreateYapfStyle()) 2892*7249d1a6SKrzysztof Kosiński 2893*7249d1a6SKrzysztof Kosiński def testIndentClosingBracketsInFunctionCall(self): 2894*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 2895*7249d1a6SKrzysztof Kosiński def function(first_argument_xxxxxxxxxxxxxxxx=(0,), second_argument=None, third_and_final_argument=True): 2896*7249d1a6SKrzysztof Kosiński pass 2897*7249d1a6SKrzysztof Kosiński 2898*7249d1a6SKrzysztof Kosiński 2899*7249d1a6SKrzysztof Kosiński def function(first_argument_xxxxxxxxxxxxxxxxxxxxxxx=(0,), second_and_last_argument=None): 2900*7249d1a6SKrzysztof Kosiński pass 2901*7249d1a6SKrzysztof Kosiński """) # noqa 2902*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 2903*7249d1a6SKrzysztof Kosiński def function( 2904*7249d1a6SKrzysztof Kosiński first_argument_xxxxxxxxxxxxxxxx=(0,), 2905*7249d1a6SKrzysztof Kosiński second_argument=None, 2906*7249d1a6SKrzysztof Kosiński third_and_final_argument=True 2907*7249d1a6SKrzysztof Kosiński ): 2908*7249d1a6SKrzysztof Kosiński pass 2909*7249d1a6SKrzysztof Kosiński 2910*7249d1a6SKrzysztof Kosiński 2911*7249d1a6SKrzysztof Kosiński def function( 2912*7249d1a6SKrzysztof Kosiński first_argument_xxxxxxxxxxxxxxxxxxxxxxx=(0,), second_and_last_argument=None 2913*7249d1a6SKrzysztof Kosiński ): 2914*7249d1a6SKrzysztof Kosiński pass 2915*7249d1a6SKrzysztof Kosiński """) # noqa 2916*7249d1a6SKrzysztof Kosiński 2917*7249d1a6SKrzysztof Kosiński try: 2918*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle( 2919*7249d1a6SKrzysztof Kosiński style.CreateStyleFromConfig('{based_on_style: yapf,' 2920*7249d1a6SKrzysztof Kosiński ' indent_closing_brackets: True}')) 2921*7249d1a6SKrzysztof Kosiński 2922*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 2923*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, 2924*7249d1a6SKrzysztof Kosiński reformatter.Reformat(llines)) 2925*7249d1a6SKrzysztof Kosiński finally: 2926*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle(style.CreateYapfStyle()) 2927*7249d1a6SKrzysztof Kosiński 2928*7249d1a6SKrzysztof Kosiński def testIndentClosingBracketsInTuple(self): 2929*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 2930*7249d1a6SKrzysztof Kosiński def function(): 2931*7249d1a6SKrzysztof Kosiński some_var = ('a long element', 'another long element', 'short element', 'really really long element') 2932*7249d1a6SKrzysztof Kosiński return True 2933*7249d1a6SKrzysztof Kosiński 2934*7249d1a6SKrzysztof Kosiński def function(): 2935*7249d1a6SKrzysztof Kosiński some_var = ('a couple', 'small', 'elemens') 2936*7249d1a6SKrzysztof Kosiński return False 2937*7249d1a6SKrzysztof Kosiński """) # noqa 2938*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 2939*7249d1a6SKrzysztof Kosiński def function(): 2940*7249d1a6SKrzysztof Kosiński some_var = ( 2941*7249d1a6SKrzysztof Kosiński 'a long element', 'another long element', 'short element', 2942*7249d1a6SKrzysztof Kosiński 'really really long element' 2943*7249d1a6SKrzysztof Kosiński ) 2944*7249d1a6SKrzysztof Kosiński return True 2945*7249d1a6SKrzysztof Kosiński 2946*7249d1a6SKrzysztof Kosiński 2947*7249d1a6SKrzysztof Kosiński def function(): 2948*7249d1a6SKrzysztof Kosiński some_var = ('a couple', 'small', 'elemens') 2949*7249d1a6SKrzysztof Kosiński return False 2950*7249d1a6SKrzysztof Kosiński """) # noqa 2951*7249d1a6SKrzysztof Kosiński 2952*7249d1a6SKrzysztof Kosiński try: 2953*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle( 2954*7249d1a6SKrzysztof Kosiński style.CreateStyleFromConfig('{based_on_style: yapf,' 2955*7249d1a6SKrzysztof Kosiński ' indent_closing_brackets: True}')) 2956*7249d1a6SKrzysztof Kosiński 2957*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 2958*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, 2959*7249d1a6SKrzysztof Kosiński reformatter.Reformat(llines)) 2960*7249d1a6SKrzysztof Kosiński finally: 2961*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle(style.CreateYapfStyle()) 2962*7249d1a6SKrzysztof Kosiński 2963*7249d1a6SKrzysztof Kosiński def testIndentClosingBracketsInList(self): 2964*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 2965*7249d1a6SKrzysztof Kosiński def function(): 2966*7249d1a6SKrzysztof Kosiński some_var = ['a long element', 'another long element', 'short element', 'really really long element'] 2967*7249d1a6SKrzysztof Kosiński return True 2968*7249d1a6SKrzysztof Kosiński 2969*7249d1a6SKrzysztof Kosiński def function(): 2970*7249d1a6SKrzysztof Kosiński some_var = ['a couple', 'small', 'elemens'] 2971*7249d1a6SKrzysztof Kosiński return False 2972*7249d1a6SKrzysztof Kosiński """) # noqa 2973*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 2974*7249d1a6SKrzysztof Kosiński def function(): 2975*7249d1a6SKrzysztof Kosiński some_var = [ 2976*7249d1a6SKrzysztof Kosiński 'a long element', 'another long element', 'short element', 2977*7249d1a6SKrzysztof Kosiński 'really really long element' 2978*7249d1a6SKrzysztof Kosiński ] 2979*7249d1a6SKrzysztof Kosiński return True 2980*7249d1a6SKrzysztof Kosiński 2981*7249d1a6SKrzysztof Kosiński 2982*7249d1a6SKrzysztof Kosiński def function(): 2983*7249d1a6SKrzysztof Kosiński some_var = ['a couple', 'small', 'elemens'] 2984*7249d1a6SKrzysztof Kosiński return False 2985*7249d1a6SKrzysztof Kosiński """) 2986*7249d1a6SKrzysztof Kosiński 2987*7249d1a6SKrzysztof Kosiński try: 2988*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle( 2989*7249d1a6SKrzysztof Kosiński style.CreateStyleFromConfig('{based_on_style: yapf,' 2990*7249d1a6SKrzysztof Kosiński ' indent_closing_brackets: True}')) 2991*7249d1a6SKrzysztof Kosiński 2992*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 2993*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, 2994*7249d1a6SKrzysztof Kosiński reformatter.Reformat(llines)) 2995*7249d1a6SKrzysztof Kosiński finally: 2996*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle(style.CreateYapfStyle()) 2997*7249d1a6SKrzysztof Kosiński 2998*7249d1a6SKrzysztof Kosiński def testIndentClosingBracketsInDict(self): 2999*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 3000*7249d1a6SKrzysztof Kosiński def function(): 3001*7249d1a6SKrzysztof Kosiński some_var = {1: ('a long element', 'and another really really long element that is really really amazingly long'), 2: 'another long element', 3: 'short element', 4: 'really really long element'} 3002*7249d1a6SKrzysztof Kosiński return True 3003*7249d1a6SKrzysztof Kosiński 3004*7249d1a6SKrzysztof Kosiński def function(): 3005*7249d1a6SKrzysztof Kosiński some_var = {1: 'a couple', 2: 'small', 3: 'elemens'} 3006*7249d1a6SKrzysztof Kosiński return False 3007*7249d1a6SKrzysztof Kosiński """) # noqa 3008*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 3009*7249d1a6SKrzysztof Kosiński def function(): 3010*7249d1a6SKrzysztof Kosiński some_var = { 3011*7249d1a6SKrzysztof Kosiński 1: 3012*7249d1a6SKrzysztof Kosiński ( 3013*7249d1a6SKrzysztof Kosiński 'a long element', 3014*7249d1a6SKrzysztof Kosiński 'and another really really long element that is really really amazingly long' 3015*7249d1a6SKrzysztof Kosiński ), 3016*7249d1a6SKrzysztof Kosiński 2: 'another long element', 3017*7249d1a6SKrzysztof Kosiński 3: 'short element', 3018*7249d1a6SKrzysztof Kosiński 4: 'really really long element' 3019*7249d1a6SKrzysztof Kosiński } 3020*7249d1a6SKrzysztof Kosiński return True 3021*7249d1a6SKrzysztof Kosiński 3022*7249d1a6SKrzysztof Kosiński 3023*7249d1a6SKrzysztof Kosiński def function(): 3024*7249d1a6SKrzysztof Kosiński some_var = {1: 'a couple', 2: 'small', 3: 'elemens'} 3025*7249d1a6SKrzysztof Kosiński return False 3026*7249d1a6SKrzysztof Kosiński """) # noqa 3027*7249d1a6SKrzysztof Kosiński 3028*7249d1a6SKrzysztof Kosiński try: 3029*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle( 3030*7249d1a6SKrzysztof Kosiński style.CreateStyleFromConfig('{based_on_style: yapf,' 3031*7249d1a6SKrzysztof Kosiński ' indent_closing_brackets: True}')) 3032*7249d1a6SKrzysztof Kosiński 3033*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 3034*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, 3035*7249d1a6SKrzysztof Kosiński reformatter.Reformat(llines)) 3036*7249d1a6SKrzysztof Kosiński finally: 3037*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle(style.CreateYapfStyle()) 3038*7249d1a6SKrzysztof Kosiński 3039*7249d1a6SKrzysztof Kosiński def testMultipleDictionariesInList(self): 3040*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 3041*7249d1a6SKrzysztof Kosiński class A: 3042*7249d1a6SKrzysztof Kosiński def b(): 3043*7249d1a6SKrzysztof Kosiński d = { 3044*7249d1a6SKrzysztof Kosiński "123456": [ 3045*7249d1a6SKrzysztof Kosiński { 3046*7249d1a6SKrzysztof Kosiński "12": "aa" 3047*7249d1a6SKrzysztof Kosiński }, 3048*7249d1a6SKrzysztof Kosiński { 3049*7249d1a6SKrzysztof Kosiński "12": "bb" 3050*7249d1a6SKrzysztof Kosiński }, 3051*7249d1a6SKrzysztof Kosiński { 3052*7249d1a6SKrzysztof Kosiński "12": "cc", 3053*7249d1a6SKrzysztof Kosiński "1234567890": { 3054*7249d1a6SKrzysztof Kosiński "1234567": [{ 3055*7249d1a6SKrzysztof Kosiński "12": "dd", 3056*7249d1a6SKrzysztof Kosiński "12345": "text 1" 3057*7249d1a6SKrzysztof Kosiński }, { 3058*7249d1a6SKrzysztof Kosiński "12": "ee", 3059*7249d1a6SKrzysztof Kosiński "12345": "text 2" 3060*7249d1a6SKrzysztof Kosiński }] 3061*7249d1a6SKrzysztof Kosiński } 3062*7249d1a6SKrzysztof Kosiński } 3063*7249d1a6SKrzysztof Kosiński ] 3064*7249d1a6SKrzysztof Kosiński } 3065*7249d1a6SKrzysztof Kosiński """) 3066*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 3067*7249d1a6SKrzysztof Kosiński class A: 3068*7249d1a6SKrzysztof Kosiński 3069*7249d1a6SKrzysztof Kosiński def b(): 3070*7249d1a6SKrzysztof Kosiński d = { 3071*7249d1a6SKrzysztof Kosiński "123456": [{ 3072*7249d1a6SKrzysztof Kosiński "12": "aa" 3073*7249d1a6SKrzysztof Kosiński }, { 3074*7249d1a6SKrzysztof Kosiński "12": "bb" 3075*7249d1a6SKrzysztof Kosiński }, { 3076*7249d1a6SKrzysztof Kosiński "12": "cc", 3077*7249d1a6SKrzysztof Kosiński "1234567890": { 3078*7249d1a6SKrzysztof Kosiński "1234567": [{ 3079*7249d1a6SKrzysztof Kosiński "12": "dd", 3080*7249d1a6SKrzysztof Kosiński "12345": "text 1" 3081*7249d1a6SKrzysztof Kosiński }, { 3082*7249d1a6SKrzysztof Kosiński "12": "ee", 3083*7249d1a6SKrzysztof Kosiński "12345": "text 2" 3084*7249d1a6SKrzysztof Kosiński }] 3085*7249d1a6SKrzysztof Kosiński } 3086*7249d1a6SKrzysztof Kosiński }] 3087*7249d1a6SKrzysztof Kosiński } 3088*7249d1a6SKrzysztof Kosiński """) 3089*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 3090*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 3091*7249d1a6SKrzysztof Kosiński 3092*7249d1a6SKrzysztof Kosiński def testForceMultilineDict_True(self): 3093*7249d1a6SKrzysztof Kosiński try: 3094*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle( 3095*7249d1a6SKrzysztof Kosiński style.CreateStyleFromConfig('{force_multiline_dict: true}')) 3096*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent( 3097*7249d1a6SKrzysztof Kosiński "responseDict = {'childDict': {'spam': 'eggs'}}\n") 3098*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 3099*7249d1a6SKrzysztof Kosiński actual = reformatter.Reformat(llines) 3100*7249d1a6SKrzysztof Kosiński expected = textwrap.dedent("""\ 3101*7249d1a6SKrzysztof Kosiński responseDict = { 3102*7249d1a6SKrzysztof Kosiński 'childDict': { 3103*7249d1a6SKrzysztof Kosiński 'spam': 'eggs' 3104*7249d1a6SKrzysztof Kosiński } 3105*7249d1a6SKrzysztof Kosiński } 3106*7249d1a6SKrzysztof Kosiński """) 3107*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected, actual) 3108*7249d1a6SKrzysztof Kosiński finally: 3109*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle(style.CreateYapfStyle()) 3110*7249d1a6SKrzysztof Kosiński 3111*7249d1a6SKrzysztof Kosiński def testForceMultilineDict_False(self): 3112*7249d1a6SKrzysztof Kosiński try: 3113*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle( 3114*7249d1a6SKrzysztof Kosiński style.CreateStyleFromConfig('{force_multiline_dict: false}')) 3115*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 3116*7249d1a6SKrzysztof Kosiński responseDict = {'childDict': {'spam': 'eggs'}} 3117*7249d1a6SKrzysztof Kosiński """) 3118*7249d1a6SKrzysztof Kosiński expected_formatted_code = unformatted_code 3119*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 3120*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, 3121*7249d1a6SKrzysztof Kosiński reformatter.Reformat(llines)) 3122*7249d1a6SKrzysztof Kosiński finally: 3123*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle(style.CreateYapfStyle()) 3124*7249d1a6SKrzysztof Kosiński 3125*7249d1a6SKrzysztof Kosiński @unittest.skipUnless(py3compat.PY38, 'Requires Python 3.8') 3126*7249d1a6SKrzysztof Kosiński def testWalrus(self): 3127*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 3128*7249d1a6SKrzysztof Kosiński if (x := len([1]*1000)>100): 3129*7249d1a6SKrzysztof Kosiński print(f'{x} is pretty big' ) 3130*7249d1a6SKrzysztof Kosiński """) 3131*7249d1a6SKrzysztof Kosiński expected = textwrap.dedent("""\ 3132*7249d1a6SKrzysztof Kosiński if (x := len([1] * 1000) > 100): 3133*7249d1a6SKrzysztof Kosiński print(f'{x} is pretty big') 3134*7249d1a6SKrzysztof Kosiński """) 3135*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 3136*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected, reformatter.Reformat(llines)) 3137*7249d1a6SKrzysztof Kosiński 3138*7249d1a6SKrzysztof Kosiński 3139*7249d1a6SKrzysztof Kosińskiif __name__ == '__main__': 3140*7249d1a6SKrzysztof Kosiński unittest.main() 3141