Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix norminette error formatters output that was not using newlines #488

Merged
merged 1 commit into from
Feb 19, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion norminette/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ def main():
except KeyboardInterrupt:
sys.exit(1)
errors = format(files)
print(errors)
print(errors, end='')
sys.exit(1 if len(file.errors) else 0)


Expand Down
3 changes: 2 additions & 1 deletion norminette/errors.py
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ def __str__(self) -> str:
highlight = error.highlights[0]
output += f"\n{error.level}: {error.name:<20} "
output += f"(line: {highlight.lineno:>3}, col: {highlight.column:>3}):\t{brief}"
output += '\n'
return output


Expand All @@ -101,7 +102,7 @@ def __str__(self):
output = {
"files": files,
}
return json.dumps(output, separators=",:")
return json.dumps(output, separators=",:") + '\n'


formatters = (
Expand Down
2 changes: 1 addition & 1 deletion tests/rules/rules_generator_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ def test_rule_for_file(file, capsys):
context = Context(file, lexer.get_tokens(), debug=2)
registry.run(context)
errors = HumanizedErrorsFormatter(file)
print(errors)
print(errors, end='')
captured = capsys.readouterr()

assert captured.out == out_content
58 changes: 57 additions & 1 deletion tests/test_errors.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,68 @@
import json

import pytest
from unittest.mock import patch

from norminette.file import File
from norminette.lexer import Lexer
from norminette.context import Context
from norminette.registry import Registry
from norminette.errors import JSONErrorsFormatter
from norminette.errors import HumanizedErrorsFormatter


@pytest.mark.parametrize("files, expected_result, ", [it.values() for it in [
{
"files": [
File("/nium/a.c", "#include <stdio.h>"),
File("/nium/b.c", "int\tmain(void)\n{\n\treturn (1);\n}\n"),
File("/nium/c.c", "int\tfn(int n);\n"),
],
"expected_result": "a.c: OK!\nb.c: OK!\nc.c: OK!\n",
},
{
"files": [
File("skyfall.c", "// Hello"),
],
"expected_result": "skyfall.c: OK!\n",
},
{
"files": [
File("/nium/mortari.c", "#define TRUE 1"),
File("/nium/gensler.c", "int\tmain();\n"),
],
"expected_result": (
"mortari.c: OK!\n"
"gensler.c: Error!\n"
"Error: NO_ARGS_VOID (line: 1, col: 10):\tEmpty function argument requires void\n"
)
},
{
"files": [
File("/nium/john.c", "#define x"),
File("/nium/galt.c", "#define x"),
],
"expected_result": (
"john.c: Error!\n"
"Error: MACRO_NAME_CAPITAL (line: 1, col: 9):\tMacro name must be capitalized\n"
"galt.c: Error!\n"
"Error: MACRO_NAME_CAPITAL (line: 1, col: 9):\tMacro name must be capitalized\n"
)
},
]
])
def test_humanized_formatter_errored_file(files, expected_result):
registry = Registry()

with patch("norminette.rules.check_header.CheckHeader.run") as _:
for file in files:
lexer = Lexer(file)
context = Context(file, lexer.get_tokens())
registry.run(context)

formatter = HumanizedErrorsFormatter(files)
assert str(formatter) == expected_result


tests = [
{
Expand Down Expand Up @@ -44,4 +100,4 @@ def test_json_formatter_errored_file(file, test):
Registry().run(context)

formatter = JSONErrorsFormatter(file)
assert str(formatter) == json.dumps(test, separators=",:")
assert str(formatter) == json.dumps(test, separators=",:") + '\n'
Loading