001package edu.pdx.cs.joy.grader;
002
003import org.junit.jupiter.api.Test;
004
005import java.io.IOException;
006import java.io.InputStream;
007import java.io.InputStreamReader;
008import java.io.StringReader;
009
010import static org.mockito.Mockito.mock;
011import static org.mockito.Mockito.verify;
012
013public class GitConfigParserTest {
014
015  @Test
016  void canParseCoreSectionOfGitConfig() throws IOException {
017    String config =
018      "[core]\n" +
019      "        repositoryformatversion = 0\n" +
020      "        filemode = true\n";
021    GitConfigParser parser = new GitConfigParser(new StringReader(config));
022    GitConfigParser.Callback callback = mock(GitConfigParser.Callback.class);
023    parser.parse(callback);
024
025    verify(callback).startCoreSection();
026    verify(callback).property("repositoryformatversion", "0");
027    verify(callback).property("filemode", "true");
028    verify(callback).endSection("core");
029  }
030
031  @Test
032  void canParseRemoteOriginSectionOfGitConfig() throws IOException {
033    String config =
034      "[remote \"origin\"]\n" +
035        "        url = git@github.com:JoyOfCodingPDX/JoyOfCoding.git\n" +
036        "        fetch = +refs/heads/*:refs/remotes/origin/*";
037    GitConfigParser parser = new GitConfigParser(new StringReader(config));
038    GitConfigParser.Callback callback = mock(GitConfigParser.Callback.class);
039    parser.parse(callback);
040
041    verify(callback).startRemoteSection("origin");
042    verify(callback).property("url", "git@github.com:JoyOfCodingPDX/JoyOfCoding.git");
043    verify(callback).endSection("origin");
044  }
045
046  @Test
047  void canParseRealGitConfig() throws IOException {
048    InputStream resource = getClass().getResourceAsStream("gitConfig.txt");
049
050    GitConfigParser parser = new GitConfigParser(new InputStreamReader(resource));
051    GitConfigParser.Callback callback = mock(GitConfigParser.Callback.class);
052    parser.parse(callback);
053
054    verify(callback).startCoreSection();
055    verify(callback).property("repositoryformatversion", "0");
056    verify(callback).property("filemode", "true");
057    verify(callback).endSection("core");
058
059    verify(callback).startRemoteSection("origin");
060    verify(callback).property("url", "git@github.com:JoyOfCodingPDX/JoyOfCoding.git");
061    verify(callback).endSection("origin");
062
063  }
064}