// Тест GitManager (Фаза 1): инициализация репозитория хранилища, // авто-коммит с новым файлом, наличие коммитов в HEAD. #include #include #include #include #include #include "git/GitManager.h" int main(int argc, char *argv[]) { QCoreApplication app(argc, argv); QTemporaryDir dir; if (!dir.isValid()) { std::fprintf(stderr, "FAIL: не удалось создать временную папку\n"); return 1; } GitManager git; // 1. init в новой папке if (!git.initRepo(dir.path()) || !git.lastError().isEmpty()) { std::fprintf(stderr, "FAIL: initRepo: %s\n", qPrintable(git.lastError())); return 1; } // 2. init идемпотентен (повторный вызов — успех) if (!git.initRepo(dir.path())) { std::fprintf(stderr, "FAIL: повторный initRepo\n"); return 1; } // 3. нет коммитов if (git.hasCommits(dir.path())) { std::fprintf(stderr, "FAIL: коммиты появились раньше времени\n"); return 1; } // 4. создаём файл и коммитим QFile f(dir.filePath(QStringLiteral("readme.md"))); if (!f.open(QIODevice::WriteOnly)) { std::fprintf(stderr, "FAIL: не удалось создать файл\n"); return 1; } f.write("# Привет, Flora!\n"); f.close(); if (!git.commitAll(dir.path(), QStringLiteral("initial"))) { std::fprintf(stderr, "FAIL: commitAll: %s\n", qPrintable(git.lastError())); return 1; } // 5. теперь коммиты есть if (!git.hasCommits(dir.path())) { std::fprintf(stderr, "FAIL: no commits after commitAll\n"); return 1; } // 6. повторный коммит без изменений — корректная ошибка, без падения if (git.commitAll(dir.path(), QStringLiteral("noop"))) { std::fprintf(stderr, "FAIL: повторный коммит без изменений не должен удаваться\n"); return 1; } // 7. не-существующая папка if (git.initRepo("/путь/которого/не/существует_xyz")) { std::fprintf(stderr, "FAIL: initRepo не должен удаваться\n"); return 1; } std::printf("GIT TEST OK\n"); return 0; }