diff --git a/python/edu/course-creator-python/resources/META-INF/plugin.xml b/python/edu/course-creator-python/resources/META-INF/plugin.xml
index 1b015984d136..1bb7f23ba546 100644
--- a/python/edu/course-creator-python/resources/META-INF/plugin.xml
+++ b/python/edu/course-creator-python/resources/META-INF/plugin.xml
@@ -28,7 +28,7 @@
-
+
diff --git a/python/edu/course-creator-python/src/com/jetbrains/edu/coursecreator/PyStudyLanguageManager.java b/python/edu/course-creator-python/src/com/jetbrains/edu/coursecreator/PyCCLanguageManager.java
similarity index 94%
rename from python/edu/course-creator-python/src/com/jetbrains/edu/coursecreator/PyStudyLanguageManager.java
rename to python/edu/course-creator-python/src/com/jetbrains/edu/coursecreator/PyCCLanguageManager.java
index be2f399ffe58..2f6db75f6dcc 100644
--- a/python/edu/course-creator-python/src/com/jetbrains/edu/coursecreator/PyStudyLanguageManager.java
+++ b/python/edu/course-creator-python/src/com/jetbrains/edu/coursecreator/PyCCLanguageManager.java
@@ -8,7 +8,7 @@ import org.jetbrains.annotations.Nullable;
import java.io.File;
-public class PyStudyLanguageManager implements StudyLanguageManager {
+public class PyCCLanguageManager implements CCLanguageManager {
@Nullable
@Override
public String getDefaultTaskFileExtension() {
diff --git a/python/edu/interactive-learning-python/resources/META-INF/plugin.xml b/python/edu/interactive-learning-python/resources/META-INF/plugin.xml
index 21610c1dc0ee..a9eca088e5f1 100644
--- a/python/edu/interactive-learning-python/resources/META-INF/plugin.xml
+++ b/python/edu/interactive-learning-python/resources/META-INF/plugin.xml
@@ -31,6 +31,7 @@
+
env = commandLine.getEnvironment();
@@ -38,8 +46,6 @@ public class PyStudyTestRunner extends StudyTestRunner {
if (pythonPath != null) {
commandLine.setExePath(pythonPath);
commandLine.addParameter(testRunner.getPath());
- final Course course = StudyTaskManager.getInstance(project).getCourse();
- assert course != null;
File resourceFile = new File(course.getCourseDirectory());
commandLine.addParameter(resourceFile.getPath());
commandLine.addParameter(FileUtil.toSystemDependentName(executablePath));
diff --git a/python/educational/course-creator/resources/META-INF/plugin.xml b/python/educational/course-creator/resources/META-INF/plugin.xml
index f15d2598fae9..3aee001aecbc 100644
--- a/python/educational/course-creator/resources/META-INF/plugin.xml
+++ b/python/educational/course-creator/resources/META-INF/plugin.xml
@@ -38,7 +38,7 @@
-
+
diff --git a/python/educational/course-creator/src/com/jetbrains/edu/coursecreator/StudyLanguageManager.java b/python/educational/course-creator/src/com/jetbrains/edu/coursecreator/CCLanguageManager.java
similarity index 78%
rename from python/educational/course-creator/src/com/jetbrains/edu/coursecreator/StudyLanguageManager.java
rename to python/educational/course-creator/src/com/jetbrains/edu/coursecreator/CCLanguageManager.java
index cce016575e09..98029f4dbb81 100644
--- a/python/educational/course-creator/src/com/jetbrains/edu/coursecreator/StudyLanguageManager.java
+++ b/python/educational/course-creator/src/com/jetbrains/edu/coursecreator/CCLanguageManager.java
@@ -8,8 +8,8 @@ import org.jetbrains.annotations.Nullable;
import java.io.File;
-public interface StudyLanguageManager {
- LanguageExtension INSTANCE = new LanguageExtension("Edu.StudyLanguageManager");
+public interface CCLanguageManager {
+ LanguageExtension INSTANCE = new LanguageExtension("Edu.CCLanguageManager");
@Nullable
String getDefaultTaskFileExtension();
diff --git a/python/educational/course-creator/src/com/jetbrains/edu/coursecreator/CCUtils.java b/python/educational/course-creator/src/com/jetbrains/edu/coursecreator/CCUtils.java
index d453a59c92ae..f5ca9378eebf 100644
--- a/python/educational/course-creator/src/com/jetbrains/edu/coursecreator/CCUtils.java
+++ b/python/educational/course-creator/src/com/jetbrains/edu/coursecreator/CCUtils.java
@@ -61,8 +61,8 @@ public class CCUtils {
}
@Nullable
- public static StudyLanguageManager getStudyLanguageManager(@NotNull final Course course) {
+ public static CCLanguageManager getStudyLanguageManager(@NotNull final Course course) {
Language language = Language.findLanguageByID(course.getLanguage());
- return language == null ? null : StudyLanguageManager.INSTANCE.forLanguage(language);
+ return language == null ? null : CCLanguageManager.INSTANCE.forLanguage(language);
}
}
diff --git a/python/educational/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCCreateCourseArchive.java b/python/educational/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCCreateCourseArchive.java
index ac774b3659e7..3b8768286c99 100644
--- a/python/educational/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCCreateCourseArchive.java
+++ b/python/educational/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCCreateCourseArchive.java
@@ -22,7 +22,7 @@ import com.intellij.util.io.ZipUtil;
import com.jetbrains.edu.coursecreator.CCDocumentListener;
import com.jetbrains.edu.coursecreator.CCProjectService;
import com.jetbrains.edu.coursecreator.CCUtils;
-import com.jetbrains.edu.coursecreator.StudyLanguageManager;
+import com.jetbrains.edu.coursecreator.CCLanguageManager;
import com.jetbrains.edu.coursecreator.format.*;
import com.jetbrains.edu.coursecreator.ui.CreateCourseArchiveDialog;
import org.jetbrains.annotations.NotNull;
@@ -210,7 +210,7 @@ public class CCCreateCourseArchive extends DumbAwareAction {
try {
File zipFile = new File(myLocationDir, myZipName + ".zip");
ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(zipFile)));
- final StudyLanguageManager manager = CCUtils.getStudyLanguageManager(course);
+ final CCLanguageManager manager = CCUtils.getStudyLanguageManager(course);
for (Map.Entry entry : lessons.entrySet()) {
final VirtualFile lessonDir = baseDir.findChild(entry.getKey());
if (lessonDir == null) continue;
diff --git a/python/educational/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCCreateTask.java b/python/educational/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCCreateTask.java
index 538fc76b59f2..85b2a6d5b19d 100644
--- a/python/educational/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCCreateTask.java
+++ b/python/educational/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCCreateTask.java
@@ -7,7 +7,6 @@ import com.intellij.ide.fileTemplates.FileTemplateUtil;
import com.intellij.ide.util.DirectoryChooserUtil;
import com.intellij.ide.util.DirectoryUtil;
import com.intellij.ide.util.EditorHelper;
-import com.intellij.lang.Language;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.CommonDataKeys;
import com.intellij.openapi.actionSystem.LangDataKeys;
@@ -23,9 +22,9 @@ import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiDirectory;
import com.intellij.psi.PsiElement;
import com.intellij.util.PlatformIcons;
+import com.jetbrains.edu.coursecreator.CCLanguageManager;
import com.jetbrains.edu.coursecreator.CCProjectService;
import com.jetbrains.edu.coursecreator.CCUtils;
-import com.jetbrains.edu.coursecreator.StudyLanguageManager;
import com.jetbrains.edu.coursecreator.format.Course;
import com.jetbrains.edu.coursecreator.format.Lesson;
import com.jetbrains.edu.coursecreator.format.Task;
@@ -74,22 +73,21 @@ public class CCCreateTask extends DumbAwareAction {
public void run() {
final PsiDirectory taskDirectory = DirectoryUtil.createSubdirectories("task" + (size + 1), lessonDir, "\\/");
if (taskDirectory != null) {
- Language language = Language.findLanguageByID(course.getLanguage());
- if (language == null) {
+ CCLanguageManager manager = CCUtils.getStudyLanguageManager(course);
+ if (manager == null) {
return;
}
- final StudyLanguageManager studyLanguageManager = StudyLanguageManager.INSTANCE.forLanguage(language);
- CCUtils.markDirAsSourceRoot(taskDirectory.getVirtualFile(), project);
+ CCUtils.markDirAsSourceRoot(taskDirectory.getVirtualFile(), project);
final Task task = new Task(taskName);
task.setIndex(size + 1);
lesson.addTask(task, taskDirectory);
- createFromTemplateAndOpen(taskDirectory, studyLanguageManager.getTestsTemplate(project), view);
+ createFromTemplateAndOpen(taskDirectory, manager.getTestsTemplate(project), view);
createFromTemplateAndOpen(taskDirectory, FileTemplateManager.getInstance(project).getInternalTemplate("task.html"), view);
- String defaultExtension = studyLanguageManager.getDefaultTaskFileExtension();
+ String defaultExtension = manager.getDefaultTaskFileExtension();
if (defaultExtension != null) {
- FileTemplate taskFileTemplate = studyLanguageManager.getTaskFileTemplateForExtension(project,
+ FileTemplate taskFileTemplate = manager.getTaskFileTemplateForExtension(project,
defaultExtension);
createFromTemplateAndOpen(taskDirectory, taskFileTemplate, view);
if (taskFileTemplate != null) {
diff --git a/python/educational/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCCreateTaskFile.java b/python/educational/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCCreateTaskFile.java
index 374a141fa067..5483b1ef8eaa 100644
--- a/python/educational/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCCreateTaskFile.java
+++ b/python/educational/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCCreateTaskFile.java
@@ -21,7 +21,7 @@ import com.intellij.psi.PsiDirectory;
import com.intellij.psi.PsiElement;
import com.jetbrains.edu.coursecreator.CCProjectService;
import com.jetbrains.edu.coursecreator.CCUtils;
-import com.jetbrains.edu.coursecreator.StudyLanguageManager;
+import com.jetbrains.edu.coursecreator.CCLanguageManager;
import com.jetbrains.edu.coursecreator.format.Course;
import com.jetbrains.edu.coursecreator.format.Lesson;
import com.jetbrains.edu.coursecreator.format.Task;
@@ -68,15 +68,15 @@ public class CCCreateTaskFile extends DumbAwareAction {
if (type == null) {
return;
}
- final StudyLanguageManager studyLanguageManager = CCUtils.getStudyLanguageManager(course);
- if (studyLanguageManager == null) {
+ final CCLanguageManager CCLanguageManager = CCUtils.getStudyLanguageManager(course);
+ if (CCLanguageManager == null) {
return;
}
final String extension = type.getDefaultExtension();
ApplicationManager.getApplication().runWriteAction(new Runnable() {
@Override
public void run() {
- final FileTemplate taskTemplate = studyLanguageManager.getTaskFileTemplateForExtension(project, extension);
+ final FileTemplate taskTemplate = CCLanguageManager.getTaskFileTemplateForExtension(project, extension);
final String answerFileName = taskFileName + ".answer." + extension;
try {
if (taskTemplate == null) {
diff --git a/python/educational/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCRunTestsAction.java b/python/educational/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCRunTestsAction.java
index bb4187026691..451c39eb54ad 100644
--- a/python/educational/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCRunTestsAction.java
+++ b/python/educational/course-creator/src/com/jetbrains/edu/coursecreator/actions/CCRunTestsAction.java
@@ -36,7 +36,7 @@ import com.intellij.psi.PsiFile;
import com.intellij.util.containers.HashMap;
import com.jetbrains.edu.coursecreator.CCProjectService;
import com.jetbrains.edu.coursecreator.CCUtils;
-import com.jetbrains.edu.coursecreator.StudyLanguageManager;
+import com.jetbrains.edu.coursecreator.CCLanguageManager;
import com.jetbrains.edu.coursecreator.format.*;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -133,7 +133,7 @@ public abstract class CCRunTestsAction extends AnAction {
clearTestEnvironment(taskDir, project);
for (final Map.Entry entry : task.getTaskFiles().entrySet()) {
final String name = entry.getKey();
- StudyLanguageManager manager = CCUtils.getStudyLanguageManager(course);
+ CCLanguageManager manager = CCUtils.getStudyLanguageManager(course);
if (manager == null) {
return;
}
diff --git a/python/educational/course-creator/src/com/jetbrains/edu/coursecreator/ui/CreateTaskFileDialog.java b/python/educational/course-creator/src/com/jetbrains/edu/coursecreator/ui/CreateTaskFileDialog.java
index 6c79854aaba8..9f3afb1b32c0 100644
--- a/python/educational/course-creator/src/com/jetbrains/edu/coursecreator/ui/CreateTaskFileDialog.java
+++ b/python/educational/course-creator/src/com/jetbrains/edu/coursecreator/ui/CreateTaskFileDialog.java
@@ -9,7 +9,7 @@ import com.intellij.ui.DoubleClickListener;
import com.intellij.ui.ListScrollingUtil;
import com.intellij.ui.components.JBList;
import com.jetbrains.edu.coursecreator.CCUtils;
-import com.jetbrains.edu.coursecreator.StudyLanguageManager;
+import com.jetbrains.edu.coursecreator.CCLanguageManager;
import com.jetbrains.edu.coursecreator.format.Course;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -55,7 +55,7 @@ public class CreateTaskFileDialog extends DialogWrapper {
}
}.installOn(myList);
- StudyLanguageManager manager = CCUtils.getStudyLanguageManager(myCourse);
+ CCLanguageManager manager = CCUtils.getStudyLanguageManager(myCourse);
if (manager != null) {
String extension = manager.getDefaultTaskFileExtension();
ListScrollingUtil.selectItem(myList, FileTypeManager.getInstance().getFileTypeByExtension(extension != null ? extension : "txt"));
diff --git a/python/educational/interactive-learning/resources/META-INF/plugin.xml b/python/educational/interactive-learning/resources/META-INF/plugin.xml
index 49254d96293d..8985e75d1954 100644
--- a/python/educational/interactive-learning/resources/META-INF/plugin.xml
+++ b/python/educational/interactive-learning/resources/META-INF/plugin.xml
@@ -36,6 +36,7 @@
+
diff --git a/python/educational/interactive-learning/src/com/jetbrains/edu/learning/StudyLanguageManager.java b/python/educational/interactive-learning/src/com/jetbrains/edu/learning/StudyLanguageManager.java
new file mode 100644
index 000000000000..429b90c60daf
--- /dev/null
+++ b/python/educational/interactive-learning/src/com/jetbrains/edu/learning/StudyLanguageManager.java
@@ -0,0 +1,17 @@
+package com.jetbrains.edu.learning;
+
+import com.intellij.lang.LanguageExtension;
+import org.jetbrains.annotations.NotNull;
+
+public interface StudyLanguageManager {
+ LanguageExtension INSTANCE = new LanguageExtension("Edu.StudyLanguageManager");
+
+ @NotNull
+ String getTestFileName();
+
+ @NotNull
+ String getTestHelperFileName();
+
+ @NotNull
+ String getUserTester();
+}
diff --git a/python/educational/interactive-learning/src/com/jetbrains/edu/learning/StudyNames.java b/python/educational/interactive-learning/src/com/jetbrains/edu/learning/StudyNames.java
index 842a99ef9f1e..0755e2a99809 100644
--- a/python/educational/interactive-learning/src/com/jetbrains/edu/learning/StudyNames.java
+++ b/python/educational/interactive-learning/src/com/jetbrains/edu/learning/StudyNames.java
@@ -20,10 +20,7 @@ import org.jetbrains.annotations.NonNls;
@NonNls
public class StudyNames {
public static final String TASK_HTML = "task.html";
- public static final String TASK_TESTS = "tests.py";
public static final String LESSON = "lesson";
- public static final String TEST_HELPER = "test_helper.py";
- public static final String USER_TESTER = "user_tester.py";
public static final String LESSON_DIR = "lesson";
public static final String TEST_TAB_NAME = "test";
public static final String USER_TEST_INPUT = "input";
diff --git a/python/educational/interactive-learning/src/com/jetbrains/edu/learning/StudyProjectGenerator.java b/python/educational/interactive-learning/src/com/jetbrains/edu/learning/StudyProjectGenerator.java
index fae6b652e357..ff8c4f4af509 100644
--- a/python/educational/interactive-learning/src/com/jetbrains/edu/learning/StudyProjectGenerator.java
+++ b/python/educational/interactive-learning/src/com/jetbrains/edu/learning/StudyProjectGenerator.java
@@ -152,7 +152,12 @@ public class StudyProjectGenerator {
LOG.error("ERROR copying file " + name);
}
}
- final File testsFile = new File(taskDirectory, "tests.py");
+ StudyLanguageManager languageManager = StudyUtils.getLanguageManager(course);
+ if (languageManager == null) {
+ LOG.info("Language manager is null for " + course.getLanguageById().getDisplayName());
+ return;
+ }
+ final File testsFile = new File(taskDirectory, languageManager.getTestFileName());
FileUtil.createIfDoesntExist(testsFile);
try {
FileUtil.writeToFile(testsFile, task.getTestsText());
diff --git a/python/educational/interactive-learning/src/com/jetbrains/edu/learning/StudyTaskManager.java b/python/educational/interactive-learning/src/com/jetbrains/edu/learning/StudyTaskManager.java
index 97e1e39a983d..efc68ca8ba97 100644
--- a/python/educational/interactive-learning/src/com/jetbrains/edu/learning/StudyTaskManager.java
+++ b/python/educational/interactive-learning/src/com/jetbrains/edu/learning/StudyTaskManager.java
@@ -194,20 +194,28 @@ public class StudyTaskManager implements ProjectComponent, PersistentStateCompon
if (!resourceDirectory.exists()) {
return;
}
+ StudyLanguageManager manager = StudyUtils.getLanguageManager(myCourse);
+ if (manager == null) {
+ LOG.info("Study Language Manager is null for " + myCourse.getLanguageById().getDisplayName());
+ return;
+ }
final File[] files = resourceDirectory.listFiles();
if (files == null) return;
for (File file : files) {
- if (file.getName().equals(StudyNames.TEST_HELPER)) {
- copyFile(file, new File(myProject.getBasePath(), StudyNames.TEST_HELPER));
+ String testHelper = manager.getTestHelperFileName();
+ if (file.getName().equals(testHelper)) {
+ copyFile(file, new File(myProject.getBasePath(), testHelper));
}
if (file.getName().startsWith(StudyNames.LESSON)) {
final File[] tasks = file.listFiles();
if (tasks == null) continue;
for (File task : tasks) {
final File taskDescr = new File(task, StudyNames.TASK_HTML);
- final File taskTests = new File(task, StudyNames.TASK_TESTS);
+ String testFileName = manager.getTestFileName();
+ final File taskTests = new File(task, testFileName);
copyFile(taskDescr, new File(new File(new File(myProject.getBasePath(), file.getName()), task.getName()), StudyNames.TASK_HTML));
- copyFile(taskTests, new File(new File(new File(myProject.getBasePath(), file.getName()), task.getName()), StudyNames.TASK_TESTS));
+ copyFile(taskTests, new File(new File(new File(myProject.getBasePath(), file.getName()), task.getName()),
+ testFileName));
}
}
}
diff --git a/python/educational/interactive-learning/src/com/jetbrains/edu/learning/StudyUtils.java b/python/educational/interactive-learning/src/com/jetbrains/edu/learning/StudyUtils.java
index 585cc3da0dcc..64f74ce7bc04 100644
--- a/python/educational/interactive-learning/src/com/jetbrains/edu/learning/StudyUtils.java
+++ b/python/educational/interactive-learning/src/com/jetbrains/edu/learning/StudyUtils.java
@@ -205,7 +205,7 @@ public class StudyUtils {
@Nullable
public static Sdk findSdk(@NotNull final Task task, @NotNull final Project project) {
- final Language language = task.getLesson().getCourse().getLanguage();
+ final Language language = task.getLesson().getCourse().getLanguageById();
return StudyExecutor.INSTANCE.forLanguage(language).findSdk(project);
}
@@ -233,13 +233,13 @@ public class StudyUtils {
@NotNull
public static StudyTestRunner getTestRunner(@NotNull final Task task, @NotNull final VirtualFile taskDir) {
- final Language language = task.getLesson().getCourse().getLanguage();
+ final Language language = task.getLesson().getCourse().getLanguageById();
return StudyExecutor.INSTANCE.forLanguage(language).getTestRunner(task, taskDir);
}
public static RunContentExecutor getExecutor(@NotNull final Project project, @NotNull final Task currentTask,
@NotNull final ProcessHandler handler) {
- final Language language = currentTask.getLesson().getCourse().getLanguage();
+ final Language language = currentTask.getLesson().getCourse().getLanguageById();
return StudyExecutor.INSTANCE.forLanguage(language).getExecutor(project, handler);
}
@@ -248,7 +248,7 @@ public class StudyUtils {
@NotNull final String filePath,
@NotNull final String sdkPath,
@NotNull final Task currentTask) {
- final Language language = currentTask.getLesson().getCourse().getLanguage();
+ final Language language = currentTask.getLesson().getCourse().getLanguageById();
StudyExecutor.INSTANCE.forLanguage(language).setCommandLineParameters(cmd, project, filePath, sdkPath, currentTask);
}
@@ -259,7 +259,7 @@ public class StudyUtils {
}
public static void showNoSdkNotification(@NotNull final Task currentTask, @NotNull final Project project) {
- final Language language = currentTask.getLesson().getCourse().getLanguage();
+ final Language language = currentTask.getLesson().getCourse().getLanguageById();
StudyExecutor.INSTANCE.forLanguage(language).showNoSdkNotification(project);
}
@@ -274,4 +274,13 @@ public class StudyUtils {
balloon.showInCenterOf(checkButton);
Disposer.register(project, balloon);
}
+
+ /**
+ * returns language manager which contains all the information about language specific file names
+ */
+ @Nullable
+ public static StudyLanguageManager getLanguageManager(@NotNull final Course course) {
+ Language language = course.getLanguageById();
+ return language == null ? null : StudyLanguageManager.INSTANCE.forLanguage(language);
+ }
}
diff --git a/python/educational/interactive-learning/src/com/jetbrains/edu/learning/actions/StudyCheckAction.java b/python/educational/interactive-learning/src/com/jetbrains/edu/learning/actions/StudyCheckAction.java
index 7d31dd194344..004b58399a24 100644
--- a/python/educational/interactive-learning/src/com/jetbrains/edu/learning/actions/StudyCheckAction.java
+++ b/python/educational/interactive-learning/src/com/jetbrains/edu/learning/actions/StudyCheckAction.java
@@ -50,7 +50,7 @@ import java.util.Map;
public class StudyCheckAction extends DumbAwareAction {
private static final Logger LOG = Logger.getInstance(StudyCheckAction.class.getName());
- private static final String ANSWERS_POSTFIX = "_answers.py";
+ private static final String ANSWERS_POSTFIX = "_answers";
public static final String ACTION_ID = "CheckAction";
public static final String SHORTCUT = "ctrl alt pressed ENTER";
@@ -337,7 +337,7 @@ public class StudyCheckAction extends DumbAwareAction {
VirtualFile copy = null;
try {
- copy = file.copy(this, taskDir, file.getNameWithoutExtension() + ANSWERS_POSTFIX);
+ copy = file.copy(this, taskDir, file.getNameWithoutExtension() + ANSWERS_POSTFIX + "." + file.getExtension());
final FileDocumentManager documentManager = FileDocumentManager.getInstance();
final Document document = documentManager.getDocument(copy);
if (document != null) {
diff --git a/python/educational/interactive-learning/src/com/jetbrains/edu/learning/course/AnswerPlaceholder.java b/python/educational/interactive-learning/src/com/jetbrains/edu/learning/course/AnswerPlaceholder.java
index 63b65733fd2d..9bac4fd27634 100644
--- a/python/educational/interactive-learning/src/com/jetbrains/edu/learning/course/AnswerPlaceholder.java
+++ b/python/educational/interactive-learning/src/com/jetbrains/edu/learning/course/AnswerPlaceholder.java
@@ -20,7 +20,6 @@ import com.jetbrains.edu.learning.StudyTestRunner;
import com.jetbrains.edu.learning.StudyUtils;
import org.jetbrains.annotations.NotNull;
-import java.awt.*;
import java.awt.*;
import java.io.File;
import java.io.IOException;
@@ -30,7 +29,7 @@ import java.io.IOException;
*/
public class AnswerPlaceholder implements Comparable, Stateful {
- private static final String WINDOW_POSTFIX = "_window.py";
+ private static final String WINDOW_POSTFIX = "_window";
private static final Logger LOG = Logger.getInstance(AnswerPlaceholder.class);
private int line = 0;
private int start = 0;
@@ -104,7 +103,7 @@ public class AnswerPlaceholder implements Comparable, Stateful {
g.setColor(color);
Point point = editor.logicalPositionToXY(editor.offsetToLogicalPosition(highlighter.getStartOffset()));
Point pointEnd = editor.logicalPositionToXY(editor.offsetToLogicalPosition(highlighter.getEndOffset()));
- g.drawRect(point.x, point.y - 2, (pointEnd.x - point.x), editor.getLineHeight() + 1);
+ g.drawRect(point.x, point.y, (pointEnd.x - point.x), editor.getLineHeight() + 1);
}
});
editor.getCaretModel().moveToOffset(startOffset);
@@ -205,7 +204,7 @@ public class AnswerPlaceholder implements Comparable, Stateful {
try {
final VirtualFile windowCopy =
- answerFile.copy(this, answerFile.getParent(), answerFile.getNameWithoutExtension() + myIndex + WINDOW_POSTFIX);
+ answerFile.copy(this, answerFile.getParent(), answerFile.getNameWithoutExtension() + myIndex + WINDOW_POSTFIX + "." + answerFile.getExtension());
final FileDocumentManager documentManager = FileDocumentManager.getInstance();
final Document windowDocument = documentManager.getDocument(windowCopy);
if (windowDocument != null) {
diff --git a/python/educational/interactive-learning/src/com/jetbrains/edu/learning/course/Course.java b/python/educational/interactive-learning/src/com/jetbrains/edu/learning/course/Course.java
index 4dd9091837b2..b3241f3ea819 100644
--- a/python/educational/interactive-learning/src/com/jetbrains/edu/learning/course/Course.java
+++ b/python/educational/interactive-learning/src/com/jetbrains/edu/learning/course/Course.java
@@ -113,10 +113,13 @@ public class Course {
myUpToDate = upToDate;
}
- public Language getLanguage() {
+ public Language getLanguageById() {
return Language.findLanguageByID(myLanguage);
}
+ public String getLanguage() {
+ return myLanguage;
+ }
public void setLanguage(@NotNull final String language) {
myLanguage = language;
}
diff --git a/python/educational/interactive-learning/src/com/jetbrains/edu/learning/course/Task.java b/python/educational/interactive-learning/src/com/jetbrains/edu/learning/course/Task.java
index c488c35d4dcf..a6e358ff7b6d 100644
--- a/python/educational/interactive-learning/src/com/jetbrains/edu/learning/course/Task.java
+++ b/python/educational/interactive-learning/src/com/jetbrains/edu/learning/course/Task.java
@@ -21,7 +21,6 @@ import java.util.Map;
*/
public class Task implements Stateful {
public static final String TASK_DIR = "task";
- private static final String ourTestFile = "tests.py";
private String name;
private String text;
private String testsText;
@@ -76,10 +75,6 @@ public class Task implements Stateful {
return userTests;
}
- public String getTestFile() {
- return ourTestFile;
- }
-
public String getText() {
return text;
}