function ViewsCloneTest::testClone

Test cloning a view.

File

tests/views_clone.test, line 51

Class

ViewsCloneTest
Tests cloning a view.

Code

public function testClone() {
  // Prepare view to be cloned.
  $view = $this->getTestCloneView();
  $view->set_arguments(array(
    0 => $this->node->nid,
  ));
  $view->set_exposed_input(array(
    'field_tags_tid' => $this->term->tid,
  ));
  // Execute view to be cloned.
  $view->execute();
  // To make sure that we are properly testing removal of all properties, we
  // first need to assert that they are actually present in the original view.
  $keys = array(
    'current_display',
    'display_handler',
    'field',
    'argument',
    'filter',
    'sort',
    'relationship',
    'header',
    'footer',
    'empty',
    'query',
    'inited',
    'style_plugin',
    'plugin_name',
    'exposed_data',
    'exposed_input',
    'exposed_widgets',
    'many_to_one_aliases',
    'many_to_one_tables',
    'feed_icon',
  );
  foreach ($keys as $key) {
    $this->assertTrue(isset($view->{$key}), $key . 'is set in original view.');
  }
  $this->assertTrue($view->built, 'Assert original view built.');
  $this->assertTrue($view->executed, 'Assert original view executed.');
  $this->assertNotEqual($view->build_info, array(), 'Assert original view has build_info.');
  $this->assertNotEqual($view->attachment_before, '', 'Assert original view has attachment_before.');
  $this->assertNotEqual($view->attachment_after, '', 'Assert original view has attachment_after.');
  $this->assertNotEqual($view->result, array(), 'Assert original view has result.');
  // Clone view.
  $clone = $view->clone_view();
  // Assert that all relevant properties have been removed or reset.
  $keys = array(
    'current_display',
    'display_handler',
    'field',
    'argument',
    'filter',
    'sort',
    'relationship',
    'header',
    'footer',
    'empty',
    'query',
    'inited',
    'style_plugin',
    'plugin_name',
    'exposed_data',
    'exposed_input',
    'exposed_widgets',
    'many_to_one_aliases',
    'many_to_one_tables',
    'feed_icon',
  );
  foreach ($keys as $key) {
    $this->assertFalse(isset($clone->{$key}), $key . ' has been removed in cloned view.');
  }
  foreach ($clone->display as $id => $display) {
    $this->assertFalse(isset($clone->display[$id]->handler), 'Make sure all display handlers have been destroyed.');
  }
  $this->assertFalse($clone->built, 'Assert cloned view not built.');
  $this->assertFalse($clone->executed, 'Assert cloned view not executed.');
  $this->assertEqual($clone->build_info, array(), 'Assert cloned view has empty build_info.');
  $this->assertEqual($clone->attachment_before, '', 'Assert cloned view has empty attachment_before.');
  $this->assertEqual($clone->attachment_after, '', 'Assert cloned view has empty attachment_after.');
  $this->assertEqual($clone->result, array(), 'Assert cloned view has empty result.');
  // Execute cloned view.
  $clone->execute();
  // Assert result sets are equal.
  $this->assertEqual($view->result, $clone->result, 'Result sets of cloned view and original view match.');
}