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