mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-06 11:50:54 +07:00
[jvm-analysis] NlsCapitalizationUtil: tune Sentence validation, better tests
GitOrigin-RevId: d48ff68ede70b010d34a6b10fd300a7412780642
This commit is contained in:
committed by
intellij-monorepo-bot
parent
38d443a71b
commit
19f717a89f
@@ -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
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user