asolimando commented on a change in pull request #2488:
URL: https://github.com/apache/calcite/pull/2488#discussion_r690572665



##########
File path: linq4j/src/test/java/org/apache/calcite/linq4j/tree/TypeTest.java
##########
@@ -62,4 +83,236 @@
     assertEquals(Object.class, Types.gcd(String.class, int.class));
     java.io.Serializable o = true ? "x" : 1;
   }
+
+  private static void assertFields(List<Field> expected, List<Field> computed) 
{
+    assertEquals(expected, computed, "Expected field(s) ["
+        + expected + "] but found [" + computed + "]");
+  }
+
+  @Test void testExcludedStaticFieldsAndViaAnnotation() throws 
NoSuchFieldException {
+    List<Field> fieldNames = 
Collections.singletonList(A.class.getField("strField"));
+
+    assertFields(fieldNames, Types.getClassFields(A.class));
+  }
+
+  @Test void testAlphabeticalAndHierarchicalOrder() throws 
NoSuchFieldException {
+    List<Field> fieldNames = Arrays.asList(AB.class.getField("aField"),
+        A.class.getField("strField"),
+        AB.class.getField("zField"));
+
+    assertFields(
+        fieldNames, Types.getClassFields(AB.class, true,
+        Types.FieldsOrdering.ALPHABETICAL, null));
+  }
+
+  @Test void testOrderViaFieldNamesAndClassHierarchy() throws 
NoSuchFieldException {
+    List<Field> fieldNames = Arrays.asList(A.class.getField("strField"),
+        AB.class.getField("aField"),
+        AB.class.getField("zField"));
+
+    assertFields(
+        fieldNames, Types.getClassFields(AB.class, true,
+        Types.FieldsOrdering.ALPHABETICAL_AND_HIERARCHY, null));
+  }
+
+  @Test void testNoHierarchyConstructorAlphabetical() throws 
NoSuchFieldException {
+    List<Field> fieldNames = Arrays.asList(AB.class.getField("aField"),
+        AB.class.getField("zField"));
+
+    assertFields(
+        fieldNames, Types.getClassFields(AB.class, false,
+        Types.FieldsOrdering.CONSTRUCTOR, null));
+  }
+
+  @TestIfParameterNames(clazz = AC.class)
+  void testNoHierarchyConstructorInDeclarationOrder() throws 
NoSuchFieldException {
+    List<Field> fieldNames = Arrays.asList(AC.class.getField("zField"),
+        AC.class.getField("aField"));
+
+    assertFields(
+        fieldNames, Types.getClassFields(AC.class, false,
+        Types.FieldsOrdering.CONSTRUCTOR, null));
+  }
+
+
+  @TestIfParameterNames(clazz = AB.class)
+  void testHierarchyConstructorAlphabetical() throws NoSuchFieldException {
+    List<Field> fieldNames = Arrays.asList(AB.class.getField("aField"),
+        AB.class.getField("zField"),
+        A.class.getField("strField"));
+
+    assertFields(
+        fieldNames, Types.getClassFields(AB.class, true,
+        Types.FieldsOrdering.CONSTRUCTOR, null));
+  }
+
+  @TestIfParameterNames(clazz = AC.class)
+  void testHierarchyConstructorInDeclarationOrder() throws 
NoSuchFieldException {
+    List<Field> fieldNames = Arrays.asList(A.class.getField("strField"),
+        AC.class.getField("zField"),
+        AC.class.getField("aField"));
+
+    assertFields(
+        fieldNames, Types.getClassFields(AC.class, true,
+            Types.FieldsOrdering.CONSTRUCTOR, null));
+  }
+
+  @TestIfParameterNames(clazz = AD.class)
+  void testIncompleteConstructors() throws NoSuchFieldException {
+    List<Field> fieldNames = Arrays.asList(A.class.getField("strField"),
+        AD.class.getField("zField"),
+        AD.class.getField("aField"));
+
+    assertFields(
+        fieldNames, Types.getClassFields(AD.class, true,
+            Types.FieldsOrdering.CONSTRUCTOR, null));
+  }
+
+  @Test void testExplicitFieldNames() throws NoSuchFieldException {
+    Map<Class, List<Field>> classFieldsMap = new HashMap<>();
+    List<Field> fieldNames = Arrays.asList(AC.class.getField("zField"),
+        A.class.getField("strField"),
+        AC.class.getField("aField"));
+    classFieldsMap.put(AC.class, fieldNames);
+
+    assertFields(
+        fieldNames, Types.getClassFields(AC.class, true,
+            Types.FieldsOrdering.EXPLICIT, classFieldsMap));
+  }
+
+  @Test void testExplicitFieldNamesIncompleteKO() throws NoSuchFieldException {
+    Map<Class, List<Field>> classFieldsMap = new HashMap<>();
+    List<Field> fieldNames = Arrays.asList(AC.class.getField("zField"),
+        A.class.getField("strField"));
+    classFieldsMap.put(AC.class, fieldNames);
+
+    Types.FieldsOrdering explicitFieldsOrdering = 
Types.FieldsOrdering.EXPLICIT;
+
+    IllegalArgumentException thrown = assertThrows(
+        IllegalArgumentException.class,
+        () -> Types.getClassFields(AC.class, true, explicitFieldsOrdering, 
classFieldsMap),
+        "Expected 'Types.getClassFields' to throw on incomplete field list"
+    );
+
+    String expectedErrorPrefix = "Incomplete list of fields is not compatible 
with \""
+        + explicitFieldsOrdering + "\"";
+    assertTrue(thrown.getMessage().contains(expectedErrorPrefix));

Review comment:
       Thanks Vladimir, I have improved the error message above and opted for 
option (a) for the latest assertion




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to