You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flink.apache.org by gr...@apache.org on 2017/05/09 18:47:53 UTC

[2/3] flink git commit: [FLINK-6157] [core] Make TypeInformation fully serializable

[FLINK-6157] [core] Make TypeInformation fully serializable

This closes #3619.


Project: http://git-wip-us.apache.org/repos/asf/flink/repo
Commit: http://git-wip-us.apache.org/repos/asf/flink/commit/6cf4a93e
Tree: http://git-wip-us.apache.org/repos/asf/flink/tree/6cf4a93e
Diff: http://git-wip-us.apache.org/repos/asf/flink/diff/6cf4a93e

Branch: refs/heads/master
Commit: 6cf4a93ebbf36f6c1dd4cc2c9b17dd58880c17c2
Parents: c90b6da
Author: twalthr <tw...@apache.org>
Authored: Mon Mar 27 10:33:58 2017 +0200
Committer: Greg Hogan <co...@greghogan.com>
Committed: Tue May 9 13:12:05 2017 -0400

----------------------------------------------------------------------
 flink-connectors/flink-avro/pom.xml             |  15 +-
 .../api/java/typeutils/AvroTypeInfoTest.java    |  37 +++++
 .../flink-hadoop-compatibility/pom.xml          |  13 ++
 .../java/typeutils/WritableTypeInfoTest.java    |  37 ++---
 .../common/typeinfo/BasicArrayTypeInfoTest.java |  42 +++++
 .../api/common/typeinfo/BasicTypeInfoTest.java  |  46 ++++++
 .../common/typeinfo/FractionalTypeInfoTest.java |  35 +++++
 .../common/typeinfo/IntegerTypeInfoTest.java    |  37 +++++
 .../common/typeinfo/NothingTypeInfoTest.java    |  34 ++++
 .../common/typeinfo/NumericTypeInfoTest.java    |  39 +++++
 .../typeinfo/PrimitiveArrayTypeInfoTest.java    |  41 +++++
 .../common/typeinfo/SqlTimeTypeInfoTest.java    |  36 +++++
 .../typeutils/TypeInformationTestBase.java      | 155 +++++++++++++++++++
 .../api/java/typeutils/EitherTypeInfoTest.java  |  42 ++---
 .../api/java/typeutils/EnumTypeInfoTest.java    |  35 ++---
 .../api/java/typeutils/GenericTypeInfoTest.java |  34 ++--
 .../api/java/typeutils/ListTypeInfoTest.java    |  37 +++++
 .../api/java/typeutils/MapTypeInfoTest.java     |  37 +++++
 .../api/java/typeutils/MissingTypeInfoTest.java |  29 ++--
 .../java/typeutils/ObjectArrayTypeInfoTest.java |  46 ++----
 .../api/java/typeutils/PojoTypeInfoTest.java    |  82 ++--------
 .../api/java/typeutils/RowTypeInfoTest.java     |  60 ++-----
 .../api/java/typeutils/TupleTypeInfoTest.java   |  49 ++----
 .../api/java/typeutils/ValueTypeInfoTest.java   |  46 +++---
 .../flink/types/BasicArrayTypeInfoTest.java     |  56 -------
 .../apache/flink/types/NothingTypeInfoTest.java |  47 ------
 .../flink/types/PrimitiveArrayTypeInfoTest.java |  56 -------
 flink-scala/pom.xml                             |  13 ++
 .../scala/typeutils/CaseClassTypeInfoTest.scala |  51 ++----
 .../scala/typeutils/EitherTypeInfoTest.scala    |  39 ++---
 .../scala/typeutils/EnumValueTypeInfoTest.scala |  36 ++---
 .../scala/typeutils/OptionTypeInfoTest.scala    |  38 ++---
 .../typeutils/ScalaNothingTypeInfoTest.scala    |  31 ++++
 .../typeutils/TraversableTypeInfoTest.scala     |  46 ++----
 .../api/scala/typeutils/TryTypeInfoTest.scala   |  40 ++---
 .../api/scala/typeutils/UnitTypeInfoTest.scala  |  31 ++++
 flink-tests/pom.xml                             |  33 +++-
 .../completeness/TypeInfoTestCoverageTest.java  |  62 ++++++++
 38 files changed, 981 insertions(+), 662 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flink/blob/6cf4a93e/flink-connectors/flink-avro/pom.xml
----------------------------------------------------------------------
diff --git a/flink-connectors/flink-avro/pom.xml b/flink-connectors/flink-avro/pom.xml
index 468a2ba..170b344 100644
--- a/flink-connectors/flink-avro/pom.xml
+++ b/flink-connectors/flink-avro/pom.xml
@@ -154,8 +154,21 @@ under the License.
 					</execution>
 				</executions>
 			</plugin>
+
+			<!-- Add Avro test classes to test jar in order to test AvroTypeInfo. -->
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-jar-plugin</artifactId>
+				<executions>
+					<execution>
+						<goals>
+							<goal>test-jar</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
 		</plugins>
-		
+
 		<pluginManagement>
 			<plugins>
 				<!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->

http://git-wip-us.apache.org/repos/asf/flink/blob/6cf4a93e/flink-connectors/flink-avro/src/test/java/org/apache/flink/api/java/typeutils/AvroTypeInfoTest.java
----------------------------------------------------------------------
diff --git a/flink-connectors/flink-avro/src/test/java/org/apache/flink/api/java/typeutils/AvroTypeInfoTest.java b/flink-connectors/flink-avro/src/test/java/org/apache/flink/api/java/typeutils/AvroTypeInfoTest.java
new file mode 100644
index 0000000..e0bb1a1
--- /dev/null
+++ b/flink-connectors/flink-avro/src/test/java/org/apache/flink/api/java/typeutils/AvroTypeInfoTest.java
@@ -0,0 +1,37 @@
+/*
+ * 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 org.apache.flink.api.common.typeutils.TypeInformationTestBase;
+import org.apache.flink.api.io.avro.generated.Address;
+import org.apache.flink.api.io.avro.generated.User;
+
+/**
+ * Test for {@link AvroTypeInfo}.
+ */
+public class AvroTypeInfoTest extends TypeInformationTestBase<AvroTypeInfo<?>> {
+
+	@Override
+	protected AvroTypeInfo<?>[] getTestData() {
+		return new AvroTypeInfo<?>[] {
+			new AvroTypeInfo<>(Address.class),
+			new AvroTypeInfo<>(User.class),
+		};
+	}
+}

http://git-wip-us.apache.org/repos/asf/flink/blob/6cf4a93e/flink-connectors/flink-hadoop-compatibility/pom.xml
----------------------------------------------------------------------
diff --git a/flink-connectors/flink-hadoop-compatibility/pom.xml b/flink-connectors/flink-hadoop-compatibility/pom.xml
index 8c5b673..003225b 100644
--- a/flink-connectors/flink-hadoop-compatibility/pom.xml
+++ b/flink-connectors/flink-hadoop-compatibility/pom.xml
@@ -176,6 +176,19 @@ under the License.
 				</configuration>
 			</plugin>
 
+			<!-- Add test classes to test jar in order to test WritableTypeInfo. -->
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-jar-plugin</artifactId>
+				<executions>
+					<execution>
+						<goals>
+							<goal>test-jar</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+
 			<plugin>
 				<groupId>org.apache.maven.plugins</groupId>
 				<artifactId>maven-surefire-plugin</artifactId>

http://git-wip-us.apache.org/repos/asf/flink/blob/6cf4a93e/flink-connectors/flink-hadoop-compatibility/src/test/java/org/apache/flink/api/java/typeutils/WritableTypeInfoTest.java
----------------------------------------------------------------------
diff --git a/flink-connectors/flink-hadoop-compatibility/src/test/java/org/apache/flink/api/java/typeutils/WritableTypeInfoTest.java b/flink-connectors/flink-hadoop-compatibility/src/test/java/org/apache/flink/api/java/typeutils/WritableTypeInfoTest.java
index eb9cdf0..666ab84 100644
--- a/flink-connectors/flink-hadoop-compatibility/src/test/java/org/apache/flink/api/java/typeutils/WritableTypeInfoTest.java
+++ b/flink-connectors/flink-hadoop-compatibility/src/test/java/org/apache/flink/api/java/typeutils/WritableTypeInfoTest.java
@@ -18,34 +18,23 @@
 
 package org.apache.flink.api.java.typeutils;
 
-import org.apache.flink.util.TestLogger;
-import org.apache.hadoop.io.Writable;
-import org.junit.Test;
-
 import java.io.DataInput;
 import java.io.DataOutput;
 import java.io.IOException;
+import org.apache.flink.api.common.typeutils.TypeInformationTestBase;
+import org.apache.hadoop.io.Writable;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotEquals;
-
-public class WritableTypeInfoTest extends TestLogger {
-	
-	@Test
-	public void testWritableTypeInfoEquality() {
-		WritableTypeInfo<TestClass> tpeInfo1 = new WritableTypeInfo<>(TestClass.class);
-		WritableTypeInfo<TestClass> tpeInfo2 = new WritableTypeInfo<>(TestClass.class);
-
-		assertEquals(tpeInfo1, tpeInfo2);
-		assertEquals(tpeInfo1.hashCode(), tpeInfo2.hashCode());
-	}
-
-	@Test
-	public void testWritableTypeInfoInequality() {
-		WritableTypeInfo<TestClass> tpeInfo1 = new WritableTypeInfo<>(TestClass.class);
-		WritableTypeInfo<AlternateClass> tpeInfo2 = new WritableTypeInfo<>(AlternateClass.class);
-
-		assertNotEquals(tpeInfo1, tpeInfo2);
+/**
+ * Test for {@link WritableTypeInfo}.
+ */
+public class WritableTypeInfoTest extends TypeInformationTestBase<WritableTypeInfo<?>> {
+
+	@Override
+	protected WritableTypeInfo<?>[] getTestData() {
+		return new WritableTypeInfo<?>[] {
+			new WritableTypeInfo<>(TestClass.class),
+			new WritableTypeInfo<>(AlternateClass.class)
+		};
 	}
 
 	// ------------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/flink/blob/6cf4a93e/flink-core/src/test/java/org/apache/flink/api/common/typeinfo/BasicArrayTypeInfoTest.java
----------------------------------------------------------------------
diff --git a/flink-core/src/test/java/org/apache/flink/api/common/typeinfo/BasicArrayTypeInfoTest.java b/flink-core/src/test/java/org/apache/flink/api/common/typeinfo/BasicArrayTypeInfoTest.java
new file mode 100644
index 0000000..7a51808
--- /dev/null
+++ b/flink-core/src/test/java/org/apache/flink/api/common/typeinfo/BasicArrayTypeInfoTest.java
@@ -0,0 +1,42 @@
+/*
+ * 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.common.typeinfo;
+
+import org.apache.flink.api.common.typeutils.TypeInformationTestBase;
+
+/**
+ * Test for {@link BasicArrayTypeInfo}.
+ */
+public class BasicArrayTypeInfoTest extends TypeInformationTestBase<BasicArrayTypeInfo<?, ?>> {
+
+	@Override
+	protected BasicArrayTypeInfo<?, ?>[] getTestData() {
+		return new BasicArrayTypeInfo<?, ?>[] {
+			BasicArrayTypeInfo.STRING_ARRAY_TYPE_INFO,
+			BasicArrayTypeInfo.BOOLEAN_ARRAY_TYPE_INFO,
+			BasicArrayTypeInfo.BYTE_ARRAY_TYPE_INFO,
+			BasicArrayTypeInfo.SHORT_ARRAY_TYPE_INFO,
+			BasicArrayTypeInfo.INT_ARRAY_TYPE_INFO,
+			BasicArrayTypeInfo.LONG_ARRAY_TYPE_INFO,
+			BasicArrayTypeInfo.FLOAT_ARRAY_TYPE_INFO,
+			BasicArrayTypeInfo.DOUBLE_ARRAY_TYPE_INFO,
+			BasicArrayTypeInfo.CHAR_ARRAY_TYPE_INFO
+		};
+	}
+}

http://git-wip-us.apache.org/repos/asf/flink/blob/6cf4a93e/flink-core/src/test/java/org/apache/flink/api/common/typeinfo/BasicTypeInfoTest.java
----------------------------------------------------------------------
diff --git a/flink-core/src/test/java/org/apache/flink/api/common/typeinfo/BasicTypeInfoTest.java b/flink-core/src/test/java/org/apache/flink/api/common/typeinfo/BasicTypeInfoTest.java
new file mode 100644
index 0000000..cd4511a
--- /dev/null
+++ b/flink-core/src/test/java/org/apache/flink/api/common/typeinfo/BasicTypeInfoTest.java
@@ -0,0 +1,46 @@
+/*
+ * 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.common.typeinfo;
+
+import org.apache.flink.api.common.typeutils.TypeInformationTestBase;
+
+/**
+ * Test for {@link BasicTypeInfo}.
+ */
+public class BasicTypeInfoTest extends TypeInformationTestBase<BasicTypeInfo<?>> {
+
+	@Override
+	protected BasicTypeInfo<?>[] getTestData() {
+		return new BasicTypeInfo<?>[] {
+			BasicTypeInfo.STRING_TYPE_INFO,
+			BasicTypeInfo.BOOLEAN_TYPE_INFO,
+			BasicTypeInfo.BYTE_TYPE_INFO,
+			BasicTypeInfo.SHORT_TYPE_INFO,
+			BasicTypeInfo.INT_TYPE_INFO,
+			BasicTypeInfo.LONG_TYPE_INFO,
+			BasicTypeInfo.FLOAT_TYPE_INFO,
+			BasicTypeInfo.DOUBLE_TYPE_INFO,
+			BasicTypeInfo.CHAR_TYPE_INFO,
+			BasicTypeInfo.DATE_TYPE_INFO,
+			BasicTypeInfo.VOID_TYPE_INFO,
+			BasicTypeInfo.BIG_INT_TYPE_INFO,
+			BasicTypeInfo.BIG_DEC_TYPE_INFO
+		};
+	}
+}

http://git-wip-us.apache.org/repos/asf/flink/blob/6cf4a93e/flink-core/src/test/java/org/apache/flink/api/common/typeinfo/FractionalTypeInfoTest.java
----------------------------------------------------------------------
diff --git a/flink-core/src/test/java/org/apache/flink/api/common/typeinfo/FractionalTypeInfoTest.java b/flink-core/src/test/java/org/apache/flink/api/common/typeinfo/FractionalTypeInfoTest.java
new file mode 100644
index 0000000..87c4db5
--- /dev/null
+++ b/flink-core/src/test/java/org/apache/flink/api/common/typeinfo/FractionalTypeInfoTest.java
@@ -0,0 +1,35 @@
+/*
+ * 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.common.typeinfo;
+
+import org.apache.flink.api.common.typeutils.TypeInformationTestBase;
+
+/**
+ * Test for {@link FractionalTypeInfo}.
+ */
+public class FractionalTypeInfoTest extends TypeInformationTestBase<FractionalTypeInfo<?>> {
+
+	@Override
+	protected FractionalTypeInfo<?>[] getTestData() {
+		return new FractionalTypeInfo<?>[] {
+			(FractionalTypeInfo<?>) BasicTypeInfo.FLOAT_TYPE_INFO,
+			(FractionalTypeInfo<?>) BasicTypeInfo.DOUBLE_TYPE_INFO
+		};
+	}
+}

http://git-wip-us.apache.org/repos/asf/flink/blob/6cf4a93e/flink-core/src/test/java/org/apache/flink/api/common/typeinfo/IntegerTypeInfoTest.java
----------------------------------------------------------------------
diff --git a/flink-core/src/test/java/org/apache/flink/api/common/typeinfo/IntegerTypeInfoTest.java b/flink-core/src/test/java/org/apache/flink/api/common/typeinfo/IntegerTypeInfoTest.java
new file mode 100644
index 0000000..b5fd41f
--- /dev/null
+++ b/flink-core/src/test/java/org/apache/flink/api/common/typeinfo/IntegerTypeInfoTest.java
@@ -0,0 +1,37 @@
+/*
+ * 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.common.typeinfo;
+
+import org.apache.flink.api.common.typeutils.TypeInformationTestBase;
+
+/**
+ * Test for {@link IntegerTypeInfo}.
+ */
+public class IntegerTypeInfoTest extends TypeInformationTestBase<IntegerTypeInfo<?>> {
+
+	@Override
+	protected IntegerTypeInfo<?>[] getTestData() {
+		return new IntegerTypeInfo<?>[] {
+			(IntegerTypeInfo<?>) BasicTypeInfo.BYTE_TYPE_INFO,
+			(IntegerTypeInfo<?>) BasicTypeInfo.SHORT_TYPE_INFO,
+			(IntegerTypeInfo<?>) BasicTypeInfo.INT_TYPE_INFO,
+			(IntegerTypeInfo<?>) BasicTypeInfo.LONG_TYPE_INFO
+		};
+	}
+}

http://git-wip-us.apache.org/repos/asf/flink/blob/6cf4a93e/flink-core/src/test/java/org/apache/flink/api/common/typeinfo/NothingTypeInfoTest.java
----------------------------------------------------------------------
diff --git a/flink-core/src/test/java/org/apache/flink/api/common/typeinfo/NothingTypeInfoTest.java b/flink-core/src/test/java/org/apache/flink/api/common/typeinfo/NothingTypeInfoTest.java
new file mode 100644
index 0000000..a4771db
--- /dev/null
+++ b/flink-core/src/test/java/org/apache/flink/api/common/typeinfo/NothingTypeInfoTest.java
@@ -0,0 +1,34 @@
+/*
+ * 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.common.typeinfo;
+
+import org.apache.flink.api.common.typeutils.TypeInformationTestBase;
+
+/**
+ * Test for {@link NothingTypeInfo}.
+ */
+public class NothingTypeInfoTest extends TypeInformationTestBase<NothingTypeInfo> {
+
+	@Override
+	protected NothingTypeInfo[] getTestData() {
+		return new NothingTypeInfo[] {
+			new NothingTypeInfo()
+		};
+	}
+}

http://git-wip-us.apache.org/repos/asf/flink/blob/6cf4a93e/flink-core/src/test/java/org/apache/flink/api/common/typeinfo/NumericTypeInfoTest.java
----------------------------------------------------------------------
diff --git a/flink-core/src/test/java/org/apache/flink/api/common/typeinfo/NumericTypeInfoTest.java b/flink-core/src/test/java/org/apache/flink/api/common/typeinfo/NumericTypeInfoTest.java
new file mode 100644
index 0000000..49dd722
--- /dev/null
+++ b/flink-core/src/test/java/org/apache/flink/api/common/typeinfo/NumericTypeInfoTest.java
@@ -0,0 +1,39 @@
+/*
+ * 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.common.typeinfo;
+
+import org.apache.flink.api.common.typeutils.TypeInformationTestBase;
+
+/**
+ * Test for {@link NumericTypeInfo}.
+ */
+public class NumericTypeInfoTest extends TypeInformationTestBase<NumericTypeInfo<?>> {
+
+	@Override
+	protected NumericTypeInfo<?>[] getTestData() {
+		return new NumericTypeInfo<?>[] {
+			(NumericTypeInfo<?>) BasicTypeInfo.BYTE_TYPE_INFO,
+			(NumericTypeInfo<?>) BasicTypeInfo.SHORT_TYPE_INFO,
+			(NumericTypeInfo<?>) BasicTypeInfo.INT_TYPE_INFO,
+			(NumericTypeInfo<?>) BasicTypeInfo.LONG_TYPE_INFO,
+			(NumericTypeInfo<?>) BasicTypeInfo.FLOAT_TYPE_INFO,
+			(NumericTypeInfo<?>) BasicTypeInfo.DOUBLE_TYPE_INFO
+		};
+	}
+}

http://git-wip-us.apache.org/repos/asf/flink/blob/6cf4a93e/flink-core/src/test/java/org/apache/flink/api/common/typeinfo/PrimitiveArrayTypeInfoTest.java
----------------------------------------------------------------------
diff --git a/flink-core/src/test/java/org/apache/flink/api/common/typeinfo/PrimitiveArrayTypeInfoTest.java b/flink-core/src/test/java/org/apache/flink/api/common/typeinfo/PrimitiveArrayTypeInfoTest.java
new file mode 100644
index 0000000..867ccad
--- /dev/null
+++ b/flink-core/src/test/java/org/apache/flink/api/common/typeinfo/PrimitiveArrayTypeInfoTest.java
@@ -0,0 +1,41 @@
+/*
+ * 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.common.typeinfo;
+
+import org.apache.flink.api.common.typeutils.TypeInformationTestBase;
+
+/**
+ * Test for {@link PrimitiveArrayTypeInfoTest}.
+ */
+public class PrimitiveArrayTypeInfoTest extends TypeInformationTestBase<PrimitiveArrayTypeInfo<?>> {
+
+	@Override
+	protected PrimitiveArrayTypeInfo<?>[] getTestData() {
+		return new PrimitiveArrayTypeInfo<?>[] {
+			PrimitiveArrayTypeInfo.BOOLEAN_PRIMITIVE_ARRAY_TYPE_INFO,
+			PrimitiveArrayTypeInfo.BYTE_PRIMITIVE_ARRAY_TYPE_INFO,
+			PrimitiveArrayTypeInfo.SHORT_PRIMITIVE_ARRAY_TYPE_INFO,
+			PrimitiveArrayTypeInfo.INT_PRIMITIVE_ARRAY_TYPE_INFO,
+			PrimitiveArrayTypeInfo.LONG_PRIMITIVE_ARRAY_TYPE_INFO,
+			PrimitiveArrayTypeInfo.FLOAT_PRIMITIVE_ARRAY_TYPE_INFO,
+			PrimitiveArrayTypeInfo.DOUBLE_PRIMITIVE_ARRAY_TYPE_INFO,
+			PrimitiveArrayTypeInfo.CHAR_PRIMITIVE_ARRAY_TYPE_INFO
+		};
+	}
+}

http://git-wip-us.apache.org/repos/asf/flink/blob/6cf4a93e/flink-core/src/test/java/org/apache/flink/api/common/typeinfo/SqlTimeTypeInfoTest.java
----------------------------------------------------------------------
diff --git a/flink-core/src/test/java/org/apache/flink/api/common/typeinfo/SqlTimeTypeInfoTest.java b/flink-core/src/test/java/org/apache/flink/api/common/typeinfo/SqlTimeTypeInfoTest.java
new file mode 100644
index 0000000..892ab2b
--- /dev/null
+++ b/flink-core/src/test/java/org/apache/flink/api/common/typeinfo/SqlTimeTypeInfoTest.java
@@ -0,0 +1,36 @@
+/*
+ * 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.common.typeinfo;
+
+import org.apache.flink.api.common.typeutils.TypeInformationTestBase;
+
+/**
+ * Test for {@link SqlTimeTypeInfo}.
+ */
+public class SqlTimeTypeInfoTest extends TypeInformationTestBase<SqlTimeTypeInfo<?>> {
+
+	@Override
+	protected SqlTimeTypeInfo<?>[] getTestData() {
+		return new SqlTimeTypeInfo<?>[] {
+			SqlTimeTypeInfo.DATE,
+			SqlTimeTypeInfo.TIME,
+			SqlTimeTypeInfo.TIMESTAMP
+		};
+	}
+}

http://git-wip-us.apache.org/repos/asf/flink/blob/6cf4a93e/flink-core/src/test/java/org/apache/flink/api/common/typeutils/TypeInformationTestBase.java
----------------------------------------------------------------------
diff --git a/flink-core/src/test/java/org/apache/flink/api/common/typeutils/TypeInformationTestBase.java b/flink-core/src/test/java/org/apache/flink/api/common/typeutils/TypeInformationTestBase.java
new file mode 100644
index 0000000..bd35070
--- /dev/null
+++ b/flink-core/src/test/java/org/apache/flink/api/common/typeutils/TypeInformationTestBase.java
@@ -0,0 +1,155 @@
+/*
+ * 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.common.typeutils;
+
+import java.io.IOException;
+import org.apache.flink.api.common.ExecutionConfig;
+import org.apache.flink.api.common.typeinfo.TypeInformation;
+import org.apache.flink.util.InstantiationUtil;
+import org.apache.flink.util.TestLogger;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertTrue;
+import org.junit.Test;
+
+/**
+ * Abstract test base for type information.
+ */
+public abstract class TypeInformationTestBase<T extends TypeInformation<?>> extends TestLogger {
+
+	protected abstract T[] getTestData();
+
+	@Test
+	public void testHashcodeAndEquals() throws Exception {
+		final T[] testData = getTestData();
+		final TypeInformation<?> unrelatedTypeInfo = new UnrelatedTypeInfo();
+
+		for (T typeInfo : testData) {
+			// check for implemented hashCode and equals
+			if (typeInfo.getClass().getMethod("hashCode").getDeclaringClass() == Object.class) {
+				throw new AssertionError("Type information does not implement own hashCode method: " +
+					typeInfo.getClass().getCanonicalName());
+			}
+			if (typeInfo.getClass().getMethod("equals", Object.class).getDeclaringClass() == Object.class) {
+				throw new AssertionError("Type information does not implement own equals method: " +
+					typeInfo.getClass().getCanonicalName());
+			}
+
+			// compare among test data
+			for (T otherTypeInfo : testData) {
+				assertTrue("canEqual() returns inconsistent results.", typeInfo.canEqual(otherTypeInfo));
+				// test equality
+				if (typeInfo == otherTypeInfo) {
+					assertTrue("hashCode() returns inconsistent results.", typeInfo.hashCode() == otherTypeInfo.hashCode());
+					assertEquals("equals() is false for same object.", typeInfo, otherTypeInfo);
+				}
+				// test inequality
+				else {
+					assertNotEquals("equals() returned true for different objects.", typeInfo, otherTypeInfo);
+				}
+			}
+
+			// compare with unrelated type
+			assertFalse("Type information allows to compare with unrelated type.", typeInfo.canEqual(unrelatedTypeInfo));
+			assertNotEquals(typeInfo, unrelatedTypeInfo);
+		}
+	}
+
+	@Test
+	public void testSerialization() {
+		final T[] testData = getTestData();
+
+		for (T typeInfo : testData) {
+			final byte[] serialized;
+			try {
+				serialized = InstantiationUtil.serializeObject(typeInfo);
+			} catch (IOException e) {
+				throw new AssertionError("Could not serialize type information: " + typeInfo, e);
+			}
+			final T deserialized;
+			try {
+				deserialized = InstantiationUtil.deserializeObject(serialized, getClass().getClassLoader());
+			} catch (IOException | ClassNotFoundException e) {
+				throw new AssertionError("Could not deserialize type information: " + typeInfo, e);
+			}
+			if (typeInfo.hashCode() != deserialized.hashCode() || !typeInfo.equals(deserialized)) {
+				throw new AssertionError("Deserialized type information differs from original one.");
+			}
+		}
+	}
+
+	private static class UnrelatedTypeInfo extends TypeInformation<Object> {
+
+		@Override
+		public boolean isBasicType() {
+			return false;
+		}
+
+		@Override
+		public boolean isTupleType() {
+			return false;
+		}
+
+		@Override
+		public int getArity() {
+			return 0;
+		}
+
+		@Override
+		public int getTotalFields() {
+			return 0;
+		}
+
+		@Override
+		public Class<Object> getTypeClass() {
+			return null;
+		}
+
+		@Override
+		public boolean isKeyType() {
+			return false;
+		}
+
+		@Override
+		public TypeSerializer<Object> createSerializer(ExecutionConfig config) {
+			return null;
+		}
+
+		@Override
+		public String toString() {
+			return null;
+		}
+
+		@Override
+		public boolean equals(Object obj) {
+			return false;
+		}
+
+		@Override
+		public int hashCode() {
+			return 0;
+		}
+
+		@Override
+		public boolean canEqual(Object obj) {
+			return false;
+		}
+	}
+}

http://git-wip-us.apache.org/repos/asf/flink/blob/6cf4a93e/flink-core/src/test/java/org/apache/flink/api/java/typeutils/EitherTypeInfoTest.java
----------------------------------------------------------------------
diff --git a/flink-core/src/test/java/org/apache/flink/api/java/typeutils/EitherTypeInfoTest.java b/flink-core/src/test/java/org/apache/flink/api/java/typeutils/EitherTypeInfoTest.java
index 13009ee..a5e340e 100644
--- a/flink-core/src/test/java/org/apache/flink/api/java/typeutils/EitherTypeInfoTest.java
+++ b/flink-core/src/test/java/org/apache/flink/api/java/typeutils/EitherTypeInfoTest.java
@@ -18,37 +18,21 @@
 
 package org.apache.flink.api.java.typeutils;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotEquals;
-
 import org.apache.flink.api.common.typeinfo.BasicTypeInfo;
+import org.apache.flink.api.common.typeutils.TypeInformationTestBase;
 import org.apache.flink.api.java.tuple.Tuple2;
-import org.apache.flink.util.TestLogger;
-import org.junit.Test;
-
-public class EitherTypeInfoTest extends TestLogger {
-
-	@Test
-	public void testEitherTypeEquality() {
-		EitherTypeInfo<Integer, String> eitherInfo1 = new EitherTypeInfo<Integer, String>(
-				BasicTypeInfo.INT_TYPE_INFO, BasicTypeInfo.STRING_TYPE_INFO);
 
-		EitherTypeInfo<Integer, String> eitherInfo2 = new EitherTypeInfo<Integer, String>(
-				BasicTypeInfo.INT_TYPE_INFO, BasicTypeInfo.STRING_TYPE_INFO);
-
-		assertEquals(eitherInfo1, eitherInfo2);
-		assertEquals(eitherInfo1.hashCode(), eitherInfo2.hashCode());
-	}
-
-	@Test
-	public void testEitherTypeInequality() {
-		EitherTypeInfo<Integer, String> eitherInfo1 = new EitherTypeInfo<Integer, String>(
-				BasicTypeInfo.INT_TYPE_INFO, BasicTypeInfo.STRING_TYPE_INFO);
-
-		EitherTypeInfo<Integer, Tuple2<Double, Long>> eitherInfo2 = new EitherTypeInfo<Integer, Tuple2<Double, Long>>(
-				BasicTypeInfo.INT_TYPE_INFO, new TupleTypeInfo<Tuple2<Double, Long>>(
-				TypeExtractor.getForClass(Double.class), TypeExtractor.getForClass(String.class)));
-
-		assertNotEquals(eitherInfo1, eitherInfo2);
+/**
+ * Test for {@link EitherTypeInfo}.
+ */
+public class EitherTypeInfoTest extends TypeInformationTestBase<EitherTypeInfo<?, ?>> {
+
+	@Override
+	protected EitherTypeInfo<?, ?>[] getTestData() {
+		return new EitherTypeInfo<?, ?>[] {
+			new EitherTypeInfo<>(BasicTypeInfo.INT_TYPE_INFO, BasicTypeInfo.STRING_TYPE_INFO),
+			new EitherTypeInfo<>(BasicTypeInfo.INT_TYPE_INFO,
+				new TupleTypeInfo<Tuple2<Double, Long>>(TypeExtractor.getForClass(Double.class), TypeExtractor.getForClass(String.class)))
+		};
 	}
 }

http://git-wip-us.apache.org/repos/asf/flink/blob/6cf4a93e/flink-core/src/test/java/org/apache/flink/api/java/typeutils/EnumTypeInfoTest.java
----------------------------------------------------------------------
diff --git a/flink-core/src/test/java/org/apache/flink/api/java/typeutils/EnumTypeInfoTest.java b/flink-core/src/test/java/org/apache/flink/api/java/typeutils/EnumTypeInfoTest.java
index b200566..2023f7f 100644
--- a/flink-core/src/test/java/org/apache/flink/api/java/typeutils/EnumTypeInfoTest.java
+++ b/flink-core/src/test/java/org/apache/flink/api/java/typeutils/EnumTypeInfoTest.java
@@ -18,11 +18,21 @@
 
 package org.apache.flink.api.java.typeutils;
 
-import org.apache.flink.util.TestLogger;
-import org.junit.Test;
-import static org.junit.Assert.*;
+import org.apache.flink.api.common.typeutils.TypeInformationTestBase;
 
-public class EnumTypeInfoTest extends TestLogger {
+/**
+ * Test for {@link EnumTypeInfo}.
+ */
+public class EnumTypeInfoTest extends TypeInformationTestBase<EnumTypeInfo<?>> {
+
+	@Override
+	@SuppressWarnings("unchecked")
+	protected EnumTypeInfo<?>[] getTestData() {
+		return new EnumTypeInfo<?>[] {
+			(EnumTypeInfo<?>) new EnumTypeInfo(TestEnum.class),
+			(EnumTypeInfo<?>) new EnumTypeInfo(AlternativeEnum.class)
+		};
+	}
 
 	enum TestEnum {
 		ONE, TWO
@@ -31,21 +41,4 @@ public class EnumTypeInfoTest extends TestLogger {
 	enum AlternativeEnum {
 		ONE, TWO
 	}
-
-	@Test
-	public void testEnumTypeEquality() {
-		EnumTypeInfo<TestEnum> enumTypeInfo1 = new EnumTypeInfo<TestEnum>(TestEnum.class);
-		EnumTypeInfo<TestEnum> enumTypeInfo2 = new EnumTypeInfo<TestEnum>(TestEnum.class);
-
-		assertEquals(enumTypeInfo1, enumTypeInfo2);
-		assertEquals(enumTypeInfo1.hashCode(), enumTypeInfo2.hashCode());
-	}
-
-	@Test
-	public void testEnumTypeInequality() {
-		EnumTypeInfo<TestEnum> enumTypeInfo1 = new EnumTypeInfo<TestEnum>(TestEnum.class);
-		EnumTypeInfo<AlternativeEnum> enumTypeInfo2 = new EnumTypeInfo<AlternativeEnum>(AlternativeEnum.class);
-
-		assertNotEquals(enumTypeInfo1, enumTypeInfo2);
-	}
 }

http://git-wip-us.apache.org/repos/asf/flink/blob/6cf4a93e/flink-core/src/test/java/org/apache/flink/api/java/typeutils/GenericTypeInfoTest.java
----------------------------------------------------------------------
diff --git a/flink-core/src/test/java/org/apache/flink/api/java/typeutils/GenericTypeInfoTest.java b/flink-core/src/test/java/org/apache/flink/api/java/typeutils/GenericTypeInfoTest.java
index fad43df..8dbcc99 100644
--- a/flink-core/src/test/java/org/apache/flink/api/java/typeutils/GenericTypeInfoTest.java
+++ b/flink-core/src/test/java/org/apache/flink/api/java/typeutils/GenericTypeInfoTest.java
@@ -18,30 +18,22 @@
 
 package org.apache.flink.api.java.typeutils;
 
-import org.apache.flink.util.TestLogger;
-import org.junit.Test;
-import static org.junit.Assert.*;
+import org.apache.flink.api.common.typeutils.TypeInformationTestBase;
 
-public class GenericTypeInfoTest extends TestLogger {
+/**
+ * Test for {@link GenericTypeInfo}.
+ */
+public class GenericTypeInfoTest extends TypeInformationTestBase<GenericTypeInfo<?>> {
+
+	@Override
+	protected GenericTypeInfo<?>[] getTestData() {
+		return new GenericTypeInfo<?>[] {
+			new GenericTypeInfo<>(TestClass.class),
+			new GenericTypeInfo<>(AlternativeClass.class)
+		};
+	}
 
 	static class TestClass {}
 	static class AlternativeClass {}
 
-	@Test
-	public void testGenericTypeInfoEquality() {
-		GenericTypeInfo<TestClass> tpeInfo1 = new GenericTypeInfo<>(TestClass.class);
-		GenericTypeInfo<TestClass> tpeInfo2 = new GenericTypeInfo<>(TestClass.class);
-
-		assertEquals(tpeInfo1, tpeInfo2);
-		assertEquals(tpeInfo1.hashCode(), tpeInfo2.hashCode());
-	}
-
-	@Test
-	public void testGenericTypeInfoInequality() {
-		GenericTypeInfo<TestClass> tpeInfo1 = new GenericTypeInfo<>(TestClass.class);
-		GenericTypeInfo<AlternativeClass> tpeInfo2 = new GenericTypeInfo<>(AlternativeClass.class);
-
-		assertNotEquals(tpeInfo1, tpeInfo2);
-	}
-
 }

http://git-wip-us.apache.org/repos/asf/flink/blob/6cf4a93e/flink-core/src/test/java/org/apache/flink/api/java/typeutils/ListTypeInfoTest.java
----------------------------------------------------------------------
diff --git a/flink-core/src/test/java/org/apache/flink/api/java/typeutils/ListTypeInfoTest.java b/flink-core/src/test/java/org/apache/flink/api/java/typeutils/ListTypeInfoTest.java
new file mode 100644
index 0000000..58cabfd
--- /dev/null
+++ b/flink-core/src/test/java/org/apache/flink/api/java/typeutils/ListTypeInfoTest.java
@@ -0,0 +1,37 @@
+/*
+ * 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 org.apache.flink.api.common.typeinfo.BasicTypeInfo;
+import org.apache.flink.api.common.typeutils.TypeInformationTestBase;
+
+/**
+ * Test for {@link ListTypeInfo}.
+ */
+public class ListTypeInfoTest extends TypeInformationTestBase<ListTypeInfo<?>> {
+
+	@Override
+	protected ListTypeInfo<?>[] getTestData() {
+		return new ListTypeInfo<?>[] {
+			new ListTypeInfo<>(BasicTypeInfo.STRING_TYPE_INFO),
+			new ListTypeInfo<>(BasicTypeInfo.BOOLEAN_TYPE_INFO),
+			new ListTypeInfo<>(Object.class),
+		};
+	}
+}

http://git-wip-us.apache.org/repos/asf/flink/blob/6cf4a93e/flink-core/src/test/java/org/apache/flink/api/java/typeutils/MapTypeInfoTest.java
----------------------------------------------------------------------
diff --git a/flink-core/src/test/java/org/apache/flink/api/java/typeutils/MapTypeInfoTest.java b/flink-core/src/test/java/org/apache/flink/api/java/typeutils/MapTypeInfoTest.java
new file mode 100644
index 0000000..5f3fc06
--- /dev/null
+++ b/flink-core/src/test/java/org/apache/flink/api/java/typeutils/MapTypeInfoTest.java
@@ -0,0 +1,37 @@
+/*
+ * 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 org.apache.flink.api.common.typeinfo.BasicTypeInfo;
+import org.apache.flink.api.common.typeutils.TypeInformationTestBase;
+
+/**
+ * Test for {@link MapTypeInfo}.
+ */
+public class MapTypeInfoTest extends TypeInformationTestBase<MapTypeInfo<?, ?>> {
+
+	@Override
+	protected MapTypeInfo<?, ?>[] getTestData() {
+		return new MapTypeInfo<?, ?>[] {
+			new MapTypeInfo<>(BasicTypeInfo.STRING_TYPE_INFO, BasicTypeInfo.INT_TYPE_INFO),
+			new MapTypeInfo<>(BasicTypeInfo.INT_TYPE_INFO, BasicTypeInfo.STRING_TYPE_INFO),
+			new MapTypeInfo<>(String.class, Boolean.class)
+		};
+	}
+}

http://git-wip-us.apache.org/repos/asf/flink/blob/6cf4a93e/flink-core/src/test/java/org/apache/flink/api/java/typeutils/MissingTypeInfoTest.java
----------------------------------------------------------------------
diff --git a/flink-core/src/test/java/org/apache/flink/api/java/typeutils/MissingTypeInfoTest.java b/flink-core/src/test/java/org/apache/flink/api/java/typeutils/MissingTypeInfoTest.java
index ee57475..cccc14d 100644
--- a/flink-core/src/test/java/org/apache/flink/api/java/typeutils/MissingTypeInfoTest.java
+++ b/flink-core/src/test/java/org/apache/flink/api/java/typeutils/MissingTypeInfoTest.java
@@ -19,29 +19,26 @@
 package org.apache.flink.api.java.typeutils;
 
 import org.apache.flink.api.common.functions.InvalidTypesException;
+import org.apache.flink.api.common.typeutils.TypeInformationTestBase;
 import org.apache.flink.util.TestLogger;
 import org.junit.Test;
 
 import static org.junit.Assert.*;
 
-public class MissingTypeInfoTest extends TestLogger {
-	static final String functionName = "foobar";
-	static final InvalidTypesException testException = new InvalidTypesException("Test exception.");
+public class MissingTypeInfoTest extends TypeInformationTestBase<MissingTypeInfo> {
+	private static final String functionName = "foobar";
+	private static final InvalidTypesException testException = new InvalidTypesException("Test exception.");
 
-	@Test
-	public void testMissingTypeInfoEquality() {
-		MissingTypeInfo tpeInfo1 = new MissingTypeInfo(functionName, testException);
-		MissingTypeInfo tpeInfo2 = new MissingTypeInfo(functionName, testException);
-
-		assertEquals(tpeInfo1, tpeInfo2);
-		assertEquals(tpeInfo1.hashCode(), tpeInfo2.hashCode());
+	@Override
+	protected MissingTypeInfo[] getTestData() {
+		return new MissingTypeInfo[] {
+			new MissingTypeInfo(functionName, testException),
+			new MissingTypeInfo("alt" + functionName, testException)
+		};
 	}
 
-	@Test
-	public void testMissingTypeInfoInequality() {
-		MissingTypeInfo tpeInfo1 = new MissingTypeInfo(functionName, testException);
-		MissingTypeInfo tpeInfo2 = new MissingTypeInfo("alt" + functionName, testException);
-
-		assertNotEquals(tpeInfo1, tpeInfo2);
+	@Override
+	public void testSerialization() {
+		// this class is not intended to be serialized
 	}
 }

http://git-wip-us.apache.org/repos/asf/flink/blob/6cf4a93e/flink-core/src/test/java/org/apache/flink/api/java/typeutils/ObjectArrayTypeInfoTest.java
----------------------------------------------------------------------
diff --git a/flink-core/src/test/java/org/apache/flink/api/java/typeutils/ObjectArrayTypeInfoTest.java b/flink-core/src/test/java/org/apache/flink/api/java/typeutils/ObjectArrayTypeInfoTest.java
index f3b39c0..655c28a 100644
--- a/flink-core/src/test/java/org/apache/flink/api/java/typeutils/ObjectArrayTypeInfoTest.java
+++ b/flink-core/src/test/java/org/apache/flink/api/java/typeutils/ObjectArrayTypeInfoTest.java
@@ -18,41 +18,21 @@
 
 package org.apache.flink.api.java.typeutils;
 
-import org.apache.flink.util.TestLogger;
-import org.junit.Test;
-
 import java.util.ArrayList;
+import org.apache.flink.api.common.typeutils.TypeInformationTestBase;
 
-import static org.junit.Assert.*;
-
-public class ObjectArrayTypeInfoTest extends TestLogger {
-
-	public static class TestClass{}
-
-	@Test
-	public void testObjectArrayTypeInfoEquality() {
-		ObjectArrayTypeInfo<TestClass[], TestClass> tpeInfo1 = ObjectArrayTypeInfo.getInfoFor(
-			TestClass[].class,
-			new GenericTypeInfo<TestClass>(TestClass.class));
-
-		ObjectArrayTypeInfo<TestClass[], TestClass> tpeInfo2 = ObjectArrayTypeInfo.getInfoFor(
-			TestClass[].class,
-			new GenericTypeInfo<TestClass>(TestClass.class));
-
-		assertEquals(tpeInfo1, tpeInfo2);
-		assertEquals(tpeInfo1.hashCode(), tpeInfo2.hashCode());
+/**
+ * Test for {@link ObjectArrayTypeInfo}.
+ */
+public class ObjectArrayTypeInfoTest extends TypeInformationTestBase<ObjectArrayTypeInfo<?, ?>> {
+
+	@Override
+	protected ObjectArrayTypeInfo<?, ?>[] getTestData() {
+		return new ObjectArrayTypeInfo<?, ?>[] {
+			ObjectArrayTypeInfo.getInfoFor(TestClass[].class, new GenericTypeInfo<>(TestClass.class)),
+			ObjectArrayTypeInfo.getInfoFor(TestClass[].class, new PojoTypeInfo<>(TestClass.class, new ArrayList<PojoField>()))
+		};
 	}
 
-	@Test
-	public void testObjectArrayTypeInfoInequality() {
-		ObjectArrayTypeInfo<TestClass[], TestClass> tpeInfo1 = ObjectArrayTypeInfo.getInfoFor(
-			TestClass[].class,
-			new GenericTypeInfo<TestClass>(TestClass.class));
-
-		ObjectArrayTypeInfo<TestClass[], TestClass> tpeInfo2 = ObjectArrayTypeInfo.getInfoFor(
-			TestClass[].class,
-			new PojoTypeInfo<TestClass>(TestClass.class, new ArrayList<PojoField>()));
-
-		assertNotEquals(tpeInfo1, tpeInfo2);
-	}
+	public static class TestClass {}
 }

http://git-wip-us.apache.org/repos/asf/flink/blob/6cf4a93e/flink-core/src/test/java/org/apache/flink/api/java/typeutils/PojoTypeInfoTest.java
----------------------------------------------------------------------
diff --git a/flink-core/src/test/java/org/apache/flink/api/java/typeutils/PojoTypeInfoTest.java b/flink-core/src/test/java/org/apache/flink/api/java/typeutils/PojoTypeInfoTest.java
index dbe5115..0af4ed5 100644
--- a/flink-core/src/test/java/org/apache/flink/api/java/typeutils/PojoTypeInfoTest.java
+++ b/flink-core/src/test/java/org/apache/flink/api/java/typeutils/PojoTypeInfoTest.java
@@ -18,75 +18,21 @@
 
 package org.apache.flink.api.java.typeutils;
 
-import static org.junit.Assert.*;
-
-import org.apache.flink.api.common.typeinfo.TypeInformation;
-import org.apache.flink.util.InstantiationUtil;
-import org.junit.Test;
-
-import java.io.IOException;
-
-public class PojoTypeInfoTest {
-
-	@Test
-	public void testPojoTypeInfoEquality() {
-		try {
-			TypeInformation<TestPojo> info1 = TypeExtractor.getForClass(TestPojo.class);
-			TypeInformation<TestPojo> info2 = TypeExtractor.getForClass(TestPojo.class);
-			
-			assertTrue(info1 instanceof PojoTypeInfo);
-			assertTrue(info2 instanceof PojoTypeInfo);
-			
-			assertTrue(info1.equals(info2));
-			assertTrue(info1.hashCode() == info2.hashCode());
-		}
-		catch (Exception e) {
-			e.printStackTrace();
-			fail(e.getMessage());
-		}
-	}
-
-	@Test
-	public void testPojoTypeInfoInequality() {
-		try {
-			TypeInformation<TestPojo> info1 = TypeExtractor.getForClass(TestPojo.class);
-			TypeInformation<AlternatePojo> info2 = TypeExtractor.getForClass(AlternatePojo.class);
-
-			assertTrue(info1 instanceof PojoTypeInfo);
-			assertTrue(info2 instanceof PojoTypeInfo);
-
-			assertFalse(info1.equals(info2));
-		}
-		catch (Exception e) {
-			e.printStackTrace();
-			fail(e.getMessage());
-		}
-	}
+import org.apache.flink.api.common.typeutils.TypeInformationTestBase;
 
-	@Test
-	public void testSerializabilityOfPojoTypeInfo() throws IOException, ClassNotFoundException {
-		PojoTypeInfo<TestPojo> pojoTypeInfo = (PojoTypeInfo<TestPojo>)TypeExtractor.getForClass(TestPojo.class);
-
-		byte[] serializedPojoTypeInfo = InstantiationUtil.serializeObject(pojoTypeInfo);
-		PojoTypeInfo<TestPojo> deserializedPojoTypeInfo = (PojoTypeInfo<TestPojo>)InstantiationUtil.deserializeObject(
-			serializedPojoTypeInfo,
-			getClass().getClassLoader());
-
-		assertEquals(pojoTypeInfo, deserializedPojoTypeInfo);
-	}
-
-	@Test
-	public void testPrimitivePojo() {
-		TypeInformation<PrimitivePojo> info1 = TypeExtractor.getForClass(PrimitivePojo.class);
-
-		assertTrue(info1 instanceof PojoTypeInfo);
-	}
-
-	@Test
-	public void testUnderscorePojo() {
-		TypeInformation<UnderscorePojo> info1 = TypeExtractor.getForClass(UnderscorePojo.class);
-
-		assertTrue(info1 instanceof PojoTypeInfo);
+/**
+ * Test for {@link PojoTypeInfo}.
+ */
+public class PojoTypeInfoTest extends TypeInformationTestBase<PojoTypeInfo<?>>{
+
+	@Override
+	protected PojoTypeInfo<?>[] getTestData() {
+		return new PojoTypeInfo<?>[] {
+			(PojoTypeInfo<?>) TypeExtractor.getForClass(TestPojo.class),
+			(PojoTypeInfo<?>) TypeExtractor.getForClass(AlternatePojo.class),
+			(PojoTypeInfo<?>) TypeExtractor.getForClass(PrimitivePojo.class),
+			(PojoTypeInfo<?>) TypeExtractor.getForClass(UnderscorePojo.class)
+		};
 	}
 
 	public static final class TestPojo {

http://git-wip-us.apache.org/repos/asf/flink/blob/6cf4a93e/flink-core/src/test/java/org/apache/flink/api/java/typeutils/RowTypeInfoTest.java
----------------------------------------------------------------------
diff --git a/flink-core/src/test/java/org/apache/flink/api/java/typeutils/RowTypeInfoTest.java b/flink-core/src/test/java/org/apache/flink/api/java/typeutils/RowTypeInfoTest.java
index 45f616c..03d1e04 100644
--- a/flink-core/src/test/java/org/apache/flink/api/java/typeutils/RowTypeInfoTest.java
+++ b/flink-core/src/test/java/org/apache/flink/api/java/typeutils/RowTypeInfoTest.java
@@ -20,6 +20,7 @@ package org.apache.flink.api.java.typeutils;
 import org.apache.flink.api.common.typeinfo.BasicTypeInfo;
 import org.apache.flink.api.common.typeinfo.TypeInformation;
 import org.apache.flink.api.common.typeutils.CompositeType.FlatFieldDescriptor;
+import org.apache.flink.api.common.typeutils.TypeInformationTestBase;
 import org.junit.Test;
 
 import java.util.ArrayList;
@@ -29,7 +30,10 @@ import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotEquals;
 
-public class RowTypeInfoTest {
+/**
+ * Test for {@link RowTypeInfo}.
+ */
+public class RowTypeInfoTest extends TypeInformationTestBase<RowTypeInfo> {
 	private static TypeInformation<?>[] typeList = new TypeInformation<?>[]{
 		BasicTypeInfo.INT_TYPE_INFO,
 		new RowTypeInfo(
@@ -38,6 +42,15 @@ public class RowTypeInfoTest {
 		BasicTypeInfo.STRING_TYPE_INFO
 	};
 
+	@Override
+	protected RowTypeInfo[] getTestData() {
+		return new RowTypeInfo[] {
+			new RowTypeInfo(BasicTypeInfo.INT_TYPE_INFO, BasicTypeInfo.STRING_TYPE_INFO),
+			new RowTypeInfo(BasicTypeInfo.INT_TYPE_INFO, BasicTypeInfo.BOOLEAN_TYPE_INFO),
+			new RowTypeInfo(typeList)
+		};
+	}
+
 	@Test(expected = IllegalArgumentException.class)
 	public void testWrongNumberOfFieldNames() {
 		new RowTypeInfo(typeList, new String[]{"int", "string"});
@@ -92,13 +105,7 @@ public class RowTypeInfoTest {
 
 	@Test
 	public void testGetTypeAt() {
-		RowTypeInfo typeInfo = new RowTypeInfo(
-			BasicTypeInfo.INT_TYPE_INFO,
-			new RowTypeInfo(
-				BasicTypeInfo.SHORT_TYPE_INFO,
-				BasicTypeInfo.BIG_DEC_TYPE_INFO
-			),
-			BasicTypeInfo.STRING_TYPE_INFO);
+		RowTypeInfo typeInfo = new RowTypeInfo(typeList);
 
 
 		assertArrayEquals(new String[]{"f0", "f1", "f2"}, typeInfo.getFieldNames());
@@ -109,44 +116,11 @@ public class RowTypeInfoTest {
 	}
 
 	@Test
-	public void testRowTypeInfoEquality() {
-		RowTypeInfo typeInfo1 = new RowTypeInfo(
-			BasicTypeInfo.INT_TYPE_INFO,
-			BasicTypeInfo.STRING_TYPE_INFO);
-
-		RowTypeInfo typeInfo2 = new RowTypeInfo(
-			BasicTypeInfo.INT_TYPE_INFO,
-			BasicTypeInfo.STRING_TYPE_INFO);
-
-		assertEquals(typeInfo1, typeInfo2);
-		assertEquals(typeInfo1.hashCode(), typeInfo2.hashCode());
-	}
-
-	@Test
-	public void testRowTypeInfoInequality() {
-		RowTypeInfo typeInfo1 = new RowTypeInfo(
-			BasicTypeInfo.INT_TYPE_INFO,
-			BasicTypeInfo.STRING_TYPE_INFO);
-
-		RowTypeInfo typeInfo2 = new RowTypeInfo(
-			BasicTypeInfo.INT_TYPE_INFO,
-			BasicTypeInfo.BOOLEAN_TYPE_INFO);
-
-		assertNotEquals(typeInfo1, typeInfo2);
-		assertNotEquals(typeInfo1.hashCode(), typeInfo2.hashCode());
-	}
-
-	@Test
 	public void testNestedRowTypeInfo() {
-		RowTypeInfo typeInfo = new RowTypeInfo(
-			BasicTypeInfo.INT_TYPE_INFO,
-			new RowTypeInfo(
-				BasicTypeInfo.SHORT_TYPE_INFO,
-				BasicTypeInfo.BIG_DEC_TYPE_INFO
-			),
-			BasicTypeInfo.STRING_TYPE_INFO);
+		RowTypeInfo typeInfo = new RowTypeInfo(typeList);
 
 		assertEquals("Row(f0: Short, f1: BigDecimal)", typeInfo.getTypeAt("f1").toString());
 		assertEquals("Short", typeInfo.getTypeAt("f1.f0").toString());
 	}
+
 }

http://git-wip-us.apache.org/repos/asf/flink/blob/6cf4a93e/flink-core/src/test/java/org/apache/flink/api/java/typeutils/TupleTypeInfoTest.java
----------------------------------------------------------------------
diff --git a/flink-core/src/test/java/org/apache/flink/api/java/typeutils/TupleTypeInfoTest.java b/flink-core/src/test/java/org/apache/flink/api/java/typeutils/TupleTypeInfoTest.java
index b6cff34..3a98877 100644
--- a/flink-core/src/test/java/org/apache/flink/api/java/typeutils/TupleTypeInfoTest.java
+++ b/flink-core/src/test/java/org/apache/flink/api/java/typeutils/TupleTypeInfoTest.java
@@ -21,21 +21,31 @@ package org.apache.flink.api.java.typeutils;
 import org.apache.flink.api.common.ExecutionConfig;
 import org.apache.flink.api.common.typeinfo.BasicTypeInfo;
 import org.apache.flink.api.common.typeinfo.TypeInformation;
+import org.apache.flink.api.common.typeutils.TypeInformationTestBase;
 import org.apache.flink.api.common.typeutils.TypeSerializer;
 import org.apache.flink.api.java.tuple.Tuple1;
-import org.apache.flink.api.java.tuple.Tuple2;
-import org.apache.flink.util.TestLogger;
-import org.junit.Assert;
+import static org.junit.Assert.assertTrue;
 import org.junit.Test;
 
-public class TupleTypeInfoTest extends TestLogger {
+/**
+ * Test for {@link TupleTypeInfo}.
+ */
+public class TupleTypeInfoTest extends TypeInformationTestBase<TupleTypeInfo<?>> {
+
+	@Override
+	protected TupleTypeInfo<?>[] getTestData() {
+		return new TupleTypeInfo<?>[] {
+			new TupleTypeInfo<>(BasicTypeInfo.INT_TYPE_INFO, BasicTypeInfo.STRING_TYPE_INFO),
+			new TupleTypeInfo<>(BasicTypeInfo.INT_TYPE_INFO, BasicTypeInfo.BOOLEAN_TYPE_INFO)
+		};
+	}
 
 	@Test
 	public void testTupleTypeInfoSymmetricEqualityRelation() {
 		TupleTypeInfo<Tuple1<Integer>> tupleTypeInfo = new TupleTypeInfo<>(BasicTypeInfo.INT_TYPE_INFO);
 
 		TupleTypeInfoBase<Tuple1> anonymousTupleTypeInfo = new TupleTypeInfoBase<Tuple1>(
-			(Class<Tuple1>)Tuple1.class,
+			Tuple1.class,
 			(TypeInformation<?>)BasicTypeInfo.INT_TYPE_INFO) {
 
 			private static final long serialVersionUID = -7985593598027660836L;
@@ -64,33 +74,6 @@ public class TupleTypeInfoTest extends TestLogger {
 		boolean tupleVsAnonymous = tupleTypeInfo.equals(anonymousTupleTypeInfo);
 		boolean anonymousVsTuple = anonymousTupleTypeInfo.equals(tupleTypeInfo);
 
-		Assert.assertTrue("Equality relation should be symmetric", tupleVsAnonymous == anonymousVsTuple);
-	}
-
-	@Test
-	public void testTupleTypeInfoEquality() {
-		TupleTypeInfo<Tuple2<Integer, String>> tupleTypeInfo1 = new TupleTypeInfo<>(
-			BasicTypeInfo.INT_TYPE_INFO,
-			BasicTypeInfo.STRING_TYPE_INFO);
-
-		TupleTypeInfo<Tuple2<Integer, String>> tupleTypeInfo2 = new TupleTypeInfo<>(
-			BasicTypeInfo.INT_TYPE_INFO,
-			BasicTypeInfo.STRING_TYPE_INFO);
-
-		Assert.assertEquals(tupleTypeInfo1, tupleTypeInfo2);
-		Assert.assertEquals(tupleTypeInfo1.hashCode(), tupleTypeInfo2.hashCode());
-	}
-
-	@Test
-	public void testTupleTypeInfoInequality() {
-		TupleTypeInfo<Tuple2<Integer, String>> tupleTypeInfo1 = new TupleTypeInfo<>(
-			BasicTypeInfo.INT_TYPE_INFO,
-			BasicTypeInfo.STRING_TYPE_INFO);
-
-		TupleTypeInfo<Tuple2<Integer, Boolean>> tupleTypeInfo2 = new TupleTypeInfo<>(
-			BasicTypeInfo.INT_TYPE_INFO,
-			BasicTypeInfo.BOOLEAN_TYPE_INFO);
-
-		Assert.assertNotEquals(tupleTypeInfo1, tupleTypeInfo2);
+		assertTrue("Equality relation should be symmetric", tupleVsAnonymous == anonymousVsTuple);
 	}
 }

http://git-wip-us.apache.org/repos/asf/flink/blob/6cf4a93e/flink-core/src/test/java/org/apache/flink/api/java/typeutils/ValueTypeInfoTest.java
----------------------------------------------------------------------
diff --git a/flink-core/src/test/java/org/apache/flink/api/java/typeutils/ValueTypeInfoTest.java b/flink-core/src/test/java/org/apache/flink/api/java/typeutils/ValueTypeInfoTest.java
index 4a579c8..b67d754 100644
--- a/flink-core/src/test/java/org/apache/flink/api/java/typeutils/ValueTypeInfoTest.java
+++ b/flink-core/src/test/java/org/apache/flink/api/java/typeutils/ValueTypeInfoTest.java
@@ -18,6 +18,7 @@
 
 package org.apache.flink.api.java.typeutils;
 
+import org.apache.flink.api.common.typeutils.TypeInformationTestBase;
 import org.apache.flink.core.memory.DataInputView;
 import org.apache.flink.core.memory.DataOutputView;
 import org.apache.flink.types.Record;
@@ -30,7 +31,26 @@ import java.io.IOException;
 
 import static org.junit.Assert.*;
 
-public class ValueTypeInfoTest extends TestLogger {
+/**
+ * Test for {@link ListTypeInfo}.
+ */
+public class ValueTypeInfoTest extends TypeInformationTestBase<ValueTypeInfo<?>> {
+
+	@Override
+	protected ValueTypeInfo<?>[] getTestData() {
+		return new ValueTypeInfo<?>[] {
+			new ValueTypeInfo<>(TestClass.class),
+			new ValueTypeInfo<>(AlternativeClass.class),
+			new ValueTypeInfo<>(Record.class),
+		};
+	}
+
+	@Test
+	public void testValueTypeEqualsWithNull() throws Exception {
+		ValueTypeInfo<Record> tpeInfo = new ValueTypeInfo<>(Record.class);
+
+		Assert.assertFalse(tpeInfo.equals(null));
+	}
 
 	public static class TestClass implements Value {
 		private static final long serialVersionUID = -492760806806568285L;
@@ -60,28 +80,4 @@ public class ValueTypeInfoTest extends TestLogger {
 
 		}
 	}
-
-	@Test
-	public void testValueTypeInfoEquality() {
-		ValueTypeInfo<TestClass> tpeInfo1 = new ValueTypeInfo<>(TestClass.class);
-		ValueTypeInfo<TestClass> tpeInfo2 = new ValueTypeInfo<>(TestClass.class);
-
-		assertEquals(tpeInfo1, tpeInfo2);
-		assertEquals(tpeInfo1.hashCode(), tpeInfo2.hashCode());
-	}
-
-	@Test
-	public void testValueTyepInfoInequality() {
-		ValueTypeInfo<TestClass> tpeInfo1 = new ValueTypeInfo<>(TestClass.class);
-		ValueTypeInfo<AlternativeClass> tpeInfo2 = new ValueTypeInfo<>(AlternativeClass.class);
-
-		assertNotEquals(tpeInfo1, tpeInfo2);
-	}
-
-	@Test
-	public void testValueTypeEqualsWithNull() throws Exception {
-		ValueTypeInfo<Record> tpeInfo = new ValueTypeInfo<>(Record.class);
-
-		Assert.assertFalse(tpeInfo.equals(null));
-	}
 }

http://git-wip-us.apache.org/repos/asf/flink/blob/6cf4a93e/flink-core/src/test/java/org/apache/flink/types/BasicArrayTypeInfoTest.java
----------------------------------------------------------------------
diff --git a/flink-core/src/test/java/org/apache/flink/types/BasicArrayTypeInfoTest.java b/flink-core/src/test/java/org/apache/flink/types/BasicArrayTypeInfoTest.java
deleted file mode 100644
index 3e086ff..0000000
--- a/flink-core/src/test/java/org/apache/flink/types/BasicArrayTypeInfoTest.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * 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.types;
-
-import org.apache.flink.api.common.typeinfo.BasicArrayTypeInfo;
-import org.apache.flink.util.TestLogger;
-import org.junit.Test;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotEquals;
-
-public class BasicArrayTypeInfoTest extends TestLogger {
-
-	static Class<?>[] classes = {String[].class, Integer[].class, Boolean[].class, Byte[].class,
-		Short[].class, Long[].class, Float[].class, Double[].class, Character[].class};
-
-	@Test
-	public void testBasicArrayTypeInfoEquality() {
-		for (Class<?> clazz: classes) {
-			BasicArrayTypeInfo<?, ?> tpeInfo1 = BasicArrayTypeInfo.getInfoFor(clazz);
-			BasicArrayTypeInfo<?, ?> tpeInfo2 = BasicArrayTypeInfo.getInfoFor(clazz);
-
-			assertEquals(tpeInfo1, tpeInfo2);
-			assertEquals(tpeInfo1.hashCode(), tpeInfo2.hashCode());
-		}
-	}
-
-	@Test
-	public void testBasicArrayTypeInfoInequality() {
-		for (Class<?> clazz1: classes) {
-			for (Class<?> clazz2: classes) {
-				if (!clazz1.equals(clazz2)) {
-					BasicArrayTypeInfo<?, ?> tpeInfo1 = BasicArrayTypeInfo.getInfoFor(clazz1);
-					BasicArrayTypeInfo<?, ?> tpeInfo2 = BasicArrayTypeInfo.getInfoFor(clazz2);
-					assertNotEquals(tpeInfo1, tpeInfo2);
-				}
-			}
-		}
-	}
-}

http://git-wip-us.apache.org/repos/asf/flink/blob/6cf4a93e/flink-core/src/test/java/org/apache/flink/types/NothingTypeInfoTest.java
----------------------------------------------------------------------
diff --git a/flink-core/src/test/java/org/apache/flink/types/NothingTypeInfoTest.java b/flink-core/src/test/java/org/apache/flink/types/NothingTypeInfoTest.java
deleted file mode 100644
index a7976ee..0000000
--- a/flink-core/src/test/java/org/apache/flink/types/NothingTypeInfoTest.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * 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.types;
-
-import org.apache.flink.api.common.typeinfo.BasicTypeInfo;
-import org.apache.flink.api.common.typeinfo.NothingTypeInfo;
-import org.apache.flink.util.TestLogger;
-import org.junit.Test;
-
-import static org.junit.Assert.*;
-
-public class NothingTypeInfoTest extends TestLogger {
-
-	@Test
-	public void testNothingTypeInfoEquality() {
-		NothingTypeInfo tpeInfo1 = new NothingTypeInfo();
-		NothingTypeInfo tpeInfo2 = new NothingTypeInfo();
-
-		assertEquals(tpeInfo1, tpeInfo2);
-		assertEquals(tpeInfo1.hashCode(), tpeInfo2.hashCode());
-	}
-
-	@Test
-	public void testNothingTypeInfoInequality() {
-		NothingTypeInfo tpeInfo1 = new NothingTypeInfo();
-		BasicTypeInfo<Integer> tpeInfo2 = BasicTypeInfo.getInfoFor(Integer.class);
-
-		assertNotEquals(tpeInfo1, tpeInfo2);
-		assertNotEquals(tpeInfo2, tpeInfo1);
-	}
-}

http://git-wip-us.apache.org/repos/asf/flink/blob/6cf4a93e/flink-core/src/test/java/org/apache/flink/types/PrimitiveArrayTypeInfoTest.java
----------------------------------------------------------------------
diff --git a/flink-core/src/test/java/org/apache/flink/types/PrimitiveArrayTypeInfoTest.java b/flink-core/src/test/java/org/apache/flink/types/PrimitiveArrayTypeInfoTest.java
deleted file mode 100644
index 7ef14f9..0000000
--- a/flink-core/src/test/java/org/apache/flink/types/PrimitiveArrayTypeInfoTest.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * 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.types;
-
-import org.apache.flink.api.common.typeinfo.PrimitiveArrayTypeInfo;
-import org.apache.flink.util.TestLogger;
-import org.junit.Test;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotEquals;
-
-public class PrimitiveArrayTypeInfoTest extends TestLogger {
-
-	static Class<?>[] classes = {int[].class, boolean[].class, byte[].class,
-		short[].class, long[].class, float[].class, double[].class, char[].class};
-
-	@Test
-	public void testPrimitiveArrayTypeInfoEquality() {
-		for (Class<?> clazz: classes) {
-			PrimitiveArrayTypeInfo<?> tpeInfo1 = PrimitiveArrayTypeInfo.getInfoFor(clazz);
-			PrimitiveArrayTypeInfo<?> tpeInfo2 = PrimitiveArrayTypeInfo.getInfoFor(clazz);
-
-			assertEquals(tpeInfo1, tpeInfo2);
-			assertEquals(tpeInfo1.hashCode(), tpeInfo2.hashCode());
-		}
-	}
-
-	@Test
-	public void testBasicArrayTypeInfoInequality() {
-		for (Class<?> clazz1: classes) {
-			for (Class<?> clazz2: classes) {
-				if (!clazz1.equals(clazz2)) {
-					PrimitiveArrayTypeInfo<?> tpeInfo1 = PrimitiveArrayTypeInfo.getInfoFor(clazz1);
-					PrimitiveArrayTypeInfo<?> tpeInfo2 = PrimitiveArrayTypeInfo.getInfoFor(clazz2);
-					assertNotEquals(tpeInfo1, tpeInfo2);
-				}
-			}
-		}
-	}
-}

http://git-wip-us.apache.org/repos/asf/flink/blob/6cf4a93e/flink-scala/pom.xml
----------------------------------------------------------------------
diff --git a/flink-scala/pom.xml b/flink-scala/pom.xml
index cb9b538..7be1e29 100644
--- a/flink-scala/pom.xml
+++ b/flink-scala/pom.xml
@@ -220,6 +220,19 @@ under the License.
 				</configuration>
 			</plugin>
 
+			<!-- Add Scala test classes to test jar in order to test Scala type information. -->
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-jar-plugin</artifactId>
+				<executions>
+					<execution>
+						<goals>
+							<goal>test-jar</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+
 		</plugins>
 	</build>
 

http://git-wip-us.apache.org/repos/asf/flink/blob/6cf4a93e/flink-scala/src/test/scala/org/apache/flink/api/scala/typeutils/CaseClassTypeInfoTest.scala
----------------------------------------------------------------------
diff --git a/flink-scala/src/test/scala/org/apache/flink/api/scala/typeutils/CaseClassTypeInfoTest.scala b/flink-scala/src/test/scala/org/apache/flink/api/scala/typeutils/CaseClassTypeInfoTest.scala
index 479483f..088cc70 100644
--- a/flink-scala/src/test/scala/org/apache/flink/api/scala/typeutils/CaseClassTypeInfoTest.scala
+++ b/flink-scala/src/test/scala/org/apache/flink/api/scala/typeutils/CaseClassTypeInfoTest.scala
@@ -20,54 +20,27 @@ package org.apache.flink.api.scala.typeutils
 
 import org.apache.flink.api.common.ExecutionConfig
 import org.apache.flink.api.common.typeinfo.BasicTypeInfo
-import org.apache.flink.api.common.typeutils.TypeSerializer
-import org.apache.flink.util.TestLogger
-import org.junit.Test
-import org.scalatest.junit.JUnitSuiteLike
+import org.apache.flink.api.common.typeutils.{TypeInformationTestBase, TypeSerializer}
 
-class CaseClassTypeInfoTest extends TestLogger with JUnitSuiteLike {
+/**
+  * Test for [[CaseClassTypeInfo]].
+  */
+class CaseClassTypeInfoTest extends TypeInformationTestBase[CaseClassTypeInfo[_]] {
 
-  @Test
-  def testCaseClassTypeInfoEquality(): Unit = {
-    val tpeInfo1 = new CaseClassTypeInfo[Tuple2[Int, String]](
-      classOf[Tuple2[Int, String]],
+  override protected def getTestData: Array[CaseClassTypeInfo[_]] = Array(
+    new CaseClassTypeInfo[(Int, String)](
+      classOf[(Int, String)],
       Array(),
       Array(BasicTypeInfo.INT_TYPE_INFO, BasicTypeInfo.STRING_TYPE_INFO),
       Array("_1", "_2")) {
       override def createSerializer(config: ExecutionConfig): TypeSerializer[(Int, String)] = ???
-    }
-
-    val tpeInfo2 = new CaseClassTypeInfo[Tuple2[Int, String]](
-      classOf[Tuple2[Int, String]],
-      Array(),
-      Array(BasicTypeInfo.INT_TYPE_INFO, BasicTypeInfo.STRING_TYPE_INFO),
-      Array("_1", "_2")) {
-      override def createSerializer(config: ExecutionConfig): TypeSerializer[(Int, String)] = ???
-    }
-
-    assert(tpeInfo1.equals(tpeInfo2))
-    assert(tpeInfo1.hashCode() == tpeInfo2.hashCode())
-  }
-
-  @Test
-  def testCaseClassTypeInfoInequality(): Unit = {
-    val tpeInfo1 = new CaseClassTypeInfo[Tuple2[Int, String]](
-      classOf[Tuple2[Int, String]],
-      Array(),
-      Array(BasicTypeInfo.INT_TYPE_INFO, BasicTypeInfo.STRING_TYPE_INFO),
-      Array("_1", "_2")) {
-      override def createSerializer(config: ExecutionConfig): TypeSerializer[(Int, String)] = ???
-    }
-
-    val tpeInfo2 = new CaseClassTypeInfo[Tuple2[Int, Boolean]](
-      classOf[Tuple2[Int, Boolean]],
+    },
+    new CaseClassTypeInfo[(Int, Boolean)](
+      classOf[(Int, Boolean)],
       Array(),
       Array(BasicTypeInfo.INT_TYPE_INFO, BasicTypeInfo.BOOLEAN_TYPE_INFO),
       Array("_1", "_2")) {
       override def createSerializer(config: ExecutionConfig): TypeSerializer[(Int, Boolean)] = ???
     }
-
-    assert(!tpeInfo1.equals(tpeInfo2))
-  }
-
+  )
 }

http://git-wip-us.apache.org/repos/asf/flink/blob/6cf4a93e/flink-scala/src/test/scala/org/apache/flink/api/scala/typeutils/EitherTypeInfoTest.scala
----------------------------------------------------------------------
diff --git a/flink-scala/src/test/scala/org/apache/flink/api/scala/typeutils/EitherTypeInfoTest.scala b/flink-scala/src/test/scala/org/apache/flink/api/scala/typeutils/EitherTypeInfoTest.scala
index e23a6a0..fc9811e 100644
--- a/flink-scala/src/test/scala/org/apache/flink/api/scala/typeutils/EitherTypeInfoTest.scala
+++ b/flink-scala/src/test/scala/org/apache/flink/api/scala/typeutils/EitherTypeInfoTest.scala
@@ -19,41 +19,24 @@
 package org.apache.flink.api.scala.typeutils
 
 import org.apache.flink.api.common.typeinfo.BasicTypeInfo
-import org.apache.flink.util.TestLogger
-import org.junit.Test
-import org.scalatest.junit.JUnitSuiteLike
+import org.apache.flink.api.common.typeutils.TypeInformationTestBase
 
-class EitherTypeInfoTest extends TestLogger with JUnitSuiteLike {
+/**
+  * Test for [[EitherTypeInfo]].
+  */
+class EitherTypeInfoTest extends TypeInformationTestBase[EitherTypeInfo[_, _, _]] {
 
-  @Test
-  def testEitherTypeEquality(): Unit = {
-    val eitherTypeInfo1 = new EitherTypeInfo[Integer, String, Either[Integer, String]](
-      classOf[Either[Integer,String]],
-      BasicTypeInfo.INT_TYPE_INFO,
-      BasicTypeInfo.STRING_TYPE_INFO
-    )
-    val eitherTypeInfo2 = new EitherTypeInfo[Integer, String, Either[Integer, String]](
-      classOf[Either[Integer,String]],
-      BasicTypeInfo.INT_TYPE_INFO,
-      BasicTypeInfo.STRING_TYPE_INFO
-    )
-
-    assert(eitherTypeInfo1.equals(eitherTypeInfo2))
-    assert(eitherTypeInfo1.hashCode() == eitherTypeInfo2.hashCode())
-  }
-
-  @Test
-  def testEitherTypeInequality(): Unit = {
-    val eitherTypeInfo1 = new EitherTypeInfo[Integer, Integer, Either[Integer, Integer]](
+  override protected def getTestData: Array[EitherTypeInfo[_, _, _]] = Array(
+    new EitherTypeInfo[Integer, Integer, Either[Integer, Integer]](
       classOf[Either[Integer,Integer]],
       BasicTypeInfo.INT_TYPE_INFO,
       BasicTypeInfo.INT_TYPE_INFO
-    )
-    val eitherTypeInfo2 = new EitherTypeInfo[Integer, String, Either[Integer, String]](
+    ),
+    new EitherTypeInfo[Integer, String, Either[Integer, String]](
       classOf[Either[Integer,String]],
       BasicTypeInfo.INT_TYPE_INFO,
       BasicTypeInfo.STRING_TYPE_INFO
     )
-    assert(!eitherTypeInfo1.equals(eitherTypeInfo2))
-  }
+  )
+
 }

http://git-wip-us.apache.org/repos/asf/flink/blob/6cf4a93e/flink-scala/src/test/scala/org/apache/flink/api/scala/typeutils/EnumValueTypeInfoTest.scala
----------------------------------------------------------------------
diff --git a/flink-scala/src/test/scala/org/apache/flink/api/scala/typeutils/EnumValueTypeInfoTest.scala b/flink-scala/src/test/scala/org/apache/flink/api/scala/typeutils/EnumValueTypeInfoTest.scala
index acd6a39..14ca0e8 100644
--- a/flink-scala/src/test/scala/org/apache/flink/api/scala/typeutils/EnumValueTypeInfoTest.scala
+++ b/flink-scala/src/test/scala/org/apache/flink/api/scala/typeutils/EnumValueTypeInfoTest.scala
@@ -18,39 +18,23 @@
 
 package org.apache.flink.api.scala.typeutils
 
+import org.apache.flink.api.common.typeutils.TypeInformationTestBase
 import org.apache.flink.api.scala.typeutils.AlternateEnumeration.AlternateEnumeration
 import org.apache.flink.api.scala.typeutils.TestEnumeration.TestEnumeration
-import org.apache.flink.util.TestLogger
-import org.junit.Test
-import org.scalatest.junit.JUnitSuiteLike
 
-class EnumValueTypeInfoTest extends TestLogger with JUnitSuiteLike {
+/**
+  * Test for [[EnumValueTypeInfo]].
+  */
+class EnumValueTypeInfoTest extends TypeInformationTestBase[EnumValueTypeInfo[_]] {
 
-  @Test
-  def testEnumValueTypeInfoEquality(): Unit = {
-    val enumTypeInfo1 = new EnumValueTypeInfo[TestEnumeration.type](
+  override protected def getTestData: Array[EnumValueTypeInfo[_]] = Array(
+    new EnumValueTypeInfo[TestEnumeration.type](
       TestEnumeration,
-      classOf[TestEnumeration])
-    val enumTypeInfo2 = new EnumValueTypeInfo[TestEnumeration.type](
-      TestEnumeration,
-      classOf[TestEnumeration])
-
-    assert(enumTypeInfo1.equals(enumTypeInfo2))
-    assert(enumTypeInfo1.hashCode() == enumTypeInfo2.hashCode())
-  }
-
-  @Test
-  def testEnumValueTypeInfoInequality(): Unit = {
-    val enumTypeInfo1 = new EnumValueTypeInfo[TestEnumeration.type](
-      TestEnumeration,
-      classOf[TestEnumeration])
-    val enumTypeInfo2 = new EnumValueTypeInfo[AlternateEnumeration.type](
+      classOf[TestEnumeration]),
+    new EnumValueTypeInfo[AlternateEnumeration.type](
       AlternateEnumeration,
       classOf[AlternateEnumeration])
-
-    assert(!enumTypeInfo1.equals(enumTypeInfo2))
-  }
-
+  )
 }
 
 object TestEnumeration extends Enumeration {

http://git-wip-us.apache.org/repos/asf/flink/blob/6cf4a93e/flink-scala/src/test/scala/org/apache/flink/api/scala/typeutils/OptionTypeInfoTest.scala
----------------------------------------------------------------------
diff --git a/flink-scala/src/test/scala/org/apache/flink/api/scala/typeutils/OptionTypeInfoTest.scala b/flink-scala/src/test/scala/org/apache/flink/api/scala/typeutils/OptionTypeInfoTest.scala
index b765658..3effb0d 100644
--- a/flink-scala/src/test/scala/org/apache/flink/api/scala/typeutils/OptionTypeInfoTest.scala
+++ b/flink-scala/src/test/scala/org/apache/flink/api/scala/typeutils/OptionTypeInfoTest.scala
@@ -19,36 +19,16 @@
 package org.apache.flink.api.scala.typeutils
 
 import org.apache.flink.api.common.typeinfo.BasicTypeInfo
-import org.apache.flink.api.java.typeutils.GenericTypeInfo
-import org.apache.flink.util.TestLogger
-import org.junit.Test
-import org.scalatest.junit.{JUnitSuiteLike, JUnitSuite}
+import org.apache.flink.api.common.typeutils.TypeInformationTestBase
 
-class OptionTypeInfoTest extends TestLogger with JUnitSuiteLike {
+/**
+  * Test for [[OptionTypeInfo]].
+  */
+class OptionTypeInfoTest extends TypeInformationTestBase[OptionTypeInfo[_, _]] {
 
-  @Test
-  def testOptionTypeEquality: Unit = {
-    val optionTypeInfo1 = new OptionTypeInfo[Integer, Option[Integer]](BasicTypeInfo.INT_TYPE_INFO)
-    val optionTypeInfo2 = new OptionTypeInfo[Integer, Option[Integer]](BasicTypeInfo.INT_TYPE_INFO)
-
-    assert(optionTypeInfo1.equals(optionTypeInfo2))
-    assert(optionTypeInfo1.hashCode == optionTypeInfo2.hashCode)
-  }
-
-  @Test
-  def testOptionTypeInequality: Unit = {
-    val optionTypeInfo1 = new OptionTypeInfo[Integer, Option[Integer]](BasicTypeInfo.INT_TYPE_INFO)
-    val optionTypeInfo2 = new OptionTypeInfo[String, Option[String]](BasicTypeInfo.STRING_TYPE_INFO)
-
-    assert(!optionTypeInfo1.equals(optionTypeInfo2))
-  }
-
-  @Test
-  def testOptionTypeInequalityWithDifferentType: Unit = {
-    val optionTypeInfo = new OptionTypeInfo[Integer, Option[Integer]](BasicTypeInfo.INT_TYPE_INFO)
-    val genericTypeInfo = new GenericTypeInfo[Double](Double.getClass.asInstanceOf[Class[Double]])
-
-    assert(!optionTypeInfo.equals(genericTypeInfo))
-  }
+  override protected def getTestData: Array[OptionTypeInfo[_, _]] = Array(
+    new OptionTypeInfo[Integer, Option[Integer]](BasicTypeInfo.INT_TYPE_INFO),
+    new OptionTypeInfo[String, Option[String]](BasicTypeInfo.STRING_TYPE_INFO)
+  )
 }
 

http://git-wip-us.apache.org/repos/asf/flink/blob/6cf4a93e/flink-scala/src/test/scala/org/apache/flink/api/scala/typeutils/ScalaNothingTypeInfoTest.scala
----------------------------------------------------------------------
diff --git a/flink-scala/src/test/scala/org/apache/flink/api/scala/typeutils/ScalaNothingTypeInfoTest.scala b/flink-scala/src/test/scala/org/apache/flink/api/scala/typeutils/ScalaNothingTypeInfoTest.scala
new file mode 100644
index 0000000..0193de9
--- /dev/null
+++ b/flink-scala/src/test/scala/org/apache/flink/api/scala/typeutils/ScalaNothingTypeInfoTest.scala
@@ -0,0 +1,31 @@
+/*
+ * 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.scala.typeutils
+
+import org.apache.flink.api.common.typeutils.TypeInformationTestBase
+
+/**
+  * Test for [[ScalaNothingTypeInfo]].
+  */
+class ScalaNothingTypeInfoTest extends TypeInformationTestBase[ScalaNothingTypeInfo] {
+
+  override protected def getTestData: Array[ScalaNothingTypeInfo] = Array(
+    new ScalaNothingTypeInfo
+  )
+}

http://git-wip-us.apache.org/repos/asf/flink/blob/6cf4a93e/flink-scala/src/test/scala/org/apache/flink/api/scala/typeutils/TraversableTypeInfoTest.scala
----------------------------------------------------------------------
diff --git a/flink-scala/src/test/scala/org/apache/flink/api/scala/typeutils/TraversableTypeInfoTest.scala b/flink-scala/src/test/scala/org/apache/flink/api/scala/typeutils/TraversableTypeInfoTest.scala
index e83b326..f337de1 100644
--- a/flink-scala/src/test/scala/org/apache/flink/api/scala/typeutils/TraversableTypeInfoTest.scala
+++ b/flink-scala/src/test/scala/org/apache/flink/api/scala/typeutils/TraversableTypeInfoTest.scala
@@ -19,50 +19,26 @@
 package org.apache.flink.api.scala.typeutils
 
 import org.apache.flink.api.common.ExecutionConfig
-import org.apache.flink.api.common.typeinfo.{TypeInformation, BasicTypeInfo}
-import org.apache.flink.api.common.typeutils.TypeSerializer
-import org.apache.flink.util.TestLogger
-import org.junit.Test
-import org.scalatest.junit.JUnitSuiteLike
+import org.apache.flink.api.common.typeinfo.{BasicTypeInfo, TypeInformation}
+import org.apache.flink.api.common.typeutils.{TypeInformationTestBase, TypeSerializer}
 
-class TraversableTypeInfoTest extends TestLogger with JUnitSuiteLike {
+/**
+  * Test for [[TraversableTypeInfo]].
+  */
+class TraversableTypeInfoTest extends TypeInformationTestBase[TraversableTypeInfo[_, _]] {
 
-  @Test
-  def testTraversableTypeInfoEquality(): Unit = {
-    val tpeInfo1 = new TraversableTypeInfo[Seq[Int], Int](
+  override protected def getTestData: Array[TraversableTypeInfo[_, _]] = Array(
+    new TraversableTypeInfo[Seq[Int], Int](
       classOf[Seq[Int]],
       BasicTypeInfo.INT_TYPE_INFO.asInstanceOf[TypeInformation[Int]]) {
       override def createSerializer(executionConfig: ExecutionConfig): TypeSerializer[Seq[Int]] =
         ???
-    }
-
-    val tpeInfo2 = new TraversableTypeInfo[Seq[Int], Int](
-      classOf[Seq[Int]],
-      BasicTypeInfo.INT_TYPE_INFO.asInstanceOf[TypeInformation[Int]]) {
-      override def createSerializer(executionConfig: ExecutionConfig): TypeSerializer[Seq[Int]] =
-        ???
-    }
-
-    assert(tpeInfo1.equals(tpeInfo2))
-  }
-
-  @Test
-  def testTraversableTypeInfoInequality(): Unit = {
-    val tpeInfo1 = new TraversableTypeInfo[Seq[Int], Int](
-      classOf[Seq[Int]],
-      BasicTypeInfo.INT_TYPE_INFO.asInstanceOf[TypeInformation[Int]]) {
-      override def createSerializer(executionConfig: ExecutionConfig): TypeSerializer[Seq[Int]] =
-        ???
-    }
-
-    val tpeInfo2 = new TraversableTypeInfo[List[Int], Int](
+    },
+    new TraversableTypeInfo[List[Int], Int](
       classOf[List[Int]],
       BasicTypeInfo.INT_TYPE_INFO.asInstanceOf[TypeInformation[Int]]) {
       override def createSerializer(executionConfig: ExecutionConfig): TypeSerializer[List[Int]] =
         ???
     }
-
-    assert(!tpeInfo1.equals(tpeInfo2))
-  }
-
+  )
 }

http://git-wip-us.apache.org/repos/asf/flink/blob/6cf4a93e/flink-scala/src/test/scala/org/apache/flink/api/scala/typeutils/TryTypeInfoTest.scala
----------------------------------------------------------------------
diff --git a/flink-scala/src/test/scala/org/apache/flink/api/scala/typeutils/TryTypeInfoTest.scala b/flink-scala/src/test/scala/org/apache/flink/api/scala/typeutils/TryTypeInfoTest.scala
index 5e68951..05d1821 100644
--- a/flink-scala/src/test/scala/org/apache/flink/api/scala/typeutils/TryTypeInfoTest.scala
+++ b/flink-scala/src/test/scala/org/apache/flink/api/scala/typeutils/TryTypeInfoTest.scala
@@ -19,39 +19,17 @@
 package org.apache.flink.api.scala.typeutils
 
 import org.apache.flink.api.common.typeinfo.BasicTypeInfo
-import org.apache.flink.api.java.typeutils.GenericTypeInfo
-import org.apache.flink.util.TestLogger
-import org.junit.Test
-import org.scalatest.junit.JUnitSuiteLike
+import org.apache.flink.api.common.typeutils.TypeInformationTestBase
 
 import scala.util.Try
 
-class TryTypeInfoTest extends TestLogger with JUnitSuiteLike {
+/**
+  * Test for [[TryTypeInfo]].
+  */
+class TryTypeInfoTest extends TypeInformationTestBase[TryTypeInfo[_, _]] {
 
-  @Test
-  def testTryTypeEquality(): Unit = {
-    val TryTypeInfo1 = new TryTypeInfo[Integer, Try[Integer]](BasicTypeInfo.INT_TYPE_INFO)
-    val TryTypeInfo2 = new TryTypeInfo[Integer, Try[Integer]](BasicTypeInfo.INT_TYPE_INFO)
-
-    assert(TryTypeInfo1.equals(TryTypeInfo2))
-    assert(TryTypeInfo1.hashCode == TryTypeInfo2.hashCode)
-  }
-
-  @Test
-  def testTryTypeInequality(): Unit = {
-    val TryTypeInfo1 = new TryTypeInfo[Integer, Try[Integer]](BasicTypeInfo.INT_TYPE_INFO)
-    val TryTypeInfo2 = new TryTypeInfo[String, Try[String]](BasicTypeInfo.STRING_TYPE_INFO)
-
-    //noinspection ComparingUnrelatedTypes
-    assert(!TryTypeInfo1.equals(TryTypeInfo2))
-  }
-
-  @Test
-  def testTryTypeInequalityWithDifferentType(): Unit = {
-    val TryTypeInfo = new TryTypeInfo[Integer, Try[Integer]](BasicTypeInfo.INT_TYPE_INFO)
-    val genericTypeInfo = new GenericTypeInfo[Double](Double.getClass.asInstanceOf[Class[Double]])
-
-    //noinspection ComparingUnrelatedTypes
-    assert(!TryTypeInfo.equals(genericTypeInfo))
-  }
+  override protected def getTestData: Array[TryTypeInfo[_, _]] = Array(
+    new TryTypeInfo[Integer, Try[Integer]](BasicTypeInfo.INT_TYPE_INFO),
+    new TryTypeInfo[String, Try[String]](BasicTypeInfo.STRING_TYPE_INFO)
+  )
 }

http://git-wip-us.apache.org/repos/asf/flink/blob/6cf4a93e/flink-scala/src/test/scala/org/apache/flink/api/scala/typeutils/UnitTypeInfoTest.scala
----------------------------------------------------------------------
diff --git a/flink-scala/src/test/scala/org/apache/flink/api/scala/typeutils/UnitTypeInfoTest.scala b/flink-scala/src/test/scala/org/apache/flink/api/scala/typeutils/UnitTypeInfoTest.scala
new file mode 100644
index 0000000..1f22c5a
--- /dev/null
+++ b/flink-scala/src/test/scala/org/apache/flink/api/scala/typeutils/UnitTypeInfoTest.scala
@@ -0,0 +1,31 @@
+/*
+ * 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.scala.typeutils
+
+import org.apache.flink.api.common.typeutils.TypeInformationTestBase
+
+/**
+  * Test for [[UnitTypeInfo]].
+  */
+class UnitTypeInfoTest extends TypeInformationTestBase[UnitTypeInfo] {
+
+  override protected def getTestData: Array[UnitTypeInfo] = Array(
+    new UnitTypeInfo
+  )
+}

http://git-wip-us.apache.org/repos/asf/flink/blob/6cf4a93e/flink-tests/pom.xml
----------------------------------------------------------------------
diff --git a/flink-tests/pom.xml b/flink-tests/pom.xml
index ebee6ef..b67edbb 100644
--- a/flink-tests/pom.xml
+++ b/flink-tests/pom.xml
@@ -94,11 +94,19 @@ under the License.
 			<version>${project.version}</version>
 			<scope>test</scope>
 		</dependency>
-		
+
+		<dependency>
+			<groupId>org.apache.flink</groupId>
+			<artifactId>flink-scala_2.10</artifactId>
+			<version>${project.version}</version>
+			<scope>test</scope>
+		</dependency>
+
 		<dependency>
 			<groupId>org.apache.flink</groupId>
 			<artifactId>flink-scala_2.10</artifactId>
 			<version>${project.version}</version>
+			<type>test-jar</type>
 			<scope>test</scope>
 		</dependency>
 
@@ -140,6 +148,29 @@ under the License.
 
 		<dependency>
 			<groupId>org.apache.flink</groupId>
+			<artifactId>flink-hadoop-compatibility_2.10</artifactId>
+			<version>${project.version}</version>
+			<type>test-jar</type>
+			<scope>test</scope>
+		</dependency>
+
+		<dependency>
+			<groupId>org.apache.flink</groupId>
+			<artifactId>flink-avro_2.10</artifactId>
+			<version>${project.version}</version>
+			<type>test-jar</type>
+			<scope>test</scope>
+		</dependency>
+
+		<dependency>
+			<groupId>org.apache.flink</groupId>
+			<artifactId>flink-avro_2.10</artifactId>
+			<version>${project.version}</version>
+			<scope>test</scope>
+		</dependency>
+
+		<dependency>
+			<groupId>org.apache.flink</groupId>
 			<artifactId>flink-optimizer_2.10</artifactId>
 			<version>${project.version}</version>
 			<type>test-jar</type>