| # Copyright 2014 The Chromium Authors. All rights reserved. | |
| # Use of this source code is governed by a BSD-style license that can be | |
| # found in the LICENSE file. | |
| import StringIO | |
| import unittest | |
| from webkitpy.common.system.system_host_mock import MockSystemHost | |
| from webkitpy.formatter.main import main | |
| ACTUAL_INPUT = ''' | |
| def foo(): | |
| """triple-quoted docstring""" | |
| try: | |
| bar = "bar" | |
| long_list = ['this is a list of strings that should be wrapped', "and consistently quoted"] | |
| longer_list = ['this is a list of strings that should be wrapped', "and consistently quoted", "because it's important to test quoting"] | |
| except Exception, error: | |
| pass | |
| ''' | |
| EXPECTED_BLINK_OUTPUT = ''' | |
| def foo(): | |
| """triple-quoted docstring""" | |
| try: | |
| bar = 'bar' | |
| long_list = ['this is a list of strings that should be wrapped', 'and consistently quoted'] | |
| longer_list = [ | |
| 'this is a list of strings that should be wrapped', | |
| 'and consistently quoted', | |
| "because it's important to test quoting"] | |
| except Exception as error: | |
| pass | |
| ''' | |
| EXPECTED_CHROMIUM_OUTPUT = ''' | |
| def foo(): | |
| """triple-quoted docstring""" | |
| try: | |
| bar = 'bar' | |
| long_list = [ | |
| 'this is a list of strings that should be wrapped', | |
| 'and consistently quoted'] | |
| longer_list = [ | |
| 'this is a list of strings that should be wrapped', | |
| 'and consistently quoted', | |
| "because it's important to test quoting"] | |
| except Exception as error: | |
| pass | |
| ''' | |
| EXPECTED_ONLY_DOUBLE_QUOTED_OUTPUT = ''' | |
| def foo(): | |
| """triple-quoted docstring""" | |
| try: | |
| bar = "bar" | |
| long_list = ["this is a list of strings that should be wrapped", "and consistently quoted"] | |
| longer_list = ["this is a list of strings that should be wrapped", "and consistently quoted", "because it's important to test quoting"] | |
| except Exception, error: | |
| pass | |
| ''' | |
| class TestMain(unittest.TestCase): | |
| maxDiff = 4096 | |
| def test_files_blink(self): | |
| host = MockSystemHost() | |
| host.filesystem.files = { | |
| 'test.py': ACTUAL_INPUT} | |
| main(host, ['test.py']) | |
| self.assertEqual(host.filesystem.files, { | |
| 'test.py': EXPECTED_BLINK_OUTPUT, | |
| 'test.py.bak': ACTUAL_INPUT}) | |
| def test_files_blink_no_backup(self): | |
| host = MockSystemHost() | |
| host.filesystem.files = { | |
| 'test.py': ACTUAL_INPUT} | |
| main(host, ['--no-backups', 'test.py']) | |
| self.assertEqual(host.filesystem.files, { | |
| 'test.py': EXPECTED_BLINK_OUTPUT}) | |
| def test_stdin_blink(self): | |
| host = MockSystemHost() | |
| host.stdin = StringIO.StringIO(ACTUAL_INPUT) | |
| main(host, ['-']) | |
| self.assertMultiLineEqual(host.stdout.getvalue(), EXPECTED_BLINK_OUTPUT) | |
| def test_stdin_chromium(self): | |
| host = MockSystemHost() | |
| host.stdin = StringIO.StringIO(ACTUAL_INPUT) | |
| main(host, ['--chromium', '-']) | |
| self.assertMultiLineEqual(host.stdout.getvalue(), EXPECTED_CHROMIUM_OUTPUT) | |
| def test_stdin_no_changes(self): | |
| host = MockSystemHost() | |
| host.stdin = StringIO.StringIO(ACTUAL_INPUT) | |
| main(host, ['--no-autopep8', '--leave-strings-alone', '-']) | |
| self.assertMultiLineEqual(host.stdout.getvalue(), ACTUAL_INPUT) | |
| def test_stdin_only_double_quoting(self): | |
| host = MockSystemHost() | |
| host.stdin = StringIO.StringIO(ACTUAL_INPUT) | |
| main(host, ['--no-autopep8', '--double-quote-strings', '-']) | |
| self.assertMultiLineEqual(host.stdout.getvalue(), EXPECTED_ONLY_DOUBLE_QUOTED_OUTPUT) | |
| def test_format_docstrings(self): | |
| host = MockSystemHost() | |
| host.stdin = StringIO.StringIO(''' | |
| def f(): | |
| """ | |
| triple-quoted docstring | |
| with multiple lines | |
| """ | |
| x = """ | |
| this is a regular multi-line string, not a docstring | |
| """ | |
| return x | |
| ''') | |
| main(host, ['-']) | |
| self.assertMultiLineEqual(host.stdout.getvalue(), ''' | |
| def f(): | |
| """triple-quoted docstring | |
| with multiple lines | |
| """ | |
| x = """ | |
| this is a regular multi-line string, not a docstring | |
| """ | |
| return x | |
| ''') | |
| def test_format_docstrings_indentation(self): | |
| host = MockSystemHost() | |
| host.stdin = StringIO.StringIO(''' | |
| def f(): | |
| """This is a docstring | |
| With extra indentation on this line. | |
| """ | |
| ''') | |
| main(host, ['-']) | |
| self.assertMultiLineEqual(host.stdout.getvalue(), ''' | |
| def f(): | |
| """This is a docstring | |
| With extra indentation on this line. | |
| """ | |
| ''') |