summaryrefslogtreecommitdiffstats
path: root/javatests/com/google/gerrit/server/index/change/ChangeFieldTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'javatests/com/google/gerrit/server/index/change/ChangeFieldTest.java')
-rw-r--r--javatests/com/google/gerrit/server/index/change/ChangeFieldTest.java99
1 files changed, 94 insertions, 5 deletions
diff --git a/javatests/com/google/gerrit/server/index/change/ChangeFieldTest.java b/javatests/com/google/gerrit/server/index/change/ChangeFieldTest.java
index 6ad2060585..0bdf5cdd5f 100644
--- a/javatests/com/google/gerrit/server/index/change/ChangeFieldTest.java
+++ b/javatests/com/google/gerrit/server/index/change/ChangeFieldTest.java
@@ -27,13 +27,17 @@ import com.google.gerrit.entities.Change;
import com.google.gerrit.entities.LegacySubmitRequirement;
import com.google.gerrit.entities.Project;
import com.google.gerrit.entities.SubmitRecord;
+import com.google.gerrit.entities.SubmitRequirement;
+import com.google.gerrit.entities.SubmitRequirementExpression;
+import com.google.gerrit.entities.SubmitRequirementExpressionResult;
+import com.google.gerrit.entities.SubmitRequirementResult;
import com.google.gerrit.index.testing.FakeStoredValue;
import com.google.gerrit.server.ReviewerSet;
import com.google.gerrit.server.notedb.ReviewerStateInternal;
import com.google.gerrit.server.query.change.ChangeData;
import com.google.gerrit.server.util.time.TimeUtil;
import com.google.gerrit.testing.TestTimeUtil;
-import java.sql.Timestamp;
+import java.time.Instant;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.TimeUnit;
@@ -55,17 +59,22 @@ public class ChangeFieldTest {
@Test
public void reviewerFieldValues() {
- Table<ReviewerStateInternal, Account.Id, Timestamp> t = HashBasedTable.create();
- Timestamp t1 = TimeUtil.nowTs();
+ Table<ReviewerStateInternal, Account.Id, Instant> t = HashBasedTable.create();
+
+ // Timestamps are stored as epoch millis in the reviewer field. Epoch millis are less precise
+ // than Instants which have nanosecond precision. Create Instants with millisecond precision
+ // here so that the comparison for the assertions works.
+ Instant t1 = Instant.ofEpochMilli(TimeUtil.nowMs());
+ Instant t2 = Instant.ofEpochMilli(TimeUtil.nowMs());
+
t.put(ReviewerStateInternal.REVIEWER, Account.id(1), t1);
- Timestamp t2 = TimeUtil.nowTs();
t.put(ReviewerStateInternal.CC, Account.id(2), t2);
ReviewerSet reviewers = ReviewerSet.fromTable(t);
List<String> values = ChangeField.getReviewerFieldValues(reviewers);
assertThat(values)
.containsExactly(
- "REVIEWER,1", "REVIEWER,1," + t1.getTime(), "CC,2", "CC,2," + t2.getTime());
+ "REVIEWER,1", "REVIEWER,1," + t1.toEpochMilli(), "CC,2", "CC,2," + t2.toEpochMilli());
assertThat(ChangeField.parseReviewerFieldValues(Change.id(1), values)).isEqualTo(reviewers);
}
@@ -84,6 +93,18 @@ public class ChangeFieldTest {
}
@Test
+ public void formatSubmitRequirementValues() {
+ assertThat(
+ ChangeField.formatSubmitRequirementValues(
+ ImmutableList.of(
+ submitRequirementResult(
+ "CR", "label:CR=+1", SubmitRequirementExpressionResult.Status.PASS),
+ submitRequirementResult(
+ "LC", "label:LC=+1", SubmitRequirementExpressionResult.Status.FAIL))))
+ .containsExactly("MAY,cr", "OK,cr", "NEED,lc", "REJECT,lc");
+ }
+
+ @Test
public void storedSubmitRecords() {
assertStoredRecordRoundTrip(record(SubmitRecord.Status.CLOSED));
@@ -147,6 +168,55 @@ public class ChangeFieldTest {
assertThat(ChangeField.DELETED.setIfPossible(cd, new FakeStoredValue(null))).isTrue();
}
+ @Test
+ public void shortStringIsNotTruncated() {
+ assertThat(ChangeField.truncateStringValue("short string", 20)).isEqualTo("short string");
+ String two_byte_str = String.format("short string %s", new String(Character.toChars(956)));
+ assertThat(ChangeField.truncateStringValue(two_byte_str, 20)).isEqualTo(two_byte_str);
+ String three_byte_str = String.format("short string %s", new String(Character.toChars(43421)));
+ assertThat(ChangeField.truncateStringValue(three_byte_str, 20)).isEqualTo(three_byte_str);
+ String four_byte_str = String.format("short string %s", new String(Character.toChars(132878)));
+ assertThat(ChangeField.truncateStringValue(four_byte_str, 20)).isEqualTo(four_byte_str);
+ assertThat(ChangeField.truncateStringValue("", 6)).isEqualTo("");
+ assertThat(ChangeField.truncateStringValue("", 0)).isEqualTo("");
+ }
+
+ @Test
+ public void longStringIsTruncated() {
+ assertThat(ChangeField.truncateStringValue("longer string", 6)).isEqualTo("longer");
+ assertThat(ChangeField.truncateStringValue("longer string", 0)).isEqualTo("");
+
+ String two_byte_str =
+ String.format(
+ "multibytechars %1$s%1$s%1$s%1$s present", new String(Character.toChars(956)));
+ assertThat(ChangeField.truncateStringValue(two_byte_str, 16)).isEqualTo("multibytechars ");
+ assertThat(ChangeField.truncateStringValue(two_byte_str, 17))
+ .isEqualTo(String.format("multibytechars %1$s", new String(Character.toChars(956))));
+ assertThat(ChangeField.truncateStringValue(two_byte_str, 18))
+ .isEqualTo(String.format("multibytechars %1$s", new String(Character.toChars(956))));
+
+ String three_byte_str =
+ String.format(
+ "multibytechars %1$s%1$s%1$s%1$s present", new String(Character.toChars(43421)));
+ assertThat(ChangeField.truncateStringValue(three_byte_str, 16)).isEqualTo("multibytechars ");
+ assertThat(ChangeField.truncateStringValue(three_byte_str, 17)).isEqualTo("multibytechars ");
+ assertThat(ChangeField.truncateStringValue(three_byte_str, 18))
+ .isEqualTo(String.format("multibytechars %1$s", new String(Character.toChars(43421))));
+ assertThat(ChangeField.truncateStringValue(three_byte_str, 21))
+ .isEqualTo(String.format("multibytechars %1$s%1$s", new String(Character.toChars(43421))));
+
+ String four_byte_str =
+ String.format(
+ "multibytechars %1$s%1$s%1$s%1$s present", new String(Character.toChars(132878)));
+ assertThat(ChangeField.truncateStringValue(four_byte_str, 16)).isEqualTo("multibytechars ");
+ assertThat(ChangeField.truncateStringValue(four_byte_str, 17)).isEqualTo("multibytechars ");
+ assertThat(ChangeField.truncateStringValue(four_byte_str, 18)).isEqualTo("multibytechars ");
+ assertThat(ChangeField.truncateStringValue(four_byte_str, 19))
+ .isEqualTo(String.format("multibytechars %1$s", new String(Character.toChars(132878))));
+ assertThat(ChangeField.truncateStringValue(four_byte_str, 23))
+ .isEqualTo(String.format("multibytechars %1$s%1$s", new String(Character.toChars(132878))));
+ }
+
private static SubmitRecord record(SubmitRecord.Status status, SubmitRecord.Label... labels) {
SubmitRecord r = new SubmitRecord();
r.status = status;
@@ -156,6 +226,25 @@ public class ChangeFieldTest {
return r;
}
+ private SubmitRequirementResult submitRequirementResult(
+ String srName, String submitExpr, SubmitRequirementExpressionResult.Status submitExprStatus) {
+ return SubmitRequirementResult.builder()
+ .submitRequirement(
+ SubmitRequirement.builder()
+ .setName(srName)
+ .setSubmittabilityExpression(SubmitRequirementExpression.create("NA"))
+ .setAllowOverrideInChildProjects(false)
+ .build())
+ .submittabilityExpressionResult(
+ SubmitRequirementExpressionResult.create(
+ SubmitRequirementExpression.create(submitExpr),
+ submitExprStatus,
+ ImmutableList.of(submitExpr),
+ ImmutableList.of()))
+ .patchSetCommitId(ObjectId.zeroId())
+ .build();
+ }
+
private static SubmitRecord.Label label(
SubmitRecord.Label.Status status, String label, Integer appliedBy) {
SubmitRecord.Label l = new SubmitRecord.Label();