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)
}
}
}