diff --git a/fixtures/rules/config.json b/fixtures/rules/config.json new file mode 100644 index 0000000..dae8493 --- /dev/null +++ b/fixtures/rules/config.json @@ -0,0 +1,10 @@ +{ + "enabled": true, + "channel": "beta", + "config": { + "rules": ["java-basic", "java-design"] + }, + "include_paths": [ + "Main.java" + ] +} diff --git a/fixtures/rules/config.mix.json b/fixtures/rules/config.mix.json new file mode 100644 index 0000000..4d5a221 --- /dev/null +++ b/fixtures/rules/config.mix.json @@ -0,0 +1,11 @@ +{ + "enabled": true, + "channel": "beta", + "config": { + "file": "rules.xml", + "rules": ["java-basic", "java-design"] + }, + "include_paths": [ + "Main.java" + ] +} diff --git a/src/Config.groovy b/src/Config.groovy index d305747..9530a8e 100644 --- a/src/Config.groovy +++ b/src/Config.groovy @@ -22,16 +22,15 @@ class Config { } def ruleSet() { - if(parsedConfig.config) { - def configFile = parsedConfig.config instanceof String ? parsedConfig.config : parsedConfig.config.file - - def specifiedRules = new File(appContext.codeFolder, configFile) - if(specifiedRules.exists()) { - return specifiedRules.absolutePath - } else { - System.err.println "Config file ${configFile} not found" - System.exit(1) - } + def config = parsedConfig.config + + switch(config) { + case String: + return specifiedRules(config) + break + case Map: + return rulesOrFile(config) + break } def defaultFile = new File(appContext.codeFolder, "ruleset.xml") @@ -46,6 +45,30 @@ class Config { filesList.absolutePath } + private def rulesOrFile(config) { + validate(config) + if(config.rules) { + return config.rules.join(",") + } + return specifiedRules(config.file) + } + + private def validate(config) { + if(config.file && config.rules) { + throw new IllegalArgumentException("Config should contain 'file' OR 'rules'") + } + } + + private def specifiedRules(configFile) { + def rules = new File(appContext.codeFolder, configFile) + if(rules.exists()) { + return rules.absolutePath + } else { + System.err.println "Config file ${configFile} not found" + System.exit(1) + } + } + private def filesToAnalyze() { def includePaths = parsedConfig.include_paths?.join(" ") def codeFolder = new File(appContext.codeFolder) diff --git a/test/ConfigTest.groovy b/test/ConfigTest.groovy index 1b10ae7..cfe295e 100644 --- a/test/ConfigTest.groovy +++ b/test/ConfigTest.groovy @@ -5,18 +5,30 @@ class ConfigTest { @Test public void defaultRuleSet() { def config = new Config([configFile: "/usr/src/app/fixtures/default/config.json", codeFolder: "/usr/src/app/fixtures/default"]) - assertEquals config.ruleSet(), "/usr/src/app/ruleset.xml" + assertEquals "/usr/src/app/ruleset.xml", config.ruleSet() } @Test public void specifiedRuleSetFile() { def config = new Config([configFile: "/usr/src/app/fixtures/specified_file/config.new.json", codeFolder: "/usr/src/app/fixtures/specified_file"]) - assertEquals config.ruleSet(), "/usr/src/app/fixtures/specified_file/rules.xml" + assertEquals "/usr/src/app/fixtures/specified_file/rules.xml", config.ruleSet() } @Test public void honorPresentRules() { def config = new Config([configFile: "/usr/src/app/fixtures/ruleset_default_file/config.json", codeFolder: "/usr/src/app/fixtures/ruleset_default_file"]) - assertEquals config.ruleSet(), "/usr/src/app/fixtures/ruleset_default_file/ruleset.xml" + assertEquals "/usr/src/app/fixtures/ruleset_default_file/ruleset.xml", config.ruleSet() + } + + @Test(expected = IllegalArgumentException.class) + public void doesNotAllowToMixRulesAndFile() { + def config = new Config([configFile: "/usr/src/app/fixtures/rules/config.mix.json", codeFolder: "/usr/src/app/fixtures/rules"]) + config.ruleSet() + } + + @Test + public void acceptRulesSimpleNames() { + def config = new Config([configFile: "/usr/src/app/fixtures/rules/config.json", codeFolder: "/usr/src/app/fixtures/rules"]) + assertEquals "java-basic,java-design", config.ruleSet() } }