package ch.unibe.scg.cc;
import static org.hamcrest.core.Is.is;
import static org.junit.Assert.assertThat;
import java.io.IOException;
import java.util.Arrays;
import org.junit.Test;
import ch.unibe.scg.cc.Function2RoughClonerTest.TestModule;
import ch.unibe.scg.cc.GitInputFormat.GitRepoCodec;
import ch.unibe.scg.cc.Protos.Clone;
import ch.unibe.scg.cc.Protos.GitRepo;
import ch.unibe.scg.cells.CellSource;
import ch.unibe.scg.cells.Cells;
import ch.unibe.scg.cells.Codec;
import ch.unibe.scg.cells.InMemoryPipeline;
import ch.unibe.scg.cells.InMemoryStorage;
import ch.unibe.scg.cells.LocalCounterModule;
import ch.unibe.scg.cells.LocalExecutionModule;
import ch.unibe.scg.cells.Source;
import com.google.common.collect.Iterables;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.util.Modules;
/** Test {@link CloneGroupClusterer} */
public final class CloneGroupClustererTest {
/** Test {@link CloneGroupClusterer#map} */
@Test
public void testMap() throws IOException, InterruptedException {
Injector i = Guice.createInjector(
Modules.override(new CCModule(new InMemoryStorage(), new LocalCounterModule()))
.with(new TestModule()), new LocalExecutionModule());
Codec<GitRepo> repoCodec = i.getInstance(GitRepoCodec.class);
try (CellSource<GitRepo> src
= Cells.shard(Cells.encode(
Arrays.asList(GitPopulatorTest.parseZippedGit("paperExample.zip")),
repoCodec));
InMemoryPipeline<GitRepo, Clone> pipe = i.getInstance(InMemoryPipeline.Builder.class).make(src)) {
pipe
.influx(repoCodec)
.map(i.getInstance(GitPopulator.class))
.shuffle(i.getInstance(Snippet2FunctionsCodec.class))
.map(i.getInstance(Function2RoughCloner.class))
.shuffle(i.getInstance(Function2RoughClonesCodec.class))
.mapAndEfflux(i.getInstance(Function2FineCloner.class),
i.getInstance(Function2RoughClonesCodec.class));
// TODO: run: .effluxWithOfflineMapper(i.getInstance(CloneGroupClusterer.class),
try(Source<Clone> source = pipe.lastEfflux()) {
assertThat(Iterables.toString(source), is(""));
}
// three identical matches in two tags
// TODO: check clustering: assertThat(Iterables.get(Iterables.get(source, 0), 0).getOccurrencesList().size(), is(2*3));
}
}
}