diff --git a/platform/analysis-impl/src/com/intellij/codeInspection/ex/InspectionToolRegistrar.java b/platform/analysis-impl/src/com/intellij/codeInspection/ex/InspectionToolRegistrar.java index 0bf6f33765fc..27d9f4fc6186 100644 --- a/platform/analysis-impl/src/com/intellij/codeInspection/ex/InspectionToolRegistrar.java +++ b/platform/analysis-impl/src/com/intellij/codeInspection/ex/InspectionToolRegistrar.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2013 JetBrains s.r.o. + * Copyright 2000-2015 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. @@ -26,13 +26,10 @@ import com.intellij.openapi.util.Factory; import com.intellij.util.containers.ContainerUtil; import gnu.trove.THashSet; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.TestOnly; import java.util.ArrayList; import java.util.List; import java.util.Set; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.concurrent.locks.ReentrantReadWriteLock; /** * @author max @@ -147,7 +144,6 @@ public class InspectionToolRegistrar { } @NotNull - @TestOnly public List createTools() { ensureInitialized(); 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 46bdf1eaddf5..1857f9d75c3a 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 6efb56d43f88..f20ca9ab1aad 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; } diff --git a/xml/tests/src/com/intellij/codeInsight/XmlEventsTest.java b/xml/tests/src/com/intellij/codeInsight/XmlEventsTest.java index 049cc14ed864..0f6cc9882f7a 100644 --- a/xml/tests/src/com/intellij/codeInsight/XmlEventsTest.java +++ b/xml/tests/src/com/intellij/codeInsight/XmlEventsTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2014 JetBrains s.r.o. + * Copyright 2000-2015 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. @@ -21,8 +21,7 @@ import com.intellij.openapi.command.CommandProcessor; import com.intellij.openapi.command.WriteCommandAction; import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.ex.DocumentEx; -import com.intellij.openapi.util.io.FileUtil; -import com.intellij.openapi.util.text.StringUtil; +import com.intellij.openapi.util.TextRange; import com.intellij.pom.PomManager; import com.intellij.pom.PomModel; import com.intellij.pom.PomModelAspect; @@ -34,12 +33,8 @@ import com.intellij.psi.*; import com.intellij.psi.impl.source.PsiFileImpl; import com.intellij.psi.xml.*; import com.intellij.testFramework.LightCodeInsightTestCase; -import com.intellij.testFramework.PlatformTestUtil; import org.jetbrains.annotations.NotNull; -import java.io.File; -import java.io.FileNotFoundException; - public class XmlEventsTest extends LightCodeInsightTestCase { public void test1() throws Exception{ final Listener listener = addPomListener(); @@ -51,7 +46,7 @@ public class XmlEventsTest extends LightCodeInsightTestCase { } }); - assertFileTextEquals(getTestName(false) + ".txt", listener.getEventString()); + assertEquals("(Attribute \"a\" for tag \"a\" set to \"b\")\n", listener.getEventString()); } private Listener addPomListener() { @@ -73,7 +68,7 @@ public class XmlEventsTest extends LightCodeInsightTestCase { } }); - assertFileTextEquals(getTestName(false) + ".txt", listener.getEventString()); + assertEquals("(text changed to 'aa' was: 'aaa'), (child added to a child: XmlText), (child added to a child: XmlTag:a)\n", listener.getEventString()); } public void test3() throws Exception{ @@ -87,7 +82,39 @@ public class XmlEventsTest extends LightCodeInsightTestCase { } }); - assertFileTextEquals(getTestName(false) + ".txt", listener.getEventString()); + assertEquals("(text changed to 'aabba' was: 'aaa')\n", listener.getEventString()); + } + + public void testTagDelete() throws Exception{ + final Listener listener = addPomListener(); + configureFromFileText("x.xml", "aaa\nxxx\nyyy"); + final XmlTag x = ((XmlFile)getFile()).getRootTag().findSubTags("x")[0]; + WriteCommandAction.runWriteCommandAction(null, new Runnable() { + @Override + public void run() { + TextRange range = x.getTextRange(); + getEditor().getDocument().deleteString(range.getStartOffset(), range.getEndOffset() + 1); // plus \n + PsiDocumentManager.getInstance(getProject()).commitAllDocuments(); + } + }); + + assertEquals("(child removed from a child: XmlTag:x), (child removed from a child: XmlText)\n", listener.getEventString()); + } + + public void testTagInsert() throws Exception{ + final Listener listener = addPomListener(); + configureFromFileText("x.xml", "aaa\nxxx\nyyy"); + final XmlTag x = ((XmlFile)getFile()).getRootTag().findSubTags("x")[0]; + WriteCommandAction.runWriteCommandAction(null, new Runnable() { + @Override + public void run() { + TextRange range = x.getTextRange(); + getEditor().getDocument().insertString(range.getEndOffset() + 1, "zxzz\n"); // plus \n + PsiDocumentManager.getInstance(getProject()).commitAllDocuments(); + } + }); + + assertEquals("(child added to a child: XmlText), (child added to a child: XmlTag:z)\n", listener.getEventString()); } public void test4() throws Exception{ @@ -100,20 +127,20 @@ public class XmlEventsTest extends LightCodeInsightTestCase { } }); - assertFileTextEquals(getTestName(false) + ".txt", listener.getEventString()); + assertEquals("(text changed to 'a a ' was: 'a ')\n", listener.getEventString()); } public void test5() throws Exception{ final Listener listener = addPomListener(); final XmlTag tagFromText = XmlElementFactory.getInstance(getProject()).createTagFromText("aaa"); - WriteCommandAction.runWriteCommandAction(null, new Runnable(){ + WriteCommandAction.runWriteCommandAction(null, new Runnable() { @Override public void run() { tagFromText.delete(); } }); - assertFileTextEquals(getTestName(false) + ".txt", listener.getEventString()); + assertEquals("(Xml document changed)\n", listener.getEventString()); } public void testBulkUpdate() throws Exception{ @@ -121,7 +148,7 @@ public class XmlEventsTest extends LightCodeInsightTestCase { final PsiFile file = createFile("a.xml", ""); new WriteCommandAction(getProject()) { @Override - protected void run(Result result) throws Throwable { + protected void run(@NotNull Result result) throws Throwable { final Document document = PsiDocumentManager.getInstance(getProject()).getDocument(file); ((DocumentEx)document).setInBulkUpdate(true); document.insertString(0, " "); @@ -129,7 +156,7 @@ public class XmlEventsTest extends LightCodeInsightTestCase { ((DocumentEx)document).setInBulkUpdate(false); } }.execute(); - assertFileTextEquals(getTestName(false) + ".txt", listener.getEventString()); + assertEquals("(Xml document changed)\n", listener.getEventString()); } public void testDocumentChange1() throws Exception{ @@ -137,7 +164,7 @@ public class XmlEventsTest extends LightCodeInsightTestCase { final String stringToInsert = "b=\"c\""; final int positionToInsert = 2; - checkEventsByDocumentChange(rootTagText, positionToInsert, stringToInsert); + checkEventsByDocumentChange(rootTagText, positionToInsert, stringToInsert, "(Xml document changed)\n"); } public void testDocumentChange2() throws Exception{ @@ -145,7 +172,7 @@ public class XmlEventsTest extends LightCodeInsightTestCase { final String stringToInsert = "b=\"c\""; final int positionToInsert = 3; - checkEventsByDocumentChange(rootTagText, positionToInsert, stringToInsert); + checkEventsByDocumentChange(rootTagText, positionToInsert, stringToInsert, "(Xml document changed)\n"); } @@ -154,7 +181,7 @@ public class XmlEventsTest extends LightCodeInsightTestCase { final String stringToInsert = "b=\"c\""; final int positionToInsert = 6; - checkEventsByDocumentChange(rootTagText, positionToInsert, stringToInsert); + checkEventsByDocumentChange(rootTagText, positionToInsert, stringToInsert, "(child changed in b child: XmlTag:a)\n"); } public void testAttributeValueReplace() throws Exception { @@ -176,7 +203,7 @@ public class XmlEventsTest extends LightCodeInsightTestCase { assertEquals("(Attribute \"name\" for tag \"target\" set to \"\"new\"\")\n", listener.getEventString()); } - private void checkEventsByDocumentChange(final String rootTagText, final int positionToInsert, final String stringToInsert) + private void checkEventsByDocumentChange(final String rootTagText, final int positionToInsert, final String stringToInsert, String events) throws Exception { final Listener listener = addPomListener(); final XmlTag tagFromText = ((XmlFile)createFile("file.xml", rootTagText)).getDocument().getRootTag(); @@ -191,14 +218,14 @@ public class XmlEventsTest extends LightCodeInsightTestCase { } }); - assertFileTextEquals(getTestName(false) + ".txt", listener.getEventString()); + assertEquals(events, listener.getEventString()); } private static class Listener implements PomModelListener{ private final XmlAspect myAspect; private final StringBuffer myBuffer = new StringBuffer(); - public Listener(XmlAspect modelAspect) { + private Listener(XmlAspect modelAspect) { myAspect = modelAspect; } @@ -215,30 +242,11 @@ public class XmlEventsTest extends LightCodeInsightTestCase { return aspect == myAspect; } - String getEventString(){ + private String getEventString(){ return myBuffer.toString(); } } - private static void assertFileTextEquals(String targetDataName, String treeText) throws Exception { - String fullName = PlatformTestUtil.getCommunityPath().replace(File.separatorChar, '/')+ "/xml/tests/testData/psi/events" + File.separatorChar + targetDataName; - try{ - String expectedText = loadFile(fullName); - assertEquals(expectedText.trim(), treeText.trim()); - } - catch(FileNotFoundException e){ - //FileUtil.writeToFile(new File(fullName), StringUtil.convertLineSeparators(treeText).getBytes("UTF-8")); - fail("No output file found. Created file "+fullName); - } - } - - - protected static String loadFile(String fullName) throws Exception { - String text = FileUtil.loadFile(new File(fullName)).trim(); - text = StringUtil.convertLineSeparators(text); - return text; - } - public void testDocumentChange() throws Exception { final String xml = "" + "\n" + diff --git a/xml/tests/testData/psi/events/1.txt b/xml/tests/testData/psi/events/1.txt deleted file mode 100644 index b02964d479b1..000000000000 --- a/xml/tests/testData/psi/events/1.txt +++ /dev/null @@ -1 +0,0 @@ -(Attribute "a" for tag "a" set to "b") diff --git a/xml/tests/testData/psi/events/2.txt b/xml/tests/testData/psi/events/2.txt deleted file mode 100644 index 82453a841ec0..000000000000 --- a/xml/tests/testData/psi/events/2.txt +++ /dev/null @@ -1 +0,0 @@ -(text changed to 'aa' was: 'aaa'), (child added to a child: XmlText), (child added to a child: XmlTag:a) \ No newline at end of file diff --git a/xml/tests/testData/psi/events/3.txt b/xml/tests/testData/psi/events/3.txt deleted file mode 100644 index 954dbafd7fae..000000000000 --- a/xml/tests/testData/psi/events/3.txt +++ /dev/null @@ -1 +0,0 @@ -(text changed to 'aabba' was: 'aaa') diff --git a/xml/tests/testData/psi/events/4.txt b/xml/tests/testData/psi/events/4.txt deleted file mode 100644 index d0470d3dec94..000000000000 --- a/xml/tests/testData/psi/events/4.txt +++ /dev/null @@ -1 +0,0 @@ -(text changed to 'a a ' was: 'a ') diff --git a/xml/tests/testData/psi/events/5.txt b/xml/tests/testData/psi/events/5.txt deleted file mode 100644 index ad835b557ef4..000000000000 --- a/xml/tests/testData/psi/events/5.txt +++ /dev/null @@ -1 +0,0 @@ -(Xml document changed) diff --git a/xml/tests/testData/psi/events/BulkUpdate.txt b/xml/tests/testData/psi/events/BulkUpdate.txt deleted file mode 100644 index ad835b557ef4..000000000000 --- a/xml/tests/testData/psi/events/BulkUpdate.txt +++ /dev/null @@ -1 +0,0 @@ -(Xml document changed) diff --git a/xml/tests/testData/psi/events/DocumentChange1.txt b/xml/tests/testData/psi/events/DocumentChange1.txt deleted file mode 100644 index ad835b557ef4..000000000000 --- a/xml/tests/testData/psi/events/DocumentChange1.txt +++ /dev/null @@ -1 +0,0 @@ -(Xml document changed) diff --git a/xml/tests/testData/psi/events/DocumentChange2.txt b/xml/tests/testData/psi/events/DocumentChange2.txt deleted file mode 100644 index ad835b557ef4..000000000000 --- a/xml/tests/testData/psi/events/DocumentChange2.txt +++ /dev/null @@ -1 +0,0 @@ -(Xml document changed) diff --git a/xml/tests/testData/psi/events/DocumentChange3.txt b/xml/tests/testData/psi/events/DocumentChange3.txt deleted file mode 100644 index f572e6333826..000000000000 --- a/xml/tests/testData/psi/events/DocumentChange3.txt +++ /dev/null @@ -1 +0,0 @@ -(child changed in b child: XmlTag:a) diff --git a/xml/tests/testData/psi/events/TagRemove.txt b/xml/tests/testData/psi/events/TagRemove.txt deleted file mode 100644 index 9c546956e886..000000000000 --- a/xml/tests/testData/psi/events/TagRemove.txt +++ /dev/null @@ -1 +0,0 @@ -(child changed in html child: XmlText), (child removed from html child: XmlTag:b), (child removed from html child: XmlText)