blob: 7f8961db8d62ab1dec7cb673f92e16d99bf05513 [file] [log] [blame]
Dave Borowitz9de65952012-08-13 16:09:45 -07001// Copyright 2012 Google Inc. All Rights Reserved.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15package com.google.gitiles;
16
17import static com.google.common.base.Preconditions.checkArgument;
Dave Borowitzfde41fd2015-09-16 15:14:38 -040018import static com.google.common.truth.Truth.assertThat;
Dave Borowitz9de65952012-08-13 16:09:45 -070019
Dave Borowitzd40bdf12014-04-19 19:33:56 -070020import com.google.common.collect.Lists;
Dave Borowitz3b744b12016-08-19 16:11:10 -040021import java.util.List;
Shawn Pearceb43b2d52013-03-18 10:55:15 -070022import org.eclipse.jgit.internal.storage.dfs.DfsRepository;
23import org.eclipse.jgit.internal.storage.dfs.DfsRepositoryDescription;
24import org.eclipse.jgit.internal.storage.dfs.InMemoryRepository;
Dave Borowitz9de65952012-08-13 16:09:45 -070025import org.eclipse.jgit.junit.TestRepository;
26import org.eclipse.jgit.revwalk.RevCommit;
27import org.eclipse.jgit.revwalk.RevWalk;
Dave Borowitzd40bdf12014-04-19 19:33:56 -070028import org.junit.After;
29import org.junit.Before;
30import org.junit.Test;
Dave Borowitz3dc854f2014-11-04 16:19:37 -080031import org.junit.runner.RunWith;
32import org.junit.runners.JUnit4;
Dave Borowitz9de65952012-08-13 16:09:45 -070033
Dave Borowitz9de65952012-08-13 16:09:45 -070034/** Unit tests for {@link LogServlet}. */
Dave Borowitz3dc854f2014-11-04 16:19:37 -080035@RunWith(JUnit4.class)
Dave Borowitzd40bdf12014-04-19 19:33:56 -070036public class PaginatorTest {
Dave Borowitz9de65952012-08-13 16:09:45 -070037 private TestRepository<DfsRepository> repo;
38 private RevWalk walk;
39
Dave Borowitzd40bdf12014-04-19 19:33:56 -070040 @Before
41 public void setUp() throws Exception {
Dave Borowitzcf38c032016-05-02 11:06:23 -040042 repo =
David Pursehouse0cf7f382016-10-04 14:29:16 +090043 new TestRepository<>(
Dave Borowitzcf38c032016-05-02 11:06:23 -040044 new InMemoryRepository(new DfsRepositoryDescription("test")));
Dave Borowitz9de65952012-08-13 16:09:45 -070045 walk = new RevWalk(repo.getRepository());
46 }
47
Dave Borowitzd40bdf12014-04-19 19:33:56 -070048 @After
49 public void tearDown() throws Exception {
Shawn Pearceb5ad0a02015-05-24 20:33:17 -070050 walk.close();
Dave Borowitz9de65952012-08-13 16:09:45 -070051 }
52
Dave Borowitzd40bdf12014-04-19 19:33:56 -070053 @Test
Dave Borowitz61d12e82014-07-30 08:45:10 -070054 public void oneResult() throws Exception {
55 List<RevCommit> commits = linearCommits(1);
56 walk.markStart(commits.get(0));
57 Paginator p = new Paginator(walk, 10, null);
Dave Borowitzfde41fd2015-09-16 15:14:38 -040058 assertThat(p).containsExactly(commits.get(0));
59 assertThat(p.getPreviousStart()).isNull();
60 assertThat(p.getNextStart()).isNull();
Dave Borowitz61d12e82014-07-30 08:45:10 -070061 }
62
63 @Test
64 public void lessThanOnePage() throws Exception {
65 List<RevCommit> commits = linearCommits(3);
66 walk.markStart(commits.get(2));
67 Paginator p = new Paginator(walk, 10, null);
Dave Borowitzcf38c032016-05-02 11:06:23 -040068 assertThat(p).containsExactly(commits.get(2), commits.get(1), commits.get(0)).inOrder();
Dave Borowitzfde41fd2015-09-16 15:14:38 -040069 assertThat(p.getPreviousStart()).isNull();
70 assertThat(p.getNextStart()).isNull();
Dave Borowitz61d12e82014-07-30 08:45:10 -070071 }
72
73 @Test
74 public void exactlyOnePage() throws Exception {
75 List<RevCommit> commits = linearCommits(3);
76 walk.markStart(commits.get(2));
77 Paginator p = new Paginator(walk, 3, null);
Dave Borowitzcf38c032016-05-02 11:06:23 -040078 assertThat(p).containsExactly(commits.get(2), commits.get(1), commits.get(0)).inOrder();
Dave Borowitzfde41fd2015-09-16 15:14:38 -040079 assertThat(p.getPreviousStart()).isNull();
80 assertThat(p.getNextStart()).isNull();
Dave Borowitz61d12e82014-07-30 08:45:10 -070081 }
82
83 @Test
84 public void moreThanOnePage() throws Exception {
85 List<RevCommit> commits = linearCommits(5);
86 walk.markStart(commits.get(4));
87 Paginator p = new Paginator(walk, 3, null);
Dave Borowitzcf38c032016-05-02 11:06:23 -040088 assertThat(p).containsExactly(commits.get(4), commits.get(3), commits.get(2)).inOrder();
Dave Borowitzfde41fd2015-09-16 15:14:38 -040089 assertThat(p.getPreviousStart()).isNull();
90 assertThat(p.getNextStart()).isEqualTo(commits.get(1));
Dave Borowitz61d12e82014-07-30 08:45:10 -070091 }
92
93 @Test
Dave Borowitzd40bdf12014-04-19 19:33:56 -070094 public void start() throws Exception {
Dave Borowitz9de65952012-08-13 16:09:45 -070095 List<RevCommit> commits = linearCommits(10);
96 walk.markStart(commits.get(9));
97 Paginator p = new Paginator(walk, 3, commits.get(9));
Dave Borowitzcf38c032016-05-02 11:06:23 -040098 assertThat(p).containsExactly(commits.get(9), commits.get(8), commits.get(7)).inOrder();
Dave Borowitzfde41fd2015-09-16 15:14:38 -040099 assertThat(p.getPreviousStart()).isNull();
100 assertThat(p.getNextStart()).isEqualTo(commits.get(6));
Dave Borowitz9de65952012-08-13 16:09:45 -0700101 }
102
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700103 @Test
104 public void noStartCommit() throws Exception {
Dave Borowitz9de65952012-08-13 16:09:45 -0700105 List<RevCommit> commits = linearCommits(10);
106 walk.markStart(commits.get(9));
107 Paginator p = new Paginator(walk, 3, null);
Dave Borowitzcf38c032016-05-02 11:06:23 -0400108 assertThat(p).containsExactly(commits.get(9), commits.get(8), commits.get(7)).inOrder();
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400109 assertThat(p.getPreviousStart()).isNull();
110 assertThat(p.getNextStart()).isEqualTo(commits.get(6));
Dave Borowitz9de65952012-08-13 16:09:45 -0700111 }
112
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700113 @Test
114 public void lessThanOnePageIn() throws Exception {
Dave Borowitz9de65952012-08-13 16:09:45 -0700115 List<RevCommit> commits = linearCommits(10);
116 walk.markStart(commits.get(9));
117 Paginator p = new Paginator(walk, 3, commits.get(8));
Dave Borowitzcf38c032016-05-02 11:06:23 -0400118 assertThat(p).containsExactly(commits.get(8), commits.get(7), commits.get(6)).inOrder();
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400119 assertThat(p.getPreviousStart()).isEqualTo(commits.get(9));
120 assertThat(p.getNextStart()).isEqualTo(commits.get(5));
Dave Borowitz9de65952012-08-13 16:09:45 -0700121 }
122
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700123 @Test
124 public void atLeastOnePageIn() throws Exception {
Dave Borowitz9de65952012-08-13 16:09:45 -0700125 List<RevCommit> commits = linearCommits(10);
126 walk.markStart(commits.get(9));
127 Paginator p = new Paginator(walk, 3, commits.get(7));
Dave Borowitzcf38c032016-05-02 11:06:23 -0400128 assertThat(p).containsExactly(commits.get(7), commits.get(6), commits.get(5)).inOrder();
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400129 assertThat(p.getPreviousStart()).isEqualTo(commits.get(9));
130 assertThat(p.getNextStart()).isEqualTo(commits.get(4));
Dave Borowitz9de65952012-08-13 16:09:45 -0700131 }
132
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700133 @Test
134 public void end() throws Exception {
Dave Borowitz9de65952012-08-13 16:09:45 -0700135 List<RevCommit> commits = linearCommits(10);
136 walk.markStart(commits.get(9));
137 Paginator p = new Paginator(walk, 3, commits.get(2));
Dave Borowitzcf38c032016-05-02 11:06:23 -0400138 assertThat(p).containsExactly(commits.get(2), commits.get(1), commits.get(0)).inOrder();
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400139 assertThat(p.getPreviousStart()).isEqualTo(commits.get(5));
140 assertThat(p.getNextStart()).isNull();
Dave Borowitz9de65952012-08-13 16:09:45 -0700141 }
142
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700143 @Test
144 public void onePastEnd() throws Exception {
Dave Borowitz9de65952012-08-13 16:09:45 -0700145 List<RevCommit> commits = linearCommits(10);
146 walk.markStart(commits.get(9));
147 Paginator p = new Paginator(walk, 3, commits.get(1));
Dave Borowitzcf38c032016-05-02 11:06:23 -0400148 assertThat(p).containsExactly(commits.get(1), commits.get(0)).inOrder();
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400149 assertThat(p.getPreviousStart()).isEqualTo(commits.get(4));
150 assertThat(p.getNextStart()).isNull();
Dave Borowitz9de65952012-08-13 16:09:45 -0700151 }
152
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700153 @Test
154 public void manyPastEnd() throws Exception {
Dave Borowitz9de65952012-08-13 16:09:45 -0700155 List<RevCommit> commits = linearCommits(10);
156 walk.markStart(commits.get(9));
157 Paginator p = new Paginator(walk, 5, commits.get(1));
Dave Borowitzcf38c032016-05-02 11:06:23 -0400158 assertThat(p).containsExactly(commits.get(1), commits.get(0)).inOrder();
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400159 assertThat(p.getPreviousStart()).isEqualTo(commits.get(6));
160 assertThat(p.getNextStart()).isNull();
Dave Borowitz9de65952012-08-13 16:09:45 -0700161 }
162
163 private List<RevCommit> linearCommits(int n) throws Exception {
164 checkArgument(n > 0);
165 List<RevCommit> commits = Lists.newArrayList();
166 commits.add(repo.commit().create());
Dave Borowitz61d12e82014-07-30 08:45:10 -0700167 for (int i = 1; i < n; i++) {
Dave Borowitz9de65952012-08-13 16:09:45 -0700168 commits.add(repo.commit().parent(commits.get(commits.size() - 1)).create());
169 }
170 return commits;
171 }
172}