diff --git a/tests/views_basic.test b/tests/views_basic.test
index 20a9d4f..73933d2 100644
--- a/tests/views_basic.test
+++ b/tests/views_basic.test
@@ -170,4 +170,70 @@ class ViewsBasicTest extends ViewsSqlTest {
       'views_test_age' => 'age',
     ));
   }
+
+  /**
+   * Tests complex combinations of arguments and filters and where groups.
+   */
+  function testComplexFiltering() {
+    $view = $this->getBasicView();
+
+    $view->query->add_where(0, 'views_test.job', 'Singer');
+    $view->query->add_where(1, 'views_test.age', 25);
+    $view->execute();
+    $this->assertEqual(count($view->result), 1, 'The number of returned rows match.');
+
+    $this->assertIdenticalResultSet($view, array(array('name' => 'John', 'age' => 25)), array(
+      'views_test_name' => 'name',
+      'views_test_age' => 'age',
+    ), 'Test result set with two conditions combined by AND via multiple groups');
+    $view->destroy();
+
+    $view->query->set_group_operator('OR');
+    $view->query->add_where(0, 'views_test.job', 'Singer');
+    $view->query->add_where(1, 'views_test.age', 25);
+    $view->execute();
+    $this->assertEqual(count($view->result), 1, 'The number of returned rows match.');
+
+    $this->assertIdenticalResultSet($view, array(array('name' => 'John', 'age' => 25)), array(
+      'views_test_name' => 'name',
+      'views_test_age' => 'age',
+    ), 'Test result set with two conditions combined by AND via multiple groups(special group 0 and global group operator OR)');
+    $view->destroy();
+
+    $view->query->add_where(1, 'views_test.job', 'Singer');
+    $view->query->add_where(1, 'views_test.age', 25);
+    $view->execute();
+    $this->assertEqual(count($view->result), 1, 'The number of returned rows match.');
+
+    $this->assertIdenticalResultSet($view, array(array('name' => 'John', 'age' => 25)), array(
+      'views_test_name' => 'name',
+      'views_test_age' => 'age',
+    ), 'Test result set with two conditions combined by AND via a single group');
+    $view->destroy();
+
+    $group = $view->query->set_where_group('OR');
+    $view->query->add_where($group, 'views_test.name', 'John');
+    $view->query->add_where($group, 'views_test.name', 'George');
+    $view->execute();
+    $this->assertEqual(count($view->result), 2, 'The number of returned rows match.');
+
+    $this->assertIdenticalResultSet($view, array(array('name' => 'John', 'age' => 25), array('name' => 'Georg', 'age' => 27)), array(
+      'views_test_name' => 'name',
+      'views_test_age' => 'age',
+    ), 'Test result set with two conditions combined by OR via a single group');
+    $view->destroy();
+
+    $view->query->set_group_operator('OR');
+    $view->query->add_where(1, 'views_test.name', 'John');
+    $view->query->add_where(2, 'views_test.name', 'George');
+    $view->execute();
+    $this->assertEqual(count($view->result), 2, 'The number of returned rows match.');
+
+    $this->assertIdenticalResultSet($view, array(array('name' => 'John', 'age' => 25), array('name' => 'Georg', 'age' => 27)), array(
+      'views_test_name' => 'name',
+      'views_test_age' => 'age',
+    ), 'Test result set with two conditions combined by OR via multiple groups and a global group operator set to OR');
+    $view->destroy();
+
+  }
 }
