| # 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. |
| """ |
| ''') |