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"""Facebook 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 reformatter 20*7249d1a6SKrzysztof Kosińskifrom yapf.yapflib import style 21*7249d1a6SKrzysztof Kosiński 22*7249d1a6SKrzysztof Kosińskifrom yapftests import yapf_test_helper 23*7249d1a6SKrzysztof Kosiński 24*7249d1a6SKrzysztof Kosiński 25*7249d1a6SKrzysztof Kosińskiclass TestsForFacebookStyle(yapf_test_helper.YAPFTest): 26*7249d1a6SKrzysztof Kosiński 27*7249d1a6SKrzysztof Kosiński @classmethod 28*7249d1a6SKrzysztof Kosiński def setUpClass(cls): 29*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle(style.CreateFacebookStyle()) 30*7249d1a6SKrzysztof Kosiński 31*7249d1a6SKrzysztof Kosiński def testNoNeedForLineBreaks(self): 32*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 33*7249d1a6SKrzysztof Kosiński def overly_long_function_name( 34*7249d1a6SKrzysztof Kosiński just_one_arg, **kwargs): 35*7249d1a6SKrzysztof Kosiński pass 36*7249d1a6SKrzysztof Kosiński """) 37*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 38*7249d1a6SKrzysztof Kosiński def overly_long_function_name(just_one_arg, **kwargs): 39*7249d1a6SKrzysztof Kosiński pass 40*7249d1a6SKrzysztof Kosiński """) 41*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 42*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 43*7249d1a6SKrzysztof Kosiński 44*7249d1a6SKrzysztof Kosiński def testDedentClosingBracket(self): 45*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 46*7249d1a6SKrzysztof Kosiński def overly_long_function_name( 47*7249d1a6SKrzysztof Kosiński first_argument_on_the_same_line, 48*7249d1a6SKrzysztof Kosiński second_argument_makes_the_line_too_long): 49*7249d1a6SKrzysztof Kosiński pass 50*7249d1a6SKrzysztof Kosiński """) 51*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 52*7249d1a6SKrzysztof Kosiński def overly_long_function_name( 53*7249d1a6SKrzysztof Kosiński first_argument_on_the_same_line, second_argument_makes_the_line_too_long 54*7249d1a6SKrzysztof Kosiński ): 55*7249d1a6SKrzysztof Kosiński pass 56*7249d1a6SKrzysztof Kosiński """) # noqa 57*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 58*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 59*7249d1a6SKrzysztof Kosiński 60*7249d1a6SKrzysztof Kosiński def testBreakAfterOpeningBracketIfContentsTooBig(self): 61*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 62*7249d1a6SKrzysztof Kosiński def overly_long_function_name(a, b, c, d, e, f, g, h, i, j, k, l, m, 63*7249d1a6SKrzysztof Kosiński n, o, p, q, r, s, t, u, v, w, x, y, z): 64*7249d1a6SKrzysztof Kosiński pass 65*7249d1a6SKrzysztof Kosiński """) 66*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 67*7249d1a6SKrzysztof Kosiński def overly_long_function_name( 68*7249d1a6SKrzysztof Kosiński a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, \ 69*7249d1a6SKrzysztof Kosińskiv, w, x, y, z 70*7249d1a6SKrzysztof Kosiński ): 71*7249d1a6SKrzysztof Kosiński pass 72*7249d1a6SKrzysztof Kosiński """) 73*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 74*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 75*7249d1a6SKrzysztof Kosiński 76*7249d1a6SKrzysztof Kosiński def testDedentClosingBracketWithComments(self): 77*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 78*7249d1a6SKrzysztof Kosiński def overly_long_function_name( 79*7249d1a6SKrzysztof Kosiński # comment about the first argument 80*7249d1a6SKrzysztof Kosiński first_argument_with_a_very_long_name_or_so, 81*7249d1a6SKrzysztof Kosiński # comment about the second argument 82*7249d1a6SKrzysztof Kosiński second_argument_makes_the_line_too_long): 83*7249d1a6SKrzysztof Kosiński pass 84*7249d1a6SKrzysztof Kosiński """) 85*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 86*7249d1a6SKrzysztof Kosiński def overly_long_function_name( 87*7249d1a6SKrzysztof Kosiński # comment about the first argument 88*7249d1a6SKrzysztof Kosiński first_argument_with_a_very_long_name_or_so, 89*7249d1a6SKrzysztof Kosiński # comment about the second argument 90*7249d1a6SKrzysztof Kosiński second_argument_makes_the_line_too_long 91*7249d1a6SKrzysztof Kosiński ): 92*7249d1a6SKrzysztof Kosiński pass 93*7249d1a6SKrzysztof Kosiński """) 94*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 95*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 96*7249d1a6SKrzysztof Kosiński 97*7249d1a6SKrzysztof Kosiński def testDedentImportAsNames(self): 98*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 99*7249d1a6SKrzysztof Kosiński from module import ( 100*7249d1a6SKrzysztof Kosiński internal_function as function, 101*7249d1a6SKrzysztof Kosiński SOME_CONSTANT_NUMBER1, 102*7249d1a6SKrzysztof Kosiński SOME_CONSTANT_NUMBER2, 103*7249d1a6SKrzysztof Kosiński SOME_CONSTANT_NUMBER3, 104*7249d1a6SKrzysztof Kosiński ) 105*7249d1a6SKrzysztof Kosiński """) 106*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 107*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 108*7249d1a6SKrzysztof Kosiński 109*7249d1a6SKrzysztof Kosiński def testDedentTestListGexp(self): 110*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 111*7249d1a6SKrzysztof Kosiński try: 112*7249d1a6SKrzysztof Kosiński pass 113*7249d1a6SKrzysztof Kosiński except ( 114*7249d1a6SKrzysztof Kosiński IOError, OSError, LookupError, RuntimeError, OverflowError 115*7249d1a6SKrzysztof Kosiński ) as exception: 116*7249d1a6SKrzysztof Kosiński pass 117*7249d1a6SKrzysztof Kosiński 118*7249d1a6SKrzysztof Kosiński try: 119*7249d1a6SKrzysztof Kosiński pass 120*7249d1a6SKrzysztof Kosiński except ( 121*7249d1a6SKrzysztof Kosiński IOError, OSError, LookupError, RuntimeError, OverflowError, 122*7249d1a6SKrzysztof Kosiński ) as exception: 123*7249d1a6SKrzysztof Kosiński pass 124*7249d1a6SKrzysztof Kosiński """) 125*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 126*7249d1a6SKrzysztof Kosiński try: 127*7249d1a6SKrzysztof Kosiński pass 128*7249d1a6SKrzysztof Kosiński except ( 129*7249d1a6SKrzysztof Kosiński IOError, OSError, LookupError, RuntimeError, OverflowError 130*7249d1a6SKrzysztof Kosiński ) as exception: 131*7249d1a6SKrzysztof Kosiński pass 132*7249d1a6SKrzysztof Kosiński 133*7249d1a6SKrzysztof Kosiński try: 134*7249d1a6SKrzysztof Kosiński pass 135*7249d1a6SKrzysztof Kosiński except ( 136*7249d1a6SKrzysztof Kosiński IOError, 137*7249d1a6SKrzysztof Kosiński OSError, 138*7249d1a6SKrzysztof Kosiński LookupError, 139*7249d1a6SKrzysztof Kosiński RuntimeError, 140*7249d1a6SKrzysztof Kosiński OverflowError, 141*7249d1a6SKrzysztof Kosiński ) as exception: 142*7249d1a6SKrzysztof Kosiński pass 143*7249d1a6SKrzysztof Kosiński """) 144*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 145*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 146*7249d1a6SKrzysztof Kosiński 147*7249d1a6SKrzysztof Kosiński def testBrokenIdempotency(self): 148*7249d1a6SKrzysztof Kosiński # TODO(ambv): The following behaviour should be fixed. 149*7249d1a6SKrzysztof Kosiński pass0_code = textwrap.dedent("""\ 150*7249d1a6SKrzysztof Kosiński try: 151*7249d1a6SKrzysztof Kosiński pass 152*7249d1a6SKrzysztof Kosiński except (IOError, OSError, LookupError, RuntimeError, OverflowError) as exception: 153*7249d1a6SKrzysztof Kosiński pass 154*7249d1a6SKrzysztof Kosiński """) # noqa 155*7249d1a6SKrzysztof Kosiński pass1_code = textwrap.dedent("""\ 156*7249d1a6SKrzysztof Kosiński try: 157*7249d1a6SKrzysztof Kosiński pass 158*7249d1a6SKrzysztof Kosiński except ( 159*7249d1a6SKrzysztof Kosiński IOError, OSError, LookupError, RuntimeError, OverflowError 160*7249d1a6SKrzysztof Kosiński ) as exception: 161*7249d1a6SKrzysztof Kosiński pass 162*7249d1a6SKrzysztof Kosiński """) 163*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(pass0_code) 164*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(pass1_code, reformatter.Reformat(llines)) 165*7249d1a6SKrzysztof Kosiński 166*7249d1a6SKrzysztof Kosiński pass2_code = textwrap.dedent("""\ 167*7249d1a6SKrzysztof Kosiński try: 168*7249d1a6SKrzysztof Kosiński pass 169*7249d1a6SKrzysztof Kosiński except ( 170*7249d1a6SKrzysztof Kosiński IOError, OSError, LookupError, RuntimeError, OverflowError 171*7249d1a6SKrzysztof Kosiński ) as exception: 172*7249d1a6SKrzysztof Kosiński pass 173*7249d1a6SKrzysztof Kosiński """) 174*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(pass1_code) 175*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(pass2_code, reformatter.Reformat(llines)) 176*7249d1a6SKrzysztof Kosiński 177*7249d1a6SKrzysztof Kosiński def testIfExprHangingIndent(self): 178*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 179*7249d1a6SKrzysztof Kosiński if True: 180*7249d1a6SKrzysztof Kosiński if True: 181*7249d1a6SKrzysztof Kosiński if True: 182*7249d1a6SKrzysztof Kosiński if not self.frobbies and ( 183*7249d1a6SKrzysztof Kosiński self.foobars.counters['db.cheeses'] != 1 or 184*7249d1a6SKrzysztof Kosiński self.foobars.counters['db.marshmellow_skins'] != 1): 185*7249d1a6SKrzysztof Kosiński pass 186*7249d1a6SKrzysztof Kosiński """) 187*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 188*7249d1a6SKrzysztof Kosiński if True: 189*7249d1a6SKrzysztof Kosiński if True: 190*7249d1a6SKrzysztof Kosiński if True: 191*7249d1a6SKrzysztof Kosiński if not self.frobbies and ( 192*7249d1a6SKrzysztof Kosiński self.foobars.counters['db.cheeses'] != 1 or 193*7249d1a6SKrzysztof Kosiński self.foobars.counters['db.marshmellow_skins'] != 1 194*7249d1a6SKrzysztof Kosiński ): 195*7249d1a6SKrzysztof Kosiński pass 196*7249d1a6SKrzysztof Kosiński """) 197*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 198*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 199*7249d1a6SKrzysztof Kosiński 200*7249d1a6SKrzysztof Kosiński def testSimpleDedenting(self): 201*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 202*7249d1a6SKrzysztof Kosiński if True: 203*7249d1a6SKrzysztof Kosiński self.assertEqual(result.reason_not_added, "current preflight is still running") 204*7249d1a6SKrzysztof Kosiński """) # noqa 205*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 206*7249d1a6SKrzysztof Kosiński if True: 207*7249d1a6SKrzysztof Kosiński self.assertEqual( 208*7249d1a6SKrzysztof Kosiński result.reason_not_added, "current preflight is still running" 209*7249d1a6SKrzysztof Kosiński ) 210*7249d1a6SKrzysztof Kosiński """) 211*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 212*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 213*7249d1a6SKrzysztof Kosiński 214*7249d1a6SKrzysztof Kosiński def testDedentingWithSubscripts(self): 215*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 216*7249d1a6SKrzysztof Kosiński class Foo: 217*7249d1a6SKrzysztof Kosiński class Bar: 218*7249d1a6SKrzysztof Kosiński @classmethod 219*7249d1a6SKrzysztof Kosiński def baz(cls, clues_list, effect, constraints, constraint_manager): 220*7249d1a6SKrzysztof Kosiński if clues_lists: 221*7249d1a6SKrzysztof Kosiński return cls.single_constraint_not(clues_lists, effect, constraints[0], constraint_manager) 222*7249d1a6SKrzysztof Kosiński 223*7249d1a6SKrzysztof Kosiński """) # noqa 224*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 225*7249d1a6SKrzysztof Kosiński class Foo: 226*7249d1a6SKrzysztof Kosiński class Bar: 227*7249d1a6SKrzysztof Kosiński @classmethod 228*7249d1a6SKrzysztof Kosiński def baz(cls, clues_list, effect, constraints, constraint_manager): 229*7249d1a6SKrzysztof Kosiński if clues_lists: 230*7249d1a6SKrzysztof Kosiński return cls.single_constraint_not( 231*7249d1a6SKrzysztof Kosiński clues_lists, effect, constraints[0], constraint_manager 232*7249d1a6SKrzysztof Kosiński ) 233*7249d1a6SKrzysztof Kosiński """) # noqa 234*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 235*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 236*7249d1a6SKrzysztof Kosiński 237*7249d1a6SKrzysztof Kosiński def testDedentingCallsWithInnerLists(self): 238*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 239*7249d1a6SKrzysztof Kosiński class _(): 240*7249d1a6SKrzysztof Kosiński def _(): 241*7249d1a6SKrzysztof Kosiński cls.effect_clues = { 242*7249d1a6SKrzysztof Kosiński 'effect': Clue((cls.effect_time, 'apache_host'), effect_line, 40) 243*7249d1a6SKrzysztof Kosiński } 244*7249d1a6SKrzysztof Kosiński """) # noqa 245*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 246*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 247*7249d1a6SKrzysztof Kosiński 248*7249d1a6SKrzysztof Kosiński def testDedentingListComprehension(self): 249*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 250*7249d1a6SKrzysztof Kosiński class Foo(): 251*7249d1a6SKrzysztof Kosiński def _pack_results_for_constraint_or(): 252*7249d1a6SKrzysztof Kosiński self.param_groups = dict( 253*7249d1a6SKrzysztof Kosiński ( 254*7249d1a6SKrzysztof Kosiński key + 1, ParamGroup(groups[key], default_converter) 255*7249d1a6SKrzysztof Kosiński ) for key in six.moves.range(len(groups)) 256*7249d1a6SKrzysztof Kosiński ) 257*7249d1a6SKrzysztof Kosiński 258*7249d1a6SKrzysztof Kosiński for combination in cls._clues_combinations(clues_lists): 259*7249d1a6SKrzysztof Kosiński if all( 260*7249d1a6SKrzysztof Kosiński cls._verify_constraint(combination, effect, constraint) 261*7249d1a6SKrzysztof Kosiński for constraint in constraints 262*7249d1a6SKrzysztof Kosiński ): 263*7249d1a6SKrzysztof Kosiński pass 264*7249d1a6SKrzysztof Kosiński 265*7249d1a6SKrzysztof Kosiński guessed_dict = dict( 266*7249d1a6SKrzysztof Kosiński ( 267*7249d1a6SKrzysztof Kosiński key, guessed_pattern_matches[key] 268*7249d1a6SKrzysztof Kosiński ) for key in six.moves.range(len(guessed_pattern_matches)) 269*7249d1a6SKrzysztof Kosiński ) 270*7249d1a6SKrzysztof Kosiński 271*7249d1a6SKrzysztof Kosiński content = "".join( 272*7249d1a6SKrzysztof Kosiński itertools.chain( 273*7249d1a6SKrzysztof Kosiński (first_line_fragment, ), lines_between, (last_line_fragment, ) 274*7249d1a6SKrzysztof Kosiński ) 275*7249d1a6SKrzysztof Kosiński ) 276*7249d1a6SKrzysztof Kosiński 277*7249d1a6SKrzysztof Kosiński rule = Rule( 278*7249d1a6SKrzysztof Kosiński [self.cause1, self.cause2, self.cause1, self.cause2], self.effect, constraints1, 279*7249d1a6SKrzysztof Kosiński Rule.LINKAGE_AND 280*7249d1a6SKrzysztof Kosiński ) 281*7249d1a6SKrzysztof Kosiński 282*7249d1a6SKrzysztof Kosiński assert sorted(log_type.files_to_parse) == [ 283*7249d1a6SKrzysztof Kosiński ('localhost', os.path.join(path, 'node_1.log'), super_parser), 284*7249d1a6SKrzysztof Kosiński ('localhost', os.path.join(path, 'node_2.log'), super_parser) 285*7249d1a6SKrzysztof Kosiński ] 286*7249d1a6SKrzysztof Kosiński """) # noqa 287*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 288*7249d1a6SKrzysztof Kosiński class Foo(): 289*7249d1a6SKrzysztof Kosiński def _pack_results_for_constraint_or(): 290*7249d1a6SKrzysztof Kosiński self.param_groups = dict( 291*7249d1a6SKrzysztof Kosiński (key + 1, ParamGroup(groups[key], default_converter)) 292*7249d1a6SKrzysztof Kosiński for key in six.moves.range(len(groups)) 293*7249d1a6SKrzysztof Kosiński ) 294*7249d1a6SKrzysztof Kosiński 295*7249d1a6SKrzysztof Kosiński for combination in cls._clues_combinations(clues_lists): 296*7249d1a6SKrzysztof Kosiński if all( 297*7249d1a6SKrzysztof Kosiński cls._verify_constraint(combination, effect, constraint) 298*7249d1a6SKrzysztof Kosiński for constraint in constraints 299*7249d1a6SKrzysztof Kosiński ): 300*7249d1a6SKrzysztof Kosiński pass 301*7249d1a6SKrzysztof Kosiński 302*7249d1a6SKrzysztof Kosiński guessed_dict = dict( 303*7249d1a6SKrzysztof Kosiński (key, guessed_pattern_matches[key]) 304*7249d1a6SKrzysztof Kosiński for key in six.moves.range(len(guessed_pattern_matches)) 305*7249d1a6SKrzysztof Kosiński ) 306*7249d1a6SKrzysztof Kosiński 307*7249d1a6SKrzysztof Kosiński content = "".join( 308*7249d1a6SKrzysztof Kosiński itertools.chain( 309*7249d1a6SKrzysztof Kosiński (first_line_fragment, ), lines_between, (last_line_fragment, ) 310*7249d1a6SKrzysztof Kosiński ) 311*7249d1a6SKrzysztof Kosiński ) 312*7249d1a6SKrzysztof Kosiński 313*7249d1a6SKrzysztof Kosiński rule = Rule( 314*7249d1a6SKrzysztof Kosiński [self.cause1, self.cause2, self.cause1, self.cause2], self.effect, 315*7249d1a6SKrzysztof Kosiński constraints1, Rule.LINKAGE_AND 316*7249d1a6SKrzysztof Kosiński ) 317*7249d1a6SKrzysztof Kosiński 318*7249d1a6SKrzysztof Kosiński assert sorted(log_type.files_to_parse) == [ 319*7249d1a6SKrzysztof Kosiński ('localhost', os.path.join(path, 'node_1.log'), super_parser), 320*7249d1a6SKrzysztof Kosiński ('localhost', os.path.join(path, 'node_2.log'), super_parser) 321*7249d1a6SKrzysztof Kosiński ] 322*7249d1a6SKrzysztof Kosiński """) # noqa 323*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 324*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 325*7249d1a6SKrzysztof Kosiński 326*7249d1a6SKrzysztof Kosiński def testMustSplitDedenting(self): 327*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 328*7249d1a6SKrzysztof Kosiński class _(): 329*7249d1a6SKrzysztof Kosiński def _(): 330*7249d1a6SKrzysztof Kosiński effect_line = FrontInput( 331*7249d1a6SKrzysztof Kosiński effect_line_offset, line_content, 332*7249d1a6SKrzysztof Kosiński LineSource('localhost', xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx) 333*7249d1a6SKrzysztof Kosiński ) 334*7249d1a6SKrzysztof Kosiński """) # noqa 335*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 336*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 337*7249d1a6SKrzysztof Kosiński 338*7249d1a6SKrzysztof Kosiński def testDedentIfConditional(self): 339*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 340*7249d1a6SKrzysztof Kosiński class _(): 341*7249d1a6SKrzysztof Kosiński def _(): 342*7249d1a6SKrzysztof Kosiński if True: 343*7249d1a6SKrzysztof Kosiński if not self.frobbies and ( 344*7249d1a6SKrzysztof Kosiński self.foobars.counters['db.cheeses'] != 1 or 345*7249d1a6SKrzysztof Kosiński self.foobars.counters['db.marshmellow_skins'] != 1 346*7249d1a6SKrzysztof Kosiński ): 347*7249d1a6SKrzysztof Kosiński pass 348*7249d1a6SKrzysztof Kosiński """) 349*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 350*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 351*7249d1a6SKrzysztof Kosiński 352*7249d1a6SKrzysztof Kosiński def testDedentSet(self): 353*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 354*7249d1a6SKrzysztof Kosiński class _(): 355*7249d1a6SKrzysztof Kosiński def _(): 356*7249d1a6SKrzysztof Kosiński assert set(self.constraint_links.get_links()) == set( 357*7249d1a6SKrzysztof Kosiński [ 358*7249d1a6SKrzysztof Kosiński (2, 10, 100), 359*7249d1a6SKrzysztof Kosiński (2, 10, 200), 360*7249d1a6SKrzysztof Kosiński (2, 20, 100), 361*7249d1a6SKrzysztof Kosiński (2, 20, 200), 362*7249d1a6SKrzysztof Kosiński ] 363*7249d1a6SKrzysztof Kosiński ) 364*7249d1a6SKrzysztof Kosiński """) 365*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 366*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines)) 367*7249d1a6SKrzysztof Kosiński 368*7249d1a6SKrzysztof Kosiński def testDedentingInnerScope(self): 369*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 370*7249d1a6SKrzysztof Kosiński class Foo(): 371*7249d1a6SKrzysztof Kosiński @classmethod 372*7249d1a6SKrzysztof Kosiński def _pack_results_for_constraint_or(cls, combination, constraints): 373*7249d1a6SKrzysztof Kosiński return cls._create_investigation_result( 374*7249d1a6SKrzysztof Kosiński (clue for clue in combination if not clue == Verifier.UNMATCHED), 375*7249d1a6SKrzysztof Kosiński constraints, InvestigationResult.OR 376*7249d1a6SKrzysztof Kosiński ) 377*7249d1a6SKrzysztof Kosiński """) # noqa 378*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 379*7249d1a6SKrzysztof Kosiński reformatted_code = reformatter.Reformat(llines) 380*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatted_code) 381*7249d1a6SKrzysztof Kosiński 382*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(reformatted_code) 383*7249d1a6SKrzysztof Kosiński reformatted_code = reformatter.Reformat(llines) 384*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatted_code) 385*7249d1a6SKrzysztof Kosiński 386*7249d1a6SKrzysztof Kosiński def testCommentWithNewlinesInPrefix(self): 387*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 388*7249d1a6SKrzysztof Kosiński def foo(): 389*7249d1a6SKrzysztof Kosiński if 0: 390*7249d1a6SKrzysztof Kosiński return False 391*7249d1a6SKrzysztof Kosiński 392*7249d1a6SKrzysztof Kosiński 393*7249d1a6SKrzysztof Kosiński #a deadly comment 394*7249d1a6SKrzysztof Kosiński elif 1: 395*7249d1a6SKrzysztof Kosiński return True 396*7249d1a6SKrzysztof Kosiński 397*7249d1a6SKrzysztof Kosiński 398*7249d1a6SKrzysztof Kosiński print(foo()) 399*7249d1a6SKrzysztof Kosiński """) 400*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 401*7249d1a6SKrzysztof Kosiński def foo(): 402*7249d1a6SKrzysztof Kosiński if 0: 403*7249d1a6SKrzysztof Kosiński return False 404*7249d1a6SKrzysztof Kosiński 405*7249d1a6SKrzysztof Kosiński #a deadly comment 406*7249d1a6SKrzysztof Kosiński elif 1: 407*7249d1a6SKrzysztof Kosiński return True 408*7249d1a6SKrzysztof Kosiński 409*7249d1a6SKrzysztof Kosiński 410*7249d1a6SKrzysztof Kosiński print(foo()) 411*7249d1a6SKrzysztof Kosiński """) 412*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 413*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 414*7249d1a6SKrzysztof Kosiński 415*7249d1a6SKrzysztof Kosiński def testIfStmtClosingBracket(self): 416*7249d1a6SKrzysztof Kosiński unformatted_code = """\ 417*7249d1a6SKrzysztof Kosińskiif (isinstance(value , (StopIteration , StopAsyncIteration )) and exc.__cause__ is value_asdfasdfasdfasdfsafsafsafdasfasdfs): 418*7249d1a6SKrzysztof Kosiński return False 419*7249d1a6SKrzysztof Kosiński""" # noqa 420*7249d1a6SKrzysztof Kosiński expected_formatted_code = """\ 421*7249d1a6SKrzysztof Kosińskiif ( 422*7249d1a6SKrzysztof Kosiński isinstance(value, (StopIteration, StopAsyncIteration)) and 423*7249d1a6SKrzysztof Kosiński exc.__cause__ is value_asdfasdfasdfasdfsafsafsafdasfasdfs 424*7249d1a6SKrzysztof Kosiński): 425*7249d1a6SKrzysztof Kosiński return False 426*7249d1a6SKrzysztof Kosiński""" 427*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 428*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, reformatter.Reformat(llines)) 429*7249d1a6SKrzysztof Kosiński 430*7249d1a6SKrzysztof Kosiński 431*7249d1a6SKrzysztof Kosińskiif __name__ == '__main__': 432*7249d1a6SKrzysztof Kosiński unittest.main() 433