private static List<RulesDefinition.ExtendedRepository> getRepositories(RulesDefinition.Context context) { List<RulesDefinition.ExtendedRepository> repositories = new ArrayList<>(context.repositories()); for (RulesDefinition.ExtendedRepository extendedRepoDef : context.extendedRepositories()) { if (context.repository(extendedRepoDef.key()) == null) { LOG.warn(format("Extension is ignored, repository %s does not exist", extendedRepoDef.key())); } else { repositories.add(extendedRepoDef); } } return repositories; }
@Test public void define_xoo2_rules() { RulesDefinition.Repository repo = context.repository("xoo2"); assertThat(repo).isNotNull(); assertThat(repo.name()).isEqualTo("Xoo2"); assertThat(repo.language()).isEqualTo("xoo2"); assertThat(repo.rules()).hasSize(2); } }
@Test public void define_xooExternal_rules() { RulesDefinition.Repository repo = context.repository("external_XooEngine"); assertThat(repo).isNotNull(); assertThat(repo.name()).isEqualTo("XooEngine"); assertThat(repo.language()).isEqualTo("xoo"); assertThat(repo.rules()).hasSize(1); }
@Test public void override_existing() { when(i18n.getName("squid", "S0001")).thenReturn("SOne"); when(i18n.getDescription("squid", "S0001")).thenReturn("S One"); RulesDefinition.Context context = new RulesDefinition.Context(); RulesDefinition.NewRepository repo = context.createRepository("squid", "java"); repo.createRule("S0001").setName("Bad").setHtmlDescription("Bad"); 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 define_xoo_hotspot_rule() { RulesDefinition.Repository repo = context.repository("xoo"); assertThat(repo).isNotNull(); assertThat(repo.name()).isEqualTo("Xoo"); assertThat(repo.language()).isEqualTo("xoo"); assertThat(repo.rules()).hasSize(19); RulesDefinition.Rule rule = repo.rule(HotspotSensor.RULE_KEY); assertThat(rule.name()).isNotEmpty(); assertThat(rule.securityStandards()) .isNotEmpty() .containsExactlyInAnyOrder("cwe:1", "cwe:123", "cwe:863", "owaspTop10:a1", "owaspTop10:a3"); }
@Test public void guess_type_from_tags_if_type_is_missing() { RulesDefinition.NewRepository newRepository = context.createRepository("findbugs", "java"); newRepository.createRule("NPE").setName("NPE").setHtmlDescription("desc").setTags("bug", "misra"); newRepository.done(); RulesDefinition.Rule rule = context.repository("findbugs").rule("NPE"); assertThat(rule.type()).isEqualTo(RuleType.BUG); // tag "bug" is reserved and removed assertThat(rule.tags()).containsOnly("misra"); } }
@Test public void load_rule_html_description_from_file() { RulesDefinition.NewRepository newRepository = context.createRepository("findbugs", "java"); newRepository.createRule("NPE").setName("NPE").setHtmlDescription(getClass().getResource("/org/sonar/api/server/rule/RulesDefinitionTest/sample.html")); newRepository.done(); RulesDefinition.Rule rule = context.repository("findbugs").rule("NPE"); assertThat(rule.htmlDescription()).isEqualTo("description of rule loaded from file"); }
@Test public void default_scope_should_be_main() { RulesDefinition.NewRepository newFindbugs = context.createRepository("findbugs", "java"); newFindbugs.createRule("key").setName("name").setHtmlDescription("NPE"); newFindbugs.done(); RulesDefinition.Rule rule = context.repository("findbugs").rule("key"); assertThat(rule.scope()).isEqualTo(RuleScope.MAIN); }
@Test public void define_common_rules() { CommonRuleDefinitions commonRulesDefinitions = new FakeCommonRuleDefinitions(); RulesDefinition.Context context = new RuleDefinitionsLoader(mock(DeprecatedRulesDefinitionLoader.class), commonRulesDefinitions, mock(ServerPluginRepository.class), new RulesDefinition[] { new SquidDefinitions() }).load(); assertThat(context.repositories()).extracting("key").containsOnly("squid", "common-java"); assertThat(context.repository("common-java").rules()).extracting("key").containsOnly("InsufficientBranchCoverage"); }
@Test public void load_definitions() { CommonRuleDefinitions commonRulesDefinitions = mock(CommonRuleDefinitions.class); RulesDefinition.Context context = new RuleDefinitionsLoader(mock(DeprecatedRulesDefinitionLoader.class), commonRulesDefinitions, mock(ServerPluginRepository.class), new RulesDefinition[] { new FindbugsDefinitions(), new SquidDefinitions() }).load(); assertThat(context.repositories()).hasSize(2); assertThat(context.repository("findbugs")).isNotNull(); assertThat(context.repository("squid")).isNotNull(); }
private RulesDefinition.Repository load(String xml) { RulesDefinition.Context context = new RulesDefinition.Context(); RulesDefinition.NewRepository newRepository = context.createRepository("squid", "java"); underTest.load(newRepository, new StringReader(xml)); newRepository.done(); return context.repository("squid"); } }
@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 cant_set_blank_repository_name() { context.createRepository("findbugs", "java").setName(null).done(); assertThat(context.repository("findbugs").name()).isEqualTo("findbugs"); }
@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"); }
private RulesDefinition.Repository load(InputStream input, String encoding) { RulesDefinition.Context context = new RulesDefinition.Context(); RulesDefinition.NewRepository newRepository = context.createRepository("squid", "java"); underTest.load(newRepository, input, encoding); newRepository.done(); return context.repository("squid"); }
@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"); }
private RulesDefinition.Repository load(Class annotatedClass) { RulesDefinition.Context context = new RulesDefinition.Context(); RulesDefinition.NewExtendedRepository newRepository = context.createRepository("squid", "java"); annotationLoader.load(newRepository, annotatedClass); newRepository.done(); return context.repository("squid"); }
@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 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"); } }