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