From d60c58a0f4c3f6a42535ac2ce26845bd37273ba9 Mon Sep 17 00:00:00 2001 From: Liana Bakradze Date: Thu, 22 Sep 2016 15:42:48 +0300 Subject: [PATCH] show in project view only active subtask test --- .../CCStudentInvisibleFileNode.java | 15 ++++- .../projectView/CCTreeStructureProvider.java | 57 ++++++++++++++++++- 2 files changed, 68 insertions(+), 4 deletions(-) diff --git a/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/projectView/CCStudentInvisibleFileNode.java b/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/projectView/CCStudentInvisibleFileNode.java index 94376a13ae3d..e163eee2b238 100644 --- a/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/projectView/CCStudentInvisibleFileNode.java +++ b/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/projectView/CCStudentInvisibleFileNode.java @@ -10,20 +10,29 @@ import com.intellij.ui.SimpleTextAttributes; /** * represents a file which is invisible for student in student mode */ -public class CCStudentInvisibleFileNode extends PsiFileNode{ +public class CCStudentInvisibleFileNode extends PsiFileNode { + private final String myName; public CCStudentInvisibleFileNode(Project project, PsiFile value, ViewSettings viewSettings) { super(project, value, viewSettings); + myName = value.getName(); + } + + public CCStudentInvisibleFileNode(Project project, + PsiFile value, + ViewSettings viewSettings, + String name) { + super(project, value, viewSettings); + myName = name; } @Override protected void updateImpl(PresentationData data) { super.updateImpl(data); - String text = data.getPresentableText(); data.clearText(); - data.addText(text, SimpleTextAttributes.GRAY_ATTRIBUTES); + data.addText(myName, SimpleTextAttributes.GRAY_ATTRIBUTES); } } diff --git a/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/projectView/CCTreeStructureProvider.java b/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/projectView/CCTreeStructureProvider.java index 2a4249929538..0b89eaea5052 100644 --- a/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/projectView/CCTreeStructureProvider.java +++ b/python/educational-core/course-creator/src/com/jetbrains/edu/coursecreator/projectView/CCTreeStructureProvider.java @@ -9,7 +9,12 @@ import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiDirectory; import com.intellij.psi.PsiFile; import com.jetbrains.edu.coursecreator.CCUtils; +import com.jetbrains.edu.learning.StudyLanguageManager; +import com.jetbrains.edu.learning.StudyTaskManager; import com.jetbrains.edu.learning.StudyUtils; +import com.jetbrains.edu.learning.core.EduNames; +import com.jetbrains.edu.learning.courseFormat.Course; +import com.jetbrains.edu.learning.courseFormat.Task; import com.jetbrains.edu.learning.projectView.StudyTreeStructureProvider; import org.jetbrains.annotations.NotNull; @@ -48,7 +53,10 @@ public class CCTreeStructureProvider extends StudyTreeStructureProvider { continue; } PsiFile psiFile = ((PsiFileNode)node).getValue(); - modifiedChildren.add(new CCStudentInvisibleFileNode(project, psiFile, settings)); + boolean handled = handleTests(project, virtualFile, psiFile, modifiedChildren, settings); + if (!handled) { + modifiedChildren.add(new CCStudentInvisibleFileNode(project, psiFile, settings)); + } } } return modifiedChildren; @@ -61,4 +69,51 @@ public class CCTreeStructureProvider extends StudyTreeStructureProvider { } return CCUtils.isCourseCreator(project); } + + private static boolean handleTests(Project project, + VirtualFile virtualFile, + PsiFile psiFile, + Collection modifiedChildren, + ViewSettings settings) { + Course course = StudyTaskManager.getInstance(project).getCourse(); + if (course == null) { + return false; + } + if (!CCUtils.isTestsFile(project, virtualFile)) { + return false; + } + VirtualFile taskDir = StudyUtils.getTaskDir(virtualFile); + if (taskDir == null) { + return false; + } + Task task = StudyUtils.getTask(project, taskDir); + if (task == null) { + return false; + } + if (isActiveSubtaskTest(task, virtualFile)) { + StudyLanguageManager manager = StudyUtils.getLanguageManager(course); + String testsFileName = manager != null ? manager.getTestFileName() : psiFile.getName(); + modifiedChildren.add(new CCStudentInvisibleFileNode(project, psiFile, settings, + testsFileName)); + } + return true; + } + + private static boolean isActiveSubtaskTest(Task task, VirtualFile virtualFile) { + if (!task.hasSubtasks()) { + return true; + } + + boolean isSubtaskTestFile = virtualFile.getName().contains(EduNames.SUBTASK_MARKER); + if (task.getActiveSubtaskIndex() == 0) { + return !isSubtaskTestFile; + } + if (!isSubtaskTestFile) { + return false; + } + String nameWithoutExtension = virtualFile.getNameWithoutExtension(); + int stepMarkerStart = nameWithoutExtension.indexOf(EduNames.SUBTASK_MARKER); + int stepIndex = Integer.valueOf(nameWithoutExtension.substring(EduNames.SUBTASK_MARKER.length() + stepMarkerStart)); + return stepIndex == task.getActiveSubtaskIndex(); + } } -- 2.23.3