fun assertEquals()

in intellij-plugin/educational-core/testSrc/com/jetbrains/edu/coursecreator/archive/CourseArchiveContent.kt [20:70]


  fun assertEquals(
    expected: CourseArchiveContent,
    expectedBaseDir: File,
    generateExtraFiles: Boolean
  ) {
    // files not found in the actual zip archive
    val missingFiles = mutableSetOf<String>()
    // files in the actual zip archive which don't exist in expected files
    val extraFiles = files.toMutableMap()
    val filesToCompare = mutableMapOf<String, ContentsToCompare>()

    for ((path, expectedContent) in expected.files) {
      val actualContent = extraFiles.remove(path)
      if (actualContent == null) {
        missingFiles += path
      }
      else {
        filesToCompare[path] = ContentsToCompare(expected = expectedContent, actual = actualContent)
      }
    }

    // Check it explicitly here to catch a pathological case,
    // when both expected and actual data don't contain `course.json`
    if (files[COURSE_META_FILE] == null) {
      missingFiles += COURSE_META_FILE
    }

    if (missingFiles.isNotEmpty()) {
      fail("Missing files in archive: $missingFiles")
    }

    if (extraFiles.isNotEmpty()) {
      if (generateExtraFiles) {
        for ((path, content) in extraFiles) {
          val file = expectedBaseDir.resolve(path)
          FileUtil.writeToFile(file, content)
        }
      }

      fail("Unexpected files in archive: ${extraFiles.keys}")
    }

    for ((path, contents) in filesToCompare) {
      if (path == COURSE_META_FILE) {
        checkCourseArchiveJson(contents, expectedBaseDir)
      }
      else {
        Assert.assertArrayEquals("Unexpected $path content", contents.expected, contents.actual)
      }
    }
  }