@Test public void fail_if_duplicated_rule_param_keys() { RulesDefinition.NewRule rule = context.createRepository("findbugs", "java").createRule("NPE"); rule.createParam("level"); try { rule.createParam("level"); fail(); } catch (Exception e) { assertThat(e).isInstanceOf(IllegalArgumentException.class).hasMessage("The parameter 'level' is declared several times on the rule [repository=findbugs, key=NPE]"); } }
@Test public void load_rule_markdown_description_from_file() { RulesDefinition.NewRepository newRepository = context.createRepository("findbugs", "java"); newRepository.createRule("NPE").setName("NPE").setMarkdownDescription(getClass().getResource("/org/sonar/api/server/rule/RulesDefinitionTest/sample.md")); newRepository.done(); RulesDefinition.Rule rule = context.repository("findbugs").rule("NPE"); assertThat(rule.markdownDescription()).isEqualTo("description of rule loaded from file"); }
@Test public void fail_if_bad_rule_severity() { try { context.createRepository("findbugs", "java").createRule("NPE").setSeverity("VERY HIGH"); fail(); } catch (IllegalArgumentException e) { assertThat(e).hasMessage("Severity of rule [repository=findbugs, key=NPE] is not correct: VERY HIGH"); } }
@Test public void sqale_characteristic_is_deprecated_and_is_ignored() { RulesDefinition.NewRepository newRepository = context.createRepository("findbugs", "java"); newRepository.createRule("NPE").setName("NPE").setHtmlDescription("desc") .setDebtSubCharacteristic(RulesDefinition.SubCharacteristics.API_ABUSE); newRepository.done(); RulesDefinition.Rule rule = context.repository("findbugs").rule("NPE"); assertThat(rule.debtSubCharacteristic()).isNull(); }
@Test public void fail_to_load_html_rule_description_from_file() { RulesDefinition.NewRepository newRepository = context.createRepository("findbugs", "java"); newRepository.createRule("NPE").setName("NPE").setHtmlDescription((URL) null); try { newRepository.done(); fail(); } catch (IllegalStateException e) { assertThat(e).hasMessage("One of HTML description or Markdown description must be defined for rule [repository=findbugs, key=NPE]"); } }
@Test public void sanitize_rule_name() { RulesDefinition.NewRepository newFindbugs = context.createRepository("findbugs", "java"); newFindbugs.createRule("NPE").setName(" \n NullPointer \n ").setHtmlDescription("NPE"); newFindbugs.done(); RulesDefinition.Rule rule = context.repository("findbugs").rule("NPE"); assertThat(rule.name()).isEqualTo("NullPointer"); }
@Test public void do_not_override_if_no_bundle() { // i18n returns null values RulesDefinition.Context context = new RulesDefinition.Context(); RulesDefinition.NewRepository repo = context.createRepository("squid", "java"); repo.createRule("S0001").setName("SOne").setHtmlDescription("S One"); loader.load(repo); repo.done(); RulesDefinition.Rule rule = context.repository("squid").rule("S0001"); assertThat(rule.name()).isEqualTo("SOne"); assertThat(rule.htmlDescription()).isEqualTo("S One"); }
@Test public void type_is_defined() { RulesDefinition.NewRepository newRepository = context.createRepository("findbugs", "java"); newRepository.createRule("NPE").setName("NPE").setHtmlDescription("desc") .setType(RuleType.VULNERABILITY).setTags("bug", "misra"); newRepository.done(); RulesDefinition.Rule rule = context.repository("findbugs").rule("NPE"); // type VULNERABILITY is kept even if the tag "bug" is present assertThat(rule.type()).isEqualTo(RuleType.VULNERABILITY); // tag "bug" is reserved and removed. assertThat(rule.tags()).containsOnly("misra"); }
@Test public void fail_if_rule_already_has_html_description() { RulesDefinition.NewRepository newRepository = context.createRepository("findbugs", "java"); try { newRepository.createRule("NPE").setName("NPE").setHtmlDescription("polop").setMarkdownDescription("palap"); fail(); } catch (IllegalStateException e) { assertThat(e).hasMessage("Rule '[repository=findbugs, key=NPE]' already has an HTML description"); } }
private static void defineRulesXoo2(Context context) { NewRepository repo = context.createRepository(XOO2_REPOSITORY, Xoo2.KEY).setName("Xoo2"); NewRule hasTag = repo.createRule(HasTagSensor.RULE_KEY).setName("Has Tag") .setHtmlDescription("Search for a given tag in Xoo files"); NewRule oneIssuePerLine = repo.createRule(OneIssuePerLineSensor.RULE_KEY).setName("One Issue Per Line") .setHtmlDescription("Generate an issue on each line of a file. It requires the metric \"lines\"."); oneIssuePerLine .setDebtRemediationFunction(hasTag.debtRemediationFunctions().linear("1min")) .setGapDescription("It takes about 1 minute to an experienced software craftsman to remove a line of code"); repo.done(); }
private static void defineSkippedUnitTestRule(RulesDefinition.NewRepository repo) { RulesDefinition.NewRule rule = repo.createRule(CommonRuleKeys.SKIPPED_UNIT_TESTS); rule.setName("Skipped unit tests should be either removed or fixed") .addTags("pitfall") .setHtmlDescription("Skipped unit tests are considered as dead code. Either they should be activated again (and updated) or they should be removed.") .setDebtRemediationFunction(rule.debtRemediationFunctions().linear("10min")) .setGapDescription("number of skipped tests") .setSeverity(Severity.MAJOR); } }
@Test public void fail_if_no_rule_description() { RulesDefinition.NewRepository newRepository = context.createRepository("findbugs", "java"); newRepository.createRule("NPE").setName("NPE"); try { newRepository.done(); fail(); } catch (IllegalStateException e) { assertThat(e).hasMessage("One of HTML description or Markdown description must be defined for rule [repository=findbugs, key=NPE]"); } }
@Override public void define(RulesDefinition.Context context) { RulesDefinition.NewRepository repo = context.createRepository("common-java", "java"); repo.createRule("InsufficientBranchCoverage") .setName("The name as defined by core") .setHtmlDescription("The description as defined by core"); repo.done(); } }
@Override public void define(RulesDefinition.Context context) { RulesDefinition.NewRepository repo = context.createRepository("common-java", "java"); repo.createRule("InsufficientBranchCoverage") .setName("The name as defined by plugin") .setHtmlDescription("The description as defined by plugin"); repo.done(); } }
@Override public void define(Context context) { NewRepository repo = context.createRepository("test", "java"); repo.createRule("rule1") .setName("Rule One") .setHtmlDescription("Description of Rule One") .setTemplate(true); repo.done(); } }
@Override public void define(Context context) { NewRepository repo = context.createRepository("findbugs", "java"); repo.createRule("rule1") .setName("Rule One") .setHtmlDescription("Description of Rule One"); repo.done(); } }
@Test public void complete_param_description() { when(i18n.getParamDescription("squid", "S0001", "max")).thenReturn("Maximum"); RulesDefinition.Context context = new RulesDefinition.Context(); RulesDefinition.NewRepository repo = context.createRepository("squid", "java"); repo.createRule("S0001").setName("SOne").setHtmlDescription("S One").createParam("max"); loader.load(repo); repo.done(); RulesDefinition.Rule rule = context.repository("squid").rule("S0001"); assertThat(rule.param("max").description()).isEqualTo("Maximum"); } }
@Test public void fail_if_rule_already_has_markdown_description() { RulesDefinition.NewRepository newRepository = context.createRepository("findbugs", "java"); try { newRepository.createRule("NPE").setName("NPE").setMarkdownDescription("palap").setHtmlDescription("polop"); fail(); } catch (IllegalStateException e) { assertThat(e).hasMessage("Rule '[repository=findbugs, key=NPE]' already has a Markdown description"); } }
@Test @UseDataProvider("nullOrEmpty") public void addDeprecatedRuleKey_fails_with_IAE_if_key_is_null_or_empty(String nullOrEmpty) { RulesDefinition.NewRepository newRepository = context.createRepository("foo", "bar"); RulesDefinition.NewRule newRule = newRepository.createRule("doh"); expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage("Rule must be set"); newRule.addDeprecatedRuleKey("oldRepo", nullOrEmpty); }
@Override public void define(Context context) { NewRepository repo = context.createRepository("squid", "java"); repo.setName("Squid"); repo.createRule("DEF") .setName("DEF") .setHtmlDescription("Description of DEF"); repo.done(); } }