Read simple data cases automatically (#3034)

Co-authored-by: Felix Hildén <felix.hilden@gmail.com>
This commit is contained in:
Sagi Shadur 2022-05-08 22:27:40 +03:00 committed by GitHub
parent 20d8ccb542
commit fc2a16433e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
49 changed files with 25 additions and 63 deletions

View File

@ -179,8 +179,8 @@ def test_piping_diff(self) -> None:
r"(STDIN|STDOUT)\t\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d\.\d\d\d\d\d\d " r"(STDIN|STDOUT)\t\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d\.\d\d\d\d\d\d "
r"\+\d\d\d\d" r"\+\d\d\d\d"
) )
source, _ = read_data("expression.py") source, _ = read_data("simple_cases/expression.py")
expected, _ = read_data("expression.diff") expected, _ = read_data("simple_cases/expression.diff")
args = [ args = [
"-", "-",
"--fast", "--fast",
@ -197,7 +197,7 @@ def test_piping_diff(self) -> None:
self.assertEqual(expected, actual) self.assertEqual(expected, actual)
def test_piping_diff_with_color(self) -> None: def test_piping_diff_with_color(self) -> None:
source, _ = read_data("expression.py") source, _ = read_data("simple_cases/expression.py")
args = [ args = [
"-", "-",
"--fast", "--fast",
@ -241,7 +241,7 @@ def test_pep_572_version_detection(self) -> None:
self.assertIn(black.TargetVersion.PY38, versions) self.assertIn(black.TargetVersion.PY38, versions)
def test_expression_ff(self) -> None: def test_expression_ff(self) -> None:
source, expected = read_data("expression") source, expected = read_data("simple_cases/expression.py")
tmp_file = Path(black.dump_to_file(source)) tmp_file = Path(black.dump_to_file(source))
try: try:
self.assertTrue(ff(tmp_file, write_back=black.WriteBack.YES)) self.assertTrue(ff(tmp_file, write_back=black.WriteBack.YES))
@ -255,8 +255,8 @@ def test_expression_ff(self) -> None:
black.assert_stable(source, actual, DEFAULT_MODE) black.assert_stable(source, actual, DEFAULT_MODE)
def test_expression_diff(self) -> None: def test_expression_diff(self) -> None:
source, _ = read_data("expression.py") source, _ = read_data("simple_cases/expression.py")
expected, _ = read_data("expression.diff") expected, _ = read_data("simple_cases/expression.diff")
tmp_file = Path(black.dump_to_file(source)) tmp_file = Path(black.dump_to_file(source))
diff_header = re.compile( diff_header = re.compile(
rf"{re.escape(str(tmp_file))}\t\d\d\d\d-\d\d-\d\d " rf"{re.escape(str(tmp_file))}\t\d\d\d\d-\d\d-\d\d "
@ -281,8 +281,8 @@ def test_expression_diff(self) -> None:
self.assertEqual(expected, actual, msg) self.assertEqual(expected, actual, msg)
def test_expression_diff_with_color(self) -> None: def test_expression_diff_with_color(self) -> None:
source, _ = read_data("expression.py") source, _ = read_data("simple_cases/expression.py")
expected, _ = read_data("expression.diff") expected, _ = read_data("simple_cases/expression.diff")
tmp_file = Path(black.dump_to_file(source)) tmp_file = Path(black.dump_to_file(source))
try: try:
result = BlackRunner().invoke( result = BlackRunner().invoke(
@ -320,7 +320,7 @@ def test_string_quotes(self) -> None:
black.assert_stable(source, not_normalized, mode=mode) black.assert_stable(source, not_normalized, mode=mode)
def test_skip_magic_trailing_comma(self) -> None: def test_skip_magic_trailing_comma(self) -> None:
source, _ = read_data("expression.py") source, _ = read_data("simple_cases/expression.py")
expected, _ = read_data("expression_skip_magic_trailing_comma.diff") expected, _ = read_data("expression_skip_magic_trailing_comma.diff")
tmp_file = Path(black.dump_to_file(source)) tmp_file = Path(black.dump_to_file(source))
diff_header = re.compile( diff_header = re.compile(
@ -755,7 +755,7 @@ def test_get_features_used(self) -> None:
self.assertEqual(black.get_features_used(node), {Feature.NUMERIC_UNDERSCORES}) self.assertEqual(black.get_features_used(node), {Feature.NUMERIC_UNDERSCORES})
node = black.lib2to3_parse("123456\n") node = black.lib2to3_parse("123456\n")
self.assertEqual(black.get_features_used(node), set()) self.assertEqual(black.get_features_used(node), set())
source, expected = read_data("function") source, expected = read_data("simple_cases/function.py")
node = black.lib2to3_parse(source) node = black.lib2to3_parse(source)
expected_features = { expected_features = {
Feature.TRAILING_COMMA_IN_CALL, Feature.TRAILING_COMMA_IN_CALL,
@ -765,7 +765,7 @@ def test_get_features_used(self) -> None:
self.assertEqual(black.get_features_used(node), expected_features) self.assertEqual(black.get_features_used(node), expected_features)
node = black.lib2to3_parse(expected) node = black.lib2to3_parse(expected)
self.assertEqual(black.get_features_used(node), expected_features) self.assertEqual(black.get_features_used(node), expected_features)
source, expected = read_data("expression") source, expected = read_data("simple_cases/expression.py")
node = black.lib2to3_parse(source) node = black.lib2to3_parse(source)
self.assertEqual(black.get_features_used(node), set()) self.assertEqual(black.get_features_used(node), set())
node = black.lib2to3_parse(expected) node = black.lib2to3_parse(expected)
@ -939,7 +939,7 @@ def test_check_diff_use_together(self) -> None:
src1 = (THIS_DIR / "data" / "string_quotes.py").resolve() src1 = (THIS_DIR / "data" / "string_quotes.py").resolve()
self.invokeBlack([str(src1), "--diff", "--check"], exit_code=1) self.invokeBlack([str(src1), "--diff", "--check"], exit_code=1)
# Files which will not be reformatted. # Files which will not be reformatted.
src2 = (THIS_DIR / "data" / "composition.py").resolve() src2 = (THIS_DIR / "data" / "simple_cases" / "composition.py").resolve()
self.invokeBlack([str(src2), "--diff", "--check"]) self.invokeBlack([str(src2), "--diff", "--check"])
# Multi file command. # Multi file command.
self.invokeBlack([str(src1), str(src2), "--diff", "--check"], exit_code=1) self.invokeBlack([str(src1), str(src2), "--diff", "--check"], exit_code=1)
@ -1168,7 +1168,7 @@ def test_reformat_one_with_stdin_and_existing_path(self) -> None:
report = MagicMock() report = MagicMock()
# Even with an existing file, since we are forcing stdin, black # Even with an existing file, since we are forcing stdin, black
# should output to stdout and not modify the file inplace # should output to stdout and not modify the file inplace
p = Path(str(THIS_DIR / "data/collections.py")) p = THIS_DIR / "data" / "simple_cases" / "collections.py"
# Make sure is_file actually returns True # Make sure is_file actually returns True
self.assertTrue(p.is_file()) self.assertTrue(p.is_file())
path = Path(f"__BLACK_STDIN_FILENAME__{p}") path = Path(f"__BLACK_STDIN_FILENAME__{p}")

View File

@ -12,56 +12,9 @@
assert_format, assert_format,
dump_to_stderr, dump_to_stderr,
read_data, read_data,
all_data_cases,
) )
SIMPLE_CASES: List[str] = [
"attribute_access_on_number_literals",
"beginning_backslash",
"bracketmatch",
"class_blank_parentheses",
"class_methods_new_line",
"collections",
"comments",
"comments2",
"comments3",
"comments4",
"comments5",
"comments6",
"comments_non_breaking_space",
"comment_after_escaped_newline",
"composition",
"composition_no_trailing_comma",
"docstring",
"empty_lines",
"expression",
"fmtonoff",
"fmtonoff2",
"fmtonoff3",
"fmtonoff4",
"fmtskip",
"fmtskip2",
"fmtskip3",
"fmtskip4",
"fmtskip5",
"fmtskip6",
"fmtskip7",
"fstring",
"function",
"function2",
"function_trailing_comma",
"import_spacing",
"power_op_spacing",
"remove_parens",
"slices",
"string_prefixes",
"torture",
"trailing_comma_optional_parens1",
"trailing_comma_optional_parens2",
"trailing_comma_optional_parens3",
"tricky_unicode_symbols",
"tupleassign",
]
PY310_CASES: List[str] = [ PY310_CASES: List[str] = [
"starred_for_target", "starred_for_target",
"pattern_matching_simple", "pattern_matching_simple",
@ -147,7 +100,7 @@ def check_file(filename: str, mode: black.Mode, *, data: bool = True) -> None:
assert_format(source, expected, mode, fast=False) assert_format(source, expected, mode, fast=False)
@pytest.mark.parametrize("filename", SIMPLE_CASES) @pytest.mark.parametrize("filename", all_data_cases("simple_cases"))
def test_simple_format(filename: str) -> None: def test_simple_format(filename: str) -> None:
check_file(filename, DEFAULT_MODE) check_file(filename, DEFAULT_MODE)

View File

@ -90,12 +90,21 @@ def assertFormatEqual(self, expected: str, actual: str) -> None:
_assert_format_equal(expected, actual) _assert_format_equal(expected, actual)
def all_data_cases(dir_name: str, data: bool = True) -> List[str]:
base_dir = DATA_DIR if data else PROJECT_ROOT
cases_dir = base_dir / dir_name
assert cases_dir.is_dir()
return [f"{dir_name}/{case_path.stem}" for case_path in cases_dir.iterdir()]
def read_data(name: str, data: bool = True) -> Tuple[str, str]: def read_data(name: str, data: bool = True) -> Tuple[str, str]:
"""read_data('test_name') -> 'input', 'output'""" """read_data('test_name') -> 'input', 'output'"""
if not name.endswith((".py", ".pyi", ".out", ".diff")): if not name.endswith((".py", ".pyi", ".out", ".diff")):
name += ".py" name += ".py"
base_dir = DATA_DIR if data else PROJECT_ROOT base_dir = DATA_DIR if data else PROJECT_ROOT
return read_data_from_file(base_dir / name) case_path = base_dir / name
assert case_path.is_file(), f"{case_path} is not a file."
return read_data_from_file(case_path)
def read_data_from_file(file_name: Path) -> Tuple[str, str]: def read_data_from_file(file_name: Path) -> Tuple[str, str]: