@Test public void emptyMessages() { ValidationMessages messages = ValidationMessages.create(); assertThat(messages.hasErrors()).isFalse(); assertThat(messages.hasWarnings()).isFalse(); assertThat(messages.hasInfos()).isFalse(); Logger logger = mock(Logger.class); messages.log(logger); verify(logger, never()).error(anyString()); verify(logger, never()).warn(anyString()); verify(logger, never()).info(anyString()); org.slf4j.Logger slf4j = mock(org.slf4j.Logger.class); messages.log(slf4j); verify(slf4j, never()).error(anyString()); verify(slf4j, never()).warn(anyString()); verify(slf4j, never()).info(anyString()); }
@Test public void importProfile() { ValidationMessages validation = ValidationMessages.create(); RulesProfile profile = parse("importProfile.xml", validation); assertThat(profile.getLanguage()).isEqualTo("java"); assertThat(profile.getName()).isEqualTo("sonar way"); assertThat(validation.hasErrors()).isFalse(); assertThat(profile).isNotNull(); assertThat(profile.getActiveRule("checkstyle", "IllegalRegexp").getSeverity()).isEqualTo(RulePriority.CRITICAL); }
@Test public void importProfileWithRuleParameters() { ValidationMessages validation = ValidationMessages.create(); RulesProfile profile = parse("importProfileWithRuleParameters.xml", validation); assertThat(validation.hasErrors()).isFalse(); assertThat(validation.hasWarnings()).isFalse(); ActiveRule rule = profile.getActiveRule("checkstyle", "IllegalRegexp"); assertThat(rule.getParameter("format")).isEqualTo("foo"); assertThat(rule.getParameter("message")).isEqualTo("with special characters < > &"); }
@Test public void shouldParseAnnotatedClasses() { RuleFinder ruleFinder = mock(RuleFinder.class); when(ruleFinder.findByKey(anyString(), anyString())).thenAnswer(new Answer<Rule>() { public Rule answer(InvocationOnMock iom) throws Throwable { return Rule.create((String) iom.getArguments()[0], (String) iom.getArguments()[1], (String) iom.getArguments()[1]); } }); ValidationMessages messages = ValidationMessages.create(); RulesProfile profile = new AnnotationProfileParser(ruleFinder).parse("squid", "Foo way", "java", Lists.<Class>newArrayList(FakeRule.class), messages); assertThat(profile.getName()).isEqualTo("Foo way"); assertThat(profile.getLanguage()).isEqualTo("java"); assertThat(profile.getActiveRule("squid", "fake").getSeverity()).isEqualTo(RulePriority.BLOCKER); assertThat(messages.hasErrors()).isFalse(); }
@Test public void addError() { ValidationMessages messages = ValidationMessages.create(); messages.addErrorText("my error"); assertThat(messages.hasErrors()).isTrue(); assertThat(messages.hasWarnings()).isFalse(); assertThat(messages.hasInfos()).isFalse(); assertThat(messages.getErrors()).hasSize(1); assertThat(messages.getErrors()).contains("my error"); assertThat(messages.toString()).contains("my error"); Logger logger = mock(Logger.class); messages.log(logger); verify(logger, times(1)).error("my error"); verify(logger, never()).warn(anyString()); verify(logger, never()).info(anyString()); org.slf4j.Logger slf4j = mock(org.slf4j.Logger.class); messages.log(slf4j); verify(slf4j, times(1)).error("my error"); verify(slf4j, never()).warn(anyString()); verify(slf4j, never()).info(anyString()); } }
@Override public void define(Context context) { Profiler profiler = Profiler.create(Loggers.get(getClass())); for (ProfileDefinition definition : definitions) { profiler.start(); ValidationMessages validation = ValidationMessages.create(); RulesProfile profile = definition.createProfile(validation); validation.log(LOGGER); if (profile == null) { profiler.stopDebug(format("Loaded definition %s that return no profile", definition)); } else { if (!validation.hasErrors()) { define(context, profile); } profiler.stopDebug(format("Loaded deprecated profile definition %s for language %s", profile.getName(), profile.getLanguage())); } } }
private static ListMultimap<String, RulesProfile> profilesByLanguage(ProfileDefinition[] profileDefinitions) { ListMultimap<String, RulesProfile> byLang = ArrayListMultimap.create(); for (ProfileDefinition definition : profileDefinitions) { ValidationMessages validation = ValidationMessages.create(); RulesProfile profile = definition.createProfile(validation); if (profile != null && !validation.hasErrors()) { byLang.put(StringUtils.lowerCase(profile.getLanguage()), profile); } } return byLang; }
@Override public void define(Context context) { Profiler profiler = Profiler.create(Loggers.get(getClass())); for (ProfileDefinition definition : definitions) { profiler.start(); ValidationMessages validation = ValidationMessages.create(); RulesProfile profile = definition.createProfile(validation); validation.log(LOGGER); if (profile == null) { profiler.stopDebug(format("Loaded definition %s that return no profile", definition)); } else { if (!validation.hasErrors()) { define(context, profile); } profiler.stopDebug(format("Loaded deprecated profile definition %s for language %s", profile.getName(), profile.getLanguage())); } } }
@Test public void should_create_perlcritic_profile() { ValidationMessages validation = ValidationMessages.create(); SonarWayProfile definition = new SonarWayProfile(new XMLProfileParser(ruleFinder())); RulesProfile profile = definition.createProfile(validation); assertThat(profile.getLanguage()).isEqualTo(PerlLanguage.KEY); assertThat(profile.getName()).isEqualTo("Sonar way"); assertThat(profile.getActiveRules()).extracting("repositoryKey").containsOnly("PerlCritic", "common-perl"); assertThat(validation.hasErrors()).isFalse(); assertThat(profile.getActiveRules().size()).isGreaterThan(87); }
@Test public void should_create_sonar_way_profile() { ValidationMessages validation = ValidationMessages.create(); BuiltInQualityProfilesDefinition.Context context = new BuiltInQualityProfilesDefinition.Context(); new SonarWayProfile().define(context); assertThat(context.profilesByLanguageAndName()).hasSize(1); BuiltInQualityProfilesDefinition.BuiltInQualityProfile profile = context.profile("go", "Sonar way"); assertThat(profile.language()).isEqualTo("go"); assertThat(profile.name()).isEqualTo("Sonar way"); assertThat(profile.rules()).extracting("repoKey").containsOnly(GoRulesDefinition.REPOSITORY_KEY); assertThat(validation.hasErrors()).isFalse(); assertThat(profile.rules()).extracting("ruleKey").contains("S2068"); assertThat(profile.rules()).extracting("ruleKey").doesNotContain("S3801"); }