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.line_joiner.""" 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 line_joiner 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 LineJoinerTest(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.CreatePEP8Style()) 30*7249d1a6SKrzysztof Kosiński 31*7249d1a6SKrzysztof Kosiński def _CheckLineJoining(self, code, join_lines): 32*7249d1a6SKrzysztof Kosiński """Check that the given LogicalLines are joined as expected. 33*7249d1a6SKrzysztof Kosiński 34*7249d1a6SKrzysztof Kosiński Arguments: 35*7249d1a6SKrzysztof Kosiński code: The code to check to see if we can join it. 36*7249d1a6SKrzysztof Kosiński join_lines: True if we expect the lines to be joined. 37*7249d1a6SKrzysztof Kosiński """ 38*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 39*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(line_joiner.CanMergeMultipleLines(llines), join_lines) 40*7249d1a6SKrzysztof Kosiński 41*7249d1a6SKrzysztof Kosiński def testSimpleSingleLineStatement(self): 42*7249d1a6SKrzysztof Kosiński code = textwrap.dedent(u"""\ 43*7249d1a6SKrzysztof Kosiński if isinstance(a, int): continue 44*7249d1a6SKrzysztof Kosiński """) 45*7249d1a6SKrzysztof Kosiński self._CheckLineJoining(code, join_lines=True) 46*7249d1a6SKrzysztof Kosiński 47*7249d1a6SKrzysztof Kosiński def testSimpleMultipleLineStatement(self): 48*7249d1a6SKrzysztof Kosiński code = textwrap.dedent(u"""\ 49*7249d1a6SKrzysztof Kosiński if isinstance(b, int): 50*7249d1a6SKrzysztof Kosiński continue 51*7249d1a6SKrzysztof Kosiński """) 52*7249d1a6SKrzysztof Kosiński self._CheckLineJoining(code, join_lines=False) 53*7249d1a6SKrzysztof Kosiński 54*7249d1a6SKrzysztof Kosiński def testSimpleMultipleLineComplexStatement(self): 55*7249d1a6SKrzysztof Kosiński code = textwrap.dedent(u"""\ 56*7249d1a6SKrzysztof Kosiński if isinstance(c, int): 57*7249d1a6SKrzysztof Kosiński while True: 58*7249d1a6SKrzysztof Kosiński continue 59*7249d1a6SKrzysztof Kosiński """) 60*7249d1a6SKrzysztof Kosiński self._CheckLineJoining(code, join_lines=False) 61*7249d1a6SKrzysztof Kosiński 62*7249d1a6SKrzysztof Kosiński def testSimpleMultipleLineStatementWithComment(self): 63*7249d1a6SKrzysztof Kosiński code = textwrap.dedent(u"""\ 64*7249d1a6SKrzysztof Kosiński if isinstance(d, int): continue # We're pleased that d's an int. 65*7249d1a6SKrzysztof Kosiński """) 66*7249d1a6SKrzysztof Kosiński self._CheckLineJoining(code, join_lines=True) 67*7249d1a6SKrzysztof Kosiński 68*7249d1a6SKrzysztof Kosiński def testSimpleMultipleLineStatementWithLargeIndent(self): 69*7249d1a6SKrzysztof Kosiński code = textwrap.dedent(u"""\ 70*7249d1a6SKrzysztof Kosiński if isinstance(e, int): continue 71*7249d1a6SKrzysztof Kosiński """) 72*7249d1a6SKrzysztof Kosiński self._CheckLineJoining(code, join_lines=True) 73*7249d1a6SKrzysztof Kosiński 74*7249d1a6SKrzysztof Kosiński def testOverColumnLimit(self): 75*7249d1a6SKrzysztof Kosiński code = textwrap.dedent(u"""\ 76*7249d1a6SKrzysztof Kosiński if instance(bbbbbbbbbbbbbbbbbbbbbbbbb, int): cccccccccccccccccccccccccc = ddddddddddddddddddddd 77*7249d1a6SKrzysztof Kosiński """) # noqa 78*7249d1a6SKrzysztof Kosiński self._CheckLineJoining(code, join_lines=False) 79*7249d1a6SKrzysztof Kosiński 80*7249d1a6SKrzysztof Kosiński 81*7249d1a6SKrzysztof Kosińskiif __name__ == '__main__': 82*7249d1a6SKrzysztof Kosiński unittest.main() 83