MarketSquare / robotframework-sherlock

Robot Framework code inspector
Apache License 2.0
13 stars 1 forks source link

keywords = [kw for kw in resource.keywords] when resource.keywords is None #73

Closed Snooz82 closed 1 year ago

Snooz82 commented 2 years ago
Loaded /Users/snooz/Source/MarketSquare/robotframework-browser/results/output.xml output file
Traceback (most recent call last):
  File "/Users/snooz/Source/MarketSquare/robotframework-browser/.venv/bin/sherlock", line 8, in <module>
    sys.exit(run_cli())
  File "/Users/snooz/Source/MarketSquare/robotframework-browser/.venv/lib/python3.9/site-packages/sherlock/__init__.py", line 19, in run_cli
    raise err
  File "/Users/snooz/Source/MarketSquare/robotframework-browser/.venv/lib/python3.9/site-packages/sherlock/__init__.py", line 9, in run_cli
    runner.run()
  File "/Users/snooz/Source/MarketSquare/robotframework-browser/.venv/lib/python3.9/site-packages/sherlock/core.py", line 41, in run
    self.report()
  File "/Users/snooz/Source/MarketSquare/robotframework-browser/.venv/lib/python3.9/site-packages/sherlock/core.py", line 51, in report
    print_report(tree, self.config.log_output)
  File "/Users/snooz/Source/MarketSquare/robotframework-browser/.venv/lib/python3.9/site-packages/sherlock/report/print.py", line 70, in print_report
    log_directory(directory, tree)
  File "/Users/snooz/Source/MarketSquare/robotframework-browser/.venv/lib/python3.9/site-packages/sherlock/report/print.py", line 51, in log_directory
    log_directory(resource, branch)
  File "/Users/snooz/Source/MarketSquare/robotframework-browser/.venv/lib/python3.9/site-packages/sherlock/report/print.py", line 54, in log_directory
    keywords = [kw for kw in resource.keywords]
TypeError: 'NoneType' object is not iterable
Fatal exception occurred. You can create an issue at https://github.com/bhirsz/robotframework-sherlock/issues . Thanks!

When calling sherlock -o results/output.xml atest

i the atest directory there is a CamelCaseTestCaseTransformer.py

from robot.api.parsing import ModelTransformer, Token

class CamelCaseTestCaseTransformer(ModelTransformer):
    def visit_TestCaseName(self, node):  # noqa
        token = node.get_token(Token.TESTCASE_NAME)
        if token.value:
            token_value = ""
            for word in token.value.split(" "):
                token_value = f"{token_value} {word[0].upper()}{word[1:]}"
            token.value = token_value.strip()
        return node

It has actually no keywords so resource.keywords is None. and iterating does not work.

The fix would be to write or [] in the line 54 in print.py keywords = [kw for kw in resource.keywords or []]

bhirsz commented 1 year ago

Thanks for the report, I will take a look and implement the fix

bhirsz commented 1 year ago

It was actually fixed in #70 but not released. I will prepare new release now.