de.fau.osr.vcs.impl.GitBlameOperationTest.java Source code

Java tutorial

Introduction

Here is the source code for de.fau.osr.vcs.impl.GitBlameOperationTest.java

Source

/*
 * This file is part of ReqTracker.
 *
 * Copyright (C) 2015 Taleh Didover, Florian Gerdes, Dmitry Gorelenkov,
 *     Rajab Hassan Kaoneka, Katsiaryna Krauchanka, Tobias Polzer,
 *     Gayathery Sathya, Lukas Tajak
 *
 * ReqTracker is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * ReqTracker is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with ReqTracker.  If not, see <http://www.gnu.org/licenses/>.
 */
package de.fau.osr.vcs.impl;

import static org.junit.Assert.*;

import java.io.IOException;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.function.BiFunction;

import javax.naming.OperationNotSupportedException;

import org.eclipse.jgit.lib.ObjectId;
import org.junit.Test;

import com.beust.jcommander.internal.Lists;
import com.google.common.collect.ImmutableSetMultimap;
import com.google.common.collect.SetMultimap;

import de.fau.osr.PublicTestData;
import de.fau.osr.core.db.DataSource;
import de.fau.osr.core.vcs.AnnotatedLine;
import de.fau.osr.core.vcs.AnnotatedWords;
import de.fau.osr.core.vcs.impl.GitBlameOperation;
import de.fau.osr.core.vcs.impl.GitVcsClient;

public class GitBlameOperationTest {
    GitVcsClient git;

    public GitBlameOperationTest() throws Exception {
        git = new GitVcsClient(getClass().getResource("/TestRepository2/git").getPath());
    }

    @SuppressWarnings("unchecked")
    @Test
    public void testSimpleWordBlame() throws Exception {
        BiFunction<String, Integer, Iterator<Integer>> putBlame = (s, i) -> {
            if (s.compareTo("44ede09bf7dc2180f0ae7d614ae9fbccf549deaa") == 0)
                return Collections.singleton(1).iterator();
            return null;
        };
        AnnotatedWords w = new GitBlameOperation(git, "TestFile3", putBlame).wordBlame();
        ObjectId commit1 = ObjectId.fromString("bc87c2039d1e14d5fa0131d77780eaa3b2cc627c"),
                commit2 = ObjectId.fromString("44ede09bf7dc2180f0ae7d614ae9fbccf549deaa"),
                commit3 = ObjectId.fromString("d97ad6e826b473098b4396aa09c638487305c572"),
                commit4 = ObjectId.fromString("1c593122de47d31defa0648090a5cdfec1a5e43a");
        assertArrayEquals(new List[] { Lists.newArrayList(1, commit1), Lists.newArrayList(1, commit2),
                Lists.newArrayList(1, commit2), Lists.newArrayList(commit4), Lists.newArrayList(1, commit2),
                Lists.newArrayList(1, commit2), Lists.newArrayList(1, commit2), Collections.singletonList(commit3),
                Collections.singletonList(commit3), }, w.annotations);
        DataSource testDataSource = new DataSource() {

            @Override
            protected SetMultimap<String, String> doGetAllReqCommitRelations() throws IOException {
                return ImmutableSetMultimap.of("a", commit1.name(), "42", commit2.name(), "", commit3.name(),
                        "foobar", commit4.name());
            }

            @Override
            protected void doAddReqCommitRelation(String reqId, String commitId)
                    throws IOException, OperationNotSupportedException {
                fail("add relation may not be called for lookup");
            }

            @Override
            protected void doRemoveReqCommitRelation(String reqId, String commitId)
                    throws IOException, OperationNotSupportedException {
                fail("remove relation may not be called for lookup");
            }

        };
        List<AnnotatedLine> lines = AnnotatedLine.wordsToLine(w, testDataSource);
        assertEquals(Lists.newArrayList(new AnnotatedLine(Lists.newArrayList("a", "42"), "1 3"),
                new AnnotatedLine(Collections.emptyList(), ""),
                new AnnotatedLine(Lists.newArrayList("", "42"), "Test 2 100")), lines);
    }
}