intellij-plugin/features/code-insight-yaml/testSrc/com/jetbrains/edu/yaml/completion/YamlPathCompletionTest.kt (341 lines of code) (raw):

package com.jetbrains.edu.yaml.completion import com.intellij.openapi.application.runWriteAction import com.intellij.openapi.vfs.findOrCreateFile import com.intellij.openapi.vfs.writeText import com.jetbrains.edu.learning.courseDir import com.jetbrains.edu.learning.courseFormat.CourseMode import com.jetbrains.edu.learning.courseFormat.ext.getDir import com.jetbrains.edu.learning.courseGeneration.GeneratorUtils import com.jetbrains.edu.learning.findTask import org.junit.Test class YamlPathCompletionTest : YamlCompletionTestBase() { @Test fun `test task file completion`() { val course = courseWithFiles(courseMode = CourseMode.EDUCATOR) { lesson("lesson1") { eduTask("task1") { taskFile("src/taskfile1.txt") } } } val task = course.findTask("lesson1", "task1") val taskDir = task.getDir(project.courseDir)!! GeneratorUtils.createTextChildFile(project, taskDir, "src/foo.txt", "") doSingleCompletion(task, """ |type: edu |files: |- name: src/taskfile1.txt | visible: true |- name: src/foo<caret> | visible: true """.trimMargin("|"), """ |type: edu |files: |- name: src/taskfile1.txt | visible: true |- name: src/foo.txt | visible: true """.trimMargin("|")) } @Test fun `test task file completion 2`() { val course = courseWithFiles(courseMode = CourseMode.EDUCATOR) { lesson("lesson1") { eduTask("task1") { taskFile("src/taskfile1.txt") taskFile("src/foo.txt") } } } val task = course.findTask("lesson1", "task1") doSingleCompletion(task, """ |type: edu |files: |- name: src/taskfile1.txt | visible: true |- name: src/foo<caret> | visible: true """.trimMargin("|"), """ |type: edu |files: |- name: src/taskfile1.txt | visible: true |- name: src/foo.txt | visible: true """.trimMargin("|")) } @Test fun `test do not suggest existing paths while completion`() { val course = courseWithFiles(courseMode = CourseMode.EDUCATOR) { lesson("lesson1") { eduTask("task1") { taskFile("src/taskfile1.txt") } } } val task = course.findTask("lesson1", "task1") val taskDir = task.getDir(project.courseDir)!! GeneratorUtils.createTextChildFile(project, taskDir, "src/taskfile2.txt", "") doSingleCompletion(task, """ |type: edu |files: |- name: src/taskfile1.txt | visible: true |- name: src/task<caret> | visible: true """.trimMargin("|"), """ |type: edu |files: |- name: src/taskfile1.txt | visible: true |- name: src/taskfile2.txt | visible: true """.trimMargin("|")) } @Test fun `test do not suggest excluded from archive files while completion 1`() { val course = courseWithFiles(courseMode = CourseMode.EDUCATOR) { lesson("lesson1") { eduTask("task1") { taskFile("src/taskfile1.txt") } } } val task = course.findTask("lesson1", "task1") val taskDir = task.getDir(project.courseDir)!! GeneratorUtils.createTextChildFile(project, taskDir, "taskfile2.txt", "") doSingleCompletion(task, """ |type: edu |files: |- name: src/taskfile1.txt | visible: true |- name: task<caret> | visible: true """.trimMargin("|"), """ |type: edu |files: |- name: src/taskfile1.txt | visible: true |- name: taskfile2.txt | visible: true """.trimMargin("|")) } @Test fun `test do not suggest excluded from archive files while completion 2`() { val course = courseWithFiles(courseMode = CourseMode.EDUCATOR) { lesson("lesson1") { eduTask("task1") { taskFile("src/taskfile1.txt") } } } val task = course.findTask("lesson1", "task1") val taskDir = task.getDir(project.courseDir)!! GeneratorUtils.createTextChildFile(project, taskDir, "some_module.iml", "") checkNoCompletion(task, """ |type: edu |files: |- name: src/taskfile1.txt | visible: true |- name: .hidden<caret> | visible: false """.trimMargin("|")) } @Test fun `test task file extend completion`() { val course = courseWithFiles(courseMode = CourseMode.EDUCATOR) { lesson("lesson1") { eduTask("task1") { taskFile("src/taskfile1.txt") } } } val task = course.findTask("lesson1", "task1") val taskDir = task.getDir(project.courseDir)!! GeneratorUtils.createTextChildFile(project, taskDir, "src/task.txt", "") doSingleCompletion(task, """ |type: edu |files: |- name: src/taskfile1.txt | visible: true |- name: src/tas<caret> | visible: true """.trimMargin("|"), """ |type: edu |files: |- name: src/taskfile1.txt | visible: true |- name: src/task.txt | visible: true """.trimMargin("|"), invocationCount = 2) } @Test fun `test directories completion in task config`() { val course = courseWithFiles(courseMode = CourseMode.EDUCATOR) { lesson("lesson1") { eduTask("task1") {} } } val task = course.findTask("lesson1", "task1") val taskDir = task.getDir(project.courseDir)!! GeneratorUtils.createTextChildFile(project, taskDir, "src/task.txt", "") doSingleCompletion(task, """ |type: edu |files: |- name: sr<caret> | visible: true """.trimMargin("|"), """ |type: edu |files: |- name: src/ | visible: true """.trimMargin("|")) } @Test fun `test course content completion`() { val course = courseWithFiles(courseMode = CourseMode.EDUCATOR) { lesson("lesson1") {} } runWriteAction { project.courseDir.createChildDirectory(this, "section2") } doSingleCompletion(course, """ |title: Test Course |type: coursera |language: Russian |summary: sum |programming_language: Plain text |programming_language_version: 1.42 |environment: Android |content: |- lesson1 |- sec<caret> """.trimMargin("|"), """ |title: Test Course |type: coursera |language: Russian |summary: sum |programming_language: Plain text |programming_language_version: 1.42 |environment: Android |content: |- lesson1 |- section2 """.trimMargin("|")) } @Test fun `test lesson content completion`() { val course = courseWithFiles(courseMode = CourseMode.EDUCATOR) { lesson("lesson1") { eduTask("task1") {} } } val lesson = course.getLesson("lesson1")!! val lessonDir = lesson.getDir(project.courseDir)!! runWriteAction { lessonDir.createChildDirectory(this, "task2") } doSingleCompletion(lesson, """ |content: |- task1 |- tas<caret> """.trimMargin("|"), """ |content: |- task1 |- task2 """.trimMargin("|")) } @Test fun `test section content completion`() { val course = courseWithFiles(courseMode = CourseMode.EDUCATOR) { section("section1") { lesson("lesson1") {} lesson("lesson2") {} } } val section = course.getSection("section1")!! doSingleCompletion(section, """ |content: |- lesson1 |- less<caret> """.trimMargin("|"), """ |content: |- lesson1 |- lesson2 """.trimMargin("|")) } @Test fun `test lesson content extend completion`() { val course = courseWithFiles(courseMode = CourseMode.EDUCATOR) { lesson("lesson1") { eduTask("task1") {} } } val lesson = course.getLesson("lesson1")!! val lessonDir = lesson.getDir(project.courseDir)!! runWriteAction { lessonDir.createChildDirectory(this, "task2") } doSingleCompletion(lesson, """ |content: |- task1 |- tas<caret> """.trimMargin("|"), """ |content: |- task1 |- task2 """.trimMargin("|"), invocationCount = 2) } @Test fun `complete additional file`() { val course = courseWithFiles(courseMode = CourseMode.EDUCATOR) {} nonAdditionalFile("a.txt") nonAdditionalFile("b.txt") nonAdditionalFile("dir/c.txt") checkMultipleCompletion( course, """ type: edu additional_files: - name: <caret> """.trimIndent(), "a.txt", "b.txt", "dir/", "lesson1/" ) } @Test fun `complete additional file and do not suggest existing`() { val course = courseWithFiles(courseMode = CourseMode.EDUCATOR) { additionalFile("b.txt") } nonAdditionalFile("a.txt") nonAdditionalFile("dir/c.txt") checkMultipleCompletion( course, """ type: edu additional_files: - name: b.txt - name: <caret> """.trimIndent(), "a.txt", "dir/", "lesson1/" ) } @Test fun `complete additional file and do not suggest MUST_EXCLUDE files`() { val course = courseWithFiles(courseMode = CourseMode.EDUCATOR) { additionalFile("b.txt") } nonAdditionalFile("a.txt") nonAdditionalFile("module.iml") nonAdditionalFile(".coursecreator/course.zip") nonAdditionalFile("dir/course.zip") checkMultipleCompletion( course, """ type: edu additional_files: - name: b.txt - name: <caret> """.trimIndent(), "a.txt", "lesson1/", "dir/" ) } private fun nonAdditionalFile(path: String, contents: String = "") { runWriteAction { project.courseDir.findOrCreateFile(path).writeText(contents) } } }