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"""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ńskifrom yapf.yapflib import verifier 23*7249d1a6SKrzysztof Kosiński 24*7249d1a6SKrzysztof Kosińskifrom yapftests import yapf_test_helper 25*7249d1a6SKrzysztof Kosiński 26*7249d1a6SKrzysztof Kosiński 27*7249d1a6SKrzysztof Kosiński@unittest.skipIf(py3compat.PY3, 'Requires Python 2') 28*7249d1a6SKrzysztof Kosińskiclass TestVerifyNoVerify(yapf_test_helper.YAPFTest): 29*7249d1a6SKrzysztof Kosiński 30*7249d1a6SKrzysztof Kosiński @classmethod 31*7249d1a6SKrzysztof Kosiński def setUpClass(cls): 32*7249d1a6SKrzysztof Kosiński style.SetGlobalStyle(style.CreatePEP8Style()) 33*7249d1a6SKrzysztof Kosiński 34*7249d1a6SKrzysztof Kosiński def testVerifyException(self): 35*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 36*7249d1a6SKrzysztof Kosiński class ABC(metaclass=type): 37*7249d1a6SKrzysztof Kosiński pass 38*7249d1a6SKrzysztof Kosiński """) 39*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 40*7249d1a6SKrzysztof Kosiński with self.assertRaises(verifier.InternalError): 41*7249d1a6SKrzysztof Kosiński reformatter.Reformat(llines, verify=True) 42*7249d1a6SKrzysztof Kosiński reformatter.Reformat(llines) # verify should be False by default. 43*7249d1a6SKrzysztof Kosiński 44*7249d1a6SKrzysztof Kosiński def testNoVerify(self): 45*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 46*7249d1a6SKrzysztof Kosiński class ABC(metaclass=type): 47*7249d1a6SKrzysztof Kosiński pass 48*7249d1a6SKrzysztof Kosiński """) 49*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 50*7249d1a6SKrzysztof Kosiński class ABC(metaclass=type): 51*7249d1a6SKrzysztof Kosiński pass 52*7249d1a6SKrzysztof Kosiński """) 53*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 54*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, 55*7249d1a6SKrzysztof Kosiński reformatter.Reformat(llines, verify=False)) 56*7249d1a6SKrzysztof Kosiński 57*7249d1a6SKrzysztof Kosiński def testVerifyFutureImport(self): 58*7249d1a6SKrzysztof Kosiński unformatted_code = textwrap.dedent("""\ 59*7249d1a6SKrzysztof Kosiński from __future__ import print_function 60*7249d1a6SKrzysztof Kosiński 61*7249d1a6SKrzysztof Kosiński def call_my_function(the_function): 62*7249d1a6SKrzysztof Kosiński the_function("hi") 63*7249d1a6SKrzysztof Kosiński 64*7249d1a6SKrzysztof Kosiński if __name__ == "__main__": 65*7249d1a6SKrzysztof Kosiński call_my_function(print) 66*7249d1a6SKrzysztof Kosiński """) 67*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 68*7249d1a6SKrzysztof Kosiński with self.assertRaises(verifier.InternalError): 69*7249d1a6SKrzysztof Kosiński reformatter.Reformat(llines, verify=True) 70*7249d1a6SKrzysztof Kosiński 71*7249d1a6SKrzysztof Kosiński expected_formatted_code = textwrap.dedent("""\ 72*7249d1a6SKrzysztof Kosiński from __future__ import print_function 73*7249d1a6SKrzysztof Kosiński 74*7249d1a6SKrzysztof Kosiński 75*7249d1a6SKrzysztof Kosiński def call_my_function(the_function): 76*7249d1a6SKrzysztof Kosiński the_function("hi") 77*7249d1a6SKrzysztof Kosiński 78*7249d1a6SKrzysztof Kosiński 79*7249d1a6SKrzysztof Kosiński if __name__ == "__main__": 80*7249d1a6SKrzysztof Kosiński call_my_function(print) 81*7249d1a6SKrzysztof Kosiński """) 82*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(unformatted_code) 83*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(expected_formatted_code, 84*7249d1a6SKrzysztof Kosiński reformatter.Reformat(llines, verify=False)) 85*7249d1a6SKrzysztof Kosiński 86*7249d1a6SKrzysztof Kosiński def testContinuationLineShouldBeDistinguished(self): 87*7249d1a6SKrzysztof Kosiński code = textwrap.dedent("""\ 88*7249d1a6SKrzysztof Kosiński class Foo(object): 89*7249d1a6SKrzysztof Kosiński 90*7249d1a6SKrzysztof Kosiński def bar(self): 91*7249d1a6SKrzysztof Kosiński if self.solo_generator_that_is_long is None and len( 92*7249d1a6SKrzysztof Kosiński self.generators + self.next_batch) == 1: 93*7249d1a6SKrzysztof Kosiński pass 94*7249d1a6SKrzysztof Kosiński """) 95*7249d1a6SKrzysztof Kosiński llines = yapf_test_helper.ParseAndUnwrap(code) 96*7249d1a6SKrzysztof Kosiński self.assertCodeEqual(code, reformatter.Reformat(llines, verify=False)) 97*7249d1a6SKrzysztof Kosiński 98*7249d1a6SKrzysztof Kosiński 99*7249d1a6SKrzysztof Kosińskiif __name__ == '__main__': 100*7249d1a6SKrzysztof Kosiński unittest.main() 101