LCOV - code coverage report
Current view: top level - index/testing - TestIndexedFields.java (source / functions) Hit Total Coverage
Test: _coverage_report.dat Lines: 82 86 95.3 %
Date: 2022-11-19 15:00:39 Functions: 10 13 76.9 %

          Line data    Source code
       1             : // Copyright (C) 2022 The Android Open Source Project
       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             : 
      15             : package com.google.gerrit.index.testing;
      16             : 
      17             : import com.google.common.reflect.TypeToken;
      18             : import com.google.gerrit.entities.converter.ChangeProtoConverter;
      19             : import com.google.gerrit.index.IndexedField;
      20             : import com.google.gerrit.index.SchemaFieldDefs.Getter;
      21             : import com.google.gerrit.index.SchemaFieldDefs.Setter;
      22             : import com.google.gerrit.proto.Entities;
      23             : import com.google.gerrit.proto.Entities.Change;
      24             : import com.google.gerrit.proto.Entities.Change_Id;
      25             : import java.io.IOException;
      26             : import java.sql.Timestamp;
      27             : 
      28             : /**
      29             :  * Collection of {@link IndexedField}, used in unit tests.
      30             :  *
      31             :  * <p>The list of {@link IndexedField} below are field types, that are currently supported and used
      32             :  * in different index implementations
      33             :  *
      34             :  * <p>They are used in unit tests to make sure these types can be extracted to index and assigned
      35             :  * back to object.
      36             :  */
      37             : public final class TestIndexedFields {
      38             : 
      39             :   /** Test input object for {@link IndexedField} */
      40           1 :   public static class TestIndexedData {
      41             : 
      42             :     /** Key that is used to index to identify indexed object */
      43             :     private Object key;
      44             : 
      45             :     /** Field value that is extracted from this indexed object to the index document. */
      46             :     private Object testFieldValue;
      47             : 
      48             :     public Object getTestField() {
      49           1 :       return testFieldValue;
      50             :     }
      51             : 
      52             :     public void setTestFieldValue(Object testFieldValue) {
      53           1 :       this.testFieldValue = testFieldValue;
      54           1 :     }
      55             : 
      56             :     public Object getKey() {
      57           0 :       return key;
      58             :     }
      59             : 
      60             :     public void setKey(Object key) {
      61           0 :       this.key = key;
      62           0 :     }
      63             :   }
      64             : 
      65             :   /** Setter for {@link TestIndexedData} */
      66             :   private static class TestIndexedDataSetter<T> implements Setter<TestIndexedData, T> {
      67             :     @Override
      68             :     public void set(TestIndexedData testIndexedData, T value) {
      69           1 :       testIndexedData.setTestFieldValue(value);
      70           1 :     }
      71             :   }
      72             : 
      73             :   /** Getter for {@link TestIndexedData} */
      74             :   @SuppressWarnings("unchecked")
      75             :   private static class TestIndexedDataGetter<T> implements Getter<TestIndexedData, T> {
      76             :     @Override
      77             :     public T get(TestIndexedData input) throws IOException {
      78           0 :       return (T) input.getTestField();
      79             :     }
      80             :   }
      81             : 
      82             :   public static <T> TestIndexedDataSetter<T> setter() {
      83           1 :     return new TestIndexedDataSetter<>();
      84             :   }
      85             : 
      86             :   public static <T> TestIndexedDataGetter<T> getter() {
      87           1 :     return new TestIndexedDataGetter<>();
      88             :   }
      89             : 
      90           1 :   public static final IndexedField<TestIndexedData, Integer> INTEGER_FIELD =
      91           1 :       IndexedField.<TestIndexedData>integerBuilder("IntegerTestField").build(getter(), setter());
      92             : 
      93           1 :   public static final IndexedField<TestIndexedData, Integer>.SearchSpec INTEGER_FIELD_SPEC =
      94           1 :       INTEGER_FIELD.integer("integer_test");
      95             : 
      96           1 :   public static final IndexedField<TestIndexedData, Iterable<Integer>> ITERABLE_INTEGER_FIELD =
      97           1 :       IndexedField.<TestIndexedData>iterableIntegerBuilder("IterableIntegerTestField")
      98           1 :           .build(getter(), setter());
      99             : 
     100             :   public static final IndexedField<TestIndexedData, Iterable<Integer>>.SearchSpec
     101           1 :       ITERABLE_INTEGER_FIELD_SPEC = ITERABLE_INTEGER_FIELD.integer("iterable_integer_test");
     102             : 
     103           1 :   public static final IndexedField<TestIndexedData, Integer> INTEGER_RANGE_FIELD =
     104           1 :       IndexedField.<TestIndexedData>integerBuilder("IntegerRangeTestField")
     105           1 :           .build(TestIndexedFields.getter(), TestIndexedFields.setter());
     106           1 :   public static final IndexedField<TestIndexedData, Integer>.SearchSpec INTEGER_RANGE_FIELD_SPEC =
     107           1 :       INTEGER_RANGE_FIELD.range("integer_range_test");
     108             : 
     109             :   public static final IndexedField<TestIndexedData, Iterable<Integer>>
     110           1 :       ITERABLE_INTEGER_RANGE_FIELD =
     111           1 :           IndexedField.<TestIndexedData>iterableIntegerBuilder("IterableIntegerRangeTestField")
     112           1 :               .build(TestIndexedFields.getter(), TestIndexedFields.setter());
     113             : 
     114             :   public static final IndexedField<TestIndexedData, Iterable<Integer>>.SearchSpec
     115           1 :       ITERABLE_INTEGER_RANGE_FIELD_SPEC =
     116           1 :           ITERABLE_INTEGER_RANGE_FIELD.range("iterable_integer_range_test");
     117             : 
     118           1 :   public static final IndexedField<TestIndexedData, Long> LONG_FIELD =
     119           1 :       IndexedField.<TestIndexedData>longBuilder("LongTestField").build(getter(), setter());
     120             : 
     121           1 :   public static final IndexedField<TestIndexedData, Long>.SearchSpec LONG_FIELD_SPEC =
     122           1 :       LONG_FIELD.longSearch("long_test");
     123             : 
     124           1 :   public static final IndexedField<TestIndexedData, Iterable<Long>> ITERABLE_LONG_FIELD =
     125           1 :       IndexedField.<TestIndexedData, Iterable<Long>>builder(
     126             :               "IterableLongTestField", IndexedField.ITERABLE_LONG_TYPE)
     127           1 :           .build(TestIndexedFields.getter(), TestIndexedFields.setter());
     128             : 
     129             :   public static final IndexedField<TestIndexedData, Iterable<Long>>.SearchSpec
     130           1 :       ITERABLE_LONG_FIELD_SPEC = ITERABLE_LONG_FIELD.longSearch("iterable_long_test");
     131             : 
     132           1 :   public static final IndexedField<TestIndexedData, Long> LONG_RANGE_FIELD =
     133           1 :       IndexedField.<TestIndexedData>longBuilder("LongRangeTestField")
     134           1 :           .build(TestIndexedFields.getter(), TestIndexedFields.setter());
     135             : 
     136           1 :   public static final IndexedField<TestIndexedData, Long>.SearchSpec LONG_RANGE_FIELD_SPEC =
     137           1 :       LONG_RANGE_FIELD.range("long_range_test");
     138             : 
     139           1 :   public static final IndexedField<TestIndexedData, Iterable<Long>> ITERABLE_LONG_RANGE_FIELD =
     140           1 :       IndexedField.<TestIndexedData, Iterable<Long>>builder(
     141             :               "IterableLongRangeTestField", IndexedField.ITERABLE_LONG_TYPE)
     142           1 :           .build(TestIndexedFields.getter(), TestIndexedFields.setter());
     143             : 
     144             :   public static final IndexedField<TestIndexedData, Iterable<Long>>.SearchSpec
     145           1 :       ITERABLE_LONG_RANGE_FIELD_SPEC = ITERABLE_LONG_RANGE_FIELD.range("iterable_long_range_test");
     146             : 
     147           1 :   public static final IndexedField<TestIndexedData, Timestamp> TIMESTAMP_FIELD =
     148           1 :       IndexedField.<TestIndexedData>timestampBuilder("TimestampTestField")
     149           1 :           .build(getter(), setter());
     150             : 
     151           1 :   public static final IndexedField<TestIndexedData, Timestamp>.SearchSpec TIMESTAMP_FIELD_SPEC =
     152           1 :       TIMESTAMP_FIELD.timestamp("timestamp_test");
     153             : 
     154           1 :   public static final IndexedField<TestIndexedData, Iterable<String>> ITERABLE_STRING_FIELD =
     155           1 :       IndexedField.<TestIndexedData>iterableStringBuilder("IterableStringTestField")
     156           1 :           .build(getter(), setter());
     157             : 
     158             :   public static final IndexedField<TestIndexedData, Iterable<String>>.SearchSpec
     159           1 :       ITERABLE_STRING_FIELD_SPEC = ITERABLE_STRING_FIELD.fullText("iterable_test_string");
     160             : 
     161           1 :   public static final IndexedField<TestIndexedData, String> STRING_FIELD =
     162           1 :       IndexedField.<TestIndexedData>stringBuilder("StringTestField").build(getter(), setter());
     163             : 
     164           1 :   public static final IndexedField<TestIndexedData, String>.SearchSpec STRING_FIELD_SPEC =
     165           1 :       STRING_FIELD.fullText("string_test");
     166             : 
     167           1 :   public static final IndexedField<TestIndexedData, Iterable<byte[]>> ITERABLE_STORED_BYTE_FIELD =
     168           1 :       IndexedField.<TestIndexedData>iterableByteArrayBuilder("IterableByteTestField")
     169           1 :           .stored()
     170           1 :           .build(getter(), setter());
     171             : 
     172             :   public static final IndexedField<TestIndexedData, Iterable<byte[]>>.SearchSpec
     173           1 :       ITERABLE_STORED_BYTE_SPEC = ITERABLE_STORED_BYTE_FIELD.storedOnly("iterable_byte_test");
     174             : 
     175           1 :   public static final IndexedField<TestIndexedData, byte[]> STORED_BYTE_FIELD =
     176           1 :       IndexedField.<TestIndexedData>byteArrayBuilder("ByteTestField")
     177           1 :           .stored()
     178           1 :           .build(getter(), setter());
     179             : 
     180           1 :   public static final IndexedField<TestIndexedData, byte[]>.SearchSpec STORED_BYTE_SPEC =
     181           1 :       STORED_BYTE_FIELD.storedOnly("byte_test");
     182             : 
     183           1 :   public static final IndexedField<TestIndexedData, Entities.Change> STORED_PROTO_FIELD =
     184           1 :       IndexedField.<TestIndexedData, Entities.Change>builder(
     185             :               "TestChange",
     186           1 :               new TypeToken<Entities.Change>() {
     187             :                 private static final long serialVersionUID = 1L;
     188             :               })
     189           1 :           .stored()
     190           1 :           .build(getter(), setter(), ChangeProtoConverter.INSTANCE);
     191             : 
     192             :   public static final IndexedField<TestIndexedData, Entities.Change>.SearchSpec
     193           1 :       STORED_PROTO_FIELD_SPEC = STORED_PROTO_FIELD.storedOnly("test_change");
     194             : 
     195             :   public static final IndexedField<TestIndexedData, Iterable<Entities.Change>>
     196           1 :       ITERABLE_STORED_PROTO_FIELD =
     197           1 :           IndexedField.<TestIndexedData, Iterable<Entities.Change>>builder(
     198             :                   "IterableTestChange",
     199           1 :                   new TypeToken<Iterable<Entities.Change>>() {
     200             :                     private static final long serialVersionUID = 1L;
     201             :                   })
     202           1 :               .stored()
     203           1 :               .build(getter(), setter(), ChangeProtoConverter.INSTANCE);
     204             : 
     205             :   public static final IndexedField<TestIndexedData, Iterable<Entities.Change>>.SearchSpec
     206           1 :       ITERABLE_PROTO_FIELD_SPEC = ITERABLE_STORED_PROTO_FIELD.storedOnly("iterable_test_change");
     207             : 
     208             :   public static Change createChangeProto(int id) {
     209           1 :     return Entities.Change.newBuilder()
     210           1 :         .setChangeId(Change_Id.newBuilder().setId(id).build())
     211           1 :         .build();
     212             :   }
     213             : 
     214             :   private TestIndexedFields() {}
     215             : }

Generated by: LCOV version 1.16+git.20220603.dfeb750