fix migration from pycharm 3 to pycharm 4

This commit is contained in:
Ekaterina Tuzova
2017-03-25 14:46:07 +03:00
committed by Ekaterina Tuzova
parent 1dc0eaf7df
commit 6f92410b5f
8 changed files with 49 additions and 888 deletions

View File

@@ -262,14 +262,17 @@ public class StudySerializationUtils {
final Element adaptive = getChildWithName(courseElement, ADAPTIVE);
for (Element lesson : getChildList(courseElement, LESSONS)) {
for (Element task : getChildList(lesson, TASK_LIST)) {
final Element lastSubtaskIndex = getChildWithName(task, LAST_SUBTASK_INDEX);
final Element theoryTask = getChildWithName(task, THEORY_TAG);
final Element adaptiveParams = getChildWithName(task, ADAPTIVE_TASK_PARAMETERS);
final boolean hasAdaptiveParams = !adaptiveParams.getChildren().isEmpty();
if (Integer.valueOf(lastSubtaskIndex.getAttributeValue(VALUE)) != 0) {
final Element lastSubtaskIndex = getChildWithName(task, LAST_SUBTASK_INDEX, true); //could be broken by 3->4 migration
final Element adaptiveParams = getChildWithName(task, ADAPTIVE_TASK_PARAMETERS, true);
Element theoryTask = getChildWithName(task, THEORY_TAG, true);
if (theoryTask == null && adaptiveParams != null) {
theoryTask = getChildWithName(adaptiveParams, THEORY_TAG, true);
}
final boolean hasAdaptiveParams = adaptiveParams != null && !adaptiveParams.getChildren().isEmpty();
if (lastSubtaskIndex != null && Integer.valueOf(lastSubtaskIndex.getAttributeValue(VALUE)) != 0) {
task.setName(TASK_WITH_SUBTASKS);
}
else if (Boolean.valueOf(theoryTask.getAttributeValue(VALUE))) {
else if (theoryTask != null && Boolean.valueOf(theoryTask.getAttributeValue(VALUE))) {
task.setName(THEORY_TASK);
}
else if (hasAdaptiveParams) {
@@ -525,9 +528,9 @@ public class StudySerializationUtils {
stepOptionsJson = convertToSecondVersion(stepOptionsJson);
case 2:
stepOptionsJson = convertToThirdVersion(stepOptionsJson);
// uncomment for future versions
//case 3:
// stepOptionsJson = convertToFourthVersion(stepOptionsJson);
// uncomment for future versions
//case 3:
// stepOptionsJson = convertToFourthVersion(stepOptionsJson);
}
convertSubtaskInfosToMap(stepOptionsJson);
StepicWrappers.StepOptions stepOptions =

View File

@@ -1,110 +0,0 @@
<component name="StudySettings">
<StudyTaskManager>
<option name="course">
<Course>
<option name="adaptive" value="false"/>
<option name="authors">
<list>
<StepicUser>
<option name="email" value=""/>
<option name="firstName" value=""/>
<option name="id" value="-1"/>
<option name="lastName" value=""/>
</StepicUser>
</list>
</option>
<option name="courseDirectory" value="$APPLICATION_CONFIG_DIR$/courses/Introduction to Python"/>
<option name="courseMode" value="Study"/>
<option name="courseType" value="PyCharm"/>
<option name="description" value="Introduction course to Python"/>
<option name="id" value="238"/>
<option name="language" value="Python"/>
<option name="lessons">
<list>
<Lesson>
<option name="id" value="13416"/>
<option name="index" value="1"/>
<option name="name" value="Introduction"/>
<option name="updateDate"/>
<option name="taskList">
<list>
<Task>
<option name="index" value="1"/>
<option name="name" value="Our first program"/>
<option name="status" value="Solved"/>
<option name="stepicId" value="98626"/>
<option name="text"/>
<option name="updateDate"/>
<option name="taskFiles">
<map>
<entry key="hello_world.py">
<value>
<TaskFile>
<option name="answerPlaceholders">
<list>
<AnswerPlaceholder>
<option name="additionalHints">
<list>
<option value="hint 2"/>
</list>
</option>
<option name="hint" value="hint 1"/>
<option name="index" value="0"/>
<option name="initialState">
<MyInitialState>
<option name="length" value="14"/>
<option name="offset" value="32"/>
</MyInitialState>
</option>
<option name="length" value="5"/>
<option name="offset" value="32"/>
<option name="possibleAnswer" value="Liana"/>
<option name="selected" value="false"/>
<option name="status" value="Solved"/>
<option name="taskText" value="test text"/>
<option name="useLength" value="true"/>
</AnswerPlaceholder>
</list>
</option>
<option name="highlightErrors" value="true"/>
<option name="index" value="0"/>
<option name="trackChanges" value="true"/>
<option name="userCreated" value="false"/>
<option name="name" value="hello_world.py"/>
<option name="text" value="print(&quot;Hello, world! My name is type your name&quot;)&#10;"/>
</TaskFile>
</value>
</entry>
</map>
</option>
</Task>
</list>
</option>
</Lesson>
</list>
</option>
<option name="name" value="Introduction to Python"/>
<option name="updateDate"/>
</Course>
</option>
<option name="enableTestingFromSamples" value="true"/>
<option name="toolWindowMode" value="TEXT"/>
<option name="turnEditingMode" value="false"/>
<option name="user">
<StepicUser>
<option name="email" value=""/>
<option name="firstName" value=""/>
<option name="id" value="-1"/>
<option name="lastName" value=""/>
</StepicUser>
</option>
<option name="VERSION" value="3"/>
<option name="myUserTests">
<map/>
</option>
<option name="myInvisibleFiles">
<list/>
</option>
<option name="myShouldUseJavaFx" value="true"/>
</StudyTaskManager>
</component>

View File

@@ -1,131 +0,0 @@
<component name="StudySettings">
<StudyTaskManager>
<option name="course">
<Course>
<option name="adaptive" value="false"/>
<option name="authors">
<list>
<StepicUser>
<option name="email" value=""/>
<option name="firstName" value=""/>
<option name="id" value="-1"/>
<option name="lastName" value=""/>
</StepicUser>
</list>
</option>
<option name="courseDirectory" value="$APPLICATION_CONFIG_DIR$/courses/Introduction to Python"/>
<option name="courseMode" value="Study"/>
<option name="courseType" value="PyCharm"/>
<option name="description" value="Introduction course to Python"/>
<option name="id" value="238"/>
<option name="language" value="Python"/>
<option name="lessons">
<list>
<Lesson>
<option name="id" value="13416"/>
<option name="index" value="1"/>
<option name="name" value="Introduction"/>
<option name="updateDate"/>
<option name="taskList">
<list>
<Task>
<option name="index" value="1"/>
<option name="name" value="Our first program"/>
<option name="status" value="Solved"/>
<option name="stepicId" value="98626"/>
<option name="text"/>
<option name="updateDate"/>
<option name="taskFiles">
<map>
<entry key="hello_world.py">
<value>
<TaskFile>
<option name="answerPlaceholders">
<list>
<AnswerPlaceholder>
<option name="additionalHints">
<list>
<option value="hint 2"/>
</list>
</option>
<option name="hint" value="hint 1"/>
<option name="index" value="0"/>
<option name="initialState">
<MyInitialState>
<option name="length" value="14"/>
<option name="offset" value="32"/>
</MyInitialState>
</option>
<option name="length" value="5"/>
<option name="offset" value="32"/>
<option name="possibleAnswer" value="Liana"/>
<option name="selected" value="false"/>
<option name="status" value="Solved"/>
<option name="taskText" value="test text"/>
<option name="useLength" value="true"/>
<option name="subtaskInfos">
<map>
<entry key="0">
<value>
<AnswerPlaceholderSubtaskInfo>
<option name="hint" value="hint 1"/>
<option name="possibleAnswer" value="Liana"/>
<option name="selected" value="false"/>
<option name="status" value="Solved"/>
<option name="placeholderText" value="test text"/>
<option name="hints">
<list>
<option value="hint 1"/>
<option value="hint 2"/>
</list>
</option>
</AnswerPlaceholderSubtaskInfo>
</value>
</entry>
</map>
</option>
</AnswerPlaceholder>
</list>
</option>
<option name="highlightErrors" value="true"/>
<option name="index" value="0"/>
<option name="trackChanges" value="true"/>
<option name="userCreated" value="false"/>
<option name="name" value="hello_world.py"/>
<option name="text" value="print(&quot;Hello, world! My name is type your name&quot;)&#10;"/>
</TaskFile>
</value>
</entry>
</map>
</option>
</Task>
</list>
</option>
</Lesson>
</list>
</option>
<option name="name" value="Introduction to Python"/>
<option name="updateDate"/>
</Course>
</option>
<option name="enableTestingFromSamples" value="true"/>
<option name="toolWindowMode" value="TEXT"/>
<option name="turnEditingMode" value="false"/>
<option name="user">
<StepicUser>
<option name="email" value=""/>
<option name="firstName" value=""/>
<option name="id" value="-1"/>
<option name="lastName" value=""/>
</StepicUser>
</option>
<option name="VERSION" value="3"/>
<option name="myUserTests">
<map/>
</option>
<option name="myInvisibleFiles">
<list/>
</option>
<option name="myShouldUseJavaFx" value="true"/>
</StudyTaskManager>
</component>

View File

@@ -1,175 +0,0 @@
<component name="StudySettings">
<StudyTaskManager>
<option name="course">
<Course>
<option name="adaptive" value="true" />
<option name="authors">
<list>
<StepicUser>
<option name="accessToken" />
<option name="email" value="" />
<option name="firstName" value="" />
<option name="id" value="-1" />
<option name="lastName" value="" />
<option name="refreshToken" />
</StepicUser>
</list>
</option>
<option name="courseDirectory" value="$APPLICATION_CONFIG_DIR$/courses/__AdaptivePyCharmPython__test_adaptive_PyCharm_course_2_tuzova.k@gmail.com" />
<option name="courseMode" value="Study" />
<option name="courseType" value="PyCharm" />
<option name="description" value="This is a Stepik Adaptive course.&#10;&#10;Choice-test&#10;&#10;Initially, the adaptive system may behave somewhat randomly, but the more problems you solve, the smarter it become!" />
<option name="id" value="1730" />
<option name="language" value="Python" />
<option name="lessons">
<list>
<Lesson>
<option name="id" value="35738" />
<option name="index" value="1" />
<option name="name" value="Adaptive" />
<option name="updateDate" />
<option name="taskList">
<list>
<Task>
<option name="activeSubtaskIndex" value="0" />
<option name="adaptiveTaskParameters" />
<option name="index" value="1" />
<option name="lastSubtaskIndex" value="0" />
<option name="name" value="Hello world!" />
<option name="status" value="Solved" />
<option name="stepId" value="98994" />
<option name="text" />
<option name="theoryTask" value="false" />
<option name="updateDate" />
<option name="taskFiles">
<map>
<entry key="code.py">
<value>
<TaskFile>
<option name="answerPlaceholders">
<list />
</option>
<option name="highlightErrors" value="true" />
<option name="index" value="0" />
<option name="trackChanges" value="true" />
<option name="trackLengths" value="true" />
<option name="userCreated" value="false" />
<option name="name" value="code" />
<option name="text" value="# put your python code here" />
</TaskFile>
</value>
</entry>
</map>
</option>
</Task>
<Task>
<option name="activeSubtaskIndex" value="0" />
<option name="adaptiveTaskParameters">
<AdaptiveTaskParameters>
<option name="choiceVariants">
<list />
</option>
<option name="multipleChoice" value="false" />
<option name="selectedVariants">
<list />
</option>
<option name="theoryTask" value="true" />
</AdaptiveTaskParameters>
</option>
<option name="index" value="2" />
<option name="lastSubtaskIndex" value="0" />
<option name="name" value="Theory. Input/output" />
<option name="status" value="Solved" />
<option name="stepId" value="131457" />
<option name="text" />
<option name="theoryTask" value="true" />
<option name="updateDate" />
<option name="taskFiles">
<map>
<entry key="code.py">
<value>
<TaskFile>
<option name="answerPlaceholders">
<list />
</option>
<option name="highlightErrors" value="false" />
<option name="index" value="0" />
<option name="trackChanges" value="true" />
<option name="trackLengths" value="true" />
<option name="userCreated" value="false" />
<option name="name" value="code" />
<option name="text" value="# you can experiment here, it won't be checked" />
</TaskFile>
</value>
</entry>
</map>
</option>
</Task>
<Task>
<option name="activeSubtaskIndex" value="0" />
<option name="adaptiveTaskParameters">
<AdaptiveTaskParameters>
<option name="choiceVariants">
<list>
<option value="(2, 1)" />
<option value="It causes TypeError: f() got an unexpected keyword argument" />
<option value="(1, 2)" />
</list>
</option>
<option name="multipleChoice" value="false" />
<option name="selectedVariants">
<list />
</option>
<option name="theoryTask" value="false" />
</AdaptiveTaskParameters>
</option>
<option name="index" value="3" />
<option name="lastSubtaskIndex" value="0" />
<option name="name" value="Small question about functions" />
<option name="status" value="Unchecked" />
<option name="stepId" value="145807" />
<option name="text" value="What does this function return?&lt;div&gt;&lt;br&gt;&lt;div&gt;&lt;pre&gt;&lt;pre&gt;&lt;code&gt;def f(a,b):&lt;br&gt; return a,b&lt;br&gt;&lt;br&gt;f(**{'b':2,'a':1})&lt;/code&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;" />
<option name="theoryTask" value="false" />
<option name="updateDate" />
<option name="taskFiles">
<map>
<entry key="code.py">
<value>
<TaskFile>
<option name="answerPlaceholders">
<list />
</option>
<option name="highlightErrors" value="false" />
<option name="index" value="0" />
<option name="trackChanges" value="true" />
<option name="trackLengths" value="true" />
<option name="userCreated" value="false" />
<option name="name" value="code" />
<option name="text" value="# you can experiment here, it won't be checked" />
</TaskFile>
</value>
</entry>
</map>
</option>
</Task>
</list>
</option>
</Lesson>
</list>
</option>
<option name="name" value="test_adaptive_PyCharm_course_2" />
<option name="updateDate" />
</Course>
</option>
<option name="toolWindowMode" value="TEXT" />
<option name="turnEditingMode" value="false" />
<option name="VERSION" value="4" />
<option name="myUserTests">
<map />
</option>
<option name="myInvisibleFiles">
<list />
</option>
<option name="myShouldUseJavaFx" value="true" />
</StudyTaskManager>
</component>

View File

@@ -1,154 +0,0 @@
<component name="StudySettings">
<StudyTaskManager>
<option name="course">
<Course>
<option name="adaptive" value="true" />
<option name="authors">
<list>
<StepicUser>
<option name="accessToken" />
<option name="email" value="" />
<option name="firstName" value="" />
<option name="id" value="-1" />
<option name="lastName" value="" />
<option name="refreshToken" />
</StepicUser>
</list>
</option>
<option name="courseDirectory" value="$APPLICATION_CONFIG_DIR$/courses/__AdaptivePyCharmPython__test_adaptive_PyCharm_course_2_tuzova.k@gmail.com" />
<option name="courseMode" value="Study" />
<option name="courseType" value="PyCharm" />
<option name="description" value="This is a Stepik Adaptive course.&#10;&#10;Choice-test&#10;&#10;Initially, the adaptive system may behave somewhat randomly, but the more problems you solve, the smarter it become!" />
<option name="id" value="1730" />
<option name="language" value="Python" />
<option name="lessons">
<list>
<Lesson>
<option name="id" value="35738" />
<option name="index" value="1" />
<option name="name" value="Adaptive" />
<option name="updateDate" />
<option name="taskList">
<list>
<CodeTask>
<option name="activeSubtaskIndex" value="0" />
<option name="index" value="1" />
<option name="lastSubtaskIndex" value="0" />
<option name="name" value="Hello world!" />
<option name="status" value="Solved" />
<option name="stepId" value="98994" />
<option name="text" />
<option name="updateDate" />
<option name="taskFiles">
<map>
<entry key="code.py">
<value>
<TaskFile>
<option name="answerPlaceholders">
<list />
</option>
<option name="highlightErrors" value="true" />
<option name="index" value="0" />
<option name="trackChanges" value="true" />
<option name="trackLengths" value="true" />
<option name="userCreated" value="false" />
<option name="name" value="code" />
<option name="text" value="# put your python code here" />
</TaskFile>
</value>
</entry>
</map>
</option>
</CodeTask>
<TheoryTask>
<option name="activeSubtaskIndex" value="0" />
<option name="index" value="2" />
<option name="lastSubtaskIndex" value="0" />
<option name="name" value="Theory. Input/output" />
<option name="status" value="Solved" />
<option name="stepId" value="131457" />
<option name="text" />
<option name="updateDate" />
<option name="taskFiles">
<map>
<entry key="code.py">
<value>
<TaskFile>
<option name="answerPlaceholders">
<list />
</option>
<option name="highlightErrors" value="false" />
<option name="index" value="0" />
<option name="trackChanges" value="true" />
<option name="trackLengths" value="true" />
<option name="userCreated" value="false" />
<option name="name" value="code" />
<option name="text" value="# you can experiment here, it won't be checked" />
</TaskFile>
</value>
</entry>
</map>
</option>
</TheoryTask>
<ChoiceTask>
<option name="activeSubtaskIndex" value="0" />
<option name="index" value="3" />
<option name="lastSubtaskIndex" value="0" />
<option name="name" value="Small question about functions" />
<option name="status" value="Unchecked" />
<option name="stepId" value="145807" />
<option name="text" value="What does this function return?&lt;div&gt;&lt;br&gt;&lt;div&gt;&lt;pre&gt;&lt;pre&gt;&lt;code&gt;def f(a,b):&lt;br&gt; return a,b&lt;br&gt;&lt;br&gt;f(**{'b':2,'a':1})&lt;/code&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;" />
<option name="updateDate" />
<option name="taskFiles">
<map>
<entry key="code.py">
<value>
<TaskFile>
<option name="answerPlaceholders">
<list />
</option>
<option name="highlightErrors" value="false" />
<option name="index" value="0" />
<option name="trackChanges" value="true" />
<option name="trackLengths" value="true" />
<option name="userCreated" value="false" />
<option name="name" value="code" />
<option name="text" value="# you can experiment here, it won't be checked" />
</TaskFile>
</value>
</entry>
</map>
</option>
<option name="choiceVariants">
<list>
<option value="(2, 1)" />
<option value="It causes TypeError: f() got an unexpected keyword argument" />
<option value="(1, 2)" />
</list>
</option>
<option name="multipleChoice" value="false" />
<option name="selectedVariants">
<list />
</option>
</ChoiceTask>
</list>
</option>
</Lesson>
</list>
</option>
<option name="name" value="test_adaptive_PyCharm_course_2" />
<option name="updateDate" />
</Course>
</option>
<option name="toolWindowMode" value="TEXT" />
<option name="turnEditingMode" value="false" />
<option name="VERSION" value="4" />
<option name="myUserTests">
<map />
</option>
<option name="myInvisibleFiles">
<list />
</option>
<option name="myShouldUseJavaFx" value="true" />
</StudyTaskManager>
</component>

View File

@@ -1,158 +0,0 @@
<component name="StudySettings">
<StudyTaskManager>
<option name="course">
<Course>
<option name="adaptive" value="false" />
<option name="authors">
<list>
<StepicUser>
<option name="accessToken" />
<option name="email" value="" />
<option name="firstName" value="ktisha" />
<option name="id" value="-1" />
<option name="lastName" value="" />
<option name="refreshToken" />
</StepicUser>
</list>
</option>
<option name="courseDirectory" value="$APPLICATION_CONFIG_DIR$/courses/1234-untitled" />
<option name="courseMode" value="Course Creator" />
<option name="courseType" value="PyCharm" />
<option name="description" value="qwer" />
<option name="id" value="0" />
<option name="language" value="Python" />
<option name="lessons">
<list>
<Lesson>
<option name="id" value="0" />
<option name="index" value="1" />
<option name="name" value="lesson1" />
<option name="updateDate" />
<option name="taskList">
<list>
<Task>
<option name="activeSubtaskIndex" value="1" />
<option name="adaptiveTaskParameters">
<AdaptiveTaskParameters>
<option name="choiceVariants">
<list />
</option>
<option name="multipleChoice" value="false" />
<option name="selectedVariants">
<list />
</option>
<option name="theoryTask" value="false" />
</AdaptiveTaskParameters>
</option>
<option name="index" value="1" />
<option name="lastSubtaskIndex" value="1" />
<option name="name" value="task1" />
<option name="status" value="Unchecked" />
<option name="stepId" value="0" />
<option name="text" />
<option name="theoryTask" value="false" />
<option name="updateDate" />
<option name="taskFiles">
<map>
<entry key="task.py">
<value>
<TaskFile>
<option name="answerPlaceholders">
<list>
<AnswerPlaceholder>
<option name="index" value="0" />
<option name="initialState" />
<option name="length" value="3" />
<option name="offset" value="7" />
<option name="selected" value="false" />
<option name="subtaskInfos">
<map>
<entry key="0">
<value>
<AnswerPlaceholderSubtaskInfo>
<option name="answer" value="" />
<option name="hasFrame" value="true" />
<option name="hints">
<list>
<option value="hint1" />
</list>
</option>
<option name="needInsertText" value="false" />
<option name="placeholderText" value="123" />
<option name="possibleAnswer" value=" type" />
<option name="selected" value="false" />
<option name="status" value="Unchecked" />
</AnswerPlaceholderSubtaskInfo>
</value>
</entry>
</map>
</option>
<option name="useLength" value="false" />
</AnswerPlaceholder>
<AnswerPlaceholder>
<option name="index" value="1" />
<option name="initialState" />
<option name="length" value="4" />
<option name="offset" value="22" />
<option name="selected" value="false" />
<option name="subtaskInfos">
<map>
<entry key="1">
<value>
<AnswerPlaceholderSubtaskInfo>
<option name="answer" value="" />
<option name="hasFrame" value="true" />
<option name="hints">
<list>
<option value="hint2" />
</list>
</option>
<option name="needInsertText" value="false" />
<option name="placeholderText" value="zxcv" />
<option name="possibleAnswer" value="here" />
<option name="selected" value="false" />
<option name="status" value="Unchecked" />
</AnswerPlaceholderSubtaskInfo>
</value>
</entry>
</map>
</option>
<option name="useLength" value="false" />
</AnswerPlaceholder>
</list>
</option>
<option name="highlightErrors" value="true" />
<option name="index" value="1" />
<option name="trackChanges" value="true" />
<option name="trackLengths" value="true" />
<option name="userCreated" value="false" />
<option name="name" value="task.py" />
<option name="text" />
</TaskFile>
</value>
</entry>
</map>
</option>
</Task>
</list>
</option>
</Lesson>
</list>
</option>
<option name="name" value="1234" />
<option name="updateDate" />
</Course>
</option>
<option name="enableTestingFromSamples" value="false" />
<option name="toolWindowMode" value="TEXT" />
<option name="turnEditingMode" value="false" />
<option name="VERSION" value="4" />
<option name="myUserTests">
<map />
</option>
<option name="myInvisibleFiles">
<list />
</option>
<option name="myShouldUseJavaFx" value="true" />
</StudyTaskManager>
</component>

View File

@@ -1,145 +0,0 @@
<component name="StudySettings">
<StudyTaskManager>
<option name="course">
<Course>
<option name="adaptive" value="false" />
<option name="authors">
<list>
<StepicUser>
<option name="accessToken" />
<option name="email" value="" />
<option name="firstName" value="ktisha" />
<option name="id" value="-1" />
<option name="lastName" value="" />
<option name="refreshToken" />
</StepicUser>
</list>
</option>
<option name="courseDirectory" value="$APPLICATION_CONFIG_DIR$/courses/1234-untitled" />
<option name="courseMode" value="Course Creator" />
<option name="courseType" value="PyCharm" />
<option name="description" value="qwer" />
<option name="id" value="0" />
<option name="language" value="Python" />
<option name="lessons">
<list>
<Lesson>
<option name="id" value="0" />
<option name="index" value="1" />
<option name="name" value="lesson1" />
<option name="updateDate" />
<option name="taskList">
<list>
<TaskWithSubtasks>
<option name="activeSubtaskIndex" value="1" />
<option name="index" value="1" />
<option name="lastSubtaskIndex" value="1" />
<option name="name" value="task1" />
<option name="status" value="Unchecked" />
<option name="stepId" value="0" />
<option name="text" />
<option name="updateDate" />
<option name="taskFiles">
<map>
<entry key="task.py">
<value>
<TaskFile>
<option name="answerPlaceholders">
<list>
<AnswerPlaceholder>
<option name="index" value="0" />
<option name="initialState" />
<option name="length" value="3" />
<option name="offset" value="7" />
<option name="selected" value="false" />
<option name="subtaskInfos">
<map>
<entry key="0">
<value>
<AnswerPlaceholderSubtaskInfo>
<option name="answer" value="" />
<option name="hasFrame" value="true" />
<option name="hints">
<list>
<option value="hint1" />
</list>
</option>
<option name="needInsertText" value="false" />
<option name="placeholderText" value="123" />
<option name="possibleAnswer" value=" type" />
<option name="selected" value="false" />
<option name="status" value="Unchecked" />
</AnswerPlaceholderSubtaskInfo>
</value>
</entry>
</map>
</option>
<option name="useLength" value="false" />
</AnswerPlaceholder>
<AnswerPlaceholder>
<option name="index" value="1" />
<option name="initialState" />
<option name="length" value="4" />
<option name="offset" value="22" />
<option name="selected" value="false" />
<option name="subtaskInfos">
<map>
<entry key="1">
<value>
<AnswerPlaceholderSubtaskInfo>
<option name="answer" value="" />
<option name="hasFrame" value="true" />
<option name="hints">
<list>
<option value="hint2" />
</list>
</option>
<option name="needInsertText" value="false" />
<option name="placeholderText" value="zxcv" />
<option name="possibleAnswer" value="here" />
<option name="selected" value="false" />
<option name="status" value="Unchecked" />
</AnswerPlaceholderSubtaskInfo>
</value>
</entry>
</map>
</option>
<option name="useLength" value="false" />
</AnswerPlaceholder>
</list>
</option>
<option name="highlightErrors" value="true" />
<option name="index" value="1" />
<option name="trackChanges" value="true" />
<option name="trackLengths" value="true" />
<option name="userCreated" value="false" />
<option name="name" value="task.py" />
<option name="text" />
</TaskFile>
</value>
</entry>
</map>
</option>
</TaskWithSubtasks>
</list>
</option>
</Lesson>
</list>
</option>
<option name="name" value="1234" />
<option name="updateDate" />
</Course>
</option>
<option name="enableTestingFromSamples" value="false" />
<option name="toolWindowMode" value="TEXT" />
<option name="turnEditingMode" value="false" />
<option name="VERSION" value="4" />
<option name="myUserTests">
<map />
</option>
<option name="myInvisibleFiles">
<list />
</option>
<option name="myShouldUseJavaFx" value="true" />
</StudyTaskManager>
</component>

View File

@@ -5,7 +5,9 @@ import com.intellij.util.JdomKt;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jetbrains.annotations.NotNull;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TestName;
import java.io.IOException;
import java.nio.file.Path;
@@ -14,22 +16,51 @@ import java.nio.file.Paths;
import static com.intellij.testFramework.assertions.Assertions.assertThat;
public class StudyMigrationTest {
@Rule public TestName name = new TestName();
@Test
public void testFromThirdToForth() throws JDOMException, IOException, StudySerializationUtils.StudyUnrecognizedFormatException {
Element element = JdomKt.loadElement(getTestDataPath().resolve("3.xml"));
assertThat(StudySerializationUtils.Xml.convertToForthVersion(element)).isEqualTo(getTestDataPath().resolve("4.xml"));
doTest(3);
}
@Test
public void testAdaptive45() throws JDOMException, IOException, StudySerializationUtils.StudyUnrecognizedFormatException {
Element element = JdomKt.loadElement(getTestDataPath().resolve("adaptive4.xml"));
assertThat(StudySerializationUtils.Xml.convertToFifthVersion(element)).isEqualTo(getTestDataPath().resolve("adaptive5.xml"));
doTest(4);
}
@Test
public void testSubtasks45() throws JDOMException, IOException, StudySerializationUtils.StudyUnrecognizedFormatException {
Element element = JdomKt.loadElement(getTestDataPath().resolve("subtasks4.xml"));
assertThat(StudySerializationUtils.Xml.convertToFifthVersion(element)).isEqualTo(getTestDataPath().resolve("subtasks5.xml"));
doTest(4);
}
@Test
public void testTheory35To4() throws JDOMException, IOException, StudySerializationUtils.StudyUnrecognizedFormatException {
doTest(4);
}
@Test
public void testTheory351To4() throws JDOMException, IOException, StudySerializationUtils.StudyUnrecognizedFormatException {
doTest(4);
}
private void doTest(int version) throws IOException, JDOMException, StudySerializationUtils.StudyUnrecognizedFormatException {
final String name = PlatformTestUtil.getTestName(this.name.getMethodName(), true);
final Path before = getTestDataPath().resolve(name + ".xml");
final Path after = getTestDataPath().resolve(name + ".after.xml");
Element element = JdomKt.loadElement(before);
Element converted = element;
switch (version) {
case 1:
converted = StudySerializationUtils.Xml.convertToSecondVersion(element);
break;
case 3:
converted = StudySerializationUtils.Xml.convertToForthVersion(element);
break;
case 4:
converted = StudySerializationUtils.Xml.convertToFifthVersion(element);
break;
}
assertThat(converted).isEqualTo(after);
}
@NotNull