[jvm-analysis] NlsCapitalizationUtil: tune Sentence validation, better tests

GitOrigin-RevId: d48ff68ede70b010d34a6b10fd300a7412780642
This commit is contained in:
Yann Cébron
2019-04-30 12:27:50 +02:00
committed by intellij-monorepo-bot
parent 38d443a71b
commit 19f717a89f
2 changed files with 77 additions and 17 deletions

View File

@@ -21,25 +21,33 @@ public class NlsCapitalizationUtil {
private static boolean checkSentenceCapitalization(@NotNull String value) {
List<String> words = StringUtil.split(value, " ");
if (words.size() == 0) return true;
final int wordCount = words.size();
if (wordCount == 0) return true;
if (Character.isLetter(words.get(0).charAt(0)) && !isCapitalizedWord(words.get(0))) return false;
if (words.size() == 1) return true;
if (wordCount == 1) return true;
int capitalized = 1;
for (int i = 1, size = words.size(); i < size; i++) {
for (int i = 1; i < wordCount; i++) {
String word = words.get(i);
if (isCapitalizedWord(word)) {
// check for abbreviations like SQL or I18n
// check for abbreviations like 'C', 'SQL', 'I18n'
if (word.length() == 1 || !Character.isLowerCase(word.charAt(1))) {
continue;
}
capitalized++;
}
}
return capitalized / words.size() < 0.2; // allow reasonable amount of capitalized words
// "Start service"
if (capitalized == 1 && wordCount == 2) return true;
final double ratio = ((double)capitalized - 1) / wordCount;
return ratio <= 0.4; // allow reasonable amount of capitalized words
}
private static boolean isCapitalizedWord(String word) {
return word.length() > 0 && Character.isLetter(word.charAt(0)) && Character.isUpperCase(word.charAt(0));
return !word.isEmpty() && Character.isLetter(word.charAt(0)) && Character.isUpperCase(word.charAt(0));
}
@NotNull

View File

@@ -22,16 +22,68 @@ import static com.intellij.codeInspection.NlsCapitalizationUtil.isCapitalization
public class NlsCapitalizationUtilTest extends TestCase {
public void testCapitalization() {
assertTrue(isCapitalizationSatisfied("Fix SQL issues", Nls.Capitalization.Sentence));
assertTrue(isCapitalizationSatisfied("Fix I18n issues", Nls.Capitalization.Sentence));
assertTrue(isCapitalizationSatisfied("Fix C issues", Nls.Capitalization.Sentence));
assertTrue(isCapitalizationSatisfied("@charset is invalid", Nls.Capitalization.Sentence));
assertTrue(isCapitalizationSatisfied("Add 'this' qualifier", Nls.Capitalization.Sentence));
assertTrue(isCapitalizationSatisfied("Add 'this' qualifier", Nls.Capitalization.Sentence));
assertTrue(isCapitalizationSatisfied("Please select the configuration file (usually named IntelliLang.xml) to import.",
Nls.Capitalization.Sentence));
assertFalse(isCapitalizationSatisfied("Foo Bar", Nls.Capitalization.Sentence));
assertTrue(isCapitalizationSatisfied("Foo", Nls.Capitalization.Sentence));
public void testEmptyValue() {
assertSentence("");
assertTitle("");
}
public void testSentence() {
assertSentence("Word");
assertSentence("Minimal sentence");
assertSentence("A bit more normal sentence");
}
public void testSentenceNotSatisfied() {
assertNotCapitalization("all lowercase", Nls.Capitalization.Sentence);
assertNotCapitalization("All Uppercase", Nls.Capitalization.Sentence);
}
public void testSentenceIgnoreUppercaseWords() {
assertSentence("Fix C issues");
assertSentence("Fix SQL issues");
assertSentence("Fix I18n issues");
}
public void testSentenceIgnoreNonLetterWords() {
assertSentence("@charset is invalid");
assertSentence("Add 'this' qualifier");
}
public void testSentenceUppercaseWordsBelowThreshold() {
assertSentence("One Two three");
assertSentence("Two Uppercase three lower case");
assertSentence("Three Uppercase Words two lowercase");
assertSentence("Please select the configuration file (usually named IntelliLang.xml) to import.");
}
public void testSentenceTooManyUppercaseWords() {
assertNotCapitalization("Four Upper Case Words two lowercase", Nls.Capitalization.Sentence);
}
public void testTitle() {
assertTitle("Word");
assertTitle("Word Two");
assertTitle("Word Two SomeSpaces");
}
public void testTitleNotSatisfied() {
assertNotCapitalization("lowercase", Nls.Capitalization.Title);
assertNotCapitalization("Word lowercase", Nls.Capitalization.Title);
}
private static void assertSentence(String value) {
assertCapitalization(value, Nls.Capitalization.Sentence);
}
private static void assertTitle(String value) {
assertCapitalization(value, Nls.Capitalization.Title);
}
private static void assertCapitalization(String value, Nls.Capitalization capitalization) {
assertTrue("'" + value + "' does not satisfy " + capitalization, isCapitalizationSatisfied(value, capitalization));
}
private static void assertNotCapitalization(String value, Nls.Capitalization capitalization) {
assertFalse("'" + value + "' should not satisfy " + capitalization, isCapitalizationSatisfied(value, capitalization));
}
}