2021-02-23 20:41:11 +01:00
|
|
|
from pathlib import Path
|
2022-05-23 14:14:57 +02:00
|
|
|
import os
|
2022-03-08 04:26:53 -08:00
|
|
|
import pytest
|
2021-02-23 20:41:11 +01:00
|
|
|
from rspec_tools.rules import RulesRepository
|
2022-03-08 04:26:53 -08:00
|
|
|
from rspec_tools.errors import RuleNotFoundError
|
2021-02-23 20:41:11 +01:00
|
|
|
|
|
|
|
def test_list_rules(mockrules: Path):
|
|
|
|
'''Check that rules are all listed.'''
|
|
|
|
rules = {rule.id for rule in RulesRepository(rules_path=mockrules).rules}
|
2023-03-07 17:16:47 +01:00
|
|
|
assert rules == {'S100', 'S101', 'S120', 'S200', 'S4727', 'S1033'}
|
2021-02-23 20:41:11 +01:00
|
|
|
|
|
|
|
|
|
|
|
def test_list_languages(mockrules: Path):
|
|
|
|
'''Check that languages are all listed.'''
|
|
|
|
rule = RulesRepository(rules_path=mockrules).get_rule('S120')
|
2022-05-23 14:14:57 +02:00
|
|
|
|
2021-02-23 20:41:11 +01:00
|
|
|
languages = {lang.language for lang in rule.specializations}
|
|
|
|
assert languages == {'flex', 'java', 'plsql'}
|
|
|
|
|
2022-05-23 14:14:57 +02:00
|
|
|
rulePath = os.path.join(mockrules, 'S120')
|
|
|
|
ruleSubDirs = [subDir for subDir in os.listdir(rulePath) if os.path.isdir(os.path.join(rulePath, subDir))]
|
|
|
|
assert sorted(ruleSubDirs) == ['common', 'flex', 'java', 'plsql']
|
|
|
|
|
2021-02-23 20:41:11 +01:00
|
|
|
|
|
|
|
def test_get_metadata(mockrules: Path):
|
|
|
|
'''Check that language metadata are correctly overriden.'''
|
|
|
|
rule = RulesRepository(rules_path=mockrules).get_rule('S120')
|
|
|
|
plsql = rule.get_language('plsql')
|
|
|
|
assert plsql.metadata['sqKey'] == 'PlSql.PackageNaming'
|
|
|
|
java = rule.get_language('java')
|
|
|
|
assert java.metadata['sqKey'] == 'S120'
|
2022-03-08 04:26:53 -08:00
|
|
|
|
|
|
|
|
|
|
|
def test_nonexisting_rule(mockrules: Path):
|
|
|
|
'''Check that a nonexisting rule is reported.'''
|
2023-03-07 17:16:47 +01:00
|
|
|
with pytest.raises(RuleNotFoundError, match=fr'^Cannot find rule S299'):
|
|
|
|
RulesRepository(rules_path=mockrules).get_rule('S299')
|