@Override public String toString() { StringBuilder b = new StringBuilder(); toString(b); return b.toString(); }
void toString(StringBuilder b) { if (code == Code.ARRAY) { b.append("ARRAY<"); arrayElementType.toString(b); b.append('>'); } else if (code == Code.STRUCT) { b.append("STRUCT<"); for (int i = 0; i < structFields.size(); ++i) { if (i > 0) { b.append(", "); } StructField f = structFields.get(i); b.append(f.getName()).append(' '); f.getType().toString(b); } b.append('>'); } else { b.append(code.toString()); } }
@Test public void emptyStruct() { Type t = Type.struct(); assertThat(t.getCode()).isEqualTo(Type.Code.STRUCT); assertThat(t.getStructFields()).isEmpty(); assertThat(t.toString()).isEqualTo("STRUCT<>"); assertProtoEquals(t.toProto(), "code: STRUCT struct_type {}"); }
void test() { Type t = newType(); assertThat(t.getCode()).isEqualTo(expectedCode); assertThat(newType()).isSameAs(t); // Interned. // String form is deliberately the same as the corresponding type enum in the public API. assertThat(t.toString()).isEqualTo(expectedProtoCode.toString()); com.google.spanner.v1.Type proto = t.toProto(); assertThat(proto.getCode()).isEqualTo(expectedProtoCode); assertThat(proto.hasArrayElementType()).isFalse(); assertThat(proto.hasStructType()).isFalse(); // Round trip. Type fromProto = Type.fromProto(proto); assertThat(fromProto).isEqualTo(t); assertThat(fromProto).isSameAs(t); reserializeAndAssert(t); } }
void test() { Type elementType = newElementType(); Type t = Type.array(elementType); assertThat(t.getCode()).isEqualTo(Type.Code.ARRAY); assertThat(t.getArrayElementType()).isEqualTo(elementType); if (expectInterned) { assertThat(Type.array(newElementType())).isSameAs(t); } assertThat(t.toString()).isEqualTo("ARRAY<" + elementType.toString() + ">"); com.google.spanner.v1.Type proto = t.toProto(); assertThat(proto.getCode()).isEqualTo(TypeCode.ARRAY); assertThat(proto.getArrayElementType()).isEqualTo(elementType.toProto()); assertThat(proto.hasStructType()).isFalse(); Type fromProto = Type.fromProto(proto); assertThat(fromProto).isEqualTo(t); if (expectInterned) { assertThat(fromProto).isSameAs(t); } reserializeAndAssert(t); } }
@Test public void struct() { Type t = Type.struct(StructField.of("f1", Type.int64()), StructField.of("f2", Type.string())); assertThat(t.getCode()).isEqualTo(Type.Code.STRUCT); // Exercise StructField equality. assertThat(t.getStructFields()) .containsExactly(StructField.of("f1", Type.int64()), StructField.of("f2", Type.string())) .inOrder(); // Exercise StructField getters. assertThat(t.getStructFields().get(0).getName()).isEqualTo("f1"); assertThat(t.getStructFields().get(0).getType()).isEqualTo(Type.int64()); assertThat(t.getStructFields().get(1).getName()).isEqualTo("f2"); assertThat(t.getStructFields().get(1).getType()).isEqualTo(Type.string()); assertThat(t.toString()).isEqualTo("STRUCT<f1 INT64, f2 STRING>"); assertThat(t.getFieldIndex("f1")).isEqualTo(0); assertThat(t.getFieldIndex("f2")).isEqualTo(1); assertProtoEquals( t.toProto(), "code: STRUCT struct_type { fields { name: 'f1' type { code: INT64 } }" + " fields { name: 'f2' type { code: STRING } } }"); }
@Override public String toString() { StringBuilder b = new StringBuilder(); toString(b); return b.toString(); }
void toString(StringBuilder b) { if (code == Code.ARRAY) { b.append("ARRAY<"); arrayElementType.toString(b); b.append('>'); } else if (code == Code.STRUCT) { b.append("STRUCT<"); for (int i = 0; i < structFields.size(); ++i) { if (i > 0) { b.append(", "); } StructField f = structFields.get(i); b.append(f.getName()).append(' '); f.getType().toString(b); } b.append('>'); } else { b.append(code.toString()); } }