diff options
Diffstat (limited to 'yapftests/style_test.py')
-rw-r--r-- | yapftests/style_test.py | 174 |
1 files changed, 105 insertions, 69 deletions
diff --git a/yapftests/style_test.py b/yapftests/style_test.py index 7f4a465..8a37f95 100644 --- a/yapftests/style_test.py +++ b/yapftests/style_test.py @@ -14,6 +14,7 @@ # limitations under the License. """Tests for yapf.style.""" +import os import shutil import tempfile import textwrap @@ -22,19 +23,31 @@ import unittest from yapf.yapflib import style from yapftests import utils +from yapftests import yapf_test_helper -class UtilsTest(unittest.TestCase): +class UtilsTest(yapf_test_helper.YAPFTest): def testContinuationAlignStyleStringConverter(self): - self.assertEqual(style._ContinuationAlignStyleStringConverter(''), 'SPACE') - self.assertEqual( - style._ContinuationAlignStyleStringConverter('space'), 'SPACE') - self.assertEqual( - style._ContinuationAlignStyleStringConverter('fixed'), 'FIXED') - self.assertEqual( - style._ContinuationAlignStyleStringConverter('valign-right'), - 'VALIGN-RIGHT') + for cont_align_space in ('', 'space', '"space"', '\'space\''): + self.assertEqual( + style._ContinuationAlignStyleStringConverter(cont_align_space), + 'SPACE') + for cont_align_fixed in ('fixed', '"fixed"', '\'fixed\''): + self.assertEqual( + style._ContinuationAlignStyleStringConverter(cont_align_fixed), + 'FIXED') + for cont_align_valignright in ( + 'valign-right', + '"valign-right"', + '\'valign-right\'', + 'valign_right', + '"valign_right"', + '\'valign_right\'', + ): + self.assertEqual( + style._ContinuationAlignStyleStringConverter(cont_align_valignright), + 'VALIGN-RIGHT') with self.assertRaises(ValueError) as ctx: style._ContinuationAlignStyleStringConverter('blahblah') self.assertIn("unknown continuation align style: 'blahblah'", @@ -53,30 +66,36 @@ class UtilsTest(unittest.TestCase): self.assertEqual(style._BoolConverter('false'), False) self.assertEqual(style._BoolConverter('0'), False) + def testIntListConverter(self): + self.assertEqual(style._IntListConverter('1, 2, 3'), [1, 2, 3]) + self.assertEqual(style._IntListConverter('[ 1, 2, 3 ]'), [1, 2, 3]) + self.assertEqual(style._IntListConverter('[ 1, 2, 3, ]'), [1, 2, 3]) -def _LooksLikeChromiumStyle(cfg): - return (cfg['INDENT_WIDTH'] == 2 and - cfg['BLANK_LINE_BEFORE_NESTED_CLASS_OR_DEF']) + def testIntOrIntListConverter(self): + self.assertEqual(style._IntOrIntListConverter('10'), 10) + self.assertEqual(style._IntOrIntListConverter('1, 2, 3'), [1, 2, 3]) def _LooksLikeGoogleStyle(cfg): - return (cfg['INDENT_WIDTH'] == 4 and - cfg['BLANK_LINE_BEFORE_NESTED_CLASS_OR_DEF']) + return cfg['COLUMN_LIMIT'] == 80 and cfg['SPLIT_COMPLEX_COMPREHENSION'] def _LooksLikePEP8Style(cfg): - return (cfg['INDENT_WIDTH'] == 4 and - not cfg['BLANK_LINE_BEFORE_NESTED_CLASS_OR_DEF']) + return cfg['COLUMN_LIMIT'] == 79 def _LooksLikeFacebookStyle(cfg): - return cfg['INDENT_WIDTH'] == 4 and cfg['DEDENT_CLOSING_BRACKETS'] + return cfg['DEDENT_CLOSING_BRACKETS'] + +def _LooksLikeYapfStyle(cfg): + return cfg['SPLIT_BEFORE_DOT'] -class PredefinedStylesByNameTest(unittest.TestCase): + +class PredefinedStylesByNameTest(yapf_test_helper.YAPFTest): @classmethod - def setUpClass(cls): + def setUpClass(cls): # pylint: disable=g-missing-super-call style.SetGlobalStyle(style.CreatePEP8Style()) def testDefault(self): @@ -94,10 +113,10 @@ class PredefinedStylesByNameTest(unittest.TestCase): cfg = style.CreateStyleFromConfig(google_name) self.assertTrue(_LooksLikeGoogleStyle(cfg)) - def testChromiumByName(self): - for chromium_name in ('chromium', 'Chromium', 'CHROMIUM'): - cfg = style.CreateStyleFromConfig(chromium_name) - self.assertTrue(_LooksLikeChromiumStyle(cfg)) + def testYapfByName(self): + for yapf_name in ('yapf', 'YAPF'): + cfg = style.CreateStyleFromConfig(yapf_name) + self.assertTrue(_LooksLikeYapfStyle(cfg)) def testFacebookByName(self): for fb_name in ('facebook', 'FACEBOOK', 'Facebook'): @@ -105,15 +124,15 @@ class PredefinedStylesByNameTest(unittest.TestCase): self.assertTrue(_LooksLikeFacebookStyle(cfg)) -class StyleFromFileTest(unittest.TestCase): +class StyleFromFileTest(yapf_test_helper.YAPFTest): @classmethod - def setUpClass(cls): + def setUpClass(cls): # pylint: disable=g-missing-super-call cls.test_tmpdir = tempfile.mkdtemp() style.SetGlobalStyle(style.CreatePEP8Style()) @classmethod - def tearDownClass(cls): + def tearDownClass(cls): # pylint: disable=g-missing-super-call shutil.rmtree(cls.test_tmpdir) def testDefaultBasedOnStyle(self): @@ -137,17 +156,6 @@ class StyleFromFileTest(unittest.TestCase): self.assertTrue(_LooksLikePEP8Style(cfg)) self.assertEqual(cfg['CONTINUATION_INDENT_WIDTH'], 40) - def testDefaultBasedOnChromiumStyle(self): - cfg = textwrap.dedent(u'''\ - [style] - based_on_style = chromium - continuation_indent_width = 30 - ''') - with utils.TempFileContents(self.test_tmpdir, cfg) as filepath: - cfg = style.CreateStyleFromConfig(filepath) - self.assertTrue(_LooksLikeChromiumStyle(cfg)) - self.assertEqual(cfg['CONTINUATION_INDENT_WIDTH'], 30) - def testDefaultBasedOnGoogleStyle(self): cfg = textwrap.dedent(u'''\ [style] @@ -173,30 +181,30 @@ class StyleFromFileTest(unittest.TestCase): def testBoolOptionValue(self): cfg = textwrap.dedent(u'''\ [style] - based_on_style = chromium + based_on_style = pep8 SPLIT_BEFORE_NAMED_ASSIGNS=False split_before_logical_operator = true ''') with utils.TempFileContents(self.test_tmpdir, cfg) as filepath: cfg = style.CreateStyleFromConfig(filepath) - self.assertTrue(_LooksLikeChromiumStyle(cfg)) + self.assertTrue(_LooksLikePEP8Style(cfg)) self.assertEqual(cfg['SPLIT_BEFORE_NAMED_ASSIGNS'], False) self.assertEqual(cfg['SPLIT_BEFORE_LOGICAL_OPERATOR'], True) def testStringListOptionValue(self): cfg = textwrap.dedent(u'''\ [style] - based_on_style = chromium + based_on_style = pep8 I18N_FUNCTION_CALL = N_, V_, T_ ''') with utils.TempFileContents(self.test_tmpdir, cfg) as filepath: cfg = style.CreateStyleFromConfig(filepath) - self.assertTrue(_LooksLikeChromiumStyle(cfg)) + self.assertTrue(_LooksLikePEP8Style(cfg)) self.assertEqual(cfg['I18N_FUNCTION_CALL'], ['N_', 'V_', 'T_']) def testErrorNoStyleFile(self): - with self.assertRaisesRegexp(style.StyleConfigError, - 'is not a valid style or file path'): + with self.assertRaisesRegex(style.StyleConfigError, + 'is not a valid style or file path'): style.CreateStyleFromConfig('/8822/xyznosuchfile') def testErrorNoStyleSection(self): @@ -205,8 +213,8 @@ class StyleFromFileTest(unittest.TestCase): indent_width=2 ''') with utils.TempFileContents(self.test_tmpdir, cfg) as filepath: - with self.assertRaisesRegexp(style.StyleConfigError, - 'Unable to find section'): + with self.assertRaisesRegex(style.StyleConfigError, + 'Unable to find section'): style.CreateStyleFromConfig(filepath) def testErrorUnknownStyleOption(self): @@ -216,15 +224,45 @@ class StyleFromFileTest(unittest.TestCase): hummus=2 ''') with utils.TempFileContents(self.test_tmpdir, cfg) as filepath: - with self.assertRaisesRegexp(style.StyleConfigError, - 'Unknown style option'): + with self.assertRaisesRegex(style.StyleConfigError, + 'Unknown style option'): style.CreateStyleFromConfig(filepath) + def testPyprojectTomlNoYapfSection(self): + try: + import toml + except ImportError: + return -class StyleFromDict(unittest.TestCase): + filepath = os.path.join(self.test_tmpdir, 'pyproject.toml') + _ = open(filepath, 'w') + with self.assertRaisesRegex(style.StyleConfigError, + 'Unable to find section'): + style.CreateStyleFromConfig(filepath) + + def testPyprojectTomlParseYapfSection(self): + try: + import toml + except ImportError: + return + + cfg = textwrap.dedent(u'''\ + [tool.yapf] + based_on_style = "pep8" + continuation_indent_width = 40 + ''') + filepath = os.path.join(self.test_tmpdir, 'pyproject.toml') + with open(filepath, 'w') as f: + f.write(cfg) + cfg = style.CreateStyleFromConfig(filepath) + self.assertTrue(_LooksLikePEP8Style(cfg)) + self.assertEqual(cfg['CONTINUATION_INDENT_WIDTH'], 40) + + +class StyleFromDict(yapf_test_helper.YAPFTest): @classmethod - def setUpClass(cls): + def setUpClass(cls): # pylint: disable=g-missing-super-call style.SetGlobalStyle(style.CreatePEP8Style()) def testDefaultBasedOnStyle(self): @@ -234,22 +272,22 @@ class StyleFromDict(unittest.TestCase): 'blank_line_before_nested_class_or_def': True } cfg = style.CreateStyleFromConfig(config_dict) - self.assertTrue(_LooksLikeChromiumStyle(cfg)) + self.assertTrue(_LooksLikePEP8Style(cfg)) self.assertEqual(cfg['INDENT_WIDTH'], 2) def testDefaultBasedOnStyleBadDict(self): - self.assertRaisesRegexp(style.StyleConfigError, 'Unknown style option', - style.CreateStyleFromConfig, - {'based_on_styl': 'pep8'}) - self.assertRaisesRegexp(style.StyleConfigError, 'not a valid', - style.CreateStyleFromConfig, - {'INDENT_WIDTH': 'FOUR'}) + self.assertRaisesRegex(style.StyleConfigError, 'Unknown style option', + style.CreateStyleFromConfig, + {'based_on_styl': 'pep8'}) + self.assertRaisesRegex(style.StyleConfigError, 'not a valid', + style.CreateStyleFromConfig, + {'INDENT_WIDTH': 'FOUR'}) -class StyleFromCommandLine(unittest.TestCase): +class StyleFromCommandLine(yapf_test_helper.YAPFTest): @classmethod - def setUpClass(cls): + def setUpClass(cls): # pylint: disable=g-missing-super-call style.SetGlobalStyle(style.CreatePEP8Style()) def testDefaultBasedOnStyle(self): @@ -257,7 +295,7 @@ class StyleFromCommandLine(unittest.TestCase): '{based_on_style: pep8,' ' indent_width: 2,' ' blank_line_before_nested_class_or_def: True}') - self.assertTrue(_LooksLikeChromiumStyle(cfg)) + self.assertTrue(_LooksLikePEP8Style(cfg)) self.assertEqual(cfg['INDENT_WIDTH'], 2) def testDefaultBasedOnStyleNotStrict(self): @@ -265,7 +303,7 @@ class StyleFromCommandLine(unittest.TestCase): '{based_on_style : pep8' ' ,indent_width=2' ' blank_line_before_nested_class_or_def:True}') - self.assertTrue(_LooksLikeChromiumStyle(cfg)) + self.assertTrue(_LooksLikePEP8Style(cfg)) self.assertEqual(cfg['INDENT_WIDTH'], 2) def testDefaultBasedOnExplicitlyUnicodeTypeString(self): @@ -277,17 +315,15 @@ class StyleFromCommandLine(unittest.TestCase): self.assertIsInstance(cfg, dict) def testDefaultBasedOnStyleBadString(self): - self.assertRaisesRegexp(style.StyleConfigError, 'Unknown style option', - style.CreateStyleFromConfig, - '{based_on_styl: pep8}') - self.assertRaisesRegexp(style.StyleConfigError, 'not a valid', - style.CreateStyleFromConfig, '{INDENT_WIDTH: FOUR}') - self.assertRaisesRegexp(style.StyleConfigError, 'Invalid style dict', - style.CreateStyleFromConfig, - '{based_on_style: pep8') + self.assertRaisesRegex(style.StyleConfigError, 'Unknown style option', + style.CreateStyleFromConfig, '{based_on_styl: pep8}') + self.assertRaisesRegex(style.StyleConfigError, 'not a valid', + style.CreateStyleFromConfig, '{INDENT_WIDTH: FOUR}') + self.assertRaisesRegex(style.StyleConfigError, 'Invalid style dict', + style.CreateStyleFromConfig, '{based_on_style: pep8') -class StyleHelp(unittest.TestCase): +class StyleHelp(yapf_test_helper.YAPFTest): def testHelpKeys(self): settings = sorted(style.Help()) |