blob: 73ab49e28659db3b8c9465d12449cb9d424a0939 [file] [log] [blame]
/*
* Copyright 2000-2013 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.jetbrains.python;
import com.intellij.openapi.editor.colors.EditorColorsManager;
import com.intellij.openapi.editor.colors.EditorColorsScheme;
import com.intellij.openapi.editor.colors.TextAttributesKey;
import com.intellij.openapi.editor.markup.EffectType;
import com.intellij.openapi.editor.markup.TextAttributes;
import com.jetbrains.python.documentation.DocStringFormat;
import com.jetbrains.python.documentation.PyDocumentationSettings;
import com.jetbrains.python.fixtures.PyTestCase;
import com.jetbrains.python.psi.LanguageLevel;
import com.jetbrains.python.psi.impl.PythonLanguageLevelPusher;
import java.awt.*;
/**
* Test highlighting added by annotators.
*
* @author yole
*/
public class PythonHighlightingTest extends PyTestCase {
private static final String TEST_PATH = "/highlighting/";
public void testBuiltins() {
EditorColorsManager manager = EditorColorsManager.getInstance();
EditorColorsScheme scheme = (EditorColorsScheme)manager.getGlobalScheme().clone();
manager.addColorsScheme(scheme);
EditorColorsManager.getInstance().setGlobalScheme(scheme);
TextAttributesKey xKey;
TextAttributes xAttributes;
xKey = TextAttributesKey.find("PY.BUILTIN_NAME");
xAttributes = new TextAttributes(Color.green, Color.black, Color.white, EffectType.BOXED, Font.BOLD);
scheme.setAttributes(xKey, xAttributes);
xKey = TextAttributesKey.find("PY.PREDEFINED_USAGE");
xAttributes = new TextAttributes(Color.yellow, Color.black, Color.white, EffectType.BOXED, Font.BOLD);
scheme.setAttributes(xKey, xAttributes);
doTest();
}
public void testDeclarations() {
EditorColorsManager manager = EditorColorsManager.getInstance();
EditorColorsScheme scheme = (EditorColorsScheme)manager.getGlobalScheme().clone();
manager.addColorsScheme(scheme);
EditorColorsManager.getInstance().setGlobalScheme(scheme);
TextAttributesKey xKey = TextAttributesKey.find("PY.CLASS_DEFINITION");
TextAttributes xAttributes = new TextAttributes(Color.blue, Color.black, Color.white, EffectType.BOXED, Font.BOLD);
scheme.setAttributes(xKey, xAttributes);
xKey = TextAttributesKey.find("PY.FUNC_DEFINITION");
xAttributes = new TextAttributes(Color.red, Color.black, Color.white, EffectType.BOXED, Font.BOLD);
scheme.setAttributes(xKey, xAttributes);
xKey = TextAttributesKey.find("PY.PREDEFINED_DEFINITION");
xAttributes = new TextAttributes(Color.green, Color.black, Color.white, EffectType.BOXED, Font.BOLD);
scheme.setAttributes(xKey, xAttributes);
doTest();
}
public void testAssignmentTargets() {
setLanguageLevel(LanguageLevel.PYTHON26);
doTest(true, false);
}
public void testAssignmentTargetWith() { // PY-7529
setLanguageLevel(LanguageLevel.PYTHON27);
doTest(true, false);
}
public void testAssignmentTargets3K() {
doTest(LanguageLevel.PYTHON30, true, false);
}
public void testBreakOutsideOfLoop() {
doTest(true, false);
}
public void testReturnOutsideOfFunction() {
doTest();
}
public void testContinueInFinallyBlock() {
doTest(false, false);
}
public void testReturnWithArgumentsInGenerator() {
doTest();
}
public void testYieldOutsideOfFunction() {
doTest(LanguageLevel.PYTHON27, true, true);
}
public void testYieldInDefaultValue() {
doTest(LanguageLevel.PYTHON34, true, false);
}
// PY-11663
public void testYieldInLambda() {
doTest();
}
public void testImportStarAtTopLevel() {
doTest(true, false);
}
public void testMalformedStringUnterminated() {
doTest();
}
public void testMalformedStringEscaped() {
doTest(false, false);
}
/*
public void testStringEscapedOK() {
doTest();
}
*/
public void testStringMixedSeparatorsOK() { // PY-299
doTest();
}
public void testStringBytesLiteralOK() {
doTest(LanguageLevel.PYTHON26, true, true);
}
public void testArgumentList() {
doTest(true, false);
}
public void testRegularAfterVarArgs() {
doTest(LanguageLevel.PYTHON30, true, false);
}
public void testKeywordOnlyArguments() {
doTest(LanguageLevel.PYTHON30, true, false);
}
public void testMalformedStringTripleQuoteUnterminated() {
doTest();
}
public void testMixedTripleQuotes() { // PY-2806
doTest();
}
public void testOddNumberOfQuotes() { // PY-2802
doTest(true, false);
}
public void testEscapedBackslash() { // PY-2994
doTest(true, false);
}
public void testMultipleEscapedBackslashes() {
doTest(true, false);
}
public void testUnsupportedFeaturesInPython3() {
doTest(LanguageLevel.PYTHON30, true, false);
}
// PY-6703
public void testUnicode33() {
doTest(LanguageLevel.PYTHON33, true, false);
}
// PY-6702
public void testYieldFromBefore33() {
doTest(LanguageLevel.PYTHON32, true, false);
}
public void testParenthesizedGenerator() {
doTest(false, false);
}
public void testStarInGenerator() { // PY-10177
doTest(LanguageLevel.PYTHON33, false, false);
}
public void testStarArgs() { // PY-6456
doTest(LanguageLevel.PYTHON32, true, false);
}
public void testDocstring() { // PY-8025
PyDocumentationSettings documentationSettings = PyDocumentationSettings.getInstance(myFixture.getModule());
documentationSettings.setFormat(DocStringFormat.REST);
try {
doTest(false, true);
}
finally {
documentationSettings.setFormat(DocStringFormat.PLAIN);
}
}
public void testYieldInNestedFunction() {
// highlight func declaration first, lest we get an "Extra fragment highlighted" error.
EditorColorsManager manager = EditorColorsManager.getInstance();
EditorColorsScheme scheme = (EditorColorsScheme)manager.getGlobalScheme().clone();
manager.addColorsScheme(scheme);
EditorColorsManager.getInstance().setGlobalScheme(scheme);
TextAttributesKey xKey = TextAttributesKey.find("PY.FUNC_DEFINITION");
TextAttributes xAttributes = new TextAttributes(Color.red, Color.black, Color.white, EffectType.BOXED, Font.BOLD);
scheme.setAttributes(xKey, xAttributes);
doTest();
}
// ---
private void doTest(final LanguageLevel languageLevel, final boolean checkWarnings, final boolean checkInfos) {
PythonLanguageLevelPusher.setForcedLanguageLevel(myFixture.getProject(), languageLevel);
try {
doTest(checkWarnings, checkInfos);
}
finally {
PythonLanguageLevelPusher.setForcedLanguageLevel(myFixture.getProject(), null);
}
}
private void doTest() {
final String TEST_PATH = "/highlighting/";
myFixture.testHighlighting(true, true, false, TEST_PATH + getTestName(true) + PyNames.DOT_PY);
}
private void doTest(boolean checkWarnings, boolean checkInfos) {
myFixture.testHighlighting(checkWarnings, checkInfos, false, TEST_PATH + getTestName(true) + PyNames.DOT_PY);
}
}