public static Languages newLanguages(String... languageKeys) { return new Languages(Collections2.transform(Arrays.asList(languageKeys), new NonNullInputFunction<String, Language>() { @Override protected Language doApply(String languageKey) { return newLanguage(languageKey); } }).toArray(new Language[0])); } }
@Test public void should_not_fail_if_no_language() throws Exception { LanguageDetection detection = spy(new LanguageDetection(settings.asConfig(), new DefaultLanguagesRepository(new Languages()))); assertThat(detectLanguage(detection, "Foo.java")).isNull(); }
@Test public void initialize_creates_no_BuiltInQProfile_when_all_definitions_apply_to_non_defined_languages() { BuiltInQProfileRepository underTest = new BuiltInQProfileRepositoryImpl(mock(DbClient.class), new Languages(), new DummyProfileDefinition("foo", "P1", false)); underTest.initialize(); assertThat(underTest.get()).isEmpty(); }
@Test public void get_throws_ISE_if_called_before_initialize() { BuiltInQProfileRepositoryImpl underTest = new BuiltInQProfileRepositoryImpl(mock(DbClient.class), new Languages()); expectedException.expect(IllegalStateException.class); expectedException.expectMessage("initialize must be called first"); underTest.get(); }
@Test public void initialize_throws_ISE_if_language_has_no_builtin_qp() { BuiltInQProfileRepository underTest = new BuiltInQProfileRepositoryImpl(mock(DbClient.class), new Languages(FOO_LANGUAGE)); expectedException.expect(IllegalStateException.class); expectedException.expectMessage("The following languages have no built-in quality profiles: foo"); underTest.initialize(); }
@Test public void should_add_several_times_the_same_language() { Languages languages = new Languages( language("fake"), language("fake")); assertThat(languages.get("fake").getKey()).isEqualTo("fake"); }
@Test public void test_no_languages() { Languages languages = new Languages(); assertThat(languages.get("foo")).isNull(); assertThat(languages.getSuffixes("foo")).isEmpty(); }
@Test public void plugin_can_declare_a_file_extension_twice_for_case_sensitivity() throws Exception { LanguagesRepository languages = new DefaultLanguagesRepository(new Languages(new MockLanguage("abap", "abap", "ABAP"))); LanguageDetection detection = new LanguageDetection(settings.asConfig(), languages); assertThat(detectLanguage(detection, "abc.abap")).isEqualTo("abap"); }
@Test public void initialize_makes_first_profile_of_a_language_default_when_none_flagged_as_so() { List<DummyProfileDefinition> definitions = new ArrayList<>( asList(new DummyProfileDefinition("foo", "foo1", false), new DummyProfileDefinition("foo", "foo2", false))); Collections.shuffle(definitions); String firstName = definitions.get(0).getName(); String secondName = definitions.get(1).getName(); BuiltInQProfileRepository underTest = new BuiltInQProfileRepositoryImpl(dbClient, new Languages(FOO_LANGUAGE), definitions.toArray(new BuiltInQualityProfilesDefinition[0])); underTest.initialize(); assertThat(underTest.get()) .extracting(BuiltInQProfile::getName, BuiltInQProfile::isDefault) .containsExactlyInAnyOrder(tuple(firstName, true), tuple(secondName, false)); }
@Test public void getOrderedLanguageKeys() { assertThat(LanguageParamUtils.getOrderedLanguageKeys(new Languages())).isEmpty(); Languages languages = new Languages( new TestLanguage("java"), new TestLanguage("abap"), new TestLanguage("js"), new TestLanguage("cobol")); assertThat(LanguageParamUtils.getOrderedLanguageKeys(languages)).containsExactly("abap", "cobol", "java", "js"); }
@Test public void avoid_notification_if_configured_in_settings() { settings.setProperty(DISABLE_NOTIFICATION_ON_BUILT_IN_QPROFILES, true); Multimap<QProfileName, ActiveRuleChange> profiles = ArrayListMultimap.create(); Languages languages = new Languages(); addProfile(profiles, languages, ACTIVATED); BuiltInQualityProfilesUpdateListener underTest = new BuiltInQualityProfilesUpdateListener(notificationManager, languages, settings.asConfig()); underTest.onChange(profiles, 0, 1); verifyZeroInteractions(notificationManager); }
@Test public void empty_when_no_language_installed() { WsActionTester ws = new WsActionTester(new SearchAction(userSession, new Languages(), dbClient, qProfileWsSupport, new ComponentFinder(dbClient, null))); db.qualityProfiles().insert(db.getDefaultOrganization()); SearchWsResponse result = call(ws.newRequest()); assertThat(result.getProfilesList()).isEmpty(); }
@Test public void force_language_using_deprecated_property() throws Exception { LanguagesRepository languages = new DefaultLanguagesRepository(new Languages(new MockLanguage("java", "java"), new MockLanguage("php", "php"))); settings.setProperty(CoreProperties.PROJECT_LANGUAGE_PROPERTY, "java"); LanguageDetection detection = new LanguageDetection(settings.asConfig(), languages); assertThat(detectLanguage(detection, "abc")).isNull(); assertThat(detectLanguage(detection, "abc.php")).isNull(); assertThat(detectLanguage(detection, "abc.java")).isEqualTo("java"); assertThat(detectLanguage(detection, "src/abc.java")).isEqualTo("java"); }
@Test public void solve_conflict_using_filepattern() throws Exception { LanguagesRepository languages = new DefaultLanguagesRepository(new Languages(new MockLanguage("xml", "xhtml"), new MockLanguage("web", "xhtml"))); settings.setProperty("sonar.lang.patterns.xml", "xml/**"); settings.setProperty("sonar.lang.patterns.web", "web/**"); LanguageDetection detection = new LanguageDetection(settings.asConfig(), languages); assertThat(detectLanguage(detection, "xml/abc.xhtml")).isEqualTo("xml"); assertThat(detectLanguage(detection, "web/abc.xhtml")).isEqualTo("web"); }
@Test public void initialize_makes_single_profile_of_a_language_default_even_if_flagged_as_so() { BuiltInQProfileRepository underTest = new BuiltInQProfileRepositoryImpl(dbClient, new Languages(FOO_LANGUAGE), new DummyProfileDefinition("foo", "foo1", true)); underTest.initialize(); assertThat(underTest.get()) .extracting(BuiltInQProfile::getLanguage, BuiltInQProfile::isDefault) .containsExactly(tuple(FOO_LANGUAGE.getKey(), true)); }
@Test public void should_get_suffixes() { Languages languages = new Languages( language("java", "java"), language("php", "php4", "php5")); assertThat(languages.getSuffixes()).containsOnly("java", "php4", "php5"); assertThat(languages.getSuffixes("java")).containsOnly("java"); assertThat(languages.getSuffixes("php")).containsOnly("php4", "php5"); assertThat(languages.getSuffixes("xxx")).isEmpty(); }
@Test public void initialize_does_not_create_Sonar_Way_as_default_if_other_profile_is_defined_as_default() { BuiltInQProfileRepository underTest = new BuiltInQProfileRepositoryImpl( dbClient, new Languages(FOO_LANGUAGE), new DummyProfileDefinition("foo", SONAR_WAY_QP_NAME, false), new DummyProfileDefinition("foo", "goo", true)); underTest.initialize(); assertThat(underTest.get()) .filteredOn(b -> FOO_LANGUAGE.getKey().equals(b.getLanguage())) .filteredOn(BuiltInQProfile::isDefault) .extracting(BuiltInQProfile::getName) .containsExactly("goo"); }
@Test public void fail_if_invalid_language() { thrown.expect(MessageException.class); thrown.expectMessage("You must install a plugin that supports the language 'unknown'"); LanguagesRepository languages = new DefaultLanguagesRepository(new Languages(new MockLanguage("java", "java"), new MockLanguage("php", "php"))); settings.setProperty(CoreProperties.PROJECT_LANGUAGE_PROPERTY, "unknown"); new LanguageDetection(settings.asConfig(), languages); }
@Test public void empty_when_filtering_on_project_and_no_language_installed() { WsActionTester ws = new WsActionTester(new SearchAction(userSession, new Languages(), dbClient, qProfileWsSupport, new ComponentFinder(dbClient, null))); db.qualityProfiles().insert(db.getDefaultOrganization()); ComponentDto project = db.components().insertPrivateProject(); QProfileDto profileOnXoo1 = db.qualityProfiles().insert(db.getDefaultOrganization(), q -> q.setLanguage(XOO1.getKey())); db.qualityProfiles().associateWithProject(project, profileOnXoo1); SearchWsResponse result = call(ws.newRequest() .setParam(PARAM_PROJECT_KEY, project.getDbKey()) .setParam(PARAM_DEFAULTS, "true")); assertThat(result.getProfilesList()).isEmpty(); }
@Test public void test_completeShow() { OrganizationDto organization = dbTester.organizations().insert(); ActiveRuleCompleter underTest = new ActiveRuleCompleter(dbTester.getDbClient(), new Languages()); RuleDefinitionDto rule = dbTester.rules().insert(); QProfileDto qualityProfile = dbTester.qualityProfiles().insert(organization); ActiveRuleDto activeRule = dbTester.qualityProfiles().activateRule(qualityProfile, rule); List<Rules.Active> result = underTest.completeShow(dbTester.getSession(), organization, rule); assertThat(result).extracting(Rules.Active::getQProfile).containsExactlyInAnyOrder(qualityProfile.getKee()); assertThat(result).extracting(Rules.Active::getSeverity).containsExactlyInAnyOrder(activeRule.getSeverityString()); } }