blob: f03a40b6e8d8a604b6eacf612a9ee98b26e4ae56 [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 {
David Pursehouseccaa85d2017-05-30 10:47:27 +090042 repo = new TestRepository<>(new InMemoryRepository(new DfsRepositoryDescription("test")));
Dave Borowitz9de65952012-08-13 16:09:45 -070043 walk = new RevWalk(repo.getRepository());
44 }
45
Dave Borowitzd40bdf12014-04-19 19:33:56 -070046 @After
47 public void tearDown() throws Exception {
Shawn Pearceb5ad0a02015-05-24 20:33:17 -070048 walk.close();
Dave Borowitz9de65952012-08-13 16:09:45 -070049 }
50
Dave Borowitzd40bdf12014-04-19 19:33:56 -070051 @Test
Dave Borowitz61d12e82014-07-30 08:45:10 -070052 public void oneResult() throws Exception {
53 List<RevCommit> commits = linearCommits(1);
54 walk.markStart(commits.get(0));
55 Paginator p = new Paginator(walk, 10, null);
Dave Borowitzfde41fd2015-09-16 15:14:38 -040056 assertThat(p).containsExactly(commits.get(0));
57 assertThat(p.getPreviousStart()).isNull();
58 assertThat(p.getNextStart()).isNull();
Dave Borowitz61d12e82014-07-30 08:45:10 -070059 }
60
61 @Test
62 public void lessThanOnePage() throws Exception {
63 List<RevCommit> commits = linearCommits(3);
64 walk.markStart(commits.get(2));
65 Paginator p = new Paginator(walk, 10, null);
Dave Borowitzcf38c032016-05-02 11:06:23 -040066 assertThat(p).containsExactly(commits.get(2), commits.get(1), commits.get(0)).inOrder();
Dave Borowitzfde41fd2015-09-16 15:14:38 -040067 assertThat(p.getPreviousStart()).isNull();
68 assertThat(p.getNextStart()).isNull();
Dave Borowitz61d12e82014-07-30 08:45:10 -070069 }
70
71 @Test
72 public void exactlyOnePage() throws Exception {
73 List<RevCommit> commits = linearCommits(3);
74 walk.markStart(commits.get(2));
75 Paginator p = new Paginator(walk, 3, null);
Dave Borowitzcf38c032016-05-02 11:06:23 -040076 assertThat(p).containsExactly(commits.get(2), commits.get(1), commits.get(0)).inOrder();
Dave Borowitzfde41fd2015-09-16 15:14:38 -040077 assertThat(p.getPreviousStart()).isNull();
78 assertThat(p.getNextStart()).isNull();
Dave Borowitz61d12e82014-07-30 08:45:10 -070079 }
80
81 @Test
82 public void moreThanOnePage() throws Exception {
83 List<RevCommit> commits = linearCommits(5);
84 walk.markStart(commits.get(4));
85 Paginator p = new Paginator(walk, 3, null);
Dave Borowitzcf38c032016-05-02 11:06:23 -040086 assertThat(p).containsExactly(commits.get(4), commits.get(3), commits.get(2)).inOrder();
Dave Borowitzfde41fd2015-09-16 15:14:38 -040087 assertThat(p.getPreviousStart()).isNull();
88 assertThat(p.getNextStart()).isEqualTo(commits.get(1));
Dave Borowitz61d12e82014-07-30 08:45:10 -070089 }
90
91 @Test
Dave Borowitzd40bdf12014-04-19 19:33:56 -070092 public void start() throws Exception {
Dave Borowitz9de65952012-08-13 16:09:45 -070093 List<RevCommit> commits = linearCommits(10);
94 walk.markStart(commits.get(9));
95 Paginator p = new Paginator(walk, 3, commits.get(9));
Dave Borowitzcf38c032016-05-02 11:06:23 -040096 assertThat(p).containsExactly(commits.get(9), commits.get(8), commits.get(7)).inOrder();
Dave Borowitzfde41fd2015-09-16 15:14:38 -040097 assertThat(p.getPreviousStart()).isNull();
98 assertThat(p.getNextStart()).isEqualTo(commits.get(6));
Dave Borowitz9de65952012-08-13 16:09:45 -070099 }
100
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700101 @Test
102 public void noStartCommit() throws Exception {
Dave Borowitz9de65952012-08-13 16:09:45 -0700103 List<RevCommit> commits = linearCommits(10);
104 walk.markStart(commits.get(9));
105 Paginator p = new Paginator(walk, 3, null);
Dave Borowitzcf38c032016-05-02 11:06:23 -0400106 assertThat(p).containsExactly(commits.get(9), commits.get(8), commits.get(7)).inOrder();
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400107 assertThat(p.getPreviousStart()).isNull();
108 assertThat(p.getNextStart()).isEqualTo(commits.get(6));
Dave Borowitz9de65952012-08-13 16:09:45 -0700109 }
110
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700111 @Test
112 public void lessThanOnePageIn() throws Exception {
Dave Borowitz9de65952012-08-13 16:09:45 -0700113 List<RevCommit> commits = linearCommits(10);
114 walk.markStart(commits.get(9));
115 Paginator p = new Paginator(walk, 3, commits.get(8));
Dave Borowitzcf38c032016-05-02 11:06:23 -0400116 assertThat(p).containsExactly(commits.get(8), commits.get(7), commits.get(6)).inOrder();
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400117 assertThat(p.getPreviousStart()).isEqualTo(commits.get(9));
118 assertThat(p.getNextStart()).isEqualTo(commits.get(5));
Dave Borowitz9de65952012-08-13 16:09:45 -0700119 }
120
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700121 @Test
122 public void atLeastOnePageIn() throws Exception {
Dave Borowitz9de65952012-08-13 16:09:45 -0700123 List<RevCommit> commits = linearCommits(10);
124 walk.markStart(commits.get(9));
125 Paginator p = new Paginator(walk, 3, commits.get(7));
Dave Borowitzcf38c032016-05-02 11:06:23 -0400126 assertThat(p).containsExactly(commits.get(7), commits.get(6), commits.get(5)).inOrder();
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400127 assertThat(p.getPreviousStart()).isEqualTo(commits.get(9));
128 assertThat(p.getNextStart()).isEqualTo(commits.get(4));
Dave Borowitz9de65952012-08-13 16:09:45 -0700129 }
130
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700131 @Test
132 public void end() throws Exception {
Dave Borowitz9de65952012-08-13 16:09:45 -0700133 List<RevCommit> commits = linearCommits(10);
134 walk.markStart(commits.get(9));
135 Paginator p = new Paginator(walk, 3, commits.get(2));
Dave Borowitzcf38c032016-05-02 11:06:23 -0400136 assertThat(p).containsExactly(commits.get(2), commits.get(1), commits.get(0)).inOrder();
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400137 assertThat(p.getPreviousStart()).isEqualTo(commits.get(5));
138 assertThat(p.getNextStart()).isNull();
Dave Borowitz9de65952012-08-13 16:09:45 -0700139 }
140
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700141 @Test
142 public void onePastEnd() throws Exception {
Dave Borowitz9de65952012-08-13 16:09:45 -0700143 List<RevCommit> commits = linearCommits(10);
144 walk.markStart(commits.get(9));
145 Paginator p = new Paginator(walk, 3, commits.get(1));
Dave Borowitzcf38c032016-05-02 11:06:23 -0400146 assertThat(p).containsExactly(commits.get(1), commits.get(0)).inOrder();
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400147 assertThat(p.getPreviousStart()).isEqualTo(commits.get(4));
148 assertThat(p.getNextStart()).isNull();
Dave Borowitz9de65952012-08-13 16:09:45 -0700149 }
150
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700151 @Test
152 public void manyPastEnd() throws Exception {
Dave Borowitz9de65952012-08-13 16:09:45 -0700153 List<RevCommit> commits = linearCommits(10);
154 walk.markStart(commits.get(9));
155 Paginator p = new Paginator(walk, 5, commits.get(1));
Dave Borowitzcf38c032016-05-02 11:06:23 -0400156 assertThat(p).containsExactly(commits.get(1), commits.get(0)).inOrder();
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400157 assertThat(p.getPreviousStart()).isEqualTo(commits.get(6));
158 assertThat(p.getNextStart()).isNull();
Dave Borowitz9de65952012-08-13 16:09:45 -0700159 }
160
161 private List<RevCommit> linearCommits(int n) throws Exception {
162 checkArgument(n > 0);
163 List<RevCommit> commits = Lists.newArrayList();
164 commits.add(repo.commit().create());
Dave Borowitz61d12e82014-07-30 08:45:10 -0700165 for (int i = 1; i < n; i++) {
Dave Borowitz9de65952012-08-13 16:09:45 -0700166 commits.add(repo.commit().parent(commits.get(commits.size() - 1)).create());
167 }
168 return commits;
169 }
170}