/* * Copyright 2000-2014 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.projectRoots.Sdk; import com.intellij.openapi.projectRoots.impl.ProjectJdkImpl; import com.jetbrains.python.fixtures.PyTestCase; import com.jetbrains.python.psi.LanguageLevel; import com.jetbrains.python.sdk.PythonSdkAdditionalData; import com.jetbrains.python.sdk.PythonSdkType; import com.jetbrains.python.sdk.flavors.JythonSdkFlavor; import com.jetbrains.python.sdk.flavors.PyPySdkFlavor; import com.jetbrains.python.sdk.flavors.PythonSdkFlavor; import com.jetbrains.python.sdk.flavors.UnixPythonSdkFlavor; import org.jetbrains.annotations.NotNull; /** * @author vlan */ public class PySdkFlavorTest extends PyTestCase { public void testPython27VersionString() { final PythonSdkFlavor flavor = UnixPythonSdkFlavor.INSTANCE; final String versionOutput = "Python 2.7.6\n"; final Sdk mockSdk = createMockSdk(flavor, versionOutput); assertEquals("Python 2.7.6", mockSdk.getVersionString()); assertEquals(LanguageLevel.PYTHON27, flavor.getLanguageLevel(mockSdk)); } public void testPython34VersionString() { final PythonSdkFlavor flavor = UnixPythonSdkFlavor.INSTANCE; final String versionOutput = "Python 3.4.0\n"; final Sdk mockSdk = createMockSdk(flavor, versionOutput); assertEquals("Python 3.4.0", mockSdk.getVersionString()); assertEquals(LanguageLevel.PYTHON34, flavor.getLanguageLevel(mockSdk)); } public void testJython25VersionString() { final PythonSdkFlavor flavor = JythonSdkFlavor.INSTANCE; final String versionOutput = "Jython 2.5.3\n"; final Sdk mockSdk = createMockSdk(flavor, versionOutput); assertEquals("Jython 2.5.3", mockSdk.getVersionString()); assertEquals(LanguageLevel.PYTHON25, flavor.getLanguageLevel(mockSdk)); } public void testJython25WithWarningsVersionString() { final PythonSdkFlavor flavor = JythonSdkFlavor.INSTANCE; final String versionOutput = "\"my\" variable $jythonHome masks earlier declaration in same scope at /usr/bin/jython line 15.\n" + "Jython 2.5.3\n"; final Sdk mockSdk = createMockSdk(flavor, versionOutput); assertEquals("Jython 2.5.3", mockSdk.getVersionString()); assertEquals(LanguageLevel.PYTHON25, flavor.getLanguageLevel(mockSdk)); } public void testPyPy23VersionString() { final PythonSdkFlavor flavor = PyPySdkFlavor.INSTANCE; final String versionOutput = "Python 2.7.6 (32f35069a16d819b58c1b6efb17c44e3e53397b2, Jun 10 2014, 00:42:27)\n" + "[PyPy 2.3.1 with GCC 4.8.2]\n"; final Sdk mockSdk = createMockSdk(flavor, versionOutput); assertEquals("PyPy 2.3.1 [Python 2.7.6]", mockSdk.getVersionString()); assertEquals(LanguageLevel.PYTHON27, flavor.getLanguageLevel(mockSdk)); assertEquals("__builtin__.py", PythonSdkType.getBuiltinsFileName(mockSdk)); } public void testPyPy323VersionString() { final PythonSdkFlavor flavor = PyPySdkFlavor.INSTANCE; final String versionOutput = "Python 3.2.5 (986752d005bb6c65ce418113e4c3cd115f61a9b4, Jun 23 2014, 00:23:34)\n" + "[PyPy 2.3.1 with GCC 4.8.2]\n"; final Sdk mockSdk = createMockSdk(flavor, versionOutput); assertEquals("PyPy 2.3.1 [Python 3.2.5]", mockSdk.getVersionString()); assertEquals(LanguageLevel.PYTHON32, flavor.getLanguageLevel(mockSdk)); assertEquals("builtins.py", PythonSdkType.getBuiltinsFileName(mockSdk)); } // TODO: Add tests for MayaPy and IronPython SDK flavors @NotNull private static Sdk createMockSdk(@NotNull PythonSdkFlavor flavor, @NotNull String versionOutput) { final String versionString = flavor.getVersionStringFromOutput(versionOutput); final ProjectJdkImpl sdk = new ProjectJdkImpl("Test", PythonSdkType.getInstance(), "/path/to/sdk", versionString); sdk.setSdkAdditionalData(new PythonSdkAdditionalData(flavor)); return sdk; } }