Я написал тест Спока, чтобы узнать, как использовать JGit. Общая идея теста состоит из следующих шагов:
- Создайте каталог «TestRepo».
- Инициализируйте там новый репозиторий Git ("TestRepo/.git")
- Создайте новый файл в родительском каталоге (TestRepo) и установите его текст на что-нибудь, чтобы занимать место.
- Вызовите "git статус"
- (отладка) Groovy дамп возвращенного объекта
Status
- Утверждают, что возвращенный объект
Status
имеет файл, указанный какuntracked
.
Когда я запускаю приведенный ниже тест, он терпит неудачу. Почему?
state.dump()
отпечатков
Status@38989dff
diff=org.eclipse.jgit.lib.IndexDiff@72def3cd
clean=true
hasUncommittedChanges=false
Код ниже:
class GitActionsSpec extends Specification {
public static final ROOT_DIR_PATH = Paths.get(System.getProperty("user.home"), "TestRepo")
public static final ROOT_DIR_STRING = ROOT_DIR_PATH.toString()
public static final GIT_DIR_PATH = ROOT_DIR_PATH.resolve(".git")
@Shared
Git git
/**
* Creates a repository in rootDirPath
*/
def setupSpec() {
if (Files.exists(ROOT_DIR_PATH)) {
deleteDirectory(ROOT_DIR_PATH)
}
Files.createDirectory(ROOT_DIR_PATH)
/*
GitActions.createRepoIn(File parentDirectory) {
return Git.init().setDirectory(f).call()
}
*/
git = GitActions.createRepoIn(ROOT_DIR_PATH.toFile())
assert git.repository.getDirectory().exists()
}
// The actual test
def "A newly-created file should be listed as 'untracked'"() {
given: "A new file"
Path file = ROOT_DIR_PATH.relativize(ROOT_DIR_PATH.resolve("file.txt"))
file.text = "filler text"
assert Files.exists(file)
when: "user requests the status"
Status state = git.status().addPath(file.toString()).call()
then: "Git lists that file as untracked"
println state.dump()
!state.getUntracked().isEmpty()
}
def cleanupSpec() {
git.close()
deleteDirectory(ROOT_DIR_PATH)
}
def deleteDirectory(Path directory) {
Files.walkFileTree(directory, new SimpleFileVisitor<Path>() {
@Override
FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
Files.delete(dir)
return FileVisitResult.CONTINUE
}
@Override
FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
Files.delete(file)
return FileVisitResult.CONTINUE
}
})
}
}