| /* |
| * 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); |
| } |
| |
| } |