/**
  * Tests the schema for revisionable, translatable entities.
  *
  * @covers ::__construct
  * @covers ::getEntitySchemaTables
  * @covers ::initializeDataTable
  * @covers ::addTableDefaults
  * @covers ::getEntityIndexName
  * @covers ::initializeRevisionDataTable
  * @covers ::processRevisionDataTable
  */
 public function testGetSchemaRevisionableTranslatable()
 {
     $this->entityType = new ContentEntityType(array('id' => 'entity_test', 'entity_keys' => array('id' => 'id', 'revision' => 'revision_id', 'langcode' => 'langcode')));
     $this->storage->expects($this->exactly(3))->method('getRevisionTable')->will($this->returnValue('entity_test_revision'));
     $this->storage->expects($this->once())->method('getDataTable')->will($this->returnValue('entity_test_field_data'));
     $this->storage->expects($this->once())->method('getRevisionDataTable')->will($this->returnValue('entity_test_revision_field_data'));
     $this->setUpStorageDefinition('revision_id', array('columns' => array('value' => array('type' => 'int'))));
     $this->setUpStorageDefinition('langcode', array('columns' => array('value' => array('type' => 'varchar'))));
     $expected = array('entity_test' => array('description' => 'The base table for entity_test entities.', 'fields' => array('id' => array('type' => 'serial', 'not null' => TRUE), 'revision_id' => array('type' => 'int', 'not null' => FALSE), 'langcode' => array('type' => 'varchar', 'not null' => TRUE)), 'primary key' => array('id'), 'unique keys' => array('entity_test__revision_id' => array('revision_id')), 'indexes' => array(), 'foreign keys' => array('entity_test__revision' => array('table' => 'entity_test_revision', 'columns' => array('revision_id' => 'revision_id')))), 'entity_test_revision' => array('description' => 'The revision table for entity_test entities.', 'fields' => array('id' => array('type' => 'int', 'not null' => TRUE), 'revision_id' => array('type' => 'serial', 'not null' => TRUE), 'langcode' => array('type' => 'varchar', 'not null' => TRUE)), 'primary key' => array('revision_id'), 'unique keys' => array(), 'indexes' => array('entity_test__id' => array('id')), 'foreign keys' => array('entity_test__revisioned' => array('table' => 'entity_test', 'columns' => array('id' => 'id')))), 'entity_test_field_data' => array('description' => 'The data table for entity_test entities.', 'fields' => array('id' => array('type' => 'int', 'not null' => TRUE), 'revision_id' => array('type' => 'int', 'not null' => TRUE), 'langcode' => array('type' => 'varchar', 'not null' => TRUE)), 'primary key' => array('id', 'langcode'), 'unique keys' => array(), 'indexes' => array('entity_test__revision_id' => array('revision_id')), 'foreign keys' => array('entity_test' => array('table' => 'entity_test', 'columns' => array('id' => 'id')))), 'entity_test_revision_field_data' => array('description' => 'The revision data table for entity_test entities.', 'fields' => array('id' => array('type' => 'int', 'not null' => TRUE), 'revision_id' => array('type' => 'int', 'not null' => TRUE), 'langcode' => array('type' => 'varchar', 'not null' => TRUE)), 'primary key' => array('revision_id', 'langcode'), 'unique keys' => array(), 'indexes' => array(), 'foreign keys' => array('entity_test' => array('table' => 'entity_test', 'columns' => array('id' => 'id')), 'entity_test__revision' => array('table' => 'entity_test_revision', 'columns' => array('revision_id' => 'revision_id')))));
     $this->setUpStorageSchema($expected);
     $table_mapping = new DefaultTableMapping($this->entityType, $this->storageDefinitions);
     $table_mapping->setFieldNames('entity_test', array_keys($this->storageDefinitions));
     $table_mapping->setFieldNames('entity_test_revision', array_keys($this->storageDefinitions));
     $table_mapping->setFieldNames('entity_test_field_data', array_keys($this->storageDefinitions));
     $table_mapping->setFieldNames('entity_test_revision_field_data', array_keys($this->storageDefinitions));
     $this->storage->expects($this->any())->method('getTableMapping')->will($this->returnValue($table_mapping));
     $this->storageSchema->onEntityTypeCreate($this->entityType);
 }