mirror of
https://fuchsia.googlesource.com/third_party/github.com/pylint-dev/pylint
synced 2024-09-21 16:19:21 +00:00
9e0baf370a
git is the source of truth for the copyright, copyrite (the tool) was taking exponentially longer with each release, and it's polluting the code with sometime as much as 50 lines of names.
56 lines
2.1 KiB
Python
56 lines
2.1 KiB
Python
# Licensed under the GPL: https://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
|
# For details: https://github.com/PyCQA/pylint/blob/main/LICENSE
|
|
# Copyright (c) https://github.com/PyCQA/pylint/graphs/contributors
|
|
|
|
import csv
|
|
import os
|
|
from typing import List, Optional
|
|
|
|
from _pytest.config import Config
|
|
|
|
from pylint.constants import PY38_PLUS
|
|
from pylint.testutils.functional.test_file import FunctionalTestFile
|
|
from pylint.testutils.lint_module_test import LintModuleTest, MessageCounter
|
|
from pylint.testutils.output_line import OutputLine
|
|
|
|
|
|
class LintModuleOutputUpdate(LintModuleTest):
|
|
"""Class to be used if expected output files should be updated instead of checked."""
|
|
|
|
class TestDialect(csv.excel):
|
|
"""Dialect used by the csv writer."""
|
|
|
|
delimiter = ":"
|
|
lineterminator = "\n"
|
|
|
|
csv.register_dialect("test", TestDialect)
|
|
|
|
def __init__(
|
|
self, test_file: FunctionalTestFile, config: Optional[Config] = None
|
|
) -> None:
|
|
if not PY38_PLUS:
|
|
raise RuntimeError(
|
|
"You need at least python 3.8 for the functional test updater to work. "
|
|
"This is because python 3.8 includes a new AST parser, which amongst others "
|
|
"returns the end line and end column of most nodes."
|
|
)
|
|
super().__init__(test_file, config)
|
|
|
|
def _check_output_text(
|
|
self,
|
|
_: MessageCounter,
|
|
expected_output: List[OutputLine],
|
|
actual_output: List[OutputLine],
|
|
) -> None:
|
|
"""Overwrite or remove the expected output file based on actual output."""
|
|
# Remove the file if no output is actually expected and a file exists
|
|
if not expected_output and not actual_output:
|
|
if os.path.exists(self._test_file.expected_output):
|
|
os.remove(self._test_file.expected_output)
|
|
return
|
|
# Write file with expected output
|
|
with open(self._test_file.expected_output, "w", encoding="utf-8") as f:
|
|
writer = csv.writer(f, dialect="test")
|
|
for line in actual_output:
|
|
writer.writerow(line.to_csv())
|