diff --git a/python/testData/testRunner/env/pytest/config/MyConfig.xml b/python/testData/testRunner/env/pytest/config/MyConfig.xml new file mode 100644 index 000000000000..6133b0e6479b --- /dev/null +++ b/python/testData/testRunner/env/pytest/config/MyConfig.xml @@ -0,0 +1,16 @@ + + + \ No newline at end of file diff --git a/python/testData/testRunner/env/pytest/config/MyConfigWithCustom.xml b/python/testData/testRunner/env/pytest/config/MyConfigWithCustom.xml new file mode 100644 index 000000000000..c4d37f296d26 --- /dev/null +++ b/python/testData/testRunner/env/pytest/config/MyConfigWithCustom.xml @@ -0,0 +1,16 @@ + + + \ No newline at end of file diff --git a/python/testSrc/com/jetbrains/env/python/testing/PythonPyTestingTest.java b/python/testSrc/com/jetbrains/env/python/testing/PythonPyTestingTest.java index 5f95549c87a8..a00adf4cd522 100644 --- a/python/testSrc/com/jetbrains/env/python/testing/PythonPyTestingTest.java +++ b/python/testSrc/com/jetbrains/env/python/testing/PythonPyTestingTest.java @@ -11,22 +11,31 @@ import com.intellij.testFramework.fixtures.CodeInsightTestFixture; import com.intellij.util.PathUtil; import com.jetbrains.env.EnvTestTagsRequired; import com.jetbrains.env.PyEnvTestCase; +import com.jetbrains.env.PyExecutionFixtureTestTask; import com.jetbrains.env.PyProcessWithConsoleTestTask; import com.jetbrains.env.python.testing.CreateConfigurationTestTask.PyConfigurationValidationTask; import com.jetbrains.env.ut.PyTestTestProcessRunner; import com.jetbrains.python.PyNames; import com.jetbrains.python.psi.PyFunction; import com.jetbrains.python.run.targetBasedConfiguration.PyRunTargetVariant; +import com.jetbrains.python.testing.ConfigurationTarget; import com.jetbrains.python.testing.PyTestConfiguration; import com.jetbrains.python.testing.PyTestFactory; import com.jetbrains.python.testing.PyTestFrameworkService; import com.jetbrains.python.tools.sdkTools.SdkCreationType; import org.hamcrest.Matchers; +import org.jdom.Element; +import org.jdom.JDOMException; +import org.jdom.input.SAXBuilder; import org.jetbrains.annotations.NotNull; import org.junit.Assert; import org.junit.Test; import java.io.IOException; +import java.io.StringReader; +import java.nio.ByteBuffer; +import java.nio.CharBuffer; +import java.nio.charset.Charset; import java.util.Collections; import java.util.List; @@ -54,6 +63,42 @@ public final class PythonPyTestingTest extends PyEnvTestCase { }); } + /** + * Provides existing .xml and checks that configuration is able to parse it + */ + @Test + public void testDeserialization() { + runPythonTest(new PyExecutionFixtureTestTask("testRunner/env/pytest/config/") { + @Override + public void runTestOn(String sdkHome) throws Exception { + final PyTestConfiguration configuration = configureByFile("MyConfig.xml"); + assertEquals("Wrong target type", new ConfigurationTarget("foo.py", PyRunTargetVariant.PATH), configuration.getTarget()); + assertEquals("Wrong keywords", "keywords", configuration.getKeywords()); + assertEquals("Wrong arguments", "--additional-args", configuration.getAdditionalArguments()); + + + final PyTestConfiguration configurationWithCustom = configureByFile("MyConfigWithCustom.xml"); + assertEquals("Wrong target type", new ConfigurationTarget("spam", PyRunTargetVariant.CUSTOM), configurationWithCustom.getTarget()); + assertEquals("Wrong keywords", "keywords", configurationWithCustom.getKeywords()); + assertEquals("Wrong arguments", "--additional-args", configurationWithCustom.getAdditionalArguments()); + } + + @NotNull + private PyTestConfiguration configureByFile(@NotNull final String path) throws IOException, JDOMException { + final VirtualFile file = myFixture.getTempDirFixture().getFile(path); + assert file != null : "No config found"; + + final SAXBuilder builder = new SAXBuilder(); + final CharBuffer data = Charset.defaultCharset().decode(ByteBuffer.wrap(file.contentsToByteArray())); + final Element element = builder.build(new StringReader(data.toString())).getRootElement(); + + final PyTestConfiguration configuration = new PyTestConfiguration(myFixture.getProject(), PyTestFactory.INSTANCE); + configuration.readExternal(element); + return configuration; + } + }); + } + /** * Ensures that python target pointing to module works correctly */ @@ -116,7 +161,8 @@ public final class PythonPyTestingTest extends PyEnvTestCase { @Test public void testTestNameBeforeTestStarted() { runPythonTest( - new PyProcessWithConsoleTestTask("/testRunner/env/pytest/testNameBeforeTestStarted", SdkCreationType.EMPTY_SDK) { + new PyProcessWithConsoleTestTask("/testRunner/env/pytest/testNameBeforeTestStarted", + SdkCreationType.EMPTY_SDK) { @NotNull @Override