xref: /aosp_15_r20/external/yapf/yapftests/reformatter_facebook_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"""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