diff options
Diffstat (limited to 'javatests/com/google/gerrit/reviewdb/client/ChangeTest.java')
-rw-r--r-- | javatests/com/google/gerrit/reviewdb/client/ChangeTest.java | 173 |
1 files changed, 173 insertions, 0 deletions
diff --git a/javatests/com/google/gerrit/reviewdb/client/ChangeTest.java b/javatests/com/google/gerrit/reviewdb/client/ChangeTest.java new file mode 100644 index 0000000000..6d1d0a6817 --- /dev/null +++ b/javatests/com/google/gerrit/reviewdb/client/ChangeTest.java @@ -0,0 +1,173 @@ +// Copyright (C) 2014 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package com.google.gerrit.reviewdb.client; + +import static com.google.common.truth.Truth.assertThat; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +import org.junit.Test; + +public class ChangeTest { + @Test + public void parseInvalidRefNames() { + assertNotRef(null); + assertNotRef(""); + assertNotRef("01/1/1"); + assertNotRef("HEAD"); + assertNotRef("refs/tags/v1"); + } + + @Test + public void parsePatchSetRefNames() { + assertRef(1, "refs/changes/01/1/1"); + assertRef(1234, "refs/changes/34/1234/56"); + + // Invalid characters. + assertNotRef("refs/changes/0x/1/1"); + assertNotRef("refs/changes/01/x/1"); + assertNotRef("refs/changes/01/1/x"); + + // Truncations. + assertNotRef("refs/changes/"); + assertNotRef("refs/changes/1"); + assertNotRef("refs/changes/01"); + assertNotRef("refs/changes/01/"); + assertNotRef("refs/changes/01/1/"); + assertNotRef("refs/changes/01/1/1/"); + assertNotRef("refs/changes/01//1/1"); + + // Leading zeroes. + assertNotRef("refs/changes/01/01/1"); + assertNotRef("refs/changes/01/1/01"); + + // Mismatched last 2 digits. + assertNotRef("refs/changes/35/1234/56"); + + // Something other than patch set after change. + assertNotRef("refs/changes/34/1234/0"); + assertNotRef("refs/changes/34/1234/foo"); + assertNotRef("refs/changes/34/1234|56"); + assertNotRef("refs/changes/34/1234foo"); + } + + @Test + public void parseEditRefNames() { + assertRef(5, "refs/users/34/1234/edit-5/1"); + assertRef(5, "refs/users/34/1234/edit-5"); + assertNotRef("refs/changes/34/1234/edit-5/1"); + assertNotRef("refs/users/34/1234/EDIT-5/1"); + assertNotRef("refs/users/34/1234"); + } + + @Test + public void parseChangeMetaRefNames() { + assertRef(1, "refs/changes/01/1/meta"); + assertRef(1234, "refs/changes/34/1234/meta"); + + assertNotRef("refs/changes/01/1/met"); + assertNotRef("refs/changes/01/1/META"); + assertNotRef("refs/changes/01/1/1/meta"); + } + + @Test + public void parseRobotCommentRefNames() { + assertRef(1, "refs/changes/01/1/robot-comments"); + assertRef(1234, "refs/changes/34/1234/robot-comments"); + + assertNotRef("refs/changes/01/1/robot-comment"); + assertNotRef("refs/changes/01/1/ROBOT-COMMENTS"); + assertNotRef("refs/changes/01/1/1/robot-comments"); + } + + @Test + public void parseStarredChangesRefNames() { + assertAllUsersRef(1, "refs/starred-changes/01/1/1001"); + assertAllUsersRef(1234, "refs/starred-changes/34/1234/1001"); + + assertNotRef("refs/starred-changes/01/1/1001"); + assertNotAllUsersRef(null); + assertNotAllUsersRef("refs/starred-changes/01/1/1xx1"); + assertNotAllUsersRef("refs/starred-changes/01/1/"); + assertNotAllUsersRef("refs/starred-changes/01/1"); + assertNotAllUsersRef("refs/starred-changes/35/1234/1001"); + assertNotAllUsersRef("refs/starred-changeS/01/1/1001"); + } + + @Test + public void parseDraftRefNames() { + assertAllUsersRef(1, "refs/draft-comments/01/1/1001"); + assertAllUsersRef(1234, "refs/draft-comments/34/1234/1001"); + + assertNotRef("refs/draft-comments/01/1/1001"); + assertNotAllUsersRef(null); + assertNotAllUsersRef("refs/draft-comments/01/1/1xx1"); + assertNotAllUsersRef("refs/draft-comments/01/1/"); + assertNotAllUsersRef("refs/draft-comments/01/1"); + assertNotAllUsersRef("refs/draft-comments/35/1234/1001"); + assertNotAllUsersRef("refs/draft-commentS/01/1/1001"); + } + + @Test + public void toRefPrefix() { + assertThat(new Change.Id(1).toRefPrefix()).isEqualTo("refs/changes/01/1/"); + assertThat(new Change.Id(1234).toRefPrefix()).isEqualTo("refs/changes/34/1234/"); + } + + @Test + public void parseRefNameParts() { + assertRefPart(1, "01/1"); + + assertNotRefPart(null); + assertNotRefPart(""); + + // This method assumes that the common prefix "refs/changes/" was removed. + assertNotRefPart("refs/changes/01/1"); + + // Invalid characters. + assertNotRefPart("01a/1"); + assertNotRefPart("01/a1"); + + // Mismatched shard. + assertNotRefPart("01/23"); + + // Shard too short. + assertNotRefPart("1/1"); + } + + private static void assertRef(int changeId, String refName) { + assertThat(Change.Id.fromRef(refName)).isEqualTo(new Change.Id(changeId)); + } + + private static void assertNotRef(String refName) { + assertThat(Change.Id.fromRef(refName)).isNull(); + } + + private static void assertAllUsersRef(int changeId, String refName) { + assertThat(Change.Id.fromAllUsersRef(refName)).isEqualTo(new Change.Id(changeId)); + } + + private static void assertNotAllUsersRef(String refName) { + assertThat(Change.Id.fromAllUsersRef(refName)).isNull(); + } + + private static void assertRefPart(int changeId, String refName) { + assertEquals(new Change.Id(changeId), Change.Id.fromRefPart(refName)); + } + + private static void assertNotRefPart(String refName) { + assertNull(Change.Id.fromRefPart(refName)); + } +} |