diff --git a/tests/PHPUnit/Core/DataTable/Filter/TruncateTest.php b/tests/PHPUnit/Core/DataTable/Filter/TruncateTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..39f75caca54ef3814148b9bd9ee0b957dcb38904
--- /dev/null
+++ b/tests/PHPUnit/Core/DataTable/Filter/TruncateTest.php
@@ -0,0 +1,65 @@
+<?php
+/**
+ * Piwik - Open source web analytics
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ * @version $Id$
+ */
+class DataTable_Filter_TruncateTest extends PHPUnit_Framework_TestCase
+{
+    /**
+	* @group Core
+	* @group DataTable
+	* @group DataTable_Filter
+	* @group DataTable_Filter_Truncate
+	*/
+	public function testUnrelatedDataTableNotFiltered()
+	{
+		// remark: this unit test would become invalid and would need to be rewritten if
+		// AddSummaryRow filter stops calling getRowsCount() on the DataTable being filtered.
+		$mockedDataTable = $this->getMock('Piwik_DataTable', array('getRowsCount'));
+		$mockedDataTable->expects($this->never())->method('getRowsCount');
+
+		$dataTableBeingFiltered = new Piwik_DataTable();
+		$rowBeingFiltered = new Piwik_DataTable_Row();
+		$dataTableBeingFiltered->addRow($rowBeingFiltered);
+
+		// we simulate the fact that the value of Piwik_DataTable_Row::DATATABLE_ASSOCIATED retrieved
+		// from the database is in conflict with one of the Piwik_DataTable_Manager managed table identifiers.
+		// This is a rare but legitimate case as identifiers are not thoroughly synchronized
+		// when the expanded parameter is false.
+		$rowBeingFiltered->c[Piwik_DataTable_Row::DATATABLE_ASSOCIATED] = $mockedDataTable->getId();
+
+		$filter = new Piwik_DataTable_Filter_Truncate($dataTableBeingFiltered, 1);
+		$filter->filter($dataTableBeingFiltered);
+	}
+
+	/**
+	 *
+	 * @group Core
+	 * @group DataTable
+	 * @group DataTable_Filter
+	 * @group DataTable_Filter_Truncate
+	 */
+	public function testForInfiniteRecursion()
+	{
+		$dataTableBeingFiltered = new Piwik_DataTable();
+
+		// remark: this unit test would become invalid and would need to be rewritten if
+		// Truncate filter stops calling getIdSubDataTable() on rows associated with a SubDataTable
+		$rowBeingFiltered = $this->getMock('Piwik_DataTable_Row', array('getIdSubDataTable'));
+		$rowBeingFiltered->expects($this->never())->method('getIdSubDataTable');
+
+		$dataTableBeingFiltered->addRow($rowBeingFiltered);
+
+		// we simulate a legitimate but rare circular reference between a Piwik_DataTable_Row and its
+		// enclosing Piwik_DataTable.
+		// This can happen because identifiers are not thoroughly synchronized when the expanded parameter
+		// is false.
+		$rowBeingFiltered->c[Piwik_DataTable_Row::DATATABLE_ASSOCIATED] = $dataTableBeingFiltered->getId();
+
+		$filter = new Piwik_DataTable_Filter_Truncate($dataTableBeingFiltered, 1);
+		$filter->filter($dataTableBeingFiltered);
+	}
+}