/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you 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 org.apache.flink.api.java.typeutils; import static org.junit.Assert.*; import org.apache.flink.api.common.typeinfo.BasicTypeInfo; import org.apache.flink.api.java.tuple.Tuple2; import org.apache.flink.api.java.tuple.Tuple3; import org.apache.flink.api.java.tuple.Tuple4; import org.junit.Test; public class CompositeTypeTest { private final TupleTypeInfo<?> tupleTypeInfo = new TupleTypeInfo<Tuple4<Integer, Integer, Integer, Integer>>( BasicTypeInfo.INT_TYPE_INFO, BasicTypeInfo.INT_TYPE_INFO, BasicTypeInfo.INT_TYPE_INFO, BasicTypeInfo.INT_TYPE_INFO); private final TupleTypeInfo<Tuple3<Integer, String, Long>> inNestedTuple1 = new TupleTypeInfo<Tuple3<Integer, String, Long>>( BasicTypeInfo.INT_TYPE_INFO, BasicTypeInfo.STRING_TYPE_INFO, BasicTypeInfo.LONG_TYPE_INFO); private final TupleTypeInfo<Tuple2<Double, Double>> inNestedTuple2 = new TupleTypeInfo<Tuple2<Double, Double>>( BasicTypeInfo.DOUBLE_TYPE_INFO, BasicTypeInfo.DOUBLE_TYPE_INFO); private final TupleTypeInfo<?> nestedTypeInfo = new TupleTypeInfo<Tuple4<Integer, Tuple3<Integer, String, Long>, Integer, Tuple2<Double, Double>>>( BasicTypeInfo.INT_TYPE_INFO, inNestedTuple1, BasicTypeInfo.INT_TYPE_INFO, inNestedTuple2); private final TupleTypeInfo<Tuple2<Integer, Tuple2<Integer, Integer>>> inNestedTuple3 = new TupleTypeInfo<Tuple2<Integer, Tuple2<Integer, Integer>>>( BasicTypeInfo.INT_TYPE_INFO, new TupleTypeInfo<Tuple2<Integer, Integer>>(BasicTypeInfo.INT_TYPE_INFO, BasicTypeInfo.INT_TYPE_INFO)); private final TupleTypeInfo<?> deepNestedTupleTypeInfo = new TupleTypeInfo<Tuple3<Integer, Tuple2<Integer, Tuple2<Integer, Integer>>, Integer>>( BasicTypeInfo.INT_TYPE_INFO, inNestedTuple3, BasicTypeInfo.INT_TYPE_INFO ); private final PojoTypeInfo<?> pojoTypeInfo = ((PojoTypeInfo<?>) TypeExtractor.getForClass (MyPojo.class)); private final TupleTypeInfo<?> pojoInTupleTypeInfo = new TupleTypeInfo<Tuple2<Integer, MyPojo>>(BasicTypeInfo.INT_TYPE_INFO, pojoTypeInfo); @Test public void testGetFlatFields() { assertEquals(0, tupleTypeInfo.getFlatFields("0").get(0).getPosition()); assertEquals(1, tupleTypeInfo.getFlatFields("1").get(0).getPosition()); assertEquals(2, tupleTypeInfo.getFlatFields("2").get(0).getPosition()); assertEquals(3, tupleTypeInfo.getFlatFields("3").get(0).getPosition()); assertEquals(0, tupleTypeInfo.getFlatFields("f0").get(0).getPosition()); assertEquals(1, tupleTypeInfo.getFlatFields("f1").get(0).getPosition()); assertEquals(2, tupleTypeInfo.getFlatFields("f2").get(0).getPosition()); assertEquals(3, tupleTypeInfo.getFlatFields("f3").get(0).getPosition()); assertEquals(0, nestedTypeInfo.getFlatFields("0").get(0).getPosition()); assertEquals(1, nestedTypeInfo.getFlatFields("1.0").get(0).getPosition()); assertEquals(2, nestedTypeInfo.getFlatFields("1.1").get(0).getPosition()); assertEquals(3, nestedTypeInfo.getFlatFields("1.2").get(0).getPosition()); assertEquals(4, nestedTypeInfo.getFlatFields("2").get(0).getPosition()); assertEquals(5, nestedTypeInfo.getFlatFields("3.0").get(0).getPosition()); assertEquals(6, nestedTypeInfo.getFlatFields("3.1").get(0).getPosition()); assertEquals(4, nestedTypeInfo.getFlatFields("f2").get(0).getPosition()); assertEquals(5, nestedTypeInfo.getFlatFields("f3.f0").get(0).getPosition()); assertEquals(3, nestedTypeInfo.getFlatFields("1").size()); assertEquals(1, nestedTypeInfo.getFlatFields("1").get(0).getPosition()); assertEquals(2, nestedTypeInfo.getFlatFields("1").get(1).getPosition()); assertEquals(3, nestedTypeInfo.getFlatFields("1").get(2).getPosition()); assertEquals(3, nestedTypeInfo.getFlatFields("1.*").size()); assertEquals(1, nestedTypeInfo.getFlatFields("1.*").get(0).getPosition()); assertEquals(2, nestedTypeInfo.getFlatFields("1.*").get(1).getPosition()); assertEquals(3, nestedTypeInfo.getFlatFields("1.*").get(2).getPosition()); assertEquals(2, nestedTypeInfo.getFlatFields("3").size()); assertEquals(5, nestedTypeInfo.getFlatFields("3").get(0).getPosition()); assertEquals(6, nestedTypeInfo.getFlatFields("3").get(1).getPosition()); assertEquals(3, nestedTypeInfo.getFlatFields("f1").size()); assertEquals(1, nestedTypeInfo.getFlatFields("f1").get(0).getPosition()); assertEquals(2, nestedTypeInfo.getFlatFields("f1").get(1).getPosition()); assertEquals(3, nestedTypeInfo.getFlatFields("f1").get(2).getPosition()); assertEquals(2, nestedTypeInfo.getFlatFields("f3").size()); assertEquals(5, nestedTypeInfo.getFlatFields("f3").get(0).getPosition()); assertEquals(6, nestedTypeInfo.getFlatFields("f3").get(1).getPosition()); assertEquals(BasicTypeInfo.INT_TYPE_INFO, nestedTypeInfo.getFlatFields("0").get(0).getType()); assertEquals(BasicTypeInfo.STRING_TYPE_INFO, nestedTypeInfo.getFlatFields("1.1").get(0).getType()); assertEquals(BasicTypeInfo.LONG_TYPE_INFO, nestedTypeInfo.getFlatFields("1").get(2).getType()); assertEquals(BasicTypeInfo.DOUBLE_TYPE_INFO, nestedTypeInfo.getFlatFields("3").get(1).getType()); assertEquals(3, deepNestedTupleTypeInfo.getFlatFields("1").size()); assertEquals(1, deepNestedTupleTypeInfo.getFlatFields("1").get(0).getPosition()); assertEquals(2, deepNestedTupleTypeInfo.getFlatFields("1").get(1).getPosition()); assertEquals(3, deepNestedTupleTypeInfo.getFlatFields("1").get(2).getPosition()); assertEquals(5, deepNestedTupleTypeInfo.getFlatFields("*").size()); assertEquals(0, deepNestedTupleTypeInfo.getFlatFields("*").get(0).getPosition()); assertEquals(1, deepNestedTupleTypeInfo.getFlatFields("*").get(1).getPosition()); assertEquals(2, deepNestedTupleTypeInfo.getFlatFields("*").get(2).getPosition()); assertEquals(3, deepNestedTupleTypeInfo.getFlatFields("*").get(3).getPosition()); assertEquals(4, deepNestedTupleTypeInfo.getFlatFields("*").get(4).getPosition()); assertEquals(0, pojoTypeInfo.getFlatFields("a").get(0).getPosition()); assertEquals(1, pojoTypeInfo.getFlatFields("b").get(0).getPosition()); assertEquals(2, pojoTypeInfo.getFlatFields("*").size()); assertEquals(0, pojoTypeInfo.getFlatFields("*").get(0).getPosition()); assertEquals(1, pojoTypeInfo.getFlatFields("*").get(1).getPosition()); assertEquals(1, pojoInTupleTypeInfo.getFlatFields("f1.a").get(0).getPosition()); assertEquals(2, pojoInTupleTypeInfo.getFlatFields("1.b").get(0).getPosition()); assertEquals(2, pojoInTupleTypeInfo.getFlatFields("1").size()); assertEquals(1, pojoInTupleTypeInfo.getFlatFields("1.*").get(0).getPosition()); assertEquals(2, pojoInTupleTypeInfo.getFlatFields("1").get(1).getPosition()); assertEquals(2, pojoInTupleTypeInfo.getFlatFields("f1.*").size()); assertEquals(1, pojoInTupleTypeInfo.getFlatFields("f1.*").get(0).getPosition()); assertEquals(2, pojoInTupleTypeInfo.getFlatFields("f1").get(1).getPosition()); assertEquals(3, pojoInTupleTypeInfo.getFlatFields("*").size()); assertEquals(0, pojoInTupleTypeInfo.getFlatFields("*").get(0).getPosition()); assertEquals(1, pojoInTupleTypeInfo.getFlatFields("*").get(1).getPosition()); assertEquals(2, pojoInTupleTypeInfo.getFlatFields("*").get(2).getPosition()); } @Test public void testFieldAtStringRef() { assertEquals(BasicTypeInfo.INT_TYPE_INFO, tupleTypeInfo.getTypeAt("0")); assertEquals(BasicTypeInfo.INT_TYPE_INFO, tupleTypeInfo.getTypeAt("2")); assertEquals(BasicTypeInfo.INT_TYPE_INFO, tupleTypeInfo.getTypeAt("f1")); assertEquals(BasicTypeInfo.INT_TYPE_INFO, tupleTypeInfo.getTypeAt("f3")); assertEquals(BasicTypeInfo.INT_TYPE_INFO, nestedTypeInfo.getTypeAt("0")); assertEquals(BasicTypeInfo.INT_TYPE_INFO, nestedTypeInfo.getTypeAt("1.0")); assertEquals(BasicTypeInfo.STRING_TYPE_INFO, nestedTypeInfo.getTypeAt("1.1")); assertEquals(BasicTypeInfo.LONG_TYPE_INFO, nestedTypeInfo.getTypeAt("1.2")); assertEquals(BasicTypeInfo.INT_TYPE_INFO, nestedTypeInfo.getTypeAt("2")); assertEquals(BasicTypeInfo.DOUBLE_TYPE_INFO, nestedTypeInfo.getTypeAt("3.0")); assertEquals(BasicTypeInfo.DOUBLE_TYPE_INFO, nestedTypeInfo.getTypeAt("3.1")); assertEquals(BasicTypeInfo.INT_TYPE_INFO, nestedTypeInfo.getTypeAt("f2")); assertEquals(BasicTypeInfo.DOUBLE_TYPE_INFO, nestedTypeInfo.getTypeAt("f3.f0")); assertEquals(inNestedTuple1, nestedTypeInfo.getTypeAt("1")); assertEquals(inNestedTuple2, nestedTypeInfo.getTypeAt("3")); assertEquals(inNestedTuple1, nestedTypeInfo.getTypeAt("f1")); assertEquals(inNestedTuple2, nestedTypeInfo.getTypeAt("f3")); assertEquals(inNestedTuple3, deepNestedTupleTypeInfo.getTypeAt("1")); assertEquals(BasicTypeInfo.STRING_TYPE_INFO, pojoTypeInfo.getTypeAt("a")); assertEquals(BasicTypeInfo.INT_TYPE_INFO, pojoTypeInfo.getTypeAt("b")); assertEquals(BasicTypeInfo.STRING_TYPE_INFO, pojoInTupleTypeInfo.getTypeAt("f1.a")); assertEquals(BasicTypeInfo.INT_TYPE_INFO, pojoInTupleTypeInfo.getTypeAt("1.b")); assertEquals(pojoTypeInfo, pojoInTupleTypeInfo.getTypeAt("1")); assertEquals(pojoTypeInfo, pojoInTupleTypeInfo.getTypeAt("f1")); } public static class MyPojo { public String a; public int b; } }