From 0066c6f00136989eadfc7471a4e9a3a3ad73ffc1 Mon Sep 17 00:00:00 2001
From: AW-UC <git@a-wesemann.de>
Date: Tue, 24 Feb 2015 23:51:08 +0100
Subject: [PATCH] Add PHPunit test for DefaultCollator

This extends Test_NaturalSort to include a basic test for
\OC\NaturalSort_DefaultCollator()
---
 tests/lib/naturalsort.php | 104 ++++++++++++++++++++++++++++++++++----
 1 file changed, 95 insertions(+), 9 deletions(-)

diff --git a/tests/lib/naturalsort.php b/tests/lib/naturalsort.php
index e022a855309..8fcbc6f5fd3 100644
--- a/tests/lib/naturalsort.php
+++ b/tests/lib/naturalsort.php
@@ -8,27 +8,32 @@
 
 class Test_NaturalSort extends \Test\TestCase {
 
-	public function setUp() {
-		parent::setUp();
-
+	/**
+	 * @dataProvider naturalSortDataProvider
+	 */
+	public function testNaturalSortCompare($array, $sorted)
+	{
 		if(!class_exists('Collator')) {
-			$this->markTestSkipped('The intl module is not available, natural sorting will not work as expected.');
+			$this->markTestSkipped('The intl module is not available, natural sorting might not work as expected.');
 			return;
 		}
+		$comparator = \OC\NaturalSort::getInstance();
+		usort($array, array($comparator, 'compare'));
+		$this->assertEquals($sorted, $array);
 	}
 
 	/**
-	 * @dataProvider naturalSortDataProvider
-	 */
-	public function testNaturalSortCompare($array, $sorted)
+	* @dataProvider defaultCollatorDataProvider
+	*/
+	public function testDefaultCollatorCompare($array, $sorted)
 	{
-		$comparator = \OC\NaturalSort::getInstance();
+		$comparator = new \OC\NaturalSort(new \OC\NaturalSort_DefaultCollator());
 		usort($array, array($comparator, 'compare'));
 		$this->assertEquals($sorted, $array);
 	}
 
 	/**
-	 * Data provider for natural sort.
+	 * Data provider for natural sorting with php5-intl's Collator.
 	 * Must provide the same result as in core/js/tests/specs/coreSpec.js
 	 * @return array test cases
 	 */
@@ -181,4 +186,85 @@ class Test_NaturalSort extends \Test\TestCase {
 			),
 		);
 	}
+
+	/**
+	* Data provider for natural sorting with \OC\NaturalSort_DefaultCollator.
+	* Must provide the same result as in core/js/tests/specs/coreSpec.js
+	* @return array test cases
+	*/
+	public function defaultCollatorDataProvider()
+	{
+		return array(
+			// different casing
+			array(
+				// unsorted
+				array(
+					'aaa',
+					'bbb',
+					'BBB',
+					'AAA'
+				),
+				// sorted
+				array(
+					'aaa',
+					'AAA',
+					'bbb',
+					'BBB'
+				)
+			),
+			// numbers
+			array(
+				// unsorted
+				array(
+					'124.txt',
+					'abc1',
+					'123.txt',
+					'abc',
+					'abc2',
+					'def (2).txt',
+					'ghi 10.txt',
+					'abc12',
+					'def.txt',
+					'def (1).txt',
+					'ghi 2.txt',
+					'def (10).txt',
+					'abc10',
+					'def (12).txt',
+					'z',
+					'ghi.txt',
+					'za',
+					'ghi 1.txt',
+					'ghi 12.txt',
+					'zz',
+					'15.txt',
+					'15b.txt',
+				),
+				// sorted
+				array(
+					'15.txt',
+					'15b.txt',
+					'123.txt',
+					'124.txt',
+					'abc',
+					'abc1',
+					'abc2',
+					'abc10',
+					'abc12',
+					'def.txt',
+					'def (1).txt',
+					'def (2).txt',
+					'def (10).txt',
+					'def (12).txt',
+					'ghi.txt',
+					'ghi 1.txt',
+					'ghi 2.txt',
+					'ghi 10.txt',
+					'ghi 12.txt',
+					'z',
+					'za',
+					'zz',
+				)
+			),
+		);
+	}
 }
-- 
GitLab