@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 markdown_description() { String xml = "" + "<rules>" + " <rule>" + " <key>1</key>" + " <name>One</name>" + " <description>Desc</description>" + " <descriptionFormat>MARKDOWN</descriptionFormat>" + " </rule>" + "</rules>"; RulesDefinition.Rule rule = load(xml).rule("1"); assertThat(rule.markdownDescription()).isEqualTo("Desc"); assertThat(rule.htmlDescription()).isNull(); }
private static boolean mergeDescription(RulesDefinition.Rule def, RuleDefinitionDto dto) { boolean changed = false; if (def.htmlDescription() != null && !StringUtils.equals(dto.getDescription(), def.htmlDescription())) { dto.setDescription(def.htmlDescription()); dto.setDescriptionFormat(Format.HTML); changed = true; } else if (def.markdownDescription() != null && !StringUtils.equals(dto.getDescription(), def.markdownDescription())) { dto.setDescription(def.markdownDescription()); dto.setDescriptionFormat(Format.MARKDOWN); changed = true; } return changed; }
ruleDto.setDescriptionFormat(Format.HTML); } else { ruleDto.setDescription(ruleDef.markdownDescription()); ruleDto.setDescriptionFormat(Format.MARKDOWN);
private static Rules createRules(StandaloneRuleDefinitionsLoader pluginRulesLoader) { RulesBuilder builder = new RulesBuilder(); for (RulesDefinition.Repository repoDef : pluginRulesLoader.getContext().repositories()) { for (RulesDefinition.Rule ruleDef : repoDef.rules()) { if (ruleDef.type() == RuleType.SECURITY_HOTSPOT) { continue; } NewRule newRule = builder.add(RuleKey.of(ruleDef.repository().key(), ruleDef.key())) .setInternalKey(ruleDef.internalKey()) .setDescription(ruleDef.htmlDescription() != null ? ruleDef.htmlDescription() : Markdown.convertToHtml(ruleDef.markdownDescription())) .setSeverity(ruleDef.severity()) .setType(ruleDef.type() != null ? ruleDef.type().toString() : null) .setName(ruleDef.name()); for (Param p : ruleDef.params()) { newRule.addParam(p.key()) .setDescription(p.description()); } } } return builder.build(); } }
private static boolean mergeDescription(RulesDefinition.Rule def, RuleDefinitionDto dto) { boolean changed = false; if (def.htmlDescription() != null && !StringUtils.equals(dto.getDescription(), def.htmlDescription())) { dto.setDescription(def.htmlDescription()); dto.setDescriptionFormat(Format.HTML); changed = true; } else if (def.markdownDescription() != null && !StringUtils.equals(dto.getDescription(), def.markdownDescription())) { dto.setDescription(def.markdownDescription()); dto.setDescriptionFormat(Format.MARKDOWN); changed = true; } return changed; }
assertThat(rule.severity()).isEqualTo(Severity.BLOCKER); assertThat(rule.htmlDescription()).isEqualTo("Detect <code>java.lang.NullPointerException</code>"); assertThat(rule.markdownDescription()).isNull(); assertThat(rule.tags()).containsOnly("one", "two", "three", "four"); assertThat(rule.securityStandards()).containsOnly("cwe:1", "cwe:123", "cwe:2", "owaspTop10:a1", "owaspTop10:a3"); assertThat(otherRule.markdownDescription()).isEqualTo("ABC");
assertThat(rule.severity()).isEqualTo(Severity.BLOCKER); assertThat(rule.htmlDescription()).isEqualTo("Detect <code>java.lang.NullPointerException</code>"); assertThat(rule.markdownDescription()).isNull(); assertThat(rule.tags()).containsOnly("one", "two", "three", "four"); assertThat(rule.securityStandards()).containsOnly("cwe:1", "cwe:123", "cwe:2", "owaspTop10:a1", "owaspTop10:a3"); assertThat(otherRule.markdownDescription()).isEqualTo("ABC");
ruleDto.setDescriptionFormat(Format.HTML); } else { ruleDto.setDescription(ruleDef.markdownDescription()); ruleDto.setDescriptionFormat(Format.MARKDOWN);
/** * This is temporarily accepted only for the support of the common-rules that are still declared * by plugins. It could be removed in 7.0 * @since 5.2 */ @Test public void allow_to_replace_an_existing_common_rule() { RulesDefinition.NewRepository newCommonJava1 = context.createRepository("common-java", "java").setName("Common Java"); newCommonJava1.createRule("coverage").setName("Lack of coverage").setHtmlDescription("Coverage must be high"); newCommonJava1.done(); RulesDefinition.NewRepository newCommonJava2 = context.createRepository("common-java", "java"); newCommonJava2.createRule("coverage").setName("Lack of coverage (V2)").setMarkdownDescription("Coverage must be high (V2)"); newCommonJava2.done(); RulesDefinition.Repository commonJava = context.repository("common-java"); assertThat(commonJava.rules()).hasSize(1); RulesDefinition.Rule rule = commonJava.rule("coverage"); assertThat(rule.name()).isEqualTo("Lack of coverage (V2)"); // replacement but not merge -> keep only the v2 (which has markdown but not html description) assertThat(rule.markdownDescription()).isEqualTo("Coverage must be high (V2)"); assertThat(rule.htmlDescription()).isNull(); // do not log warning assertThat(logTester.logs()).isEmpty(); }