org.eclipse.egit.core.test.SubmoduleAndContainerTreeIteratorTest.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.egit.core.test.SubmoduleAndContainerTreeIteratorTest.java

Source

/*******************************************************************************
 * Copyright (C) 2014, Christian Halstrick <christian.halstrick@sap.com>
 *
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *******************************************************************************/
package org.eclipse.egit.core.test;

import static org.junit.Assert.assertTrue;

import java.io.File;
import java.io.IOException;

import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.egit.core.Activator;
import org.eclipse.jgit.api.Git;
import org.eclipse.jgit.api.Status;
import org.eclipse.jgit.api.errors.GitAPIException;
import org.eclipse.jgit.errors.NoWorkTreeException;
import org.eclipse.jgit.junit.RepositoryTestCase;
import org.eclipse.jgit.lib.Constants;
import org.eclipse.jgit.treewalk.FileTreeIterator;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

public class SubmoduleAndContainerTreeIteratorTest {
    private TestUtils testUtils;

    private IProject childProject;

    private File childProjectDir;

    private TestRepository childRepository;

    private IProject parentProject;

    private File parentProjectDir;

    private TestRepository parentRepository;

    private IFile parentFile;

    private FileTreeIterator treeIt;

    @Before
    public void setUp() throws Exception {
        testUtils = new TestUtils();

        // Create child repo and project
        childProject = testUtils.createProjectInLocalFileSystem("child");
        childProjectDir = childProject.getRawLocation().toFile();
        childRepository = new TestRepository(new File(childProjectDir, Constants.DOT_GIT));
        testUtils.addFileToProject(childProject, "child.txt", "Hello world");
        childRepository.connect(childProject);
        // We have to wait after until the filesystem timer has advanced to
        // avoid smudged states
        RepositoryTestCase.fsTick(null);
        childRepository.trackAllFiles(childProject);
        childRepository.commit("Initial commit");
        // Create parent repo and project
        parentProject = testUtils.createProjectInLocalFileSystem("parent");
        parentProjectDir = parentProject.getRawLocation().toFile();
        parentRepository = new TestRepository(new File(parentProjectDir, Constants.DOT_GIT));
        parentFile = testUtils.addFileToProject(parentProject, "parent.txt", "Hello world");
        Git.wrap(parentRepository.getRepository()).submoduleAdd().setPath("children/child")
                .setURI(childProjectDir.toURI().toString()).call();
        parentRepository.connect(parentProject);
        RepositoryTestCase.fsTick(null);
        parentRepository.trackAllFiles(parentProject);
        parentRepository.commit("Initial commit");

        treeIt = new FileTreeIterator(parentRepository.getRepository());
    }

    @After
    public void tearDown() throws Exception {
        childRepository.dispose();
        parentRepository.dispose();
        childProject.delete(true, true, null);
        parentProject.delete(true, true, null);
        Activator.getDefault().getRepositoryCache().clear();
        testUtils.deleteTempDirs();
    }

    @Test
    public void testCleanStateAfterInit() throws NoWorkTreeException, GitAPIException {
        Git parentGit = Git.wrap(parentRepository.getRepository());

        Status status = parentGit.status().setWorkingTreeIt(treeIt).call();
        assertTrue(status.isClean());
    }

    @Test
    public void testCleanStateFirstCommit()
            throws NoWorkTreeException, GitAPIException, IOException, CoreException, InterruptedException {
        testUtils.changeContentOfFile(parentProject, parentFile, "new content");
        RepositoryTestCase.fsTick(null);
        parentRepository.trackAllFiles(parentProject);
        parentRepository.commit("modified parent.txt");
        Git parentGit = Git.wrap(parentRepository.getRepository());

        Status status = parentGit.status().setWorkingTreeIt(treeIt).call();
        assertTrue(status.isClean());
    }
}