1*7249d1a6SKrzysztof Kosiński# Copyright 2015 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"""Tests for yapf.pytree_unwrapper.""" 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 pytree_utils 20*7249d1a6SKrzysztof Kosiński 21*7249d1a6SKrzysztof Kosińskifrom yapftests import yapf_test_helper 22*7249d1a6SKrzysztof Kosiński 23*7249d1a6SKrzysztof Kosiński 24*7249d1a6SKrzysztof Kosińskiclass PytreeUnwrapperTest(yapf_test_helper.YAPFTest): 25*7249d1a6SKrzysztof Kosiński 26*7249d1a6SKrzysztof Kosiński def _CheckLogicalLines(self, llines, list_of_expected): 27*7249d1a6SKrzysztof Kosiński """Check that the given LogicalLines match expectations. 28*7249d1a6SKrzysztof Kosiński 29*7249d1a6SKrzysztof Kosiński Args: 30*7249d1a6SKrzysztof Kosiński llines: list of LogicalLine 31*7249d1a6SKrzysztof Kosiński list_of_expected: list of (depth, values) pairs. Non-semantic tokens are 32*7249d1a6SKrzysztof Kosiński filtered out from the expected values. 33*7249d1a6SKrzysztof Kosiński """ 34*7249d1a6SKrzysztof Kosiński actual = [] 35*7249d1a6SKrzysztof Kosiński for lline in llines: 36*7249d1a6SKrzysztof Kosiński filtered_values = [ 37*7249d1a6SKrzysztof Kosiński ft.value 38*7249d1a6SKrzysztof Kosiński for ft in lline.tokens 39*7249d1a6SKrzysztof Kosiński if ft.name not in pytree_utils.NONSEMANTIC_TOKENS 40*7249d1a6SKrzysztof Kosiński ] 41*7249d1a6SKrzysztof Kosiński actual.append((lline.depth, filtered_values)) 42*7249d1a6SKrzysztof Kosiński 43*7249d1a6SKrzysztof Kosiński self.assertEqual(list_of_expected, actual) 44*7249d1a6SKrzysztof Kosiński 45*7249d1a6SKrzysztof Kosiński def testSimpleFileScope(self): 46*7249d1a6SKrzysztof Kosiński code = textwrap.dedent(r""" 47*7249d1a6SKrzysztof Kosiński x = 1 48*7249d1a6SKrzysztof Kosiński # a comment 49*7249d1a6SKrzysztof Kosiński y = 2 50*7249d1a6SKrzysztof Kosiński """) 51*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 52*7249d1a6SKrzysztof Kosiński self._CheckLogicalLines(llines, [ 53*7249d1a6SKrzysztof Kosiński (0, ['x', '=', '1']), 54*7249d1a6SKrzysztof Kosiński (0, ['# a comment']), 55*7249d1a6SKrzysztof Kosiński (0, ['y', '=', '2']), 56*7249d1a6SKrzysztof Kosiński ]) 57*7249d1a6SKrzysztof Kosiński 58*7249d1a6SKrzysztof Kosiński def testSimpleMultilineStatement(self): 59*7249d1a6SKrzysztof Kosiński code = textwrap.dedent(r""" 60*7249d1a6SKrzysztof Kosiński y = (1 + 61*7249d1a6SKrzysztof Kosiński x) 62*7249d1a6SKrzysztof Kosiński """) 63*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 64*7249d1a6SKrzysztof Kosiński self._CheckLogicalLines(llines, [ 65*7249d1a6SKrzysztof Kosiński (0, ['y', '=', '(', '1', '+', 'x', ')']), 66*7249d1a6SKrzysztof Kosiński ]) 67*7249d1a6SKrzysztof Kosiński 68*7249d1a6SKrzysztof Kosiński def testFileScopeWithInlineComment(self): 69*7249d1a6SKrzysztof Kosiński code = textwrap.dedent(r""" 70*7249d1a6SKrzysztof Kosiński x = 1 # a comment 71*7249d1a6SKrzysztof Kosiński y = 2 72*7249d1a6SKrzysztof Kosiński """) 73*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 74*7249d1a6SKrzysztof Kosiński self._CheckLogicalLines(llines, [ 75*7249d1a6SKrzysztof Kosiński (0, ['x', '=', '1', '# a comment']), 76*7249d1a6SKrzysztof Kosiński (0, ['y', '=', '2']), 77*7249d1a6SKrzysztof Kosiński ]) 78*7249d1a6SKrzysztof Kosiński 79*7249d1a6SKrzysztof Kosiński def testSimpleIf(self): 80*7249d1a6SKrzysztof Kosiński code = textwrap.dedent(r""" 81*7249d1a6SKrzysztof Kosiński if foo: 82*7249d1a6SKrzysztof Kosiński x = 1 83*7249d1a6SKrzysztof Kosiński y = 2 84*7249d1a6SKrzysztof Kosiński """) 85*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 86*7249d1a6SKrzysztof Kosiński self._CheckLogicalLines(llines, [ 87*7249d1a6SKrzysztof Kosiński (0, ['if', 'foo', ':']), 88*7249d1a6SKrzysztof Kosiński (1, ['x', '=', '1']), 89*7249d1a6SKrzysztof Kosiński (1, ['y', '=', '2']), 90*7249d1a6SKrzysztof Kosiński ]) 91*7249d1a6SKrzysztof Kosiński 92*7249d1a6SKrzysztof Kosiński def testSimpleIfWithComments(self): 93*7249d1a6SKrzysztof Kosiński code = textwrap.dedent(r""" 94*7249d1a6SKrzysztof Kosiński # c1 95*7249d1a6SKrzysztof Kosiński if foo: # c2 96*7249d1a6SKrzysztof Kosiński x = 1 97*7249d1a6SKrzysztof Kosiński y = 2 98*7249d1a6SKrzysztof Kosiński """) 99*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 100*7249d1a6SKrzysztof Kosiński self._CheckLogicalLines(llines, [ 101*7249d1a6SKrzysztof Kosiński (0, ['# c1']), 102*7249d1a6SKrzysztof Kosiński (0, ['if', 'foo', ':', '# c2']), 103*7249d1a6SKrzysztof Kosiński (1, ['x', '=', '1']), 104*7249d1a6SKrzysztof Kosiński (1, ['y', '=', '2']), 105*7249d1a6SKrzysztof Kosiński ]) 106*7249d1a6SKrzysztof Kosiński 107*7249d1a6SKrzysztof Kosiński def testIfWithCommentsInside(self): 108*7249d1a6SKrzysztof Kosiński code = textwrap.dedent(r""" 109*7249d1a6SKrzysztof Kosiński if foo: 110*7249d1a6SKrzysztof Kosiński # c1 111*7249d1a6SKrzysztof Kosiński x = 1 # c2 112*7249d1a6SKrzysztof Kosiński # c3 113*7249d1a6SKrzysztof Kosiński y = 2 114*7249d1a6SKrzysztof Kosiński """) 115*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 116*7249d1a6SKrzysztof Kosiński self._CheckLogicalLines(llines, [ 117*7249d1a6SKrzysztof Kosiński (0, ['if', 'foo', ':']), 118*7249d1a6SKrzysztof Kosiński (1, ['# c1']), 119*7249d1a6SKrzysztof Kosiński (1, ['x', '=', '1', '# c2']), 120*7249d1a6SKrzysztof Kosiński (1, ['# c3']), 121*7249d1a6SKrzysztof Kosiński (1, ['y', '=', '2']), 122*7249d1a6SKrzysztof Kosiński ]) 123*7249d1a6SKrzysztof Kosiński 124*7249d1a6SKrzysztof Kosiński def testIfElifElse(self): 125*7249d1a6SKrzysztof Kosiński code = textwrap.dedent(r""" 126*7249d1a6SKrzysztof Kosiński if x: 127*7249d1a6SKrzysztof Kosiński x = 1 # c1 128*7249d1a6SKrzysztof Kosiński elif y: # c2 129*7249d1a6SKrzysztof Kosiński y = 1 130*7249d1a6SKrzysztof Kosiński else: 131*7249d1a6SKrzysztof Kosiński # c3 132*7249d1a6SKrzysztof Kosiński z = 1 133*7249d1a6SKrzysztof Kosiński """) 134*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 135*7249d1a6SKrzysztof Kosiński self._CheckLogicalLines(llines, [ 136*7249d1a6SKrzysztof Kosiński (0, ['if', 'x', ':']), 137*7249d1a6SKrzysztof Kosiński (1, ['x', '=', '1', '# c1']), 138*7249d1a6SKrzysztof Kosiński (0, ['elif', 'y', ':', '# c2']), 139*7249d1a6SKrzysztof Kosiński (1, ['y', '=', '1']), 140*7249d1a6SKrzysztof Kosiński (0, ['else', ':']), 141*7249d1a6SKrzysztof Kosiński (1, ['# c3']), 142*7249d1a6SKrzysztof Kosiński (1, ['z', '=', '1']), 143*7249d1a6SKrzysztof Kosiński ]) 144*7249d1a6SKrzysztof Kosiński 145*7249d1a6SKrzysztof Kosiński def testNestedCompoundTwoLevel(self): 146*7249d1a6SKrzysztof Kosiński code = textwrap.dedent(r""" 147*7249d1a6SKrzysztof Kosiński if x: 148*7249d1a6SKrzysztof Kosiński x = 1 # c1 149*7249d1a6SKrzysztof Kosiński while t: 150*7249d1a6SKrzysztof Kosiński # c2 151*7249d1a6SKrzysztof Kosiński j = 1 152*7249d1a6SKrzysztof Kosiński k = 1 153*7249d1a6SKrzysztof Kosiński """) 154*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 155*7249d1a6SKrzysztof Kosiński self._CheckLogicalLines(llines, [ 156*7249d1a6SKrzysztof Kosiński (0, ['if', 'x', ':']), 157*7249d1a6SKrzysztof Kosiński (1, ['x', '=', '1', '# c1']), 158*7249d1a6SKrzysztof Kosiński (1, ['while', 't', ':']), 159*7249d1a6SKrzysztof Kosiński (2, ['# c2']), 160*7249d1a6SKrzysztof Kosiński (2, ['j', '=', '1']), 161*7249d1a6SKrzysztof Kosiński (1, ['k', '=', '1']), 162*7249d1a6SKrzysztof Kosiński ]) 163*7249d1a6SKrzysztof Kosiński 164*7249d1a6SKrzysztof Kosiński def testSimpleWhile(self): 165*7249d1a6SKrzysztof Kosiński code = textwrap.dedent(r""" 166*7249d1a6SKrzysztof Kosiński while x > 1: # c1 167*7249d1a6SKrzysztof Kosiński # c2 168*7249d1a6SKrzysztof Kosiński x = 1 169*7249d1a6SKrzysztof Kosiński """) 170*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 171*7249d1a6SKrzysztof Kosiński self._CheckLogicalLines(llines, [ 172*7249d1a6SKrzysztof Kosiński (0, ['while', 'x', '>', '1', ':', '# c1']), 173*7249d1a6SKrzysztof Kosiński (1, ['# c2']), 174*7249d1a6SKrzysztof Kosiński (1, ['x', '=', '1']), 175*7249d1a6SKrzysztof Kosiński ]) 176*7249d1a6SKrzysztof Kosiński 177*7249d1a6SKrzysztof Kosiński def testSimpleTry(self): 178*7249d1a6SKrzysztof Kosiński code = textwrap.dedent(r""" 179*7249d1a6SKrzysztof Kosiński try: 180*7249d1a6SKrzysztof Kosiński pass 181*7249d1a6SKrzysztof Kosiński except: 182*7249d1a6SKrzysztof Kosiński pass 183*7249d1a6SKrzysztof Kosiński except: 184*7249d1a6SKrzysztof Kosiński pass 185*7249d1a6SKrzysztof Kosiński else: 186*7249d1a6SKrzysztof Kosiński pass 187*7249d1a6SKrzysztof Kosiński finally: 188*7249d1a6SKrzysztof Kosiński pass 189*7249d1a6SKrzysztof Kosiński """) 190*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 191*7249d1a6SKrzysztof Kosiński self._CheckLogicalLines(llines, [ 192*7249d1a6SKrzysztof Kosiński (0, ['try', ':']), 193*7249d1a6SKrzysztof Kosiński (1, ['pass']), 194*7249d1a6SKrzysztof Kosiński (0, ['except', ':']), 195*7249d1a6SKrzysztof Kosiński (1, ['pass']), 196*7249d1a6SKrzysztof Kosiński (0, ['except', ':']), 197*7249d1a6SKrzysztof Kosiński (1, ['pass']), 198*7249d1a6SKrzysztof Kosiński (0, ['else', ':']), 199*7249d1a6SKrzysztof Kosiński (1, ['pass']), 200*7249d1a6SKrzysztof Kosiński (0, ['finally', ':']), 201*7249d1a6SKrzysztof Kosiński (1, ['pass']), 202*7249d1a6SKrzysztof Kosiński ]) 203*7249d1a6SKrzysztof Kosiński 204*7249d1a6SKrzysztof Kosiński def testSimpleFuncdef(self): 205*7249d1a6SKrzysztof Kosiński code = textwrap.dedent(r""" 206*7249d1a6SKrzysztof Kosiński def foo(x): # c1 207*7249d1a6SKrzysztof Kosiński # c2 208*7249d1a6SKrzysztof Kosiński return x 209*7249d1a6SKrzysztof Kosiński """) 210*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 211*7249d1a6SKrzysztof Kosiński self._CheckLogicalLines(llines, [ 212*7249d1a6SKrzysztof Kosiński (0, ['def', 'foo', '(', 'x', ')', ':', '# c1']), 213*7249d1a6SKrzysztof Kosiński (1, ['# c2']), 214*7249d1a6SKrzysztof Kosiński (1, ['return', 'x']), 215*7249d1a6SKrzysztof Kosiński ]) 216*7249d1a6SKrzysztof Kosiński 217*7249d1a6SKrzysztof Kosiński def testTwoFuncDefs(self): 218*7249d1a6SKrzysztof Kosiński code = textwrap.dedent(r""" 219*7249d1a6SKrzysztof Kosiński def foo(x): # c1 220*7249d1a6SKrzysztof Kosiński # c2 221*7249d1a6SKrzysztof Kosiński return x 222*7249d1a6SKrzysztof Kosiński 223*7249d1a6SKrzysztof Kosiński def bar(): # c3 224*7249d1a6SKrzysztof Kosiński # c4 225*7249d1a6SKrzysztof Kosiński return x 226*7249d1a6SKrzysztof Kosiński """) 227*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 228*7249d1a6SKrzysztof Kosiński self._CheckLogicalLines(llines, [ 229*7249d1a6SKrzysztof Kosiński (0, ['def', 'foo', '(', 'x', ')', ':', '# c1']), 230*7249d1a6SKrzysztof Kosiński (1, ['# c2']), 231*7249d1a6SKrzysztof Kosiński (1, ['return', 'x']), 232*7249d1a6SKrzysztof Kosiński (0, ['def', 'bar', '(', ')', ':', '# c3']), 233*7249d1a6SKrzysztof Kosiński (1, ['# c4']), 234*7249d1a6SKrzysztof Kosiński (1, ['return', 'x']), 235*7249d1a6SKrzysztof Kosiński ]) 236*7249d1a6SKrzysztof Kosiński 237*7249d1a6SKrzysztof Kosiński def testSimpleClassDef(self): 238*7249d1a6SKrzysztof Kosiński code = textwrap.dedent(r""" 239*7249d1a6SKrzysztof Kosiński class Klass: # c1 240*7249d1a6SKrzysztof Kosiński # c2 241*7249d1a6SKrzysztof Kosiński p = 1 242*7249d1a6SKrzysztof Kosiński """) 243*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 244*7249d1a6SKrzysztof Kosiński self._CheckLogicalLines(llines, [ 245*7249d1a6SKrzysztof Kosiński (0, ['class', 'Klass', ':', '# c1']), 246*7249d1a6SKrzysztof Kosiński (1, ['# c2']), 247*7249d1a6SKrzysztof Kosiński (1, ['p', '=', '1']), 248*7249d1a6SKrzysztof Kosiński ]) 249*7249d1a6SKrzysztof Kosiński 250*7249d1a6SKrzysztof Kosiński def testSingleLineStmtInFunc(self): 251*7249d1a6SKrzysztof Kosiński code = textwrap.dedent(r""" 252*7249d1a6SKrzysztof Kosiński def f(): return 37 253*7249d1a6SKrzysztof Kosiński """) 254*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 255*7249d1a6SKrzysztof Kosiński self._CheckLogicalLines(llines, [ 256*7249d1a6SKrzysztof Kosiński (0, ['def', 'f', '(', ')', ':']), 257*7249d1a6SKrzysztof Kosiński (1, ['return', '37']), 258*7249d1a6SKrzysztof Kosiński ]) 259*7249d1a6SKrzysztof Kosiński 260*7249d1a6SKrzysztof Kosiński def testMultipleComments(self): 261*7249d1a6SKrzysztof Kosiński code = textwrap.dedent(r""" 262*7249d1a6SKrzysztof Kosiński # Comment #1 263*7249d1a6SKrzysztof Kosiński 264*7249d1a6SKrzysztof Kosiński # Comment #2 265*7249d1a6SKrzysztof Kosiński def f(): 266*7249d1a6SKrzysztof Kosiński pass 267*7249d1a6SKrzysztof Kosiński """) 268*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 269*7249d1a6SKrzysztof Kosiński self._CheckLogicalLines(llines, [ 270*7249d1a6SKrzysztof Kosiński (0, ['# Comment #1']), 271*7249d1a6SKrzysztof Kosiński (0, ['# Comment #2']), 272*7249d1a6SKrzysztof Kosiński (0, ['def', 'f', '(', ')', ':']), 273*7249d1a6SKrzysztof Kosiński (1, ['pass']), 274*7249d1a6SKrzysztof Kosiński ]) 275*7249d1a6SKrzysztof Kosiński 276*7249d1a6SKrzysztof Kosiński def testSplitListWithComment(self): 277*7249d1a6SKrzysztof Kosiński code = textwrap.dedent(r""" 278*7249d1a6SKrzysztof Kosiński a = [ 279*7249d1a6SKrzysztof Kosiński 'a', 280*7249d1a6SKrzysztof Kosiński 'b', 281*7249d1a6SKrzysztof Kosiński 'c', # hello world 282*7249d1a6SKrzysztof Kosiński ] 283*7249d1a6SKrzysztof Kosiński """) 284*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 285*7249d1a6SKrzysztof Kosiński self._CheckLogicalLines(llines, [(0, [ 286*7249d1a6SKrzysztof Kosiński 'a', '=', '[', "'a'", ',', "'b'", ',', "'c'", ',', '# hello world', ']' 287*7249d1a6SKrzysztof Kosiński ])]) 288*7249d1a6SKrzysztof Kosiński 289*7249d1a6SKrzysztof Kosiński 290*7249d1a6SKrzysztof Kosińskiclass MatchBracketsTest(yapf_test_helper.YAPFTest): 291*7249d1a6SKrzysztof Kosiński 292*7249d1a6SKrzysztof Kosiński def _CheckMatchingBrackets(self, llines, list_of_expected): 293*7249d1a6SKrzysztof Kosiński """Check that the tokens have the expected matching bracket. 294*7249d1a6SKrzysztof Kosiński 295*7249d1a6SKrzysztof Kosiński Arguments: 296*7249d1a6SKrzysztof Kosiński llines: list of LogicalLine. 297*7249d1a6SKrzysztof Kosiński list_of_expected: list of (index, index) pairs. The matching brackets at 298*7249d1a6SKrzysztof Kosiński the indexes need to match. Non-semantic tokens are filtered out from the 299*7249d1a6SKrzysztof Kosiński expected values. 300*7249d1a6SKrzysztof Kosiński """ 301*7249d1a6SKrzysztof Kosiński actual = [] 302*7249d1a6SKrzysztof Kosiński for lline in llines: 303*7249d1a6SKrzysztof Kosiński filtered_values = [(ft, ft.matching_bracket) 304*7249d1a6SKrzysztof Kosiński for ft in lline.tokens 305*7249d1a6SKrzysztof Kosiński if ft.name not in pytree_utils.NONSEMANTIC_TOKENS] 306*7249d1a6SKrzysztof Kosiński if filtered_values: 307*7249d1a6SKrzysztof Kosiński actual.append(filtered_values) 308*7249d1a6SKrzysztof Kosiński 309*7249d1a6SKrzysztof Kosiński for index, bracket_list in enumerate(list_of_expected): 310*7249d1a6SKrzysztof Kosiński lline = actual[index] 311*7249d1a6SKrzysztof Kosiński if not bracket_list: 312*7249d1a6SKrzysztof Kosiński for value in lline: 313*7249d1a6SKrzysztof Kosiński self.assertIsNone(value[1]) 314*7249d1a6SKrzysztof Kosiński else: 315*7249d1a6SKrzysztof Kosiński for open_bracket, close_bracket in bracket_list: 316*7249d1a6SKrzysztof Kosiński self.assertEqual(lline[open_bracket][0], lline[close_bracket][1]) 317*7249d1a6SKrzysztof Kosiński self.assertEqual(lline[close_bracket][0], lline[open_bracket][1]) 318*7249d1a6SKrzysztof Kosiński 319*7249d1a6SKrzysztof Kosiński def testFunctionDef(self): 320*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 321*7249d1a6SKrzysztof Kosiński def foo(a, b=['w','d'], c=[42, 37]): 322*7249d1a6SKrzysztof Kosiński pass 323*7249d1a6SKrzysztof Kosiński """) 324*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 325*7249d1a6SKrzysztof Kosiński self._CheckMatchingBrackets(llines, [ 326*7249d1a6SKrzysztof Kosiński [(2, 20), (7, 11), (15, 19)], 327*7249d1a6SKrzysztof Kosiński [], 328*7249d1a6SKrzysztof Kosiński ]) 329*7249d1a6SKrzysztof Kosiński 330*7249d1a6SKrzysztof Kosiński def testDecorator(self): 331*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 332*7249d1a6SKrzysztof Kosiński @bar() 333*7249d1a6SKrzysztof Kosiński def foo(a, b, c): 334*7249d1a6SKrzysztof Kosiński pass 335*7249d1a6SKrzysztof Kosiński """) 336*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 337*7249d1a6SKrzysztof Kosiński self._CheckMatchingBrackets(llines, [ 338*7249d1a6SKrzysztof Kosiński [(2, 3)], 339*7249d1a6SKrzysztof Kosiński [(2, 8)], 340*7249d1a6SKrzysztof Kosiński [], 341*7249d1a6SKrzysztof Kosiński ]) 342*7249d1a6SKrzysztof Kosiński 343*7249d1a6SKrzysztof Kosiński def testClassDef(self): 344*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 345*7249d1a6SKrzysztof Kosiński class A(B, C, D): 346*7249d1a6SKrzysztof Kosiński pass 347*7249d1a6SKrzysztof Kosiński """) 348*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 349*7249d1a6SKrzysztof Kosiński self._CheckMatchingBrackets(llines, [ 350*7249d1a6SKrzysztof Kosiński [(2, 8)], 351*7249d1a6SKrzysztof Kosiński [], 352*7249d1a6SKrzysztof Kosiński ]) 353*7249d1a6SKrzysztof Kosiński 354*7249d1a6SKrzysztof Kosiński 355*7249d1a6SKrzysztof Kosińskiif __name__ == '__main__': 356*7249d1a6SKrzysztof Kosiński unittest.main() 357