// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package com.intellij.codeInsight; import com.intellij.JavaTestUtil; import com.intellij.application.options.CodeStyle; import com.intellij.lang.java.JavaLanguage; import com.intellij.openapi.actionSystem.IdeActions; import com.intellij.psi.codeStyle.CommonCodeStyleSettings; import com.intellij.testFramework.EditorTestUtil; import com.intellij.testFramework.LightPlatformCodeInsightTestCase; import org.jetbrains.annotations.NotNull; public class JavaCommentByBlockTest extends LightPlatformCodeInsightTestCase { @Override protected @NotNull String getTestDataPath() { return JavaTestUtil.getJavaTestDataPath(); } public void testIDEADEV27995() { configureByFile("/codeInsight/commentByBlock/java/beforeIdeadev27995.java"); performAction(); checkResultByFile("/codeInsight/commentByBlock/java/afterIdeadev27995.java"); } public void testJava1() { configureByFile("/codeInsight/commentByBlock/java/before1.java"); performAction(); checkResultByFile("/codeInsight/commentByBlock/java/after1.java"); } public void testJava2() { configureByFile("/codeInsight/commentByBlock/java/before2.java"); performAction(); checkResultByFile("/codeInsight/commentByBlock/java/after2.java"); } public void testJava3() { configureByFile("/codeInsight/commentByBlock/java/before3.java"); performAction(); checkResultByFile("/codeInsight/commentByBlock/java/after3.java"); } public void testJava4() { CommonCodeStyleSettings javaSettings = CodeStyle.getSettings(getProject()).getCommonSettings(JavaLanguage.INSTANCE); boolean blockCommentAtFirstCol = javaSettings.BLOCK_COMMENT_AT_FIRST_COLUMN; try { javaSettings.BLOCK_COMMENT_AT_FIRST_COLUMN = false; configureByFile("/codeInsight/commentByBlock/java/before4.java"); performAction(); checkResultByFile("/codeInsight/commentByBlock/java/after4.java"); } finally { javaSettings.BLOCK_COMMENT_AT_FIRST_COLUMN = blockCommentAtFirstCol; } } public void testJava5() { CommonCodeStyleSettings javaSettings = CodeStyle.getSettings(getProject()).getCommonSettings(JavaLanguage.INSTANCE); boolean blockCommentAtFirstCol = javaSettings.BLOCK_COMMENT_AT_FIRST_COLUMN; try { javaSettings.BLOCK_COMMENT_AT_FIRST_COLUMN = false; configureByFile("/codeInsight/commentByBlock/java/before5.java"); performAction(); checkResultByFile("/codeInsight/commentByBlock/java/after5.java"); } finally { javaSettings.BLOCK_COMMENT_AT_FIRST_COLUMN = blockCommentAtFirstCol; } } public void testMulticaret() { configureByFile("/codeInsight/commentByBlock/java/MulticaretBefore.java"); performAction(); checkResultByFile("/codeInsight/commentByBlock/java/MulticaretAfter.java"); } public void testMulticaretUncomment() { configureByFile("/codeInsight/commentByBlock/java/MulticaretUncommentBefore.java"); performAction(); checkResultByFile("/codeInsight/commentByBlock/java/MulticaretUncommentAfter.java"); } public void testCommentStringWithBlockPrefix() { doTestForText("class C { String s = \"/*\"; }", "class C { /*String s = \"/*\";*/ }"); } public void testCommentStringWithBlockSuffix() { doTestForText("class C { String s = \"*/\"; }", "class C { String s = \"*/\"; }"); } public void testCommentRangeIntersectingWithExistingComment() { doTestForText("class C { /* some comment */ int i = 3; }", "class C { /* some comment */ int i = 3; }"); } public void testSelectionContainsJavadoc() { doTestForText(""" class C { int a; /** doc */ int b; }""", """ class C { /*int a; *//** doc *//* int b;*/ }"""); } private void doTestForText(String before, String after) { configureFromFileText(getTestName(true) + ".java", before); performAction(); checkResultByText(after); } private void performAction() { EditorTestUtil.executeAction(getEditor(), IdeActions.ACTION_COMMENT_BLOCK); } }