From 7b40d0ad00e4d639369af811bee99f87eed946e1 Mon Sep 17 00:00:00 2001
From: Dries Buytaert <dries@buytaert.net>
Date: Sun, 10 Apr 2011 18:03:22 +0200
Subject: [PATCH] - Patch #839556 by dalin, jrchamp, effulgentsia, dmitrig01,
 David_Rothstein: fix isset regression in tablesort, add tests, and cleanup
 theme_process_registry().

---
 modules/simpletest/tests/tablesort.test | 167 ++++++++++++++++++++++++
 1 file changed, 167 insertions(+)
 create mode 100644 modules/simpletest/tests/tablesort.test

diff --git a/modules/simpletest/tests/tablesort.test b/modules/simpletest/tests/tablesort.test
new file mode 100644
index 000000000000..3462ce33e85c
--- /dev/null
+++ b/modules/simpletest/tests/tablesort.test
@@ -0,0 +1,167 @@
+<?php
+// $Id$
+
+/**
+ * @file
+ * Various tablesort tests.
+ */
+
+/**
+ * Test unicode handling features implemented in unicode.inc.
+ */
+class TableSortTest extends DrupalUnitTestCase {
+
+  /**
+   * Storage for initial value of $_GET.
+   *
+   * @var array
+   */
+  protected $GET = array();
+
+  public static function getInfo() {
+    return array(
+      'name' => 'Tablesort',
+      'description' => 'Tests table sorting.',
+      'group' => 'System',
+    );
+  }
+
+  function setUp() {
+    // Save the original $_GET to be restored later.
+    $this->GET = $_GET;
+
+    parent::setUp();
+  }
+
+  function tearDown() {
+    // Revert $_GET.
+    $_GET = $this->GET;
+
+    parent::tearDown();
+  }
+
+  /**
+   * Test tablesort_init().
+   */
+  function testTableSortInit() {
+
+    // Test simple table headers.
+
+    $headers = array('foo', 'bar', 'baz');
+    // Reset $_GET to prevent parameters from Simpletest and Batch API ending
+    // up in $ts['query'].
+    $_GET = array('q' => 'jahwohl');
+    $expected_ts = array(
+      'name' => 'foo',
+      'sql' => '',
+      'sort' => 'asc',
+      'query' => array(),
+    );
+    $ts = tablesort_init($headers);
+    $this->verbose(strtr('$ts: <pre>!ts</pre>', array('!ts' => check_plain(var_export($ts, TRUE)))));
+    $this->assertEqual($ts, $expected_ts, t('Simple table headers sorted correctly.'));
+
+    // Test with simple table headers plus $_GET parameters that should _not_
+    // override the default.
+
+    $_GET = array(
+      'q' => 'jahwohl',
+      // This should not override the table order because only complex
+      // headers are overridable.
+      'order' => 'bar',
+    );
+    $ts = tablesort_init($headers);
+    $this->verbose(strtr('$ts: <pre>!ts</pre>', array('!ts' => check_plain(var_export($ts, TRUE)))));
+    $this->assertEqual($ts, $expected_ts, t('Simple table headers plus non-overriding $_GET parameters sorted correctly.'));
+
+    // Test with simple table headers plus $_GET parameters that _should_
+    // override the default.
+
+    $_GET = array(
+      'q' => 'jahwohl',
+      'sort' => 'DESC',
+      // Add an unrelated parameter to ensure that tablesort will include
+      // it in the links that it creates.
+      'alpha' => 'beta',
+    );
+    $expected_ts['sort'] = 'desc';
+    $expected_ts['query'] = array('alpha' => 'beta');
+    $ts = tablesort_init($headers);
+    $this->verbose(strtr('$ts: <pre>!ts</pre>', array('!ts' => check_plain(var_export($ts, TRUE)))));
+    $this->assertEqual($ts, $expected_ts, t('Simple table headers plus $_GET parameters sorted correctly.'));
+
+    // Test complex table headers.
+
+    $headers = array(
+      'foo',
+      array(
+        'data' => '1',
+        'field' => 'one',
+        'sort' => 'asc',
+        'colspan' => 1,
+      ),
+      array(
+        'data' => '2',
+        'field' => 'two',
+        'sort' => 'desc',
+      ),
+    );
+    // Reset $_GET from previous assertion.
+    $_GET = array(
+      'q' => 'jahwohl',
+      'order' => '2',
+    );
+    $ts = tablesort_init($headers);
+    $expected_ts = array(
+      'name' => '2',
+      'sql' => 'two',
+      'sort' => 'desc',
+      'query' => array(),
+    );
+    $this->verbose(strtr('$ts: <pre>!ts</pre>', array('!ts' => check_plain(var_export($ts, TRUE)))));
+    $this->assertEqual($ts, $expected_ts, t('Complex table headers sorted correctly.'));
+
+    // Test complex table headers plus $_GET parameters that should _not_
+    // override the default.
+
+    $_GET = array(
+      'q' => 'jahwohl',
+      // This should not override the table order because this header does not
+      // exist.
+      'order' => 'bar',
+    );
+    $ts = tablesort_init($headers);
+    $expected_ts = array(
+      'name' => '1',
+      'sql' => 'one',
+      'sort' => 'asc',
+      'query' => array(),
+    );
+    $this->verbose(strtr('$ts: <pre>!ts</pre>', array('!ts' => check_plain(var_export($ts, TRUE)))));
+    $this->assertEqual($ts, $expected_ts, t('Complex table headers plus non-overriding $_GET parameters sorted correctly.'));
+    unset($_GET['sort'], $_GET['order'], $_GET['alpha']);
+
+    // Test complex table headers plus $_GET parameters that _should_
+    // override the default.
+
+    $_GET = array(
+      'q' => 'jahwohl',
+      'order' => '1',
+      'sort' => 'ASC',
+      // Add an unrelated parameter to ensure that tablesort will include
+      // it in the links that it creates.
+      'alpha' => 'beta',
+    );
+    $expected_ts = array(
+      'name' => '1',
+      'sql' => 'one',
+      'sort' => 'asc',
+      'query' => array('alpha' => 'beta'),
+    );
+    $ts = tablesort_init($headers);
+    $this->verbose(strtr('$ts: <pre>!ts</pre>', array('!ts' => check_plain(var_export($ts, TRUE)))));
+    $this->assertEqual($ts, $expected_ts, t('Complex table headers plus $_GET parameters sorted correctly.'));
+    unset($_GET['sort'], $_GET['order'], $_GET['alpha']);
+
+  }
+}
-- 
GitLab