Files
openide/plugins/java-i18n/testSrc/com/intellij/codeInspection/CapitalizationInspectionTest.java
Tagir Valeev ad40c945e2 [java-inspections] More quickfixes to ModCommand
GitOrigin-RevId: ccc6093d680712cb81c1325d997fb2771b61a0be
2023-06-25 19:05:51 +00:00

157 lines
5.3 KiB
Java

// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.codeInspection;
import com.intellij.codeInsight.intention.IntentionAction;
import com.intellij.codeInspection.capitalization.AnnotateCapitalizationIntention;
import com.intellij.codeInspection.i18n.TitleCapitalizationInspection;
import com.intellij.openapi.application.PluginPathManager;
import com.intellij.openapi.application.impl.NonBlockingReadActionImpl;
import com.intellij.openapi.command.WriteCommandAction;
import com.intellij.testFramework.LightProjectDescriptor;
import com.intellij.testFramework.fixtures.LightJavaCodeInsightFixtureTestCase;
import org.jetbrains.annotations.NotNull;
/**
* @author Dmitry Avdeev
*/
public class CapitalizationInspectionTest extends LightJavaCodeInsightFixtureTestCase {
public void testTitleCapitalization() {
doTest(true);
}
public void testTitleCapitalizationExtension() {
doTest(true);
}
public void testSentenceCapitalization() {
doTest(true);
}
public void testMnemonics() {
doTest(true);
}
public void testTernaryAndParentheses() {
myFixture.testHighlighting(getTestName(false) + ".java");
}
public void testMultipleReturns() {
doTest(true);
}
public void testEmptySentence() {
doTest(false);
}
public void testArgument() {
doTest(false);
}
public void testConstructorArgument() {
doTest(false);
}
public void testSuperConstructorArgument() {
doTest(false);
}
public void testStripHtml() {
doTest(false);
}
public void testCapitalizationMismatch() {
doTest(false);
}
public void testCapitalizationMix() {
doTest(false);
}
public void testLocalVar() {
doTest(false);
}
public void testField() {
doTest(false);
}
public void testIgnoreConcatFormat() {
doTest(false);
}
public void testPropertyTest() {
String props = """
property.lowercase=hello world
property.titlecase=Hello World
property.titlecase.html=<html><b>Hello</b> World</html>
property.parameterized=Hello {0}
property.choice.title=Hello {0,choice,0#World|1#Universe}
property.choice.mixed=Hello {0,choice,0#World|1#universe}
property.choice.lower=Hello {0,choice,0#world|1#universe}
property.choice.sentence.start={0,choice,0#No|1#{0}} {0,choice,0#occurrences|1#occurrence|2#occurrences} found so far
property.sentence.with.quote='return' is not allowed here
property.with.underscore.mnemonic=Subm_it
property.icu4j.title=Generate Code with {0, plural, one {Foo} other {Bar}}""";
myFixture.addFileToProject("MyBundle.properties", props);
doTest(false);
IntentionAction action = myFixture.findSingleIntention("Properly capitalize");
assertEquals("""
property.lowercase=Hello World
property.titlecase=Hello World
property.titlecase.html=<html><b>Hello</b> World</html>
property.parameterized=Hello {0}
property.choice.title=Hello {0,choice,0#World|1#Universe}
property.choice.mixed=Hello {0,choice,0#World|1#universe}
property.choice.lower=Hello {0,choice,0#world|1#universe}
property.choice.sentence.start={0,choice,0#No|1#{0}} {0,choice,0#occurrences|1#occurrence|2#occurrences} found so far
property.sentence.with.quote='return' is not allowed here
property.with.underscore.mnemonic=Subm_it
property.icu4j.title=Generate Code with {0, plural, one {Foo} other {Bar}}""", myFixture.getIntentionPreviewText(action));
}
public void testRecursiveMethod() {
myFixture.testHighlighting(getTestName(false) + ".java");
assertEmpty(myFixture.filterAvailableIntentions("Properly capitalize"));
}
public void testIntention() {
myFixture.configureByFile("Intention.java");
AnnotateCapitalizationIntention intention = new AnnotateCapitalizationIntention();
assertTrue(intention.isAvailable(getProject(), getEditor(), getFile()));
intention.invoke(getProject(), getEditor(), getFile());
NonBlockingReadActionImpl.waitForAsyncTaskCompletion();
myFixture.checkResultByFile("Intention_after.java");
assertFalse(intention.isAvailable(getProject(), getEditor(), getFile()));
}
private void doTest(boolean fix) {
myFixture.testHighlighting(getTestName(false) + ".java");
if (!fix) return;
final IntentionAction action = myFixture.filterAvailableIntentions("Properly capitalize").get(0);
WriteCommandAction.writeCommandAction(getProject()).run(() -> action.invoke(getProject(), myFixture.getEditor(), getFile()));
NonBlockingReadActionImpl.waitForAsyncTaskCompletion();
myFixture.checkResultByFile(getTestName(false) + "_after.java");
}
@Override
public void setUp() throws Exception {
super.setUp();
myFixture.addClass("package com.intellij.codeInspection; public class CommonProblemDescriptor {}");
myFixture.addClass("package com.intellij.codeInspection; public class QuickFix {}");
myFixture.enableInspections(TitleCapitalizationInspection.class);
}
@NotNull
@Override
protected LightProjectDescriptor getProjectDescriptor() {
return JAVA_8;
}
@Override
protected String getBasePath() {
return PluginPathManager.getPluginHomePathRelative("java-i18n") + "/testData/inspections/capitalization";
}
}