diff --git a/core/modules/edit/lib/Drupal/edit/MetadataGenerator.php b/core/modules/edit/lib/Drupal/edit/MetadataGenerator.php
index 3ec8ce2..df0217a 100644
--- a/core/modules/edit/lib/Drupal/edit/MetadataGenerator.php
+++ b/core/modules/edit/lib/Drupal/edit/MetadataGenerator.php
@@ -69,8 +69,7 @@ public function generate(EntityInterface $entity, FieldInstance $instance, $lang
 
     // Early-return if no editor is available.
     $formatter_id = entity_get_render_display($entity, $view_mode)->getFormatter($instance['field_name'])->getPluginId();
-    $items = $entity->get($field_name);
-    $items = $items[$langcode];
+    $items = $entity->get($field_name)->getValue();
     $editor_id = $this->editorSelector->getEditor($formatter_id, $instance, $items);
     if (!isset($editor_id)) {
       return array('access' => FALSE);
diff --git a/core/modules/edit/lib/Drupal/edit/Tests/EditTestBase.php b/core/modules/edit/lib/Drupal/edit/Tests/EditTestBase.php
index 18d92d8..b94bfb9 100644
--- a/core/modules/edit/lib/Drupal/edit/Tests/EditTestBase.php
+++ b/core/modules/edit/lib/Drupal/edit/Tests/EditTestBase.php
@@ -20,7 +20,7 @@ class EditTestBase extends DrupalUnitTestBase {
    *
    * @var array
    */
-  public static $modules = array('system', 'entity', 'field_test', 'field', 'number', 'text', 'edit');
+  public static $modules = array('system', 'entity', 'entity_test', 'field', 'number', 'text', 'edit');
 
   /**
    * Sets the default field storage backend for fields created during tests.
@@ -29,7 +29,7 @@ function setUp() {
     parent::setUp();
 
     $this->installSchema('system', 'variable');
-    $this->enableModules(array('field', 'field_sql_storage', 'field_test'));
+    $this->enableModules(array('field', 'field_sql_storage', 'entity_test'));
 
     // Set default storage backend.
     variable_set('field_storage_default', $this->default_storage);
@@ -68,8 +68,8 @@ function createFieldWithInstance($field_name, $type, $cardinality, $label, $inst
     $instance = $field_name . '_instance';
     $this->$instance = array(
       'field_name' => $field_name,
-      'entity_type' => 'test_entity',
-      'bundle' => 'test_bundle',
+      'entity_type' => 'entity_test',
+      'bundle' => 'entity_test',
       'label' => $label,
       'description' => $label,
       'weight' => mt_rand(0, 127),
@@ -82,7 +82,7 @@ function createFieldWithInstance($field_name, $type, $cardinality, $label, $inst
     );
     field_create_instance($this->$instance);
 
-    entity_get_display('test_entity', 'test_bundle', 'default')
+    entity_get_display('entity_test', 'entity_test', 'default')
       ->setComponent($field_name, array(
         'label' => 'above',
         'type' => $formatter_type,
diff --git a/core/modules/edit/lib/Drupal/edit/Tests/EditorSelectionTest.php b/core/modules/edit/lib/Drupal/edit/Tests/EditorSelectionTest.php
index 199a525..7531a66 100644
--- a/core/modules/edit/lib/Drupal/edit/Tests/EditorSelectionTest.php
+++ b/core/modules/edit/lib/Drupal/edit/Tests/EditorSelectionTest.php
@@ -49,8 +49,8 @@ function setUp() {
    * editor that Edit selects.
    */
   protected function getSelectedEditor($items, $field_name, $view_mode = 'default') {
-    $options = entity_get_display('test_entity', 'test_bundle', $view_mode)->getComponent($field_name);
-    $field_instance = field_info_instance('test_entity', $field_name, 'test_bundle');
+    $options = entity_get_display('entity_test', 'entity_test', $view_mode)->getComponent($field_name);
+    $field_instance = field_info_instance('entity_test', $field_name, 'entity_test');
     return $this->editorSelector->getEditor($options['type'], $field_instance, $items);
   }
 
diff --git a/core/modules/edit/lib/Drupal/edit/Tests/MetadataGeneratorTest.php b/core/modules/edit/lib/Drupal/edit/Tests/MetadataGeneratorTest.php
index a8cec27..0f12549 100644
--- a/core/modules/edit/lib/Drupal/edit/Tests/MetadataGeneratorTest.php
+++ b/core/modules/edit/lib/Drupal/edit/Tests/MetadataGeneratorTest.php
@@ -94,12 +94,12 @@ function testSimpleEntityType() {
     );
 
     // Create an entity with values for this text field.
-    $this->entity = field_test_create_entity();
+    $this->entity = entity_create('entity_test', array());
     $this->is_new = TRUE;
-    $this->entity->{$field_1_name}[LANGUAGE_NOT_SPECIFIED] = array(array('value' => 'Test'));
-    $this->entity->{$field_2_name}[LANGUAGE_NOT_SPECIFIED] = array(array('value' => 42));
-    field_test_entity_save($this->entity);
-    $entity = entity_load('test_entity', $this->entity->ftid);
+    $this->entity->{$field_1_name}->value = 'Test';
+    $this->entity->{$field_2_name}->value = 42;
+    $this->entity->save();
+    $entity = entity_load('entity_test', $this->entity->id());
 
     // Verify metadata for field 1.
     $instance_1 = field_info_instance($entity->entityType(), $field_1_name, $entity->bundle());
@@ -108,7 +108,7 @@ function testSimpleEntityType() {
       'access' => TRUE,
       'label' => 'Simple text field',
       'editor' => 'direct',
-      'aria' => 'Entity test_entity 1, field Simple text field',
+      'aria' => 'Entity entity_test 1, field Simple text field',
     );
     $this->assertEqual($expected_1, $metadata_1, 'The correct metadata is generated for the first field.');
 
@@ -119,7 +119,7 @@ function testSimpleEntityType() {
       'access' => TRUE,
       'label' => 'Simple number field',
       'editor' => 'form',
-      'aria' => 'Entity test_entity 1, field Simple number field',
+      'aria' => 'Entity entity_test 1, field Simple number field',
     );
     $this->assertEqual($expected_2, $metadata_2, 'The correct metadata is generated for the second field.');
   }
@@ -159,11 +159,11 @@ function testEditorWithCustomMetadata() {
     $full_html_format->save();
 
     // Create an entity with values for this rich text field.
-    $this->entity = field_test_create_entity();
-    $this->is_new = TRUE;
-    $this->entity->{$field_name}[LANGUAGE_NOT_SPECIFIED] = array(array('value' => 'Test', 'format' => 'full_html'));
-    field_test_entity_save($this->entity);
-    $entity = entity_load('test_entity', $this->entity->ftid);
+    $this->entity = entity_create('entity_test', array());
+    $this->entity->{$field_name}->value = 'Test';
+    $this->entity->{$field_name}->format = 'full_html';
+    $this->entity->save();
+    $entity = entity_load('entity_test', $this->entity->id());
 
     // Verify metadata.
     $instance = field_info_instance($entity->entityType(), $field_name, $entity->bundle());
@@ -172,7 +172,7 @@ function testEditorWithCustomMetadata() {
       'access' => TRUE,
       'label' => 'Rich text field',
       'editor' => 'wysiwyg',
-      'aria' => 'Entity test_entity 1, field Rich text field',
+      'aria' => 'Entity entity_test 1, field Rich text field',
       'custom' => array(
         'format' => 'full_html'
       ),
diff --git a/core/modules/email/lib/Drupal/email/Tests/EmailFieldTest.php b/core/modules/email/lib/Drupal/email/Tests/EmailFieldTest.php
index c719c97..8548c2a 100644
--- a/core/modules/email/lib/Drupal/email/Tests/EmailFieldTest.php
+++ b/core/modules/email/lib/Drupal/email/Tests/EmailFieldTest.php
@@ -19,7 +19,7 @@ class EmailFieldTest extends WebTestBase {
    *
    * @var array
    */
-  public static $modules = array('node', 'field_test', 'email', 'field_ui');
+  public static $modules = array('node', 'entity_test', 'email', 'field_ui');
 
   public static function getInfo() {
     return array(
@@ -33,8 +33,8 @@ function setUp() {
     parent::setUp();
 
     $this->web_user = $this->drupalCreateUser(array(
-      'access field_test content',
-      'administer field_test content',
+      'view test entity',
+      'administer entity_test content',
       'administer content types',
     ));
     $this->drupalLogin($this->web_user);
@@ -52,8 +52,8 @@ function testEmailField() {
     field_create_field($this->field);
     $this->instance = array(
       'field_name' => $this->field['field_name'],
-      'entity_type' => 'test_entity',
-      'bundle' => 'test_bundle',
+      'entity_type' => 'entity_test',
+      'bundle' => 'entity_test',
       'widget' => array(
         'type' => 'email_default',
         'settings' => array(
@@ -63,14 +63,14 @@ function testEmailField() {
     );
     field_create_instance($this->instance);
     // Create a display for the full view mode.
-    entity_get_display('test_entity', 'test_bundle', 'full')
+    entity_get_display('entity_test', 'entity_test', 'full')
       ->setComponent($this->field['field_name'], array(
         'type' => 'email_mailto',
       ))
       ->save();
 
     // Display creation form.
-    $this->drupalGet('test-entity/add/test_bundle');
+    $this->drupalGet('entity_test/add');
     $langcode = LANGUAGE_NOT_SPECIFIED;
     $this->assertFieldByName("{$this->field['field_name']}[$langcode][0][value]", '', 'Widget found.');
     $this->assertRaw('placeholder="example@example.com"');
@@ -78,16 +78,18 @@ function testEmailField() {
     // Submit a valid e-mail address and ensure it is accepted.
     $value = 'test@example.com';
     $edit = array(
+      'user_id' => 1,
+      'name' => $this->randomName(),
       "{$this->field['field_name']}[$langcode][0][value]" => $value,
     );
     $this->drupalPost(NULL, $edit, t('Save'));
-    preg_match('|test-entity/manage/(\d+)/edit|', $this->url, $match);
+    preg_match('|entity_test/manage/(\d+)/edit|', $this->url, $match);
     $id = $match[1];
-    $this->assertRaw(t('test_entity @id has been created.', array('@id' => $id)));
+    $this->assertText(t('entity_test @id has been created.', array('@id' => $id)));
     $this->assertRaw($value);
 
     // Verify that a mailto link is displayed.
-    $entity = field_test_entity_test_load($id);
+    $entity = entity_load('entity_test', $id);
     $display = entity_get_display($entity->entityType(), $entity->bundle(), 'full');
     $entity->content = field_attach_view($entity, $display);
     $this->drupalSetContent(drupal_render($entity->content));
diff --git a/core/modules/field/lib/Drupal/field/Tests/BulkDeleteTest.php b/core/modules/field/lib/Drupal/field/Tests/BulkDeleteTest.php
index c365961..ce78674 100644
--- a/core/modules/field/lib/Drupal/field/Tests/BulkDeleteTest.php
+++ b/core/modules/field/lib/Drupal/field/Tests/BulkDeleteTest.php
@@ -52,7 +52,7 @@ protected function convertToPartialEntities($entities, $field_name) {
         'entity_id' => $entity->ftid,
         'revision_id' => $entity->ftvid,
         'bundle' => $entity->fttype,
-        'entity_type' => 'test_entity',
+        'entity_type' => 'entity_test',
       );
       $partial_entities[$id] = _field_create_entity_from_ids($ids);
       $partial_entities[$id]->$field_name = $entity->$field_name;
@@ -115,7 +115,7 @@ function setUp() {
     // For each bundle, create an instance of each field, and 10
     // entities with values for each field.
     $id = 1;
-    $this->entity_type = 'test_entity';
+    $this->entity_type = 'entity_test';
     foreach ($this->bundles as $bundle) {
       foreach ($this->fields as $field) {
         $instance = array(
@@ -161,7 +161,7 @@ function testDeleteFieldInstance() {
     $factory = drupal_container()->get('entity.query');
 
     // There are 10 entities of this bundle.
-    $found = $factory->get('test_entity')
+    $found = $factory->get('entity_test')
       ->condition('fttype', $bundle)
       ->execute();
     $this->assertEqual(count($found), 10, 'Correct number of entities found before deleting');
@@ -176,7 +176,7 @@ function testDeleteFieldInstance() {
     $this->assertEqual($instances[0]['bundle'], $bundle, 'The deleted instance is for the correct bundle');
 
     // There are 0 entities of this bundle with non-deleted data.
-    $found = $factory->get('test_entity')
+    $found = $factory->get('entity_test')
       ->condition('fttype', $bundle)
       ->condition("$field_name.deleted", 0)
       ->execute();
@@ -184,13 +184,13 @@ function testDeleteFieldInstance() {
 
     // There are 10 entities of this bundle when deleted fields are allowed, and
     // their values are correct.
-    $found = $factory->get('test_entity')
+    $found = $factory->get('entity_test')
       ->condition('fttype', $bundle)
       ->condition("$field_name.deleted", 1)
       ->sort('ftid')
       ->execute();
     $ids = (object) array(
-      'entity_type' => 'test_entity',
+      'entity_type' => 'entity_test',
       'bundle' => $bundle,
     );
     $entities = array();
@@ -230,7 +230,7 @@ function testPurgeInstance() {
       field_purge_batch($batch_size);
 
       // There are $count deleted entities left.
-      $found = entity_query('test_entity')
+      $found = entity_query('entity_test')
         ->condition('fttype', $bundle)
         ->condition($field['field_name'] . '.deleted', 1)
         ->execute();
diff --git a/core/modules/field/lib/Drupal/field/Tests/CrudTest.php b/core/modules/field/lib/Drupal/field/Tests/CrudTest.php
index 1c539da..d043a5d 100644
--- a/core/modules/field/lib/Drupal/field/Tests/CrudTest.php
+++ b/core/modules/field/lib/Drupal/field/Tests/CrudTest.php
@@ -17,7 +17,7 @@ class CrudTest extends FieldTestBase {
    *
    * @var array
    */
-  public static $modules = array('field_test', 'number');
+  public static $modules = array('field_test', 'number', 'entity_test');
 
   public static function getInfo() {
     return array(
@@ -215,8 +215,8 @@ function testReadFields() {
     // Create an instance of the field.
     $instance_definition = array(
       'field_name' => $field_definition['field_name'],
-      'entity_type' => 'test_entity',
-      'bundle' => 'test_bundle',
+      'entity_type' => 'entity_test',
+      'bundle' => 'entity_test',
     );
     field_create_instance($instance_definition);
 
@@ -285,8 +285,8 @@ function testDeleteField() {
     // Create instances for each.
     $this->instance_definition = array(
       'field_name' => $this->field['field_name'],
-      'entity_type' => 'test_entity',
-      'bundle' => 'test_bundle',
+      'entity_type' => 'entity_test',
+      'bundle' => 'entity_test',
       'widget' => array(
         'type' => 'test_field_widget',
       ),
@@ -308,7 +308,7 @@ function testDeleteField() {
 
     // Make sure that this field's instance is marked as deleted when it is
     // specifically loaded.
-    $instance = field_read_instance('test_entity', $this->instance_definition['field_name'], $this->instance_definition['bundle'], array('include_deleted' => TRUE));
+    $instance = field_read_instance('entity_test', $this->instance_definition['field_name'], $this->instance_definition['bundle'], array('include_deleted' => TRUE));
     $this->assertTrue(!empty($instance['deleted']), 'An instance for a deleted field is marked for deletion.');
 
     // Try to load the field normally and make sure it does not show up.
@@ -316,13 +316,13 @@ function testDeleteField() {
     $this->assertTrue(empty($field), 'A deleted field is not loaded by default.');
 
     // Try to load the instance normally and make sure it does not show up.
-    $instance = field_read_instance('test_entity', $this->instance_definition['field_name'], $this->instance_definition['bundle']);
+    $instance = field_read_instance('entity_test', $this->instance_definition['field_name'], $this->instance_definition['bundle']);
     $this->assertTrue(empty($instance), 'An instance for a deleted field is not loaded by default.');
 
     // Make sure the other field (and its field instance) are not deleted.
     $another_field = field_read_field($this->another_field['field_name']);
     $this->assertTrue(!empty($another_field) && empty($another_field['deleted']), 'A non-deleted field is not marked for deletion.');
-    $another_instance = field_read_instance('test_entity', $this->another_instance_definition['field_name'], $this->another_instance_definition['bundle']);
+    $another_instance = field_read_instance('entity_test', $this->another_instance_definition['field_name'], $this->another_instance_definition['bundle']);
     $this->assertTrue(!empty($another_instance) && empty($another_instance['deleted']), 'An instance of a non-deleted field is not marked for deletion.');
 
     // Try to create a new field the same name as a deleted field and
@@ -331,23 +331,23 @@ function testDeleteField() {
     field_create_instance($this->instance_definition);
     $field = field_read_field($this->field['field_name']);
     $this->assertTrue(!empty($field) && empty($field['deleted']), 'A new field with a previously used name is created.');
-    $instance = field_read_instance('test_entity', $this->instance_definition['field_name'], $this->instance_definition['bundle']);
+    $instance = field_read_instance('entity_test', $this->instance_definition['field_name'], $this->instance_definition['bundle']);
     $this->assertTrue(!empty($instance) && empty($instance['deleted']), 'A new instance for a previously used field name is created.');
 
     // Save an entity with data for the field
-    $entity = field_test_create_entity(0, 0, $instance['bundle']);
+    $entity = entity_create('entity_test', array('id' => 0, 'revision_id' => 0));
     $langcode = LANGUAGE_NOT_SPECIFIED;
     $values[0]['value'] = mt_rand(1, 127);
-    $entity->{$field['field_name']}[$langcode] = $values;
-    $entity_type = 'test_entity';
-    field_attach_insert($entity);
+    $entity->{$field['field_name']}->value = $values[0]['value'];
+    field_attach_insert($entity->getBCEntity());
 
     // Verify the field is present on load
-    $entity = field_test_create_entity(0, 0, $this->instance_definition['bundle']);
-    field_attach_load($entity_type, array(0 => $entity));
-    $this->assertIdentical(count($entity->{$field['field_name']}[$langcode]), count($values), "Data in previously deleted field saves and loads correctly");
+    $entity = entity_create('entity_test', array('id' => 0, 'revision_id' => 0));
+    field_attach_load('entity_test', array(0 => $entity->getBCEntity()));
+    debug($entity->$field['field_name']->getValue());
+    $this->assertIdentical(count($entity->{$field['field_name']}), count($values), "Data in previously deleted field saves and loads correctly");
     foreach ($values as $delta => $value) {
-      $this->assertEqual($entity->{$field['field_name']}[$langcode][$delta]['value'], $values[$delta]['value'], "Data in previously deleted field saves and loads correctly");
+      $this->assertEqual($entity->{$field['field_name']}[$delta]->value, $values[$delta]['value'], "Data in previously deleted field saves and loads correctly");
     }
   }
 
@@ -392,28 +392,28 @@ function testUpdateField() {
     $field_definition = field_create_field($field_definition);
     $instance = array(
       'field_name' => 'field_update',
-      'entity_type' => 'test_entity',
-      'bundle' => 'test_bundle',
+      'entity_type' => 'entity_test',
+      'bundle' => 'entity_test',
     );
     $instance = field_create_instance($instance);
 
     do {
       // We need a unique ID for our entity. $cardinality will do.
       $id = $cardinality;
-      $entity = field_test_create_entity($id, $id, $instance['bundle']);
+      $entity = entity_create('entity_test', array('id' => $id, 'revision_id' => $id));
       // Fill in the entity with more values than $cardinality.
       for ($i = 0; $i < 20; $i++) {
-        $entity->field_update[LANGUAGE_NOT_SPECIFIED][$i]['value'] = $i;
+        $entity->field_update[$i]->value = $i;
       }
       // Save the entity.
-      field_attach_insert($entity);
+      field_attach_insert($entity->getBCEntity());
       // Load back and assert there are $cardinality number of values.
-      $entity = field_test_create_entity($id, $id, $instance['bundle']);
-      field_attach_load('test_entity', array($id => $entity));
-      $this->assertEqual(count($entity->field_update[LANGUAGE_NOT_SPECIFIED]), $field_definition['cardinality'], 'Cardinality is kept');
+      $entity = entity_create('entity_test', array('id' => $id, 'revision_id' => $id));
+      field_attach_load('entity_test', array($id => $entity->getBCEntity()));
+      $this->assertEqual(count($entity->field_update), $field_definition['cardinality'], 'Cardinality is kept');
       // Now check the values themselves.
       for ($delta = 0; $delta < $cardinality; $delta++) {
-        $this->assertEqual($entity->field_update[LANGUAGE_NOT_SPECIFIED][$delta]['value'], $delta, 'Value is kept');
+        $this->assertEqual($entity->field_update[$delta]->value, $delta, 'Value is kept');
       }
       // Increase $cardinality and set the field cardinality to the new value.
       $field_definition['cardinality'] = ++$cardinality;
diff --git a/core/modules/field/lib/Drupal/field/Tests/DisplayApiTest.php b/core/modules/field/lib/Drupal/field/Tests/DisplayApiTest.php
index 8c28727..b4ffe84 100644
--- a/core/modules/field/lib/Drupal/field/Tests/DisplayApiTest.php
+++ b/core/modules/field/lib/Drupal/field/Tests/DisplayApiTest.php
@@ -14,7 +14,14 @@ class DisplayApiTest extends FieldTestBase {
    *
    * @var array
    */
-  public static $modules = array('field_test');
+  public static $modules = array('field_test', 'entity_test');
+
+  /**
+   * The test entity.
+   *
+   * @var \Drupal\Core\Entity\EntityInterface
+   */
+  protected $entity;
 
   public static function getInfo() {
     return array(
@@ -39,8 +46,8 @@ function setUp() {
     );
     $this->instance = array(
       'field_name' => $this->field_name,
-      'entity_type' => 'test_entity',
-      'bundle' => 'test_bundle',
+      'entity_type' => 'entity_test',
+      'bundle' => 'entity_test',
       'label' => $this->label,
     );
 
@@ -72,10 +79,9 @@ function setUp() {
 
     // Create an entity with values.
     $this->values = $this->_generateTestFieldValues($this->cardinality);
-    $this->entity = field_test_create_entity();
-    $this->is_new = TRUE;
-    $this->entity->{$this->field_name}[LANGUAGE_NOT_SPECIFIED] = $this->values;
-    field_test_entity_save($this->entity);
+    $this->entity = entity_create('entity_test', array());
+    $this->entity->{$this->field_name}->setValue($this->values);
+    $this->entity->save();
   }
 
   /**
@@ -83,7 +89,7 @@ function setUp() {
    */
   function testFieldViewField() {
     // No display settings: check that default display settings are used.
-    $output = field_view_field($this->entity, $this->field_name);
+    $output = field_view_field($this->entity->getBCEntity(), $this->field_name);
     $this->drupalSetContent(drupal_render($output));
     $settings = field_info_formatter_settings('field_test_default');
     $setting = $settings['test_formatter_setting'];
@@ -101,7 +107,7 @@ function testFieldViewField() {
         'alter' => TRUE,
       ),
     );
-    $output = field_view_field($this->entity, $this->field_name, $display);
+    $output = field_view_field($this->entity->getBCEntity(), $this->field_name, $display);
     $this->drupalSetContent(drupal_render($output));
     $setting = $display['settings']['test_formatter_setting_multiple'];
     $this->assertNoText($this->label, 'Label was not displayed.');
@@ -120,7 +126,7 @@ function testFieldViewField() {
         'test_formatter_setting_additional' => $this->randomName(),
       ),
     );
-    $output = field_view_field($this->entity, $this->field_name, $display);
+    $output = field_view_field($this->entity->getBCEntity(), $this->field_name, $display);
     $view = drupal_render($output);
     $this->drupalSetContent($view);
     $setting = $display['settings']['test_formatter_setting_additional'];
@@ -132,7 +138,7 @@ function testFieldViewField() {
 
     // View mode: check that display settings specified in the display object
     // are used.
-    $output = field_view_field($this->entity, $this->field_name, 'teaser');
+    $output = field_view_field($this->entity->getBCEntity(), $this->field_name, 'teaser');
     $this->drupalSetContent(drupal_render($output));
     $setting = $this->display_options['teaser']['settings']['test_formatter_setting'];
     $this->assertText($this->label, 'Label was displayed.');
@@ -142,7 +148,7 @@ function testFieldViewField() {
 
     // Unknown view mode: check that display settings for 'default' view mode
     // are used.
-    $output = field_view_field($this->entity, $this->field_name, 'unknown_view_mode');
+    $output = field_view_field($this->entity->getBCEntity(), $this->field_name, 'unknown_view_mode');
     $this->drupalSetContent(drupal_render($output));
     $setting = $this->display_options['default']['settings']['test_formatter_setting'];
     $this->assertText($this->label, 'Label was displayed.');
@@ -159,8 +165,8 @@ function testFieldViewValue() {
     $settings = field_info_formatter_settings('field_test_default');
     $setting = $settings['test_formatter_setting'];
     foreach ($this->values as $delta => $value) {
-      $item = $this->entity->{$this->field_name}[LANGUAGE_NOT_SPECIFIED][$delta];
-      $output = field_view_value($this->entity, $this->field_name, $item);
+      $item = $this->entity->{$this->field_name}[$delta]->getValue();
+      $output = field_view_value($this->entity->getBCEntity(), $this->field_name, $item);
       $this->drupalSetContent(drupal_render($output));
       $this->assertText($setting . '|' . $value['value'], format_string('Value @delta was displayed with expected setting.', array('@delta' => $delta)));
     }
@@ -175,8 +181,8 @@ function testFieldViewValue() {
     $setting = $display['settings']['test_formatter_setting_multiple'];
     $array = array();
     foreach ($this->values as $delta => $value) {
-      $item = $this->entity->{$this->field_name}[LANGUAGE_NOT_SPECIFIED][$delta];
-      $output = field_view_value($this->entity, $this->field_name, $item, $display);
+      $item = $this->entity->{$this->field_name}[$delta]->getValue();
+      $output = field_view_value($this->entity->getBCEntity(), $this->field_name, $item, $display);
       $this->drupalSetContent(drupal_render($output));
       $this->assertText($setting . '|0:' . $value['value'], format_string('Value @delta was displayed with expected setting.', array('@delta' => $delta)));
     }
@@ -191,8 +197,8 @@ function testFieldViewValue() {
     $setting = $display['settings']['test_formatter_setting_additional'];
     $array = array();
     foreach ($this->values as $delta => $value) {
-      $item = $this->entity->{$this->field_name}[LANGUAGE_NOT_SPECIFIED][$delta];
-      $output = field_view_value($this->entity, $this->field_name, $item, $display);
+      $item = $this->entity->{$this->field_name}[$delta]->getValue();
+      $output = field_view_value($this->entity->getBCEntity(), $this->field_name, $item, $display);
       $this->drupalSetContent(drupal_render($output));
       $this->assertText($setting . '|' . $value['value'] . '|' . ($value['value'] + 1), format_string('Value @delta was displayed with expected setting.', array('@delta' => $delta)));
     }
@@ -201,8 +207,8 @@ function testFieldViewValue() {
     // used.
     $setting = $this->display_options['teaser']['settings']['test_formatter_setting'];
     foreach ($this->values as $delta => $value) {
-      $item = $this->entity->{$this->field_name}[LANGUAGE_NOT_SPECIFIED][$delta];
-      $output = field_view_value($this->entity, $this->field_name, $item, 'teaser');
+      $item = $this->entity->{$this->field_name}[$delta]->getValue();
+      $output = field_view_value($this->entity->getBCEntity(), $this->field_name, $item, 'teaser');
       $this->drupalSetContent(drupal_render($output));
       $this->assertText($setting . '|' . $value['value'], format_string('Value @delta was displayed with expected setting.', array('@delta' => $delta)));
     }
@@ -211,8 +217,8 @@ function testFieldViewValue() {
     // are used.
     $setting = $this->display_options['default']['settings']['test_formatter_setting'];
     foreach ($this->values as $delta => $value) {
-      $item = $this->entity->{$this->field_name}[LANGUAGE_NOT_SPECIFIED][$delta];
-      $output = field_view_value($this->entity, $this->field_name, $item, 'unknown_view_mode');
+      $item = $this->entity->{$this->field_name}[$delta]->getValue();
+      $output = field_view_value($this->entity->getBCEntity(), $this->field_name, $item, 'unknown_view_mode');
       $this->drupalSetContent(drupal_render($output));
       $this->assertText($setting . '|' . $value['value'], format_string('Value @delta was displayed with expected setting.', array('@delta' => $delta)));
     }
diff --git a/core/modules/field/lib/Drupal/field/Tests/FieldAttachOtherTest.php b/core/modules/field/lib/Drupal/field/Tests/FieldAttachOtherTest.php
index c549c9e..6496b5f 100644
--- a/core/modules/field/lib/Drupal/field/Tests/FieldAttachOtherTest.php
+++ b/core/modules/field/lib/Drupal/field/Tests/FieldAttachOtherTest.php
@@ -27,7 +27,7 @@ public static function getInfo() {
   function testFieldAttachView() {
     $this->createFieldWithInstance('_2');
 
-    $entity_type = 'test_entity';
+    $entity_type = 'entity_test';
     $entity_init = field_test_create_entity();
     $langcode = LANGUAGE_NOT_SPECIFIED;
     $options = array('field_name' => $this->field_name_2);
@@ -175,11 +175,11 @@ function testFieldAttachView() {
    * Tests the 'multiple entity' behavior of field_attach_prepare_view().
    */
   function testFieldAttachPrepareViewMultiple() {
-    $entity_type = 'test_entity';
+    $entity_type = 'entity_test';
     $langcode = LANGUAGE_NOT_SPECIFIED;
 
     // Set the instance to be hidden.
-    $display = entity_get_display('test_entity', 'test_bundle', 'full')
+    $display = entity_get_display('entity_test', 'entity_test', 'full')
       ->removeComponent($this->field['field_name']);
 
     // Set up a second instance on another bundle, with a formatter that uses
@@ -190,7 +190,7 @@ function testFieldAttachPrepareViewMultiple() {
     $this->instance2['bundle'] = 'test_bundle_2';
     field_create_instance($this->instance2);
 
-    $display_2 = entity_get_display('test_entity', 'test_bundle_2', 'full')
+    $display_2 = entity_get_display('entity_test', 'test_bundle_2', 'full')
       ->setComponent($this->field['field_name'], array(
         'type' => 'field_test_with_prepare_view',
         'settings' => array(
@@ -198,10 +198,10 @@ function testFieldAttachPrepareViewMultiple() {
         ),
       ));
 
-    $displays = array('test_bundle' => $display, 'test_bundle_2' => $display_2);
+    $displays = array('entity_test' => $display, 'test_bundle_2' => $display_2);
 
     // Create one entity in each bundle.
-    $entity1_init = field_test_create_entity(1, 1, 'test_bundle');
+    $entity1_init = field_test_create_entity(1, 1, 'entity_test');
     $values1 = $this->_generateTestFieldValues($this->field['cardinality']);
     $entity1_init->{$this->field_name}[$langcode] = $values1;
 
@@ -236,7 +236,7 @@ function testFieldAttachCache() {
     $values = $this->_generateTestFieldValues($this->field['cardinality']);
 
     // Non-cacheable entity type.
-    $entity_type = 'test_entity';
+    $entity_type = 'entity_test';
     $cid = "field:$entity_type:{$entity_init->ftid}";
 
     // Check that no initial cache entry is present.
@@ -333,7 +333,7 @@ function testFieldAttachCache() {
   function testFieldAttachValidate() {
     $this->createFieldWithInstance('_2');
 
-    $entity_type = 'test_entity';
+    $entity_type = 'entity_test';
     $entity = field_test_create_entity(0, 0, $this->instance['bundle']);
     $langcode = LANGUAGE_NOT_SPECIFIED;
 
@@ -425,7 +425,7 @@ function testFieldAttachValidate() {
   function testFieldAttachForm() {
     $this->createFieldWithInstance('_2');
 
-    $entity_type = 'test_entity';
+    $entity_type = 'entity_test';
     $entity = field_test_create_entity(0, 0, $this->instance['bundle']);
     $langcode = LANGUAGE_NOT_SPECIFIED;
 
@@ -465,7 +465,7 @@ function testFieldAttachForm() {
   function testFieldAttachSubmit() {
     $this->createFieldWithInstance('_2');
 
-    $entity_type = 'test_entity';
+    $entity_type = 'entity_test';
     $entity_init = field_test_create_entity(0, 0, $this->instance['bundle']);
     $langcode = LANGUAGE_NOT_SPECIFIED;
 
diff --git a/core/modules/field/lib/Drupal/field/Tests/FieldAttachStorageTest.php b/core/modules/field/lib/Drupal/field/Tests/FieldAttachStorageTest.php
index 5ae3610..4005e73 100644
--- a/core/modules/field/lib/Drupal/field/Tests/FieldAttachStorageTest.php
+++ b/core/modules/field/lib/Drupal/field/Tests/FieldAttachStorageTest.php
@@ -35,52 +35,52 @@ function testFieldAttachSaveLoad() {
     field_update_instance($this->instance);
     $langcode = LANGUAGE_NOT_SPECIFIED;
 
-    $entity_type = 'test_entity';
+    $entity_type = 'entity_test';
     $values = array();
 
     // TODO : test empty values filtering and "compression" (store consecutive deltas).
 
     // Preparation: create three revisions and store them in $revision array.
     for ($revision_id = 0; $revision_id < 3; $revision_id++) {
-      $revision[$revision_id] = field_test_create_entity(0, $revision_id, $this->instance['bundle']);
+      $revision[$revision_id] = entity_create($entity_type, array('id' => 0, 'revision_id' => $revision_id));
       // Note: we try to insert one extra value.
       $values[$revision_id] = $this->_generateTestFieldValues($this->field['cardinality'] + 1);
       $current_revision = $revision_id;
       // If this is the first revision do an insert.
       if (!$revision_id) {
-        $revision[$revision_id]->{$this->field_name}[$langcode] = $values[$revision_id];
-        field_attach_insert($revision[$revision_id]);
+        $revision[$revision_id]->{$this->field_name}->setValue($values[$revision_id]);
+        field_attach_insert($revision[$revision_id]->getBCEntity());
       }
       else {
         // Otherwise do an update.
-        $revision[$revision_id]->{$this->field_name}[$langcode] = $values[$revision_id];
-        field_attach_update($revision[$revision_id]);
+        $revision[$revision_id]->{$this->field_name}->setValue($values[$revision_id]);
+        field_attach_update($revision[$revision_id]->getBCEntity());
       }
     }
 
     // Confirm current revision loads the correct data.
-    $entity = field_test_create_entity(0, 0, $this->instance['bundle']);
-    field_attach_load($entity_type, array(0 => $entity));
+    $entity = entity_create('entity_test', array('id' => 0, 'revision_id' => 0));
+    field_attach_load($entity_type, array(0 => $entity->getBCEntity()));
     // Number of values per field loaded equals the field cardinality.
-    $this->assertEqual(count($entity->{$this->field_name}[$langcode]), $this->field['cardinality'], 'Current revision: expected number of values');
+    $this->assertEqual(count($entity->{$this->field_name}), $this->field['cardinality'], 'Current revision: expected number of values');
     for ($delta = 0; $delta < $this->field['cardinality']; $delta++) {
       // The field value loaded matches the one inserted or updated.
-      $this->assertEqual($entity->{$this->field_name}[$langcode][$delta]['value'] , $values[$current_revision][$delta]['value'], format_string('Current revision: expected value %delta was found.', array('%delta' => $delta)));
+      $this->assertEqual($entity->{$this->field_name}[$delta]->value , $values[$current_revision][$delta]['value'], format_string('Current revision: expected value %delta was found.', array('%delta' => $delta)));
       // The value added in hook_field_load() is found.
-      $this->assertEqual($entity->{$this->field_name}[$langcode][$delta]['additional_key'], 'additional_value', format_string('Current revision: extra information for value %delta was found', array('%delta' => $delta)));
+      $this->assertEqual($entity->{$this->field_name}[$delta]->additional_key, 'additional_value', format_string('Current revision: extra information for value %delta was found', array('%delta' => $delta)));
     }
 
     // Confirm each revision loads the correct data.
     foreach (array_keys($revision) as $revision_id) {
-      $entity = field_test_create_entity(0, $revision_id, $this->instance['bundle']);
-      field_attach_load_revision($entity_type, array(0 => $entity));
+      $entity = entity_create('entity_test', array('id' => 0, 'revision_id' => $revision_id));
+      field_attach_load_revision($entity_type, array(0 => $entity->getBCEntity()));
       // Number of values per field loaded equals the field cardinality.
-      $this->assertEqual(count($entity->{$this->field_name}[$langcode]), $this->field['cardinality'], format_string('Revision %revision_id: expected number of values.', array('%revision_id' => $revision_id)));
+      $this->assertEqual(count($entity->{$this->field_name}), $this->field['cardinality'], format_string('Revision %revision_id: expected number of values.', array('%revision_id' => $revision_id)));
       for ($delta = 0; $delta < $this->field['cardinality']; $delta++) {
         // The field value loaded matches the one inserted or updated.
-        $this->assertEqual($entity->{$this->field_name}[$langcode][$delta]['value'], $values[$revision_id][$delta]['value'], format_string('Revision %revision_id: expected value %delta was found.', array('%revision_id' => $revision_id, '%delta' => $delta)));
+        $this->assertEqual($entity->{$this->field_name}[$delta]->value, $values[$revision_id][$delta]['value'], format_string('Revision %revision_id: expected value %delta was found.', array('%revision_id' => $revision_id, '%delta' => $delta)));
         // The value added in hook_field_load() is found.
-        $this->assertEqual($entity->{$this->field_name}[$langcode][$delta]['additional_key'], 'additional_value', format_string('Revision %revision_id: extra information for value %delta was found', array('%revision_id' => $revision_id, '%delta' => $delta)));
+        $this->assertEqual($entity->{$this->field_name}[$delta]->additional_key, 'additional_value', format_string('Revision %revision_id: extra information for value %delta was found', array('%revision_id' => $revision_id, '%delta' => $delta)));
       }
     }
   }
@@ -89,7 +89,7 @@ function testFieldAttachSaveLoad() {
    * Test the 'multiple' load feature.
    */
   function testFieldAttachLoadMultiple() {
-    $entity_type = 'test_entity';
+    $entity_type = 'entity_test';
     $langcode = LANGUAGE_NOT_SPECIFIED;
 
     // Define 2 bundles.
@@ -116,7 +116,7 @@ function testFieldAttachLoadMultiple() {
       foreach ($field_bundles_map[$i] as $bundle) {
         $instance = array(
           'field_name' => $field_names[$i],
-          'entity_type' => 'test_entity',
+          'entity_type' => 'entity_test',
           'bundle' => $bundles[$bundle],
           'settings' => array(
             // Configure the instance so that we test hook_field_load()
@@ -130,14 +130,14 @@ function testFieldAttachLoadMultiple() {
 
     // Create one test entity per bundle, with random values.
     foreach ($bundles as $index => $bundle) {
-      $entities[$index] = field_test_create_entity($index, $index, $bundle);
+      $entities[$index] = entity_create('entity_test', array('id' => $index, 'revision_id' => $index));
       $entity = clone($entities[$index]);
-      $instances = field_info_instances('test_entity', $bundle);
+      $instances = field_info_instances('entity_test', $bundle);
       foreach ($instances as $field_name => $instance) {
         $values[$index][$field_name] = mt_rand(1, 127);
-        $entity->$field_name = array($langcode => array(array('value' => $values[$index][$field_name])));
+        $entity->$field_name->setValue(array('value' => $values[$index][$field_name]));
       }
-      field_attach_insert($entity);
+      field_attach_insert($entity->getBCEntity());
     }
 
     // Check that a single load correctly loads field values for both entities.
@@ -146,9 +146,9 @@ function testFieldAttachLoadMultiple() {
       $instances = field_info_instances($entity_type, $bundles[$index]);
       foreach ($instances as $field_name => $instance) {
         // The field value loaded matches the one inserted.
-        $this->assertEqual($entity->{$field_name}[$langcode][0]['value'], $values[$index][$field_name], format_string('Entity %index: expected value was found.', array('%index' => $index)));
+        $this->assertEqual($entity->{$field_name}->value, $values[$index][$field_name], format_string('Entity %index: expected value was found.', array('%index' => $index)));
         // The value added in hook_field_load() is found.
-        $this->assertEqual($entity->{$field_name}[$langcode][0]['additional_key'], 'additional_value', format_string('Entity %index: extra information was found', array('%index' => $index)));
+        $this->assertEqual($entity->{$field_name}->additional_key, 'additional_value', format_string('Entity %index: extra information was found', array('%index' => $index)));
       }
     }
 
@@ -165,7 +165,7 @@ function testFieldAttachLoadMultiple() {
    * Test saving and loading fields using different storage backends.
    */
   function testFieldAttachSaveLoadDifferentStorage() {
-    $entity_type = 'test_entity';
+    $entity_type = 'entity_test';
     $langcode = LANGUAGE_NOT_SPECIFIED;
 
     // Create two fields using different storage backends, and their instances.
@@ -187,8 +187,8 @@ function testFieldAttachSaveLoadDifferentStorage() {
       field_create_field($field);
       $instance = array(
         'field_name' => $field['field_name'],
-        'entity_type' => 'test_entity',
-        'bundle' => 'test_bundle',
+        'entity_type' => 'entity_test',
+        'bundle' => 'entity_test',
       );
       field_create_instance($instance);
     }
@@ -228,8 +228,8 @@ function testFieldStorageDetailsAlter() {
     $field = field_create_field($field);
     $instance = array(
       'field_name' => $field_name,
-      'entity_type' => 'test_entity',
-      'bundle' => 'test_bundle',
+      'entity_type' => 'entity_test',
+      'bundle' => 'entity_test',
     );
     field_create_instance($instance);
 
@@ -258,7 +258,7 @@ function testFieldStorageDetailsAlter() {
    * Tests insert and update with missing or NULL fields.
    */
   function testFieldAttachSaveMissingData() {
-    $entity_type = 'test_entity';
+    $entity_type = 'entity_test';
     $entity_init = field_test_create_entity();
     $langcode = LANGUAGE_NOT_SPECIFIED;
 
@@ -341,7 +341,7 @@ function testFieldAttachSaveMissingDataDefaultValue() {
     field_update_instance($this->instance);
 
     // Verify that fields are populated with default values.
-    $entity_type = 'test_entity';
+    $entity_type = 'entity_test';
     $entity_init = field_test_create_entity();
     $langcode = LANGUAGE_NOT_SPECIFIED;
     $default = field_test_default_value($entity_init, $this->field, $this->instance);
@@ -369,7 +369,7 @@ function testFieldAttachSaveMissingDataDefaultValue() {
 
     // Verify that prepopulated field values are not overwritten by defaults.
     $value = array(array('value' => $default[0]['value'] - mt_rand(1, 127)));
-    $entity = entity_create('test_entity', array('fttype' => $entity_init->bundle(), $this->field_name => array($langcode => $value)));
+    $entity = entity_create('entity_test', array('fttype' => $entity_init->bundle(), $this->field_name => array($langcode => $value)));
     $this->assertEqual($entity->{$this->field_name}[$langcode], $value, 'Prepopulated field value correctly maintained.');
   }
 
@@ -377,7 +377,7 @@ function testFieldAttachSaveMissingDataDefaultValue() {
    * Test field_attach_delete().
    */
   function testFieldAttachDelete() {
-    $entity_type = 'test_entity';
+    $entity_type = 'entity_test';
     $langcode = LANGUAGE_NOT_SPECIFIED;
     $rev[0] = field_test_create_entity(0, 0, $this->instance['bundle']);
 
@@ -445,7 +445,7 @@ function testFieldAttachCreateRenameBundle() {
     $langcode = LANGUAGE_NOT_SPECIFIED;
     $values = $this->_generateTestFieldValues($this->field['cardinality']);
     $entity->{$this->field_name}[$langcode] = $values;
-    $entity_type = 'test_entity';
+    $entity_type = 'entity_test';
     field_attach_insert($entity);
 
     // Verify the field data is present on load.
@@ -485,7 +485,7 @@ function testFieldAttachDeleteBundle() {
     field_create_field($field);
     $instance = array(
       'field_name' => $field_name,
-      'entity_type' => 'test_entity',
+      'entity_type' => 'entity_test',
       'bundle' => $this->instance['bundle'],
       'label' => $this->randomName() . '_label',
       'description' => $this->randomName() . '_description',
@@ -507,7 +507,7 @@ function testFieldAttachDeleteBundle() {
 
     // Verify the fields are present on load
     $entity = field_test_create_entity(0, 0, $this->instance['bundle']);
-    field_attach_load('test_entity', array(0 => $entity));
+    field_attach_load('entity_test', array(0 => $entity));
     $this->assertEqual(count($entity->{$this->field_name}[$langcode]), 4, 'First field got loaded');
     $this->assertEqual(count($entity->{$field_name}[$langcode]), 1, 'Second field got loaded');
 
@@ -516,12 +516,12 @@ function testFieldAttachDeleteBundle() {
 
     // Verify no data gets loaded
     $entity = field_test_create_entity(0, 0, $this->instance['bundle']);
-    field_attach_load('test_entity', array(0 => $entity));
+    field_attach_load('entity_test', array(0 => $entity));
     $this->assertFalse(isset($entity->{$this->field_name}[$langcode]), 'No data for first field');
     $this->assertFalse(isset($entity->{$field_name}[$langcode]), 'No data for second field');
 
     // Verify that the instances are gone
-    $this->assertFalse(field_read_instance('test_entity', $this->field_name, $this->instance['bundle']), "First field is deleted");
-    $this->assertFalse(field_read_instance('test_entity', $field_name, $instance['bundle']), "Second field is deleted");
+    $this->assertFalse(field_read_instance('entity_test', $this->field_name, $this->instance['bundle']), "First field is deleted");
+    $this->assertFalse(field_read_instance('entity_test', $field_name, $instance['bundle']), "Second field is deleted");
   }
 }
diff --git a/core/modules/field/lib/Drupal/field/Tests/FieldAttachTestBase.php b/core/modules/field/lib/Drupal/field/Tests/FieldAttachTestBase.php
index 9d15ba2..203650e 100644
--- a/core/modules/field/lib/Drupal/field/Tests/FieldAttachTestBase.php
+++ b/core/modules/field/lib/Drupal/field/Tests/FieldAttachTestBase.php
@@ -14,7 +14,7 @@
    *
    * @var array
    */
-  public static $modules = array('field_test');
+  public static $modules = array('field_test', 'entity_test');
 
   function setUp() {
     parent::setUp();
@@ -41,8 +41,8 @@ function createFieldWithInstance($suffix = '') {
     $this->$field_id = $this->{$field}['id'];
     $this->$instance = array(
       'field_name' => $this->$field_name,
-      'entity_type' => 'test_entity',
-      'bundle' => 'test_bundle',
+      'entity_type' => 'entity_test',
+      'bundle' => 'entity_test',
       'label' => $this->randomName() . '_label',
       'description' => $this->randomName() . '_description',
       'weight' => mt_rand(0, 127),
diff --git a/core/modules/field/lib/Drupal/field/Tests/FieldInfoTest.php b/core/modules/field/lib/Drupal/field/Tests/FieldInfoTest.php
index 3115851..9b781a0 100644
--- a/core/modules/field/lib/Drupal/field/Tests/FieldInfoTest.php
+++ b/core/modules/field/lib/Drupal/field/Tests/FieldInfoTest.php
@@ -53,11 +53,11 @@ function testFieldInfo() {
     }
 
     // Verify that no unexpected instances exist.
-    $instances = field_info_instances('test_entity');
+    $instances = field_info_instances('entity_test');
     $expected = array();
-    $this->assertIdentical($instances, $expected, format_string("field_info_instances('test_entity') returns %expected.", array('%expected' => var_export($expected, TRUE))));
-    $instances = field_info_instances('test_entity', 'test_bundle');
-    $this->assertIdentical($instances, array(), "field_info_instances('test_entity', 'test_bundle') returns an empty array.");
+    $this->assertIdentical($instances, $expected, format_string("field_info_instances('entity_test') returns %expected.", array('%expected' => var_export($expected, TRUE))));
+    $instances = field_info_instances('entity_test', 'entity_test');
+    $this->assertIdentical($instances, array(), "field_info_instances('entity_test', 'entity_test') returns an empty array.");
 
     // Create a field, verify it shows up.
     $core_fields = field_info_fields();
@@ -81,8 +81,8 @@ function testFieldInfo() {
     // Create an instance, verify that it shows up
     $instance = array(
       'field_name' => $field['field_name'],
-      'entity_type' => 'test_entity',
-      'bundle' => 'test_bundle',
+      'entity_type' => 'entity_test',
+      'bundle' => 'entity_test',
       'label' => $this->randomName(),
       'description' => $this->randomName(),
       'weight' => mt_rand(0, 127),
@@ -93,20 +93,20 @@ function testFieldInfo() {
           'test_setting' => 999)));
     field_create_instance($instance);
 
-    $info = entity_get_info('test_entity');
-    $instances = field_info_instances('test_entity', $instance['bundle']);
+    $info = entity_get_info('entity_test');
+    $instances = field_info_instances('entity_test', $instance['bundle']);
     $this->assertEqual(count($instances), 1, format_string('One instance shows up in info when attached to a bundle on a @label.', array(
       '@label' => $info['label']
     )));
     $this->assertTrue($instance < $instances[$instance['field_name']], 'Instance appears in info correctly');
 
     // Test a valid entity type but an invalid bundle.
-    $instances = field_info_instances('test_entity', 'invalid_bundle');
-    $this->assertIdentical($instances, array(), "field_info_instances('test_entity', 'invalid_bundle') returns an empty array.");
+    $instances = field_info_instances('entity_test', 'invalid_bundle');
+    $this->assertIdentical($instances, array(), "field_info_instances('entity_test', 'invalid_bundle') returns an empty array.");
 
     // Test invalid entity type and bundle.
     $instances = field_info_instances('invalid_entity', $instance['bundle']);
-    $this->assertIdentical($instances, array(), "field_info_instances('invalid_entity', 'test_bundle') returns an empty array.");
+    $this->assertIdentical($instances, array(), "field_info_instances('invalid_entity', 'entity_test') returns an empty array.");
 
     // Test invalid entity type, no bundle provided.
     $instances = field_info_instances('invalid_entity');
@@ -172,8 +172,8 @@ function testInstancePrepare() {
     field_create_field($field_definition);
     $instance_definition = array(
       'field_name' => $field_definition['field_name'],
-      'entity_type' => 'test_entity',
-      'bundle' => 'test_bundle',
+      'entity_type' => 'entity_test',
+      'bundle' => 'entity_test',
     );
     field_create_instance($instance_definition);
 
@@ -237,7 +237,7 @@ function testFieldMap() {
     // We will overlook fields created by the 'standard' installation profile.
     $exclude = field_info_field_map();
 
-    // Create a new bundle for 'test_entity' entity type.
+    // Create a new bundle for 'entity_test' entity type.
     field_test_create_bundle('test_bundle_2');
 
     // Create a couple fields.
@@ -259,23 +259,23 @@ function testFieldMap() {
     $instances = array(
       array(
         'field_name' => 'field_1',
-        'entity_type' => 'test_entity',
-        'bundle' => 'test_bundle',
+        'entity_type' => 'entity_test',
+        'bundle' => 'entity_test',
       ),
       array(
         'field_name' => 'field_1',
-        'entity_type' => 'test_entity',
+        'entity_type' => 'entity_test',
         'bundle' => 'test_bundle_2',
       ),
       array(
         'field_name' => 'field_2',
-        'entity_type' => 'test_entity',
-        'bundle' => 'test_bundle',
+        'entity_type' => 'entity_test',
+        'bundle' => 'entity_test',
       ),
       array(
         'field_name' => 'field_2',
         'entity_type' => 'test_cacheable_entity',
-        'bundle' => 'test_bundle',
+        'bundle' => 'entity_test',
       ),
     );
     foreach ($instances as $instance) {
@@ -286,14 +286,14 @@ function testFieldMap() {
       'field_1' => array(
         'type' => 'test_field',
         'bundles' => array(
-          'test_entity' => array('test_bundle', 'test_bundle_2'),
+          'entity_test' => array('entity_test', 'test_bundle_2'),
         ),
       ),
       'field_2' => array(
         'type' => 'hidden_test_field',
         'bundles' => array(
-          'test_entity' => array('test_bundle'),
-          'test_cacheable_entity' => array('test_bundle'),
+          'entity_test' => array('entity_test'),
+          'test_cacheable_entity' => array('entity_test'),
         ),
       ),
     );
diff --git a/core/modules/field/lib/Drupal/field/Tests/FieldInstanceCrudTest.php b/core/modules/field/lib/Drupal/field/Tests/FieldInstanceCrudTest.php
index 90fcc05..b5620ce 100644
--- a/core/modules/field/lib/Drupal/field/Tests/FieldInstanceCrudTest.php
+++ b/core/modules/field/lib/Drupal/field/Tests/FieldInstanceCrudTest.php
@@ -38,8 +38,8 @@ function setUp() {
     field_create_field($this->field);
     $this->instance_definition = array(
       'field_name' => $this->field['field_name'],
-      'entity_type' => 'test_entity',
-      'bundle' => 'test_bundle',
+      'entity_type' => 'entity_test',
+      'bundle' => 'entity_test',
     );
   }
 
@@ -138,7 +138,7 @@ function testReadFieldInstance() {
     field_create_instance($this->instance_definition);
 
     // Read the instance back.
-    $instance = field_read_instance('test_entity', $this->instance_definition['field_name'], $this->instance_definition['bundle']);
+    $instance = field_read_instance('entity_test', $this->instance_definition['field_name'], $this->instance_definition['bundle']);
     $this->assertTrue($this->instance_definition == $instance, 'The field was properly read.');
   }
 
@@ -149,7 +149,7 @@ function testUpdateFieldInstance() {
     field_create_instance($this->instance_definition);
 
     // Check that basic changes are saved.
-    $instance = field_read_instance('test_entity', $this->instance_definition['field_name'], $this->instance_definition['bundle']);
+    $instance = field_read_instance('entity_test', $this->instance_definition['field_name'], $this->instance_definition['bundle']);
     $instance['required'] = !$instance['required'];
     $instance['label'] = $this->randomName();
     $instance['description'] = $this->randomName();
@@ -158,7 +158,7 @@ function testUpdateFieldInstance() {
     $instance['widget']['weight']++;
     field_update_instance($instance);
 
-    $instance_new = field_read_instance('test_entity', $this->instance_definition['field_name'], $this->instance_definition['bundle']);
+    $instance_new = field_read_instance('entity_test', $this->instance_definition['field_name'], $this->instance_definition['bundle']);
     $this->assertEqual($instance['required'], $instance_new['required'], '"required" change is saved');
     $this->assertEqual($instance['label'], $instance_new['label'], '"label" change is saved');
     $this->assertEqual($instance['description'], $instance_new['description'], '"description" change is saved');
@@ -166,11 +166,11 @@ function testUpdateFieldInstance() {
     $this->assertEqual($instance['widget']['weight'], $instance_new['widget']['weight'], 'Widget weight change is saved');
 
     // Check that changing the widget type updates the default settings.
-    $instance = field_read_instance('test_entity', $this->instance_definition['field_name'], $this->instance_definition['bundle']);
+    $instance = field_read_instance('entity_test', $this->instance_definition['field_name'], $this->instance_definition['bundle']);
     $instance['widget']['type'] = 'test_field_widget_multiple';
     field_update_instance($instance);
 
-    $instance_new = field_read_instance('test_entity', $this->instance_definition['field_name'], $this->instance_definition['bundle']);
+    $instance_new = field_read_instance('entity_test', $this->instance_definition['field_name'], $this->instance_definition['bundle']);
     $this->assertEqual($instance['widget']['type'], $instance_new['widget']['type'] , 'Widget type change is saved.');
     $settings = field_info_widget_settings($instance_new['widget']['type']);
     $this->assertIdentical($settings, array_intersect_key($instance_new['widget']['settings'], $settings) , 'Widget type change updates default settings.');
@@ -194,21 +194,21 @@ function testDeleteFieldInstance() {
     $instance = field_create_instance($this->another_instance_definition);
 
     // Test that the first instance is not deleted, and then delete it.
-    $instance = field_read_instance('test_entity', $this->instance_definition['field_name'], $this->instance_definition['bundle'], array('include_deleted' => TRUE));
+    $instance = field_read_instance('entity_test', $this->instance_definition['field_name'], $this->instance_definition['bundle'], array('include_deleted' => TRUE));
     $this->assertTrue(!empty($instance) && empty($instance['deleted']), 'A new field instance is not marked for deletion.');
     field_delete_instance($instance);
 
     // Make sure the instance is marked as deleted when the instance is
     // specifically loaded.
-    $instance = field_read_instance('test_entity', $this->instance_definition['field_name'], $this->instance_definition['bundle'], array('include_deleted' => TRUE));
+    $instance = field_read_instance('entity_test', $this->instance_definition['field_name'], $this->instance_definition['bundle'], array('include_deleted' => TRUE));
     $this->assertTrue(!empty($instance['deleted']), 'A deleted field instance is marked for deletion.');
 
     // Try to load the instance normally and make sure it does not show up.
-    $instance = field_read_instance('test_entity', $this->instance_definition['field_name'], $this->instance_definition['bundle']);
+    $instance = field_read_instance('entity_test', $this->instance_definition['field_name'], $this->instance_definition['bundle']);
     $this->assertTrue(empty($instance), 'A deleted field instance is not loaded by default.');
 
     // Make sure the other field instance is not deleted.
-    $another_instance = field_read_instance('test_entity', $this->another_instance_definition['field_name'], $this->another_instance_definition['bundle']);
+    $another_instance = field_read_instance('entity_test', $this->another_instance_definition['field_name'], $this->another_instance_definition['bundle']);
     $this->assertTrue(!empty($another_instance) && empty($another_instance['deleted']), 'A non-deleted field instance is not marked for deletion.');
 
     // Make sure the field is deleted when its last instance is deleted.
diff --git a/core/modules/field/lib/Drupal/field/Tests/FieldTestBase.php b/core/modules/field/lib/Drupal/field/Tests/FieldTestBase.php
index a34586e..bd0d39c 100644
--- a/core/modules/field/lib/Drupal/field/Tests/FieldTestBase.php
+++ b/core/modules/field/lib/Drupal/field/Tests/FieldTestBase.php
@@ -61,7 +61,7 @@ function _generateTestFieldValues($cardinality) {
    */
   function assertFieldValues(EntityInterface $entity, $field_name, $langcode, $expected_values, $column = 'value') {
     $e = clone $entity;
-    field_attach_load('test_entity', array($e->ftid => $e));
+    field_attach_load('entity_test', array($e->id() => $e->getBCEntity()));
     $values = isset($e->{$field_name}[$langcode]) ? $e->{$field_name}[$langcode] : array();
     $this->assertEqual(count($values), count($expected_values), 'Expected number of values were saved.');
     foreach ($expected_values as $key => $value) {
diff --git a/core/modules/field/lib/Drupal/field/Tests/FormTest.php b/core/modules/field/lib/Drupal/field/Tests/FormTest.php
index 2f5dbee..05f1ab6 100644
--- a/core/modules/field/lib/Drupal/field/Tests/FormTest.php
+++ b/core/modules/field/lib/Drupal/field/Tests/FormTest.php
@@ -35,8 +35,8 @@ function setUp() {
     $this->field_unlimited = array('field_name' => 'field_unlimited', 'type' => 'test_field', 'cardinality' => FIELD_CARDINALITY_UNLIMITED);
 
     $this->instance = array(
-      'entity_type' => 'test_entity',
-      'bundle' => 'test_bundle',
+      'entity_type' => 'entity_test',
+      'bundle' => 'entity_test',
       'label' => $this->randomName() . '_label',
       'description' => '[site:name]_description',
       'weight' => mt_rand(0, 127),
@@ -62,7 +62,7 @@ function testFieldFormSingle() {
     $langcode = LANGUAGE_NOT_SPECIFIED;
 
     // Display creation form.
-    $this->drupalGet('test-entity/add/test_bundle');
+    $this->drupalGet('entity_test/add');
 
     // Create token value expected for description.
     $token_description = check_plain(variable_get('site_name', 'Drupal')) . '_description';
@@ -84,7 +84,7 @@ function testFieldFormSingle() {
     $value = mt_rand(1, 127);
     $edit = array("{$this->field_name}[$langcode][0][value]" => $value);
     $this->drupalPost(NULL, $edit, t('Save'));
-    preg_match('|test-entity/manage/(\d+)/edit|', $this->url, $match);
+    preg_match('|entity_test/manage/(\d+)/edit|', $this->url, $match);
     $id = $match[1];
     $this->assertRaw(t('test_entity @id has been created.', array('@id' => $id)), 'Entity was created');
     $entity = field_test_entity_test_load($id);
@@ -100,7 +100,7 @@ function testFieldFormSingle() {
     $edit = array("{$this->field_name}[$langcode][0][value]" => $value);
     $this->drupalPost(NULL, $edit, t('Save'));
     $this->assertRaw(t('test_entity @id has been updated.', array('@id' => $id)), 'Entity was updated');
-    $this->container->get('plugin.manager.entity')->getStorageController('test_entity')->resetCache(array($id));
+    $this->container->get('plugin.manager.entity')->getStorageController('entity_test')->resetCache(array($id));
     $entity = field_test_entity_test_load($id);
     $this->assertEqual($entity->{$this->field_name}[$langcode][0]['value'], $value, 'Field value was updated');
 
@@ -109,7 +109,7 @@ function testFieldFormSingle() {
     $edit = array("{$this->field_name}[$langcode][0][value]" => $value);
     $this->drupalPost('test-entity/manage/' . $id . '/edit', $edit, t('Save'));
     $this->assertRaw(t('test_entity @id has been updated.', array('@id' => $id)), 'Entity was updated');
-    $this->container->get('plugin.manager.entity')->getStorageController('test_entity')->resetCache(array($id));
+    $this->container->get('plugin.manager.entity')->getStorageController('entity_test')->resetCache(array($id));
     $entity = field_test_entity_test_load($id);
     $this->assertIdentical($entity->{$this->field_name}, array(), 'Field was emptied');
   }
@@ -128,14 +128,14 @@ function testFieldFormDefaultValue() {
     $langcode = LANGUAGE_NOT_SPECIFIED;
 
     // Display creation form.
-    $this->drupalGet('test-entity/add/test_bundle');
+    $this->drupalGet('entity_test/add');
     // Test that the default value is displayed correctly.
     $this->assertFieldByXpath("//input[@name='{$this->field_name}[$langcode][0][value]' and @value='$default']");
 
     // Try to submit an empty value.
     $edit = array("{$this->field_name}[$langcode][0][value]" => '');
     $this->drupalPost(NULL, $edit, t('Save'));
-    preg_match('|test-entity/manage/(\d+)/edit|', $this->url, $match);
+    preg_match('|entity_test/manage/(\d+)/edit|', $this->url, $match);
     $id = $match[1];
     $this->assertRaw(t('test_entity @id has been created.', array('@id' => $id)), 'Entity was created.');
     $entity = field_test_entity_test_load($id);
@@ -160,7 +160,7 @@ function testFieldFormSingleRequired() {
     $value = mt_rand(1, 127);
     $edit = array("{$this->field_name}[$langcode][0][value]" => $value);
     $this->drupalPost(NULL, $edit, t('Save'));
-    preg_match('|test-entity/manage/(\d+)/edit|', $this->url, $match);
+    preg_match('|entity_test/manage/(\d+)/edit|', $this->url, $match);
     $id = $match[1];
     $this->assertRaw(t('test_entity @id has been created.', array('@id' => $id)), 'Entity was created');
     $entity = field_test_entity_test_load($id);
@@ -190,7 +190,7 @@ function testFieldFormUnlimited() {
     $langcode = LANGUAGE_NOT_SPECIFIED;
 
     // Display creation form -> 1 widget.
-    $this->drupalGet('test-entity/add/test_bundle');
+    $this->drupalGet('entity_test/add');
     $this->assertFieldByName("{$this->field_name}[$langcode][0][value]", '', 'Widget 1 is displayed');
     $this->assertNoField("{$this->field_name}[$langcode][1][value]", 'No extraneous widget is displayed');
 
@@ -240,7 +240,7 @@ function testFieldFormUnlimited() {
 
     // Submit the form and create the entity.
     $this->drupalPost(NULL, $edit, t('Save'));
-    preg_match('|test-entity/manage/(\d+)/edit|', $this->url, $match);
+    preg_match('|entity_test/manage/(\d+)/edit|', $this->url, $match);
     $id = $match[1];
     $this->assertRaw(t('test_entity @id has been created.', array('@id' => $id)), 'Entity was created');
     $entity = field_test_entity_test_load($id);
@@ -279,8 +279,8 @@ function testFieldFormMultivalueWithRequiredRadio() {
     ));
     $instance = array(
       'field_name' => 'required_radio_test',
-      'entity_type' => 'test_entity',
-      'bundle' => 'test_bundle',
+      'entity_type' => 'entity_test',
+      'bundle' => 'entity_test',
       'required' => TRUE,
       'widget' => array(
         'type' => 'options_buttons',
@@ -289,7 +289,7 @@ function testFieldFormMultivalueWithRequiredRadio() {
     field_create_instance($instance);
 
     // Display creation form.
-    $this->drupalGet('test-entity/add/test_bundle');
+    $this->drupalGet('entity_test/add');
 
     // Press the 'Add more' button.
     $this->drupalPost(NULL, array(), t('Add another item'));
@@ -312,7 +312,7 @@ function testFieldFormJSAddMore() {
     $langcode = LANGUAGE_NOT_SPECIFIED;
 
     // Display creation form -> 1 widget.
-    $this->drupalGet('test-entity/add/test_bundle');
+    $this->drupalGet('entity_test/add');
 
     // Press 'add more' button a couple times -> 3 widgets.
     // drupalPostAJAX() will not work iteratively, so we add those through
@@ -372,13 +372,13 @@ function testFieldFormMultipleWidget() {
     $langcode = LANGUAGE_NOT_SPECIFIED;
 
     // Display creation form.
-    $this->drupalGet('test-entity/add/test_bundle');
+    $this->drupalGet('entity_test/add');
     $this->assertFieldByName("{$this->field_name}[$langcode]", '', 'Widget is displayed.');
 
     // Create entity with three values.
     $edit = array("{$this->field_name}[$langcode]" => '1, 2, 3');
     $this->drupalPost(NULL, $edit, t('Save'));
-    preg_match('|test-entity/manage/(\d+)/edit|', $this->url, $match);
+    preg_match('|entity_test/manage/(\d+)/edit|', $this->url, $match);
     $id = $match[1];
 
     // Check that the values were saved.
@@ -417,8 +417,8 @@ function testFieldFormAccess() {
     $field_name_no_access = $field_no_access['field_name'];
     $instance_no_access = array(
       'field_name' => $field_name_no_access,
-      'entity_type' => 'test_entity',
-      'bundle' => 'test_bundle',
+      'entity_type' => 'entity_test',
+      'bundle' => 'entity_test',
       'default_value' => array(0 => array('value' => 99)),
     );
     field_create_field($field_no_access);
@@ -428,7 +428,7 @@ function testFieldFormAccess() {
 
     // Test that the form structure includes full information for each delta
     // apart from #access.
-    $entity_type = 'test_entity';
+    $entity_type = 'entity_test';
     $entity = field_test_create_entity(0, 0, $this->instance['bundle']);
 
     $form = array();
@@ -439,13 +439,13 @@ function testFieldFormAccess() {
     $this->assertFalse($form[$field_name_no_access]['#access'], 'Field #access is FALSE for the field without edit access.');
 
     // Display creation form.
-    $this->drupalGet('test-entity/add/test_bundle');
+    $this->drupalGet('entity_test/add');
     $this->assertNoFieldByName("{$field_name_no_access}[$langcode][0][value]", '', 'Widget is not displayed if field access is denied.');
 
     // Create entity.
     $edit = array("{$field_name}[$langcode][0][value]" => 1);
     $this->drupalPost(NULL, $edit, t('Save'));
-    preg_match('|test-entity/manage/(\d+)/edit|', $this->url, $match);
+    preg_match('|entity_test/manage/(\d+)/edit|', $this->url, $match);
     $id = $match[1];
 
     // Check that the default value was saved.
@@ -458,7 +458,7 @@ function testFieldFormAccess() {
     $this->drupalPost('test-entity/manage/' . $id . '/edit', $edit, t('Save'));
 
     // Check that the new revision has the expected values.
-    $this->container->get('plugin.manager.entity')->getStorageController('test_entity')->resetCache(array($id));
+    $this->container->get('plugin.manager.entity')->getStorageController('entity_test')->resetCache(array($id));
     $entity = field_test_entity_test_load($id);
     $this->assertEqual($entity->{$field_name_no_access}[$langcode][0]['value'], 99, 'New revision has the expected value for the field with no edit access.');
     $this->assertEqual($entity->{$field_name}[$langcode][0]['value'], 2, 'New revision has the expected value for the field with edit access.');
@@ -473,7 +473,7 @@ function testFieldFormAccess() {
    * Tests Field API form integration within a subform.
    */
   function testNestedFieldForm() {
-    // Add two instances on the 'test_bundle'
+    // Add two instances on the 'entity_test'
     field_create_field($this->field_single);
     field_create_field($this->field_unlimited);
     $this->instance['field_name'] = 'field_single';
diff --git a/core/modules/field/lib/Drupal/field/Tests/TranslationTest.php b/core/modules/field/lib/Drupal/field/Tests/TranslationTest.php
index f2ada97..a564e6d 100644
--- a/core/modules/field/lib/Drupal/field/Tests/TranslationTest.php
+++ b/core/modules/field/lib/Drupal/field/Tests/TranslationTest.php
@@ -37,7 +37,7 @@ function setUp() {
 
     $this->field_name = drupal_strtolower($this->randomName() . '_field_name');
 
-    $this->entity_type = 'test_entity';
+    $this->entity_type = 'entity_test';
 
     $field = array(
       'field_name' => $this->field_name,
@@ -51,10 +51,10 @@ function setUp() {
     $instance = array(
       'field_name' => $this->field_name,
       'entity_type' => $this->entity_type,
-      'bundle' => 'test_bundle',
+      'bundle' => 'entity_test',
     );
     field_create_instance($instance);
-    $this->instance = field_read_instance('test_entity', $this->field_name, 'test_bundle');
+    $this->instance = field_read_instance('entity_test', $this->field_name, 'entity_test');
 
     for ($i = 0; $i < 3; ++$i) {
       $language = new Language(array(
@@ -70,12 +70,12 @@ function setUp() {
    */
   function testFieldAvailableLanguages() {
     // Test 'translatable' fieldable info.
-    field_test_entity_info_translatable('test_entity', FALSE);
+    field_test_entity_info_translatable('entity_test', FALSE);
     $field = $this->field;
     $field['field_name'] .= '_untranslatable';
 
     // Enable field translations for the entity.
-    field_test_entity_info_translatable('test_entity', TRUE);
+    field_test_entity_info_translatable('entity_test', TRUE);
 
     // Test hook_field_languages() invocation on a translatable field.
     state()->set('field_test.field_available_languages_alter', TRUE);
@@ -101,9 +101,9 @@ function testFieldAvailableLanguages() {
    */
   function testFieldInvoke() {
     // Enable field translations for the entity.
-    field_test_entity_info_translatable('test_entity', TRUE);
+    field_test_entity_info_translatable('entity_test', TRUE);
 
-    $entity_type = 'test_entity';
+    $entity_type = 'entity_test';
     $entity = field_test_create_entity(0, 0, $this->instance['bundle']);
 
     // Populate some extra languages to check if _field_invoke() correctly uses
@@ -139,12 +139,12 @@ function testFieldInvoke() {
    */
   function testFieldInvokeMultiple() {
     // Enable field translations for the entity.
-    field_test_entity_info_translatable('test_entity', TRUE);
+    field_test_entity_info_translatable('entity_test', TRUE);
 
     $values = array();
     $options = array();
     $entities = array();
-    $entity_type = 'test_entity';
+    $entity_type = 'entity_test';
     $entity_count = 5;
     $available_langcodes = field_available_languages($this->entity_type, $this->field);
 
@@ -217,9 +217,9 @@ function testTranslatableFieldSaveLoad() {
     $this->assertTrue(count($entity_info['translation']), 'Nodes are translatable.');
 
     // Prepare the field translations.
-    field_test_entity_info_translatable('test_entity', TRUE);
+    field_test_entity_info_translatable('entity_test', TRUE);
     $eid = $evid = 1;
-    $entity_type = 'test_entity';
+    $entity_type = 'entity_test';
     $entity = field_test_create_entity($eid, $evid, $this->instance['bundle']);
     $field_translations = array();
     $available_langcodes = field_available_languages($entity_type, $this->field);
@@ -295,7 +295,7 @@ function testTranslatableFieldSaveLoad() {
    */
   function testFieldDisplayLanguage() {
     $field_name = drupal_strtolower($this->randomName() . '_field_name');
-    $entity_type = 'test_entity';
+    $entity_type = 'entity_test';
 
     // We need an additional field here to properly test display language
     // suggestions.
@@ -310,7 +310,7 @@ function testFieldDisplayLanguage() {
     $instance = array(
       'field_name' => $field['field_name'],
       'entity_type' => $entity_type,
-      'bundle' => 'test_bundle',
+      'bundle' => 'entity_test',
     );
     field_create_instance($instance);
 
diff --git a/core/modules/field/tests/modules/field_test/lib/Drupal/field_test/Type/TestItem.php b/core/modules/field/tests/modules/field_test/lib/Drupal/field_test/Type/TestItem.php
index 0c61d15..bc3b9fd 100644
--- a/core/modules/field/tests/modules/field_test/lib/Drupal/field_test/Type/TestItem.php
+++ b/core/modules/field/tests/modules/field_test/lib/Drupal/field_test/Type/TestItem.php
@@ -33,6 +33,10 @@ public function getPropertyDefinitions() {
         'type' => 'integer',
         'label' => t('Test integer value'),
       );
+      static::$propertyDefinitions['additional_key'] = array(
+        'type' => 'string',
+        'label' => t('Additional test value'),
+      );
     }
     return static::$propertyDefinitions;
   }
diff --git a/core/modules/field_sql_storage/lib/Drupal/field_sql_storage/Tests/FieldSqlStorageTest.php b/core/modules/field_sql_storage/lib/Drupal/field_sql_storage/Tests/FieldSqlStorageTest.php
index e79757e..67a1332 100644
--- a/core/modules/field_sql_storage/lib/Drupal/field_sql_storage/Tests/FieldSqlStorageTest.php
+++ b/core/modules/field_sql_storage/lib/Drupal/field_sql_storage/Tests/FieldSqlStorageTest.php
@@ -25,7 +25,7 @@ class FieldSqlStorageTest extends WebTestBase {
    *
    * @var array
    */
-  public static $modules = array('field_sql_storage', 'field', 'field_test', 'text', 'number');
+  public static $modules = array('field_sql_storage', 'field', 'field_test', 'text', 'number', 'entity_test');
 
   public static function getInfo() {
     return array(
@@ -37,14 +37,15 @@ public static function getInfo() {
 
   function setUp() {
     parent::setUp();
+    $entity_type = 'entity_test_rev';
 
     $this->field_name = strtolower($this->randomName());
     $this->field = array('field_name' => $this->field_name, 'type' => 'test_field', 'cardinality' => 4);
     $this->field = field_create_field($this->field);
     $this->instance = array(
       'field_name' => $this->field_name,
-      'entity_type' => 'test_entity',
-      'bundle' => 'test_bundle'
+      'entity_type' => $entity_type,
+      'bundle' => $entity_type
     );
     $this->instance = field_create_instance($this->instance);
     $this->table = _field_sql_storage_tablename($this->field);
@@ -57,7 +58,7 @@ function setUp() {
    * field_load_revision works correctly.
    */
   function testFieldAttachLoad() {
-    $entity_type = 'test_entity';
+    $entity_type = 'entity_test_rev';
     $eid = 0;
     $langcode = LANGUAGE_NOT_SPECIFIED;
 
@@ -84,27 +85,33 @@ function testFieldAttachLoad() {
     $query->execute();
 
     // Load the "most current revision"
-    $entity = field_test_create_entity($eid, 0, $this->instance['bundle']);
-    field_attach_load($entity_type, array($eid => $entity));
+    $entity = entity_create($entity_type, array(
+      'id' => 0,
+      'revision_id' => 0,
+    ));
+    field_attach_load($entity_type, array($eid => $entity->getBCEntity()));
     foreach ($values[0] as $delta => $value) {
       if ($delta < $this->field['cardinality']) {
-        $this->assertEqual($entity->{$this->field_name}[$langcode][$delta]['value'], $value, "Value $delta is loaded correctly for current revision");
+        $this->assertEqual($entity->{$this->field_name}[$delta]->value, $value, "Value $delta is loaded correctly for current revision");
       }
       else {
-        $this->assertFalse(array_key_exists($delta, $entity->{$this->field_name}[$langcode]), "No extraneous value gets loaded for current revision.");
+        $this->assertFalse(array_key_exists($delta, $entity->{$this->field_name}), "No extraneous value gets loaded for current revision.");
       }
     }
 
     // Load every revision
     for ($evid = 0; $evid < 4; ++$evid) {
-      $entity = field_test_create_entity($eid, $evid, $this->instance['bundle']);
-      field_attach_load_revision($entity_type, array($eid => $entity));
+      $entity = entity_create($entity_type, array(
+        'id' => $eid,
+        'revision_id' => $evid,
+      ));
+      field_attach_load_revision($entity_type, array($eid => $entity->getBCEntity()));
       foreach ($values[$evid] as $delta => $value) {
         if ($delta < $this->field['cardinality']) {
-          $this->assertEqual($entity->{$this->field_name}[$langcode][$delta]['value'], $value, "Value $delta for revision $evid is loaded correctly");
+          $this->assertEqual($entity->{$this->field_name}[$delta]->value, $value, "Value $delta for revision $evid is loaded correctly");
         }
         else {
-          $this->assertFalse(array_key_exists($delta, $entity->{$this->field_name}[$langcode]), "No extraneous value gets loaded for revision $evid.");
+          $this->assertFalse(array_key_exists($delta, $entity->{$this->field_name}), "No extraneous value gets loaded for revision $evid.");
         }
       }
     }
@@ -113,11 +120,14 @@ function testFieldAttachLoad() {
     // loaded.
     $eid = $evid = 1;
     $unavailable_langcode = 'xx';
-    $entity = field_test_create_entity($eid, $evid, $this->instance['bundle']);
+    $entity = entity_create($entity_type, array(
+      'id' => $eid,
+      'revision_id' => $evid,
+    ));
     $values = array($entity_type, $eid, $evid, 0, $unavailable_langcode, mt_rand(1, 127));
     db_insert($this->table)->fields($columns)->values($values)->execute();
     db_insert($this->revision_table)->fields($columns)->values($values)->execute();
-    field_attach_load($entity_type, array($eid => $entity));
+    field_attach_load($entity_type, array($eid => $entity->getBCEntity()));
     $this->assertFalse(array_key_exists($unavailable_langcode, $entity->{$this->field_name}), 'Field translation in an unavailable language ignored');
   }
 
@@ -126,8 +136,11 @@ function testFieldAttachLoad() {
    * written when using insert and update.
    */
   function testFieldAttachInsertAndUpdate() {
-    $entity_type = 'test_entity';
-    $entity = field_test_create_entity(0, 0, $this->instance['bundle']);
+    $entity_type = 'entity_test_rev';
+    $entity = entity_create($entity_type, array(
+      'id' => 0,
+      'revision_id' => 0,
+    ));
     $langcode = LANGUAGE_NOT_SPECIFIED;
 
     // Test insert.
@@ -137,8 +150,8 @@ function testFieldAttachInsertAndUpdate() {
     for ($delta = 0; $delta <= $this->field['cardinality']; $delta++) {
       $values[$delta]['value'] = mt_rand(1, 127);
     }
-    $entity->{$this->field_name}[$langcode] = $rev_values[0] = $values;
-    field_attach_insert($entity);
+    $entity->{$this->field_name} = $rev_values[0] = $values;
+    field_attach_insert($entity->getBCEntity());
 
     $rows = db_select($this->table, 't')->fields('t')->execute()->fetchAllAssoc('delta', PDO::FETCH_ASSOC);
     foreach ($values as $delta => $value) {
@@ -151,14 +164,17 @@ function testFieldAttachInsertAndUpdate() {
     }
 
     // Test update.
-    $entity = field_test_create_entity(0, 1, $this->instance['bundle']);
+    $entity = entity_create($entity_type, array(
+      'id' => 0,
+      'revision_id' => 1,
+    ));
     $values = array();
     // Note: we try to update one extra value ('<=' instead of '<').
     for ($delta = 0; $delta <= $this->field['cardinality']; $delta++) {
       $values[$delta]['value'] = mt_rand(1, 127);
     }
     $entity->{$this->field_name}[$langcode] = $rev_values[1] = $values;
-    field_attach_update($entity);
+    field_attach_update($entity->getBCEntity());
     $rows = db_select($this->table, 't')->fields('t')->execute()->fetchAllAssoc('delta', PDO::FETCH_ASSOC);
     foreach ($values as $delta => $value) {
       if ($delta < $this->field['cardinality']) {
@@ -188,7 +204,7 @@ function testFieldAttachInsertAndUpdate() {
     // Check that update leaves the field data untouched if
     // $entity->{$field_name} is absent.
     unset($entity->{$this->field_name});
-    field_attach_update($entity);
+    field_attach_update($entity->getBCEntity());
     $rows = db_select($this->table, 't')->fields('t')->execute()->fetchAllAssoc('delta', PDO::FETCH_ASSOC);
     foreach ($values as $delta => $value) {
       if ($delta < $this->field['cardinality']) {
@@ -198,7 +214,7 @@ function testFieldAttachInsertAndUpdate() {
 
     // Check that update with an empty $entity->$field_name empties the field.
     $entity->{$this->field_name} = NULL;
-    field_attach_update($entity);
+    field_attach_update($entity->getBCEntity());
     $rows = db_select($this->table, 't')->fields('t')->execute()->fetchAllAssoc('delta', PDO::FETCH_ASSOC);
     $this->assertEqual(count($rows), 0, t("Update with an empty field_name entry empties the field."));
   }
@@ -207,12 +223,15 @@ function testFieldAttachInsertAndUpdate() {
    * Tests insert and update with missing or NULL fields.
    */
   function testFieldAttachSaveMissingData() {
-    $entity_type = 'test_entity';
-    $entity = field_test_create_entity(0, 0, $this->instance['bundle']);
+    $entity_type = 'entity_test_rev';
+    $entity = entity_create($entity_type, array(
+      'id' => 0,
+      'revision_id' => 0,
+    ));
     $langcode = LANGUAGE_NOT_SPECIFIED;
 
     // Insert: Field is missing
-    field_attach_insert($entity);
+    field_attach_insert($entity->getBCEntity());
     $count = db_select($this->table)
       ->countQuery()
       ->execute()
@@ -221,7 +240,7 @@ function testFieldAttachSaveMissingData() {
 
     // Insert: Field is NULL
     $entity->{$this->field_name} = NULL;
-    field_attach_insert($entity);
+    field_attach_insert($entity->getBCEntity());
     $count = db_select($this->table)
       ->countQuery()
       ->execute()
@@ -230,7 +249,7 @@ function testFieldAttachSaveMissingData() {
 
     // Add some real data
     $entity->{$this->field_name}[$langcode] = array(0 => array('value' => 1));
-    field_attach_insert($entity);
+    field_attach_insert($entity->getBCEntity());
     $count = db_select($this->table)
       ->countQuery()
       ->execute()
@@ -239,7 +258,7 @@ function testFieldAttachSaveMissingData() {
 
     // Update: Field is missing. Data should survive.
     unset($entity->{$this->field_name});
-    field_attach_update($entity);
+    field_attach_update($entity->getBCEntity());
     $count = db_select($this->table)
       ->countQuery()
       ->execute()
@@ -248,7 +267,7 @@ function testFieldAttachSaveMissingData() {
 
     // Update: Field is NULL. Data should be wiped.
     $entity->{$this->field_name} = NULL;
-    field_attach_update($entity);
+    field_attach_update($entity->getBCEntity());
     $count = db_select($this->table)
       ->countQuery()
       ->execute()
@@ -269,7 +288,7 @@ function testFieldAttachSaveMissingData() {
 
     // Again add some real data.
     $entity->{$this->field_name}[$langcode] = array(0 => array('value' => 1));
-    field_attach_insert($entity);
+    field_attach_insert($entity->getBCEntity());
     $count = db_select($this->table)
       ->countQuery()
       ->execute()
@@ -280,7 +299,7 @@ function testFieldAttachSaveMissingData() {
     // data should survive.
     $entity->{$this->field_name}[$unavailable_langcode] = array(mt_rand(1, 127));
     unset($entity->{$this->field_name}[$langcode]);
-    field_attach_update($entity);
+    field_attach_update($entity->getBCEntity());
     $count = db_select($this->table)
       ->countQuery()
       ->execute()
@@ -290,7 +309,7 @@ function testFieldAttachSaveMissingData() {
     // Update: Field translation is NULL but field is not empty. Translation
     // data should be wiped.
     $entity->{$this->field_name}[$langcode] = NULL;
-    field_attach_update($entity);
+    field_attach_update($entity->getBCEntity());
     $count = db_select($this->table)
       ->countQuery()
       ->execute()
@@ -302,12 +321,16 @@ function testFieldAttachSaveMissingData() {
    * Test trying to update a field with data.
    */
   function testUpdateFieldSchemaWithData() {
+    $entity_type = 'entity_test_rev';
     // Create a decimal 5.2 field and add some data.
     $field = array('field_name' => 'decimal52', 'type' => 'number_decimal', 'settings' => array('precision' => 5, 'scale' => 2));
     $field = field_create_field($field);
-    $instance = array('field_name' => 'decimal52', 'entity_type' => 'test_entity', 'bundle' => 'test_bundle');
+    $instance = array('field_name' => 'decimal52', 'entity_type' => $entity_type, 'bundle' => $entity_type);
     $instance = field_create_instance($instance);
-    $entity = field_test_create_entity(0, 0, $instance['bundle']);
+    $entity = entity_create($entity_type, array(
+      'id' => 0,
+      'revision_id' => 0,
+    ));
     $entity->decimal52[LANGUAGE_NOT_SPECIFIED][0]['value'] = '1.235';
     $entity->save();
 
@@ -351,12 +374,13 @@ function testFieldUpdateFailure() {
    * Test adding and removing indexes while data is present.
    */
   function testFieldUpdateIndexesWithData() {
+    $entity_type = 'entity_test_rev';
 
     // Create a decimal field.
     $field_name = 'testfield';
     $field = array('field_name' => $field_name, 'type' => 'text');
     $field = field_create_field($field);
-    $instance = array('field_name' => $field_name, 'entity_type' => 'test_entity', 'bundle' => 'test_bundle');
+    $instance = array('field_name' => $field_name, 'entity_type' => $entity_type, 'bundle' => $entity_type);
     $instance = field_create_instance($instance);
     $tables = array(_field_sql_storage_tablename($field), _field_sql_storage_revision_tablename($field));
 
@@ -367,7 +391,10 @@ function testFieldUpdateIndexesWithData() {
     }
 
     // Add data so the table cannot be dropped.
-    $entity = field_test_create_entity(1, 1, $instance['bundle']);
+    $entity = entity_create($entity_type, array(
+      'id' => 1,
+      'revision_id' => 1,
+    ));
     $entity->{$field_name}[LANGUAGE_NOT_SPECIFIED][0]['value'] = 'field data';
     $entity->save();
 
@@ -387,9 +414,12 @@ function testFieldUpdateIndexesWithData() {
     }
 
     // Verify that the tables were not dropped.
-    $entity = field_test_create_entity(1, 1, $instance['bundle']);
-    field_attach_load('test_entity', array(1 => $entity));
-    $this->assertEqual($entity->{$field_name}[LANGUAGE_NOT_SPECIFIED][0]['value'], 'field data', t("Index changes performed without dropping the tables"));
+    $entity = entity_create($entity_type, array(
+      'id' => 1,
+      'revision_id' => 1,
+    ));
+    field_attach_load($entity_type, array(1 => $entity->getBCEntity()));
+    $this->assertEqual($entity->$field_name->value, 'field data', t("Index changes performed without dropping the tables"));
   }
 
   /**
diff --git a/core/modules/link/lib/Drupal/link/Tests/LinkFieldTest.php b/core/modules/link/lib/Drupal/link/Tests/LinkFieldTest.php
index a608873..f83e2c6 100644
--- a/core/modules/link/lib/Drupal/link/Tests/LinkFieldTest.php
+++ b/core/modules/link/lib/Drupal/link/Tests/LinkFieldTest.php
@@ -19,7 +19,7 @@ class LinkFieldTest extends WebTestBase {
    *
    * @var array
    */
-  public static $modules = array('field_test', 'link');
+  public static $modules = array('entity_test', 'link');
 
   public static function getInfo() {
     return array(
@@ -33,8 +33,8 @@ function setUp() {
     parent::setUp();
 
     $this->web_user = $this->drupalCreateUser(array(
-      'access field_test content',
-      'administer field_test content',
+      'view test entity',
+      'administer entity_test content',
     ));
     $this->drupalLogin($this->web_user);
   }
@@ -51,8 +51,8 @@ function testURLValidation() {
     field_create_field($this->field);
     $this->instance = array(
       'field_name' => $this->field['field_name'],
-      'entity_type' => 'test_entity',
-      'bundle' => 'test_bundle',
+      'entity_type' => 'entity_test',
+      'bundle' => 'entity_test',
       'settings' => array(
         'title' => DRUPAL_DISABLED,
       ),
@@ -64,7 +64,7 @@ function testURLValidation() {
       ),
     );
     field_create_instance($this->instance);
-    entity_get_display('test_entity', 'test_bundle', 'full')
+    entity_get_display('entity_test', 'entity_test', 'full')
       ->setComponent($this->field['field_name'], array(
         'type' => 'link',
       ))
@@ -73,19 +73,21 @@ function testURLValidation() {
     $langcode = LANGUAGE_NOT_SPECIFIED;
 
     // Display creation form.
-    $this->drupalGet('test-entity/add/test_bundle');
+    $this->drupalGet('entity_test/add');
     $this->assertFieldByName("{$this->field['field_name']}[$langcode][0][url]", '', 'Link URL field is displayed');
     $this->assertRaw('placeholder="http://example.com"');
 
     // Verify that a valid URL can be submitted.
     $value = 'http://www.example.com/';
     $edit = array(
+      'user_id' => 1,
+      'name' => $this->randomName(),
       "{$this->field['field_name']}[$langcode][0][url]" => $value,
     );
     $this->drupalPost(NULL, $edit, t('Save'));
-    preg_match('|test-entity/manage/(\d+)/edit|', $this->url, $match);
+    preg_match('|entity_test/manage/(\d+)/edit|', $this->url, $match);
     $id = $match[1];
-    $this->assertRaw(t('test_entity @id has been created.', array('@id' => $id)));
+    $this->assertText(t('entity_test @id has been created.', array('@id' => $id)));
     $this->assertRaw($value);
 
     // Verify that invalid URLs cannot be submitted.
@@ -97,9 +99,11 @@ function testURLValidation() {
       // Missing host name
       'http://',
     );
-    $this->drupalGet('test-entity/add/test_bundle');
+    $this->drupalGet('entity_test/add');
     foreach ($wrong_entries as $invalid_value) {
       $edit = array(
+        'user_id' => 1,
+        'name' => $this->randomName(),
         "{$this->field['field_name']}[$langcode][0][url]" => $invalid_value,
       );
       $this->drupalPost(NULL, $edit, t('Save'));
@@ -119,8 +123,8 @@ function testLinkTitle() {
     field_create_field($this->field);
     $this->instance = array(
       'field_name' => $this->field['field_name'],
-      'entity_type' => 'test_entity',
-      'bundle' => 'test_bundle',
+      'entity_type' => 'entity_test',
+      'bundle' => 'entity_test',
       'settings' => array(
         'title' => DRUPAL_OPTIONAL,
       ),
@@ -133,7 +137,7 @@ function testLinkTitle() {
       ),
     );
     field_create_instance($this->instance);
-    entity_get_display('test_entity', 'test_bundle', 'full')
+    entity_get_display('entity_test', 'entity_test', 'full')
       ->setComponent($this->field['field_name'], array(
         'type' => 'link',
         'label' => 'hidden',
@@ -149,7 +153,7 @@ function testLinkTitle() {
       field_update_instance($this->instance);
 
       // Display creation form.
-      $this->drupalGet('test-entity/add/test_bundle');
+      $this->drupalGet('entity_test/add');
       $this->assertFieldByName("{$this->field['field_name']}[$langcode][0][url]", '', 'URL field found.');
       $this->assertRaw('placeholder="http://example.com"');
 
@@ -177,7 +181,7 @@ function testLinkTitle() {
           $this->assertNoText(t('!name field is required.', array('!name' => t('Title'))));
 
           // Verify that a URL and title meets requirements.
-          $this->drupalGet('test-entity/add/test_bundle');
+          $this->drupalGet('entity_test/add');
           $edit = array(
             "{$this->field['field_name']}[$langcode][0][url]" => 'http://www.example.com',
             "{$this->field['field_name']}[$langcode][0][title]" => 'Example',
@@ -191,13 +195,15 @@ function testLinkTitle() {
     // Verify that a link without title is rendered using the URL as link text.
     $value = 'http://www.example.com/';
     $edit = array(
+      'user_id' => 1,
+      'name' => $this->randomName(),
       "{$this->field['field_name']}[$langcode][0][url]" => $value,
       "{$this->field['field_name']}[$langcode][0][title]" => '',
     );
     $this->drupalPost(NULL, $edit, t('Save'));
-    preg_match('|test-entity/manage/(\d+)/edit|', $this->url, $match);
+    preg_match('|entity_test/manage/(\d+)/edit|', $this->url, $match);
     $id = $match[1];
-    $this->assertRaw(t('test_entity @id has been created.', array('@id' => $id)));
+    $this->assertText(t('entity_test @id has been created.', array('@id' => $id)));
 
     $this->renderTestEntity($id);
     $expected_link = l($value, $value);
@@ -206,10 +212,12 @@ function testLinkTitle() {
     // Verify that a link with title is rendered using the title as link text.
     $title = $this->randomName();
     $edit = array(
+      'user_id' => 1,
+      'name' => $this->randomName(),
       "{$this->field['field_name']}[$langcode][0][title]" => $title,
     );
-    $this->drupalPost("test-entity/manage/$id/edit", $edit, t('Save'));
-    $this->assertRaw(t('test_entity @id has been updated.', array('@id' => $id)));
+    $this->drupalPost("entity_test/manage/$id/edit", $edit, t('Save'));
+    $this->assertText(t('entity_test @id has been updated.', array('@id' => $id)));
 
     $this->renderTestEntity($id);
     $expected_link = l($title, $value);
@@ -229,8 +237,8 @@ function testLinkFormatter() {
     field_create_field($this->field);
     $this->instance = array(
       'field_name' => $this->field['field_name'],
-      'entity_type' => 'test_entity',
-      'bundle' => 'test_bundle',
+      'entity_type' => 'entity_test',
+      'bundle' => 'entity_test',
       'settings' => array(
         'title' => DRUPAL_OPTIONAL,
       ),
@@ -243,7 +251,7 @@ function testLinkFormatter() {
       'label' => 'hidden',
     );
     field_create_instance($this->instance);
-    entity_get_display('test_entity', 'test_bundle', 'full')
+    entity_get_display('entity_test', 'entity_test', 'full')
       ->setComponent($this->field['field_name'], $display_options)
       ->save();
 
@@ -254,13 +262,15 @@ function testLinkFormatter() {
     // - The second field item uses a URL and title.
     // For consistency in assertion code below, the URL is assigned to the title
     // variable for the first field.
-    $this->drupalGet('test-entity/add/test_bundle');
+    $this->drupalGet('entity_test/add');
     $url1 = 'http://www.example.com/content/articles/archive?author=John&year=2012#com';
     $url2 = 'http://www.example.org/content/articles/archive?author=John&year=2012#org';
     $title1 = $url1;
     // Intentionally contains an ampersand that needs sanitization on output.
     $title2 = 'A very long & strange example title that could break the nice layout of the site';
     $edit = array(
+      'user_id' => 1,
+      'name' => $this->randomName(),
       "{$this->field['field_name']}[$langcode][0][url]" => $url1,
       // Note that $title1 is not submitted.
       "{$this->field['field_name']}[$langcode][0][title]" => '',
@@ -268,9 +278,9 @@ function testLinkFormatter() {
       "{$this->field['field_name']}[$langcode][1][title]" => $title2,
     );
     $this->drupalPost(NULL, $edit, t('Save'));
-    preg_match('|test-entity/manage/(\d+)/edit|', $this->url, $match);
+    preg_match('|entity_test/manage/(\d+)/edit|', $this->url, $match);
     $id = $match[1];
-    $this->assertRaw(t('test_entity @id has been created.', array('@id' => $id)));
+    $this->assertText(t('entity_test @id has been created.', array('@id' => $id)));
 
     // Verify that the link is output according to the formatter settings.
     // Not using generatePermutations(), since that leads to 32 cases, which
@@ -297,7 +307,7 @@ function testLinkFormatter() {
         else {
           $display_options['settings'] = $new_value;
         }
-        entity_get_display('test_entity', 'test_bundle', 'full')
+        entity_get_display('entity_test', 'entity_test', 'full')
           ->setComponent($this->field['field_name'], $display_options)
           ->save();
 
@@ -365,8 +375,8 @@ function testLinkSeparateFormatter() {
     field_create_field($this->field);
     $this->instance = array(
       'field_name' => $this->field['field_name'],
-      'entity_type' => 'test_entity',
-      'bundle' => 'test_bundle',
+      'entity_type' => 'entity_test',
+      'bundle' => 'entity_test',
       'settings' => array(
         'title' => DRUPAL_OPTIONAL,
       ),
@@ -379,7 +389,7 @@ function testLinkSeparateFormatter() {
       'label' => 'hidden',
     );
     field_create_instance($this->instance);
-    entity_get_display('test_entity', 'test_bundle', 'full')
+    entity_get_display('entity_test', 'entity_test', 'full')
       ->setComponent($this->field['field_name'], $display_options)
       ->save();
 
@@ -390,20 +400,22 @@ function testLinkSeparateFormatter() {
     // - The second field item uses a URL and title.
     // For consistency in assertion code below, the URL is assigned to the title
     // variable for the first field.
-    $this->drupalGet('test-entity/add/test_bundle');
+    $this->drupalGet('entity_test/add');
     $url1 = 'http://www.example.com/content/articles/archive?author=John&year=2012#com';
     $url2 = 'http://www.example.org/content/articles/archive?author=John&year=2012#org';
     // Intentionally contains an ampersand that needs sanitization on output.
     $title2 = 'A very long & strange example title that could break the nice layout of the site';
     $edit = array(
+      'user_id' => 1,
+      'name' => $this->randomName(),
       "{$this->field['field_name']}[$langcode][0][url]" => $url1,
       "{$this->field['field_name']}[$langcode][1][url]" => $url2,
       "{$this->field['field_name']}[$langcode][1][title]" => $title2,
     );
     $this->drupalPost(NULL, $edit, t('Save'));
-    preg_match('|test-entity/manage/(\d+)/edit|', $this->url, $match);
+    preg_match('|entity_test/manage/(\d+)/edit|', $this->url, $match);
     $id = $match[1];
-    $this->assertRaw(t('test_entity @id has been created.', array('@id' => $id)));
+    $this->assertText(t('entity_test @id has been created.', array('@id' => $id)));
 
     // Verify that the link is output according to the formatter settings.
     $options = array(
@@ -415,7 +427,7 @@ function testLinkSeparateFormatter() {
       foreach ($values as $new_value) {
         // Update the field formatter settings.
         $display_options['settings'] = array($setting => $new_value);
-        entity_get_display('test_entity', 'test_bundle', 'full')
+        entity_get_display('entity_test', 'entity_test', 'full')
           ->setComponent($this->field['field_name'], $display_options)
           ->save();
 
@@ -468,11 +480,11 @@ function testLinkSeparateFormatter() {
    */
   protected function renderTestEntity($id, $view_mode = 'full', $reset = TRUE) {
     if ($reset) {
-      $this->container->get('plugin.manager.entity')->getStorageController('test_entity')->resetCache(array($id));
+      $this->container->get('plugin.manager.entity')->getStorageController('entity_test')->resetCache(array($id));
     }
-    $entity = field_test_entity_test_load($id);
+    $entity = entity_load('entity_test', $id);
     $display = entity_get_display($entity->entityType(), $entity->bundle(), $view_mode);
-    field_attach_prepare_view('test_entity', array($entity->id() => $entity), array($entity->bundle() => $display));
+    field_attach_prepare_view('entity_test', array($entity->id() => $entity), array($entity->bundle() => $display));
     $entity->content = field_attach_view($entity, $display);
 
     $output = drupal_render($entity->content);
diff --git a/core/modules/number/lib/Drupal/number/Tests/NumberFieldTest.php b/core/modules/number/lib/Drupal/number/Tests/NumberFieldTest.php
index 925828c..9ee7a0f 100644
--- a/core/modules/number/lib/Drupal/number/Tests/NumberFieldTest.php
+++ b/core/modules/number/lib/Drupal/number/Tests/NumberFieldTest.php
@@ -19,7 +19,7 @@ class NumberFieldTest extends WebTestBase {
    *
    * @var array
    */
-  public static $modules = array('node', 'field_test', 'number', 'field_ui');
+  public static $modules = array('node', 'entity_test', 'number', 'field_ui');
 
   protected $field;
   protected $instance;
@@ -36,7 +36,7 @@ public static function getInfo() {
   function setUp() {
     parent::setUp();
 
-    $this->web_user = $this->drupalCreateUser(array('access field_test content', 'administer field_test content', 'administer content types', 'administer node fields','administer node display'));
+    $this->web_user = $this->drupalCreateUser(array('view test entity', 'administer entity_test content', 'administer content types', 'administer node fields','administer node display'));
     $this->drupalLogin($this->web_user);
   }
 
@@ -55,8 +55,8 @@ function testNumberDecimalField() {
     field_create_field($this->field);
     $this->instance = array(
       'field_name' => $this->field['field_name'],
-      'entity_type' => 'test_entity',
-      'bundle' => 'test_bundle',
+      'entity_type' => 'entity_test',
+      'bundle' => 'entity_test',
       'widget' => array(
         'type' => 'number',
         'settings' => array(
@@ -70,12 +70,12 @@ function testNumberDecimalField() {
       ),
     );
     field_create_instance($this->instance);
-    entity_get_display('test_entity', 'test_bundle', 'default')
+    entity_get_display('entity_test', 'entity_test', 'default')
       ->setComponent($this->field['field_name'])
       ->save();
 
     // Display creation form.
-    $this->drupalGet('test-entity/add/test_bundle');
+    $this->drupalGet('entity_test/add');
     $langcode = LANGUAGE_NOT_SPECIFIED;
     $this->assertFieldByName("{$this->field['field_name']}[$langcode][0][value]", '', 'Widget is displayed');
     $this->assertRaw('placeholder="0.00"');
@@ -83,12 +83,14 @@ function testNumberDecimalField() {
     // Submit a signed decimal value within the allowed precision and scale.
     $value = '-1234.5678';
     $edit = array(
+      'user_id' => 1,
+      'name' => $this->randomName(),
       "{$this->field['field_name']}[$langcode][0][value]" => $value,
     );
     $this->drupalPost(NULL, $edit, t('Save'));
-    preg_match('|test-entity/manage/(\d+)/edit|', $this->url, $match);
+    preg_match('|entity_test/manage/(\d+)/edit|', $this->url, $match);
     $id = $match[1];
-    $this->assertRaw(t('test_entity @id has been created.', array('@id' => $id)), 'Entity was created');
+    $this->assertText(t('entity_test @id has been created.', array('@id' => $id)), 'Entity was created');
     $this->assertRaw(round($value, 2), 'Value is displayed.');
 
     // Try to create entries with more than one decimal separator; assert fail.
@@ -101,7 +103,7 @@ function testNumberDecimalField() {
     );
 
     foreach ($wrong_entries as $wrong_entry) {
-      $this->drupalGet('test-entity/add/test_bundle');
+      $this->drupalGet('entity_test/add');
       $edit = array(
         "{$this->field['field_name']}[$langcode][0][value]" => $wrong_entry,
       );
@@ -119,7 +121,7 @@ function testNumberDecimalField() {
     );
 
     foreach ($wrong_entries as $wrong_entry) {
-      $this->drupalGet('test-entity/add/test_bundle');
+      $this->drupalGet('entity_test/add');
       $edit = array(
         "{$this->field['field_name']}[$langcode][0][value]" => $wrong_entry,
       );
diff --git a/core/modules/options/lib/Drupal/options/Tests/OptionsDynamicValuesTest.php b/core/modules/options/lib/Drupal/options/Tests/OptionsDynamicValuesTest.php
index 4065b7d..f1271c6 100644
--- a/core/modules/options/lib/Drupal/options/Tests/OptionsDynamicValuesTest.php
+++ b/core/modules/options/lib/Drupal/options/Tests/OptionsDynamicValuesTest.php
@@ -19,7 +19,14 @@ class OptionsDynamicValuesTest extends FieldTestBase {
    *
    * @var array
    */
-  public static $modules = array('options', 'field_test', 'options_test');
+  public static $modules = array('options', 'entity_test', 'options_test');
+
+  /**
+   * The created entity.
+   *
+   * @var \Drupal\Core\Entity\Entity
+   */
+  protected $entity;
 
   function setUp() {
     parent::setUp();
@@ -37,22 +44,26 @@ function setUp() {
 
     $this->instance = array(
       'field_name' => $this->field_name,
-      'entity_type' => 'test_entity',
-      'bundle' => 'test_bundle',
+      'entity_type' => 'entity_test_rev',
+      'bundle' => 'entity_test_rev',
       'required' => TRUE,
       'widget' => array(
         'type' => 'options_select',
       ),
     );
     $this->instance = field_create_instance($this->instance);
+    // Create an entity and prepare test data that will be used by
+    // options_test_dynamic_values_callback().
+    $values = array(
+      'user_id' => mt_rand(1, 10),
+      'name' => $this->randomName(),
+    );
+    $this->entity = entity_create('entity_test_rev', $values);
     $this->test = array(
-      'id' => mt_rand(1, 10),
-      // Make sure this does not equal the ID so that
-      // options_test_dynamic_values_callback() always returns 4 values.
-      'vid' => mt_rand(20, 30),
-      'bundle' => 'test_bundle',
-      'label' => $this->randomName(),
+      'label' => $this->entity->label(),
+      'uuid' => $this->entity->uuid(),
+      'bundle' => $this->entity->bundle(),
+      'uri' => $this->entity->uri(),
     );
-    $this->entity = call_user_func_array('field_test_create_entity', $this->test);
   }
 }
diff --git a/core/modules/options/lib/Drupal/options/Tests/OptionsDynamicValuesValidationTest.php b/core/modules/options/lib/Drupal/options/Tests/OptionsDynamicValuesValidationTest.php
index 693605a..3d500bb 100644
--- a/core/modules/options/lib/Drupal/options/Tests/OptionsDynamicValuesValidationTest.php
+++ b/core/modules/options/lib/Drupal/options/Tests/OptionsDynamicValuesValidationTest.php
@@ -29,7 +29,7 @@ function testDynamicAllowedValues() {
     foreach ($this->test as $key => $value) {
       $this->entity->test_options[LANGUAGE_NOT_SPECIFIED][0]['value'] = $value;
       try {
-        field_attach_validate($this->entity);
+        field_attach_validate($this->entity->getBCEntity());
         $this->pass("$key should pass");
       }
       catch (FieldValidationException $e) {
@@ -42,7 +42,7 @@ function testDynamicAllowedValues() {
       $this->entity->test_options[LANGUAGE_NOT_SPECIFIED][0]['value'] = is_numeric($value) ? (100 - $value) : ('X' . $value);
       $pass = FALSE;
       try {
-        field_attach_validate($this->entity);
+        field_attach_validate($this->entity->getBCEntity());
       }
       catch (FieldValidationException $e) {
         $pass = TRUE;
diff --git a/core/modules/options/lib/Drupal/options/Tests/OptionsFieldTest.php b/core/modules/options/lib/Drupal/options/Tests/OptionsFieldTest.php
index 1027eb1..08bb3bb 100644
--- a/core/modules/options/lib/Drupal/options/Tests/OptionsFieldTest.php
+++ b/core/modules/options/lib/Drupal/options/Tests/OptionsFieldTest.php
@@ -20,7 +20,7 @@ class OptionsFieldTest extends FieldTestBase {
    *
    * @var array
    */
-  public static $modules = array('options', 'field_test');
+  public static $modules = array('options', 'entity_test');
 
   public static function getInfo() {
     return array(
@@ -46,8 +46,8 @@ function setUp() {
 
     $this->instance = array(
       'field_name' => $this->field_name,
-      'entity_type' => 'test_entity',
-      'bundle' => 'test_bundle',
+      'entity_type' => 'entity_test',
+      'bundle' => 'entity_test',
       'widget' => array(
         'type' => 'options_buttons',
       ),
@@ -62,7 +62,7 @@ function testUpdateAllowedValues() {
     $langcode = LANGUAGE_NOT_SPECIFIED;
 
     // All three options appear.
-    $entity = field_test_create_entity();
+    $entity = entity_create('entity_test', array());
     $form = entity_get_form($entity);
     $this->assertTrue(!empty($form[$this->field_name][$langcode][1]), 'Option 1 exists');
     $this->assertTrue(!empty($form[$this->field_name][$langcode][2]), 'Option 2 exists');
@@ -70,9 +70,9 @@ function testUpdateAllowedValues() {
 
     // Use one of the values in an actual entity, and check that this value
     // cannot be removed from the list.
-    $entity = field_test_create_entity();
+    $entity = entity_create('entity_test', array());
     $entity->{$this->field_name}[$langcode][0] = array('value' => 1);
-    field_test_entity_save($entity);
+    $entity->save();
     $this->field['settings']['allowed_values'] = array(2 => 'Two');
     try {
       field_update_field($this->field);
@@ -83,12 +83,12 @@ function testUpdateAllowedValues() {
     }
     // Empty the value, so that we can actually remove the option.
     $entity->{$this->field_name}[$langcode] = array();
-    field_test_entity_save($entity);
+    $entity->save();
 
     // Removed options do not appear.
     $this->field['settings']['allowed_values'] = array(2 => 'Two');
     field_update_field($this->field);
-    $entity = field_test_create_entity();
+    $entity = entity_create('entity_test', array());
     $form = entity_get_form($entity);
     $this->assertTrue(empty($form[$this->field_name][$langcode][1]), 'Option 1 does not exist');
     $this->assertTrue(!empty($form[$this->field_name][$langcode][2]), 'Option 2 exists');
@@ -111,14 +111,14 @@ function testUpdateAllowedValues() {
     $this->field = field_create_field($this->field);
     $this->instance = array(
       'field_name' => $this->field_name,
-      'entity_type' => 'test_entity',
-      'bundle' => 'test_bundle',
+      'entity_type' => 'entity_test',
+      'bundle' => 'entity_test',
       'widget' => array(
         'type' => 'options_buttons',
       ),
     );
     $this->instance = field_create_instance($this->instance);
-    $entity = field_test_create_entity();
+    $entity = entity_create('entity_test', array());
     $form = entity_get_form($entity);
     $this->assertTrue(!empty($form[$this->field_name][$langcode][1]), 'Option 1 exists');
     $this->assertTrue(!empty($form[$this->field_name][$langcode][2]), 'Option 2 exists');
diff --git a/core/modules/options/lib/Drupal/options/Tests/OptionsSelectDynamicValuesTest.php b/core/modules/options/lib/Drupal/options/Tests/OptionsSelectDynamicValuesTest.php
index 4344d21..0237546 100644
--- a/core/modules/options/lib/Drupal/options/Tests/OptionsSelectDynamicValuesTest.php
+++ b/core/modules/options/lib/Drupal/options/Tests/OptionsSelectDynamicValuesTest.php
@@ -27,11 +27,11 @@ function testSelectListDynamic() {
     $this->entity->save();
 
     // Create a web user.
-    $web_user = $this->drupalCreateUser(array('access field_test content', 'administer field_test content'));
+    $web_user = $this->drupalCreateUser(array('view test entity', 'administer entity_test content'));
     $this->drupalLogin($web_user);
 
     // Display form.
-    $this->drupalGet('test-entity/manage/' . $this->entity->ftid . '/edit');
+    $this->drupalGet('entity_test_rev/manage/' . $this->entity->id() . '/edit');
     $options = $this->xpath('//select[@id="edit-test-options-und"]/option');
     $this->assertEqual(count($options), count($this->test) + 1);
     foreach ($options as $option) {
diff --git a/core/modules/options/lib/Drupal/options/Tests/OptionsWidgetsTest.php b/core/modules/options/lib/Drupal/options/Tests/OptionsWidgetsTest.php
index 023f012..d07626a 100644
--- a/core/modules/options/lib/Drupal/options/Tests/OptionsWidgetsTest.php
+++ b/core/modules/options/lib/Drupal/options/Tests/OptionsWidgetsTest.php
@@ -19,7 +19,7 @@ class OptionsWidgetsTest extends FieldTestBase {
    *
    * @var array
    */
-  public static $modules = array('options', 'field_test', 'options_test', 'taxonomy', 'field_ui');
+  public static $modules = array('options', 'entity_test', 'options_test', 'taxonomy', 'field_ui');
 
   public static function getInfo() {
     return array(
@@ -69,7 +69,7 @@ function setUp() {
     $this->bool = field_create_field($this->bool);
 
     // Create a web user.
-    $this->web_user = $this->drupalCreateUser(array('access field_test content', 'administer field_test content'));
+    $this->web_user = $this->drupalCreateUser(array('view test entity', 'administer entity_test content'));
     $this->drupalLogin($this->web_user);
   }
 
@@ -80,8 +80,8 @@ function testRadioButtons() {
     // Create an instance of the 'single value' field.
     $instance = array(
       'field_name' => $this->card_1['field_name'],
-      'entity_type' => 'test_entity',
-      'bundle' => 'test_bundle',
+      'entity_type' => 'entity_test',
+      'bundle' => 'entity_test',
       'widget' => array(
         'type' => 'options_buttons',
       ),
@@ -90,13 +90,15 @@ function testRadioButtons() {
     $langcode = LANGUAGE_NOT_SPECIFIED;
 
     // Create an entity.
-    $entity_init = field_test_create_entity();
-    $entity = clone $entity_init;
-    $entity->is_new = TRUE;
-    field_test_entity_save($entity);
+    $entity = entity_create('entity_test', array(
+      'user_id' => 1,
+      'name' => $this->randomName(),
+    ));
+    $entity->save();
+    $entity_init = clone $entity;
 
     // With no field data, no buttons are checked.
-    $this->drupalGet('test-entity/manage/' . $entity->ftid . '/edit');
+    $this->drupalGet('entity_test/manage/' . $entity->id() . '/edit');
     $this->assertNoFieldChecked("edit-card-1-$langcode-0");
     $this->assertNoFieldChecked("edit-card-1-$langcode-1");
     $this->assertNoFieldChecked("edit-card-1-$langcode-2");
@@ -108,7 +110,7 @@ function testRadioButtons() {
     $this->assertFieldValues($entity_init, 'card_1', $langcode, array(0));
 
     // Check that the selected button is checked.
-    $this->drupalGet('test-entity/manage/' . $entity->ftid . '/edit');
+    $this->drupalGet('entity_test/manage/' . $entity->id() . '/edit');
     $this->assertFieldChecked("edit-card-1-$langcode-0");
     $this->assertNoFieldChecked("edit-card-1-$langcode-1");
     $this->assertNoFieldChecked("edit-card-1-$langcode-2");
@@ -123,7 +125,7 @@ function testRadioButtons() {
     field_update_field($this->card_1);
     $instance['required'] = TRUE;
     field_update_instance($instance);
-    $this->drupalGet('test-entity/manage/' . $entity->ftid . '/edit');
+    $this->drupalGet('entity_test/manage/' . $entity->id() . '/edit');
     $this->assertFieldChecked("edit-card-1-$langcode-99");
   }
 
@@ -134,8 +136,8 @@ function testCheckBoxes() {
     // Create an instance of the 'multiple values' field.
     $instance = array(
       'field_name' => $this->card_2['field_name'],
-      'entity_type' => 'test_entity',
-      'bundle' => 'test_bundle',
+      'entity_type' => 'entity_test',
+      'bundle' => 'entity_test',
       'widget' => array(
         'type' => 'options_buttons',
       ),
@@ -144,13 +146,15 @@ function testCheckBoxes() {
     $langcode = LANGUAGE_NOT_SPECIFIED;
 
     // Create an entity.
-    $entity_init = field_test_create_entity();
-    $entity = clone $entity_init;
-    $entity->is_new = TRUE;
-    field_test_entity_save($entity);
+    $entity = entity_create('entity_test', array(
+      'user_id' => 1,
+      'name' => $this->randomName(),
+    ));
+    $entity->save();
+    $entity_init = clone $entity;
 
     // Display form: with no field data, nothing is checked.
-    $this->drupalGet('test-entity/manage/' . $entity->ftid . '/edit');
+    $this->drupalGet('entity_test/manage/' . $entity->id() . '/edit');
     $this->assertNoFieldChecked("edit-card-2-$langcode-0");
     $this->assertNoFieldChecked("edit-card-2-$langcode-1");
     $this->assertNoFieldChecked("edit-card-2-$langcode-2");
@@ -166,7 +170,7 @@ function testCheckBoxes() {
     $this->assertFieldValues($entity_init, 'card_2', $langcode, array(0, 2));
 
     // Display form: check that the right options are selected.
-    $this->drupalGet('test-entity/manage/' . $entity->ftid . '/edit');
+    $this->drupalGet('entity_test/manage/' . $entity->id() . '/edit');
     $this->assertFieldChecked("edit-card-2-$langcode-0");
     $this->assertNoFieldChecked("edit-card-2-$langcode-1");
     $this->assertFieldChecked("edit-card-2-$langcode-2");
@@ -181,7 +185,7 @@ function testCheckBoxes() {
     $this->assertFieldValues($entity_init, 'card_2', $langcode, array(0));
 
     // Display form: check that the right options are selected.
-    $this->drupalGet('test-entity/manage/' . $entity->ftid . '/edit');
+    $this->drupalGet('entity_test/manage/' . $entity->id() . '/edit');
     $this->assertFieldChecked("edit-card-2-$langcode-0");
     $this->assertNoFieldChecked("edit-card-2-$langcode-1");
     $this->assertNoFieldChecked("edit-card-2-$langcode-2");
@@ -210,7 +214,7 @@ function testCheckBoxes() {
     field_update_field($this->card_2);
     $instance['required'] = TRUE;
     field_update_instance($instance);
-    $this->drupalGet('test-entity/manage/' . $entity->ftid . '/edit');
+    $this->drupalGet('entity_test/manage/' . $entity->id() . '/edit');
     $this->assertFieldChecked("edit-card-2-$langcode-99");
   }
 
@@ -221,8 +225,8 @@ function testSelectListSingle() {
     // Create an instance of the 'single value' field.
     $instance = array(
       'field_name' => $this->card_1['field_name'],
-      'entity_type' => 'test_entity',
-      'bundle' => 'test_bundle',
+      'entity_type' => 'entity_test',
+      'bundle' => 'entity_test',
       'required' => TRUE,
       'widget' => array(
         'type' => 'options_select',
@@ -232,13 +236,15 @@ function testSelectListSingle() {
     $langcode = LANGUAGE_NOT_SPECIFIED;
 
     // Create an entity.
-    $entity_init = field_test_create_entity();
-    $entity = clone $entity_init;
-    $entity->is_new = TRUE;
-    field_test_entity_save($entity);
+    $entity = entity_create('entity_test', array(
+      'user_id' => 1,
+      'name' => $this->randomName(),
+    ));
+    $entity->save();
+    $entity_init = clone $entity;
 
     // Display form.
-    $this->drupalGet('test-entity/manage/' . $entity->ftid . '/edit');
+    $this->drupalGet('entity_test/manage/' . $entity->id() . '/edit');
     // A required field without any value has a "none" option.
     $this->assertTrue($this->xpath('//select[@id=:id]//option[@value="_none" and text()=:label]', array(':id' => 'edit-card-1-' . $langcode, ':label' => t('- Select a value -'))), 'A required select list has a "Select a value" choice.');
 
@@ -260,7 +266,7 @@ function testSelectListSingle() {
     $this->assertFieldValues($entity_init, 'card_1', $langcode, array(0));
 
     // Display form: check that the right options are selected.
-    $this->drupalGet('test-entity/manage/' . $entity->ftid . '/edit');
+    $this->drupalGet('entity_test/manage/' . $entity->id() . '/edit');
     // A required field with a value has no 'none' option.
     $this->assertFalse($this->xpath('//select[@id=:id]//option[@value="_none"]', array(':id' => 'edit-card-1-' . $langcode)), 'A required select list with an actual value has no "none" choice.');
     $this->assertOptionSelected("edit-card-1-$langcode", 0);
@@ -272,12 +278,12 @@ function testSelectListSingle() {
     field_update_instance($instance);
 
     // Display form.
-    $this->drupalGet('test-entity/manage/' . $entity->ftid . '/edit');
+    $this->drupalGet('entity_test/manage/' . $entity->id() . '/edit');
     // A non-required field has a 'none' option.
     $this->assertTrue($this->xpath('//select[@id=:id]//option[@value="_none" and text()=:label]', array(':id' => 'edit-card-1-' . $langcode, ':label' => t('- None -'))), 'A non-required select list has a "None" choice.');
     // Submit form: Unselect the option.
     $edit = array("card_1[$langcode]" => '_none');
-    $this->drupalPost('test-entity/manage/' . $entity->ftid . '/edit', $edit, t('Save'));
+    $this->drupalPost('entity_test/manage/' . $entity->id() . '/edit', $edit, t('Save'));
     $this->assertFieldValues($entity_init, 'card_1', $langcode, array());
 
     // Test optgroups.
@@ -287,7 +293,7 @@ function testSelectListSingle() {
     field_update_field($this->card_1);
 
     // Display form: with no field data, nothing is selected
-    $this->drupalGet('test-entity/manage/' . $entity->ftid . '/edit');
+    $this->drupalGet('entity_test/manage/' . $entity->id() . '/edit');
     $this->assertNoOptionSelected("edit-card-1-$langcode", 0);
     $this->assertNoOptionSelected("edit-card-1-$langcode", 1);
     $this->assertNoOptionSelected("edit-card-1-$langcode", 2);
@@ -300,14 +306,14 @@ function testSelectListSingle() {
     $this->assertFieldValues($entity_init, 'card_1', $langcode, array(0));
 
     // Display form: check that the right options are selected.
-    $this->drupalGet('test-entity/manage/' . $entity->ftid . '/edit');
+    $this->drupalGet('entity_test/manage/' . $entity->id() . '/edit');
     $this->assertOptionSelected("edit-card-1-$langcode", 0);
     $this->assertNoOptionSelected("edit-card-1-$langcode", 1);
     $this->assertNoOptionSelected("edit-card-1-$langcode", 2);
 
     // Submit form: Unselect the option.
     $edit = array("card_1[$langcode]" => '_none');
-    $this->drupalPost('test-entity/manage/' . $entity->ftid . '/edit', $edit, t('Save'));
+    $this->drupalPost('entity_test/manage/' . $entity->id() . '/edit', $edit, t('Save'));
     $this->assertFieldValues($entity_init, 'card_1', $langcode, array());
   }
 
@@ -318,8 +324,8 @@ function testSelectListMultiple() {
     // Create an instance of the 'multiple values' field.
     $instance = array(
       'field_name' => $this->card_2['field_name'],
-      'entity_type' => 'test_entity',
-      'bundle' => 'test_bundle',
+      'entity_type' => 'entity_test',
+      'bundle' => 'entity_test',
       'widget' => array(
         'type' => 'options_select',
       ),
@@ -328,13 +334,15 @@ function testSelectListMultiple() {
     $langcode = LANGUAGE_NOT_SPECIFIED;
 
     // Create an entity.
-    $entity_init = field_test_create_entity();
-    $entity = clone $entity_init;
-    $entity->is_new = TRUE;
-    field_test_entity_save($entity);
+    $entity = entity_create('entity_test', array(
+      'user_id' => 1,
+      'name' => $this->randomName(),
+    ));
+    $entity->save();
+    $entity_init = clone $entity;
 
     // Display form: with no field data, nothing is selected.
-    $this->drupalGet('test-entity/manage/' . $entity->ftid . '/edit');
+    $this->drupalGet('entity_test/manage/' . $entity->id() . '/edit');
     $this->assertNoOptionSelected("edit-card-2-$langcode", 0);
     $this->assertNoOptionSelected("edit-card-2-$langcode", 1);
     $this->assertNoOptionSelected("edit-card-2-$langcode", 2);
@@ -346,7 +354,7 @@ function testSelectListMultiple() {
     $this->assertFieldValues($entity_init, 'card_2', $langcode, array(0, 2));
 
     // Display form: check that the right options are selected.
-    $this->drupalGet('test-entity/manage/' . $entity->ftid . '/edit');
+    $this->drupalGet('entity_test/manage/' . $entity->id() . '/edit');
     $this->assertOptionSelected("edit-card-2-$langcode", 0);
     $this->assertNoOptionSelected("edit-card-2-$langcode", 1);
     $this->assertOptionSelected("edit-card-2-$langcode", 2);
@@ -357,7 +365,7 @@ function testSelectListMultiple() {
     $this->assertFieldValues($entity_init, 'card_2', $langcode, array(0));
 
     // Display form: check that the right options are selected.
-    $this->drupalGet('test-entity/manage/' . $entity->ftid . '/edit');
+    $this->drupalGet('entity_test/manage/' . $entity->id() . '/edit');
     $this->assertOptionSelected("edit-card-2-$langcode", 0);
     $this->assertNoOptionSelected("edit-card-2-$langcode", 1);
     $this->assertNoOptionSelected("edit-card-2-$langcode", 2);
@@ -377,18 +385,18 @@ function testSelectListMultiple() {
     // Check that the 'none' option has no efect if actual options are selected
     // as well.
     $edit = array("card_2[$langcode][]" => array('_none' => '_none', 0 => 0));
-    $this->drupalPost('test-entity/manage/' . $entity->ftid . '/edit', $edit, t('Save'));
+    $this->drupalPost('entity_test/manage/' . $entity->id() . '/edit', $edit, t('Save'));
     $this->assertFieldValues($entity_init, 'card_2', $langcode, array(0));
 
     // Check that selecting the 'none' option empties the field.
     $edit = array("card_2[$langcode][]" => array('_none' => '_none'));
-    $this->drupalPost('test-entity/manage/' . $entity->ftid . '/edit', $edit, t('Save'));
+    $this->drupalPost('entity_test/manage/' . $entity->id() . '/edit', $edit, t('Save'));
     $this->assertFieldValues($entity_init, 'card_2', $langcode, array());
 
     // A required select list does not have an empty key.
     $instance['required'] = TRUE;
     field_update_instance($instance);
-    $this->drupalGet('test-entity/manage/' . $entity->ftid . '/edit');
+    $this->drupalGet('entity_test/manage/' . $entity->id() . '/edit');
     $this->assertFalse($this->xpath('//select[@id=:id]//option[@value=""]', array(':id' => 'edit-card-2-' . $langcode)), 'A required select list does not have an empty key.');
 
     // We do not have to test that a required select list with one option is
@@ -404,7 +412,7 @@ function testSelectListMultiple() {
     field_update_instance($instance);
 
     // Display form: with no field data, nothing is selected.
-    $this->drupalGet('test-entity/manage/' . $entity->ftid . '/edit');
+    $this->drupalGet('entity_test/manage/' . $entity->id() . '/edit');
     $this->assertNoOptionSelected("edit-card-2-$langcode", 0);
     $this->assertNoOptionSelected("edit-card-2-$langcode", 1);
     $this->assertNoOptionSelected("edit-card-2-$langcode", 2);
@@ -417,14 +425,14 @@ function testSelectListMultiple() {
     $this->assertFieldValues($entity_init, 'card_2', $langcode, array(0));
 
     // Display form: check that the right options are selected.
-    $this->drupalGet('test-entity/manage/' . $entity->ftid . '/edit');
+    $this->drupalGet('entity_test/manage/' . $entity->id() . '/edit');
     $this->assertOptionSelected("edit-card-2-$langcode", 0);
     $this->assertNoOptionSelected("edit-card-2-$langcode", 1);
     $this->assertNoOptionSelected("edit-card-2-$langcode", 2);
 
     // Submit form: Unselect the option.
     $edit = array("card_2[$langcode][]" => array('_none' => '_none'));
-    $this->drupalPost('test-entity/manage/' . $entity->ftid . '/edit', $edit, t('Save'));
+    $this->drupalPost('entity_test/manage/' . $entity->id() . '/edit', $edit, t('Save'));
     $this->assertFieldValues($entity_init, 'card_2', $langcode, array());
   }
 
@@ -435,8 +443,8 @@ function testOnOffCheckbox() {
     // Create an instance of the 'boolean' field.
     $instance = array(
       'field_name' => $this->bool['field_name'],
-      'entity_type' => 'test_entity',
-      'bundle' => 'test_bundle',
+      'entity_type' => 'entity_test',
+      'bundle' => 'entity_test',
       'widget' => array(
         'type' => 'options_onoff',
       ),
@@ -445,13 +453,15 @@ function testOnOffCheckbox() {
     $langcode = LANGUAGE_NOT_SPECIFIED;
 
     // Create an entity.
-    $entity_init = field_test_create_entity();
-    $entity = clone $entity_init;
-    $entity->is_new = TRUE;
-    field_test_entity_save($entity);
+    $entity = entity_create('entity_test', array(
+      'user_id' => 1,
+      'name' => $this->randomName(),
+    ));
+    $entity->save();
+    $entity_init = clone $entity;
 
     // Display form: with no field data, option is unchecked.
-    $this->drupalGet('test-entity/manage/' . $entity->ftid . '/edit');
+    $this->drupalGet('entity_test/manage/' . $entity->id() . '/edit');
     $this->assertNoFieldChecked("edit-bool-$langcode");
     $this->assertRaw('Some dangerous &amp; unescaped <strong>markup</strong>', 'Option text was properly filtered.');
 
@@ -461,7 +471,7 @@ function testOnOffCheckbox() {
     $this->assertFieldValues($entity_init, 'bool', $langcode, array(0));
 
     // Display form: check that the right options are selected.
-    $this->drupalGet('test-entity/manage/' . $entity->ftid . '/edit');
+    $this->drupalGet('entity_test/manage/' . $entity->id() . '/edit');
     $this->assertFieldChecked("edit-bool-$langcode");
 
     // Submit form: uncheck the option.
@@ -470,7 +480,7 @@ function testOnOffCheckbox() {
     $this->assertFieldValues($entity_init, 'bool', $langcode, array(1));
 
     // Display form: with 'off' value, option is unchecked.
-    $this->drupalGet('test-entity/manage/' . $entity->ftid . '/edit');
+    $this->drupalGet('entity_test/manage/' . $entity->id() . '/edit');
     $this->assertNoFieldChecked("edit-bool-$langcode");
 
     // Create Basic page node type.
diff --git a/core/modules/options/tests/options_test.module b/core/modules/options/tests/options_test.module
index 90f6bf1..b1ae006 100644
--- a/core/modules/options/tests/options_test.module
+++ b/core/modules/options/tests/options_test.module
@@ -31,9 +31,9 @@ function options_test_dynamic_values_callback($field, $instance, EntityInterface
   $cacheable = FALSE;
   // We need the values of the entity as keys.
   return drupal_map_assoc(array(
-    $entity->ftlabel,
-    $entity->id(),
-    $entity->getRevisionId(),
+    $entity->label(),
+    $entity->uri(),
+    $entity->uuid(),
     $entity->bundle(),
   ));
 }
diff --git a/core/modules/rdf/lib/Drupal/rdf/Tests/CrudTest.php b/core/modules/rdf/lib/Drupal/rdf/Tests/CrudTest.php
index 3383f94..0b5c29a 100644
--- a/core/modules/rdf/lib/Drupal/rdf/Tests/CrudTest.php
+++ b/core/modules/rdf/lib/Drupal/rdf/Tests/CrudTest.php
@@ -34,7 +34,7 @@ public static function getInfo() {
    */
   function testCRUD() {
     // Verify loading of a default mapping.
-    $mapping = _rdf_mapping_load('test_entity', 'test_bundle');
+    $mapping = _rdf_mapping_load('entity_test', 'entity_test');
     $this->assertTrue(count($mapping), 'Default mapping was found.');
 
     // Verify saving a mapping.
diff --git a/core/modules/rdf/lib/Drupal/rdf/Tests/MappingHookTest.php b/core/modules/rdf/lib/Drupal/rdf/Tests/MappingHookTest.php
index eb1340e..b05f4af 100644
--- a/core/modules/rdf/lib/Drupal/rdf/Tests/MappingHookTest.php
+++ b/core/modules/rdf/lib/Drupal/rdf/Tests/MappingHookTest.php
@@ -19,7 +19,7 @@ class MappingHookTest extends WebTestBase {
    *
    * @var array
    */
-  public static $modules = array('rdf', 'rdf_test', 'field_test');
+  public static $modules = array('rdf', 'rdf_test', 'entity_test');
 
   public static function getInfo() {
     return array(
@@ -34,7 +34,7 @@ public static function getInfo() {
    */
   function testMapping() {
     // Test that the mapping is returned correctly by the hook.
-    $mapping = rdf_mapping_load('test_entity', 'test_bundle');
+    $mapping = rdf_mapping_load('entity_test', 'entity_test');
     $this->assertIdentical($mapping['rdftype'], array('sioc:Post'), 'Mapping for rdftype is sioc:Post.');
     $this->assertIdentical($mapping['title'], array('predicates' => array('dc:title')), 'Mapping for title is dc:title.');
     $this->assertIdentical($mapping['created'], array(
@@ -44,7 +44,7 @@ function testMapping() {
     ), 'Mapping for created is dc:created with datatype xsd:dateTime and callback date_iso8601.');
     $this->assertIdentical($mapping['uid'], array('predicates' => array('sioc:has_creator', 'dc:creator'), 'type' => 'rel'), 'Mapping for uid is sioc:has_creator and dc:creator, and type is rel.');
 
-    $mapping = rdf_mapping_load('test_entity', 'test_bundle_no_mapping');
+    $mapping = rdf_mapping_load('entity_test', 'test_bundle_no_mapping');
     $this->assertEqual($mapping, array(), 'Empty array returned when an entity type, bundle pair has no mapping.');
   }
 }
diff --git a/core/modules/rdf/lib/Drupal/rdf/Tests/RdfaMarkupTest.php b/core/modules/rdf/lib/Drupal/rdf/Tests/RdfaMarkupTest.php
index 6f99dae..2fff526 100644
--- a/core/modules/rdf/lib/Drupal/rdf/Tests/RdfaMarkupTest.php
+++ b/core/modules/rdf/lib/Drupal/rdf/Tests/RdfaMarkupTest.php
@@ -19,7 +19,7 @@ class RdfaMarkupTest extends WebTestBase {
    *
    * @var array
    */
-  public static $modules = array('rdf', 'field_test', 'rdf_test');
+  public static $modules = array('rdf', 'entity_test', 'rdf_test');
 
   protected $profile = 'standard';
 
@@ -39,7 +39,7 @@ function testDrupalRdfaAttributes() {
     $expected_attributes = array(
       'property' => array('dc:title'),
     );
-    $mapping = rdf_mapping_load('test_entity', 'test_bundle');
+    $mapping = rdf_mapping_load('entity_test', 'entity_test');
     $attributes = rdf_rdfa_attributes($mapping['title']);
     ksort($expected_attributes);
     ksort($attributes);
@@ -53,7 +53,7 @@ function testDrupalRdfaAttributes() {
       'property' => array('dc:created'),
       'content' => $isoDate,
     );
-    $mapping = rdf_mapping_load('test_entity', 'test_bundle');
+    $mapping = rdf_mapping_load('entity_test', 'entity_test');
     $attributes = rdf_rdfa_attributes($mapping['created'], $date);
     ksort($expected_attributes);
     ksort($attributes);
@@ -64,7 +64,7 @@ function testDrupalRdfaAttributes() {
       'datatype' => 'foo:bar1type',
       'property' => array('foo:bar1'),
     );
-    $mapping = rdf_mapping_load('test_entity', 'test_bundle');
+    $mapping = rdf_mapping_load('entity_test', 'entity_test');
     $attributes = rdf_rdfa_attributes($mapping['foobar1']);
     ksort($expected_attributes);
     ksort($attributes);
@@ -74,7 +74,7 @@ function testDrupalRdfaAttributes() {
     $expected_attributes = array(
       'rel' => array('sioc:has_creator', 'dc:creator'),
     );
-    $mapping = rdf_mapping_load('test_entity', 'test_bundle');
+    $mapping = rdf_mapping_load('entity_test', 'entity_test');
     $attributes = rdf_rdfa_attributes($mapping['foobar_objproperty1']);
     ksort($expected_attributes);
     ksort($attributes);
@@ -84,7 +84,7 @@ function testDrupalRdfaAttributes() {
     $expected_attributes = array(
       'rev' => array('sioc:reply_of'),
     );
-    $mapping = rdf_mapping_load('test_entity', 'test_bundle');
+    $mapping = rdf_mapping_load('entity_test', 'entity_test');
     $attributes = rdf_rdfa_attributes($mapping['foobar_objproperty2']);
     ksort($expected_attributes);
     ksort($attributes);
diff --git a/core/modules/rdf/tests/rdf_test.module b/core/modules/rdf/tests/rdf_test.module
index 4d90472..ea45e43 100644
--- a/core/modules/rdf/tests/rdf_test.module
+++ b/core/modules/rdf/tests/rdf_test.module
@@ -11,8 +11,8 @@
 function rdf_test_rdf_mapping() {
   return array(
     array(
-      'type' => 'test_entity',
-      'bundle' => 'test_bundle',
+      'type' => 'entity_test',
+      'bundle' => 'entity_test',
       'mapping' => array(
         'rdftype' => array('sioc:Post'),
         'title' => array(
diff --git a/core/modules/system/lib/Drupal/system/Tests/Entity/EntityQueryTest.php b/core/modules/system/lib/Drupal/system/Tests/Entity/EntityQueryTest.php
index 1882e6f..1eb9db4 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Entity/EntityQueryTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Entity/EntityQueryTest.php
@@ -76,7 +76,7 @@ function setUp() {
       foreach ($fields as $field) {
         $instance = array(
           'field_name' => $field['field_name'],
-          'entity_type' => 'test_entity',
+          'entity_type' => 'entity_test',
           'bundle' => $bundle,
         );
         field_create_instance($instance);
@@ -104,13 +104,13 @@ function setUp() {
     ));
     // Make these languages available to the greetings field.
     $field_langcodes = &drupal_static('field_available_languages');
-    $field_langcodes['test_entity'][$greetings] = array('tr', 'pl');
+    $field_langcodes['entity_test'][$greetings] = array('tr', 'pl');
     // Calculate the cartesian product of the unit array by looking at the
     // bits of $i and add the unit at the bits that are 1. For example,
     // decimal 13 is binary 1101 so unit 3,2 and 0 will be added to the
     // entity.
     for ($i = 1; $i <= 15; $i++) {
-      $entity = entity_create('test_entity', array(
+      $entity = entity_create('entity_test', array(
         'ftid' => $i,
         'ftvid' => $i,
         'fttype' => $bundles[$i & 1],
@@ -136,7 +136,7 @@ function setUp() {
   function testEntityQuery() {
     $greetings = $this->greetings;
     $figures = $this->figures;
-    $this->queryResults = $this->factory->get('test_entity')
+    $this->queryResults = $this->factory->get('entity_test')
       ->exists($greetings, 'tr')
       ->condition("$figures.color", 'red')
       ->sort('ftid')
@@ -145,7 +145,7 @@ function testEntityQuery() {
     // bit 0 and bit 2 needs to be set.
     $this->assertResult(5, 7, 13, 15);
 
-    $query = $this->factory->get('test_entity', 'OR')
+    $query = $this->factory->get('entity_test', 'OR')
       ->exists($greetings, 'tr')
       ->condition("$figures.color", 'red')
       ->sort('ftid');
@@ -157,7 +157,7 @@ function testEntityQuery() {
     $this->assertResult(1, 3, 4, 5, 6, 7, 9, 11, 12, 13, 14, 15);
 
     // Test cloning of query conditions.
-    $query = $this->factory->get('test_entity')
+    $query = $this->factory->get('entity_test')
       ->condition("$figures.color", 'red')
       ->sort('ftid');
     $cloned_query = clone $query;
@@ -170,7 +170,7 @@ function testEntityQuery() {
     $this->queryResults = $cloned_query->execute();
     $this->assertResult();
 
-    $query = $this->factory->get('test_entity');
+    $query = $this->factory->get('entity_test');
     $group = $query->orConditionGroup()
       ->exists($greetings, 'tr')
       ->condition("$figures.color", 'red');
@@ -183,7 +183,7 @@ function testEntityQuery() {
     $this->assertResult(9, 11, 12, 13, 14, 15);
 
     // No figure has both the colors blue and red at the same time.
-    $this->queryResults = $this->factory->get('test_entity')
+    $this->queryResults = $this->factory->get('entity_test')
       ->condition("$figures.color", 'blue')
       ->condition("$figures.color", 'red')
       ->sort('ftid')
@@ -191,7 +191,7 @@ function testEntityQuery() {
     $this->assertResult();
 
     // But an entity might have a red and a blue figure both.
-    $query = $this->factory->get('test_entity');
+    $query = $this->factory->get('entity_test');
     $group_blue = $query->andConditionGroup()->condition("$figures.color", 'blue');
     $group_red = $query->andConditionGroup()->condition("$figures.color", 'red');
     $this->queryResults = $query
@@ -202,7 +202,7 @@ function testEntityQuery() {
     // Unit 0 and unit 1, so bits 0 1.
     $this->assertResult(3, 7, 11, 15);
 
-    $this->queryResults = $this->factory->get('test_entity')
+    $this->queryResults = $this->factory->get('entity_test')
       ->exists("$figures.color")
       ->notExists("$greetings.value")
       ->sort('ftid')
@@ -211,21 +211,21 @@ function testEntityQuery() {
     $this->assertResult(1, 2, 3);
     // Now update the 'merhaba' string to xsiemax which is not a meaningful
     // word but allows us to test revisions and string operations.
-    $ids = $this->factory->get('test_entity')
+    $ids = $this->factory->get('entity_test')
       ->condition("$greetings.value", 'merhaba')
       ->execute();
-    $entities = entity_load_multiple('test_entity', $ids);
+    $entities = entity_load_multiple('entity_test', $ids);
     foreach ($entities as $entity) {
       $entity->setNewRevision();
       $entity->{$greetings}['tr'][0]['value'] = 'xsiemax';
       $entity->save();
     }
     // When querying current revisions, this string is no longer found.
-    $this->queryResults = $this->factory->get('test_entity')
+    $this->queryResults = $this->factory->get('entity_test')
       ->condition("$greetings.value", 'merhaba')
       ->execute();
     $this->assertResult();
-    $this->queryResults = $this->factory->get('test_entity')
+    $this->queryResults = $this->factory->get('entity_test')
       ->condition("$greetings.value", 'merhaba')
       ->age(FIELD_LOAD_REVISION)
       ->sort('ftvid')
@@ -234,7 +234,7 @@ function testEntityQuery() {
     // The keys must be 16-23 because the first batch stopped at 15 so the
     // second started at 16 and eight entities were saved.
     $assert = $this->assertRevisionResult(range(16, 23), array(4, 5, 6, 7, 12, 13, 14, 15));
-    $results = $this->factory->get('test_entity')
+    $results = $this->factory->get('entity_test')
       ->condition("$greetings.value", 'siema', 'CONTAINS')
       ->sort('ftid')
       ->execute();
@@ -243,19 +243,19 @@ function testEntityQuery() {
     // merhaba.
     $assert = array_slice($assert, 0, 4, TRUE) + array(8 => '8', 9 => '9', 10 => '10', 11 => '11') + array_slice($assert, 4, 4, TRUE);
     $this->assertIdentical($results, $assert);
-    $results = $this->factory->get('test_entity')
+    $results = $this->factory->get('entity_test')
       ->condition("$greetings.value", 'siema', 'STARTS_WITH')
       ->execute();
     // Now we only get the ones that originally were siema, entity id 8 and
     // above.
     $this->assertIdentical($results, array_slice($assert, 4, 8, TRUE));
-    $results = $this->factory->get('test_entity')
+    $results = $this->factory->get('entity_test')
       ->condition("$greetings.value", 'a', 'ENDS_WITH')
       ->execute();
     // It is very important that we do not get the ones which only have
     // xsiemax despite originally they were merhaba, ie. ended with a.
     $this->assertIdentical($results, array_slice($assert, 4, 8, TRUE));
-    $results = $this->factory->get('test_entity')
+    $results = $this->factory->get('entity_test')
       ->condition("$greetings.value", 'a', 'ENDS_WITH')
       ->age(FIELD_LOAD_REVISION)
       ->sort('ftid')
@@ -273,15 +273,15 @@ function testSort() {
     $greetings = $this->greetings;
     $figures = $this->figures;
     // Order up and down on a number.
-    $this->queryResults = $this->factory->get('test_entity')
+    $this->queryResults = $this->factory->get('entity_test')
       ->sort('ftid')
       ->execute();
     $this->assertResult(range(1, 15));
-    $this->queryResults = $this->factory->get('test_entity')
+    $this->queryResults = $this->factory->get('entity_test')
       ->sort('ftid', 'DESC')
       ->execute();
     $this->assertResult(range(15, 1));
-    $query = $this->factory->get('test_entity')
+    $query = $this->factory->get('entity_test')
       ->sort("$figures.color")
       ->sort("$greetings.format")
       ->sort('ftid');
@@ -327,7 +327,7 @@ function testSort() {
     // Test the pager by setting element #1 to page 2 with a page size of 4.
     // Results will be #8-12 from above.
     $_GET['page'] = '0,2';
-    $this->queryResults = $this->factory->get('test_entity')
+    $this->queryResults = $this->factory->get('entity_test')
       ->sort("$figures.color")
       ->sort("$greetings.format")
       ->sort('ftid')
@@ -336,7 +336,7 @@ function testSort() {
     $this->assertResult(15, 6, 7, 1);
 
     // Now test the reversed order.
-    $query = $this->factory->get('test_entity')
+    $query = $this->factory->get('entity_test')
       ->sort("$figures.color", 'DESC')
       ->sort("$greetings.format", 'DESC')
       ->sort('ftid', 'DESC');
@@ -360,7 +360,7 @@ protected function testTableSort() {
       'type' => array('data' => 'Type', 'specifier' => 'fttype'),
     );
 
-    $this->queryResults = array_values($this->factory->get('test_entity')
+    $this->queryResults = array_values($this->factory->get('entity_test')
       ->tableSort($header)
       ->execute());
     $this->assertBundleOrder('asc');
@@ -369,13 +369,13 @@ protected function testTableSort() {
       'id' => array('data' => 'Id', 'specifier' => 'ftid'),
       'type' => array('data' => 'Type', 'specifier' => 'fttype'),
     );
-    $this->queryResults = array_values($this->factory->get('test_entity')
+    $this->queryResults = array_values($this->factory->get('entity_test')
       ->tableSort($header)
       ->execute());
     $this->assertBundleOrder('desc');
     // Ordering on ID is definite, however.
     $_GET['order'] = 'Id';
-    $this->queryResults = $this->factory->get('test_entity')
+    $this->queryResults = $this->factory->get('entity_test')
       ->tableSort($header)
       ->execute();
     $this->assertResult(range(15, 1));
@@ -460,7 +460,7 @@ protected function assertBundleOrder($order) {
    * The tags and metadata should propogate to the SQL query object.
    */
   function testMetaData() {
-    $query = entity_query('test_entity');
+    $query = entity_query('entity_test');
     $query
       ->addTag('efq_metadata_test')
       ->addMetaData('foo', 'bar')
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermFieldMultipleVocabularyTest.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermFieldMultipleVocabularyTest.php
index 8c5571c..86295f9 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermFieldMultipleVocabularyTest.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermFieldMultipleVocabularyTest.php
@@ -17,7 +17,7 @@ class TermFieldMultipleVocabularyTest extends TaxonomyTestBase {
    *
    * @var array
    */
-  public static $modules = array('field_test');
+  public static $modules = array('entity_test');
 
   protected $instance;
   protected $vocabulary1;
@@ -34,7 +34,7 @@ public static function getInfo() {
   function setUp() {
     parent::setUp();
 
-    $web_user = $this->drupalCreateUser(array('access field_test content', 'administer field_test content', 'administer taxonomy'));
+    $web_user = $this->drupalCreateUser(array('view test entity', 'administer entity_test content', 'administer taxonomy'));
     $this->drupalLogin($web_user);
     $this->vocabulary1 = $this->createVocabulary();
     $this->vocabulary2 = $this->createVocabulary();
@@ -61,14 +61,14 @@ function setUp() {
     field_create_field($this->field);
     $this->instance = array(
       'field_name' => $this->field_name,
-      'entity_type' => 'test_entity',
-      'bundle' => 'test_bundle',
+      'entity_type' => 'entity_test',
+      'bundle' => 'entity_test',
       'widget' => array(
         'type' => 'options_select',
       ),
     );
     field_create_instance($this->instance);
-    entity_get_display('test_entity', 'test_bundle', 'full')
+    entity_get_display('entity_test', 'entity_test', 'full')
       ->setComponent($this->field_name, array(
         'type' => 'taxonomy_term_reference_link',
       ))
@@ -85,21 +85,23 @@ function testTaxonomyTermFieldMultipleVocabularies() {
 
     // Submit an entity with both terms.
     $langcode = LANGUAGE_NOT_SPECIFIED;
-    $this->drupalGet('test-entity/add/test_bundle');
+    $this->drupalGet('entity_test/add');
     $this->assertFieldByName("{$this->field_name}[$langcode][]", '', 'Widget is displayed');
     $edit = array(
+      'user_id' => mt_rand(0, 10),
+      'name' => $this->randomName(),
       "{$this->field_name}[$langcode][]" => array($term1->tid, $term2->tid),
     );
     $this->drupalPost(NULL, $edit, t('Save'));
-    preg_match('|test-entity/manage/(\d+)/edit|', $this->url, $match);
+    preg_match('|entity_test/manage/(\d+)/edit|', $this->url, $match);
     $id = $match[1];
-    $this->assertRaw(t('test_entity @id has been created.', array('@id' => $id)), 'Entity was created.');
+    $this->assertText(t('entity_test @id has been created.', array('@id' => $id)), 'Entity was created.');
 
     // Render the entity.
-    $entity = field_test_entity_test_load($id);
-    $entities = array($id => $entity);
+    $entity = entity_load('entity_test', $id);
+    $entities = array($id => $entity->getBCEntity());
     $display = entity_get_display($entity->entityType(), $entity->bundle(), 'full');
-    field_attach_prepare_view('test_entity', $entities, array($entity->bundle() => $display));
+    field_attach_prepare_view('entity_test', $entities, array($entity->bundle() => $display));
     $entity->content = field_attach_view($entity, $display);
     $this->content = drupal_render($entity->content);
     $this->assertText($term1->name, 'Term 1 name is displayed.');
@@ -109,10 +111,10 @@ function testTaxonomyTermFieldMultipleVocabularies() {
     taxonomy_vocabulary_delete($this->vocabulary2->id());
 
     // Re-render the content.
-    $entity = field_test_entity_test_load($id);
-    $entities = array($id => $entity);
+    $entity = entity_load('entity_test', $id);
+    $entities = array($id => $entity->getBCEntity());
     $display = entity_get_display($entity->entityType(), $entity->bundle(), 'full');
-    field_attach_prepare_view('test_entity', $entities, array($entity->bundle() => $display));
+    field_attach_prepare_view('entity_test', $entities, array($entity->bundle() => $display));
     $entity->content = field_attach_view($entity, $display);
     $this->plainTextContent = FALSE;
     $this->content = drupal_render($entity->content);
@@ -126,11 +128,13 @@ function testTaxonomyTermFieldMultipleVocabularies() {
     $this->assertEqual(count($field_info['settings']['allowed_values']), 1, 'Only one vocabulary is allowed for the field.');
 
     // The widget should still be displayed.
-    $this->drupalGet('test-entity/add/test_bundle');
+    $this->drupalGet('entity_test/add');
     $this->assertFieldByName("{$this->field_name}[$langcode][]", '', 'Widget is still displayed');
 
     // Term 1 should still pass validation.
     $edit = array(
+      'user_id' => mt_rand(0, 10),
+      'name' => $this->randomName(),
       "{$this->field_name}[$langcode][]" => array($term1->tid),
     );
     $this->drupalPost(NULL, $edit, t('Save'));
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermFieldTest.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermFieldTest.php
index d5de5fa..15e6b31 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermFieldTest.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermFieldTest.php
@@ -19,7 +19,7 @@ class TermFieldTest extends TaxonomyTestBase {
    *
    * @var array
    */
-  public static $modules = array('field_test');
+  public static $modules = array('entity_test');
 
   protected $instance;
   protected $vocabulary;
@@ -35,7 +35,11 @@ public static function getInfo() {
   function setUp() {
     parent::setUp();
 
-    $web_user = $this->drupalCreateUser(array('access field_test content', 'administer field_test content', 'administer taxonomy'));
+    $web_user = $this->drupalCreateUser(array(
+      'view test entity',
+      'administer entity_test content',
+      'administer taxonomy',
+    ));
     $this->drupalLogin($web_user);
     $this->vocabulary = $this->createVocabulary();
 
@@ -56,14 +60,14 @@ function setUp() {
     field_create_field($this->field);
     $this->instance = array(
       'field_name' => $this->field_name,
-      'entity_type' => 'test_entity',
-      'bundle' => 'test_bundle',
+      'entity_type' => 'entity_test',
+      'bundle' => 'entity_test',
       'widget' => array(
         'type' => 'options_select',
       ),
     );
     field_create_instance($this->instance);
-    entity_get_display('test_entity', 'test_bundle', 'full')
+    entity_get_display('entity_test', 'entity_test', 'full')
       ->setComponent($this->field_name, array(
         'type' => 'taxonomy_term_reference_link',
       ))
@@ -76,22 +80,22 @@ function setUp() {
   function testTaxonomyTermFieldValidation() {
     // Test valid and invalid values with field_attach_validate().
     $langcode = LANGUAGE_NOT_SPECIFIED;
-    $entity = field_test_create_entity();
+    $entity = entity_create('entity_test', array());
     $term = $this->createTerm($this->vocabulary);
-    $entity->{$this->field_name}[$langcode][0]['tid'] = $term->tid;
+    $entity->{$this->field_name}->tid = $term->tid;
     try {
-      field_attach_validate($entity);
+      field_attach_validate($entity->getBCEntity());
       $this->pass('Correct term does not cause validation error.');
     }
     catch (FieldValidationException $e) {
       $this->fail('Correct term does not cause validation error.');
     }
 
-    $entity = field_test_create_entity();
+    $entity = entity_create('entity_test', array());
     $bad_term = $this->createTerm($this->createVocabulary());
-    $entity->{$this->field_name}[$langcode][0]['tid'] = $bad_term->tid;
+    $entity->{$this->field_name}->tid = $bad_term->tid;
     try {
-      field_attach_validate($entity);
+      field_attach_validate($entity->getBCEntity());
       $this->fail('Wrong term causes validation error.');
     }
     catch (FieldValidationException $e) {
@@ -108,30 +112,32 @@ function testTaxonomyTermFieldWidgets() {
 
     // Display creation form.
     $langcode = LANGUAGE_NOT_SPECIFIED;
-    $this->drupalGet('test-entity/add/test_bundle');
+    $this->drupalGet('entity_test/add');
     $this->assertFieldByName("{$this->field_name}[$langcode]", '', 'Widget is displayed.');
 
     // Submit with some value.
     $edit = array(
+      'user_id' => 1,
+      'name' => $this->randomName(),
       "{$this->field_name}[$langcode]" => array($term->tid),
     );
     $this->drupalPost(NULL, $edit, t('Save'));
-    preg_match('|test-entity/manage/(\d+)/edit|', $this->url, $match);
+    preg_match('|entity_test/manage/(\d+)/edit|', $this->url, $match);
     $id = $match[1];
-    $this->assertRaw(t('test_entity @id has been created.', array('@id' => $id)), 'Entity was created.');
+    $this->assertText(t('entity_test @id has been created.', array('@id' => $id)));
 
     // Display the object.
-    $entity = field_test_entity_test_load($id);
-    $entities = array($id => $entity);
+    $entity = entity_load('entity_test', $id);
+    $entities = array($id => $entity->getBCEntity());
     $display = entity_get_display($entity->entityType(), $entity->bundle(), 'full');
-    field_attach_prepare_view('test_entity', $entities, array($entity->bundle() => $display));
+    field_attach_prepare_view('entity_test', $entities, array($entity->bundle() => $display));
     $entity->content = field_attach_view($entity, $display);
     $this->content = drupal_render($entity->content);
     $this->assertText($term->label(), 'Term label is displayed.');
 
     // Delete the vocabulary and verify that the widget is gone.
     taxonomy_vocabulary_delete($this->vocabulary->id());
-    $this->drupalGet('test-entity/add/test_bundle');
+    $this->drupalGet('entity_test/add');
     $this->assertNoFieldByName("{$this->field_name}[$langcode]", '', 'Widget is not displayed');
   }
 
diff --git a/core/modules/text/lib/Drupal/text/Tests/TextFieldTest.php b/core/modules/text/lib/Drupal/text/Tests/TextFieldTest.php
index f8c585b..00430ec 100644
--- a/core/modules/text/lib/Drupal/text/Tests/TextFieldTest.php
+++ b/core/modules/text/lib/Drupal/text/Tests/TextFieldTest.php
@@ -20,7 +20,7 @@ class TextFieldTest extends WebTestBase {
    *
    * @var array
    */
-  public static $modules = array('field_test');
+  public static $modules = array('entity_test');
 
   protected $instance;
   protected $admin_user;
@@ -38,7 +38,7 @@ function setUp() {
     parent::setUp();
 
     $this->admin_user = $this->drupalCreateUser(array('administer filters'));
-    $this->web_user = $this->drupalCreateUser(array('access field_test content', 'administer field_test content'));
+    $this->web_user = $this->drupalCreateUser(array('view test entity', 'administer entity_test content'));
     $this->drupalLogin($this->web_user);
   }
 
@@ -60,24 +60,24 @@ function testTextFieldValidation() {
     field_create_field($this->field);
     $this->instance = array(
       'field_name' => $this->field['field_name'],
-      'entity_type' => 'test_entity',
-      'bundle' => 'test_bundle',
+      'entity_type' => 'entity_test',
+      'bundle' => 'entity_test',
       'widget' => array(
         'type' => 'text_textfield',
       ),
     );
     field_create_instance($this->instance);
-    entity_get_display('test_entity', 'test_bundle', 'default')
+    entity_get_display('entity_test', 'entity_test', 'default')
       ->setComponent($this->field['field_name'])
       ->save();
 
     // Test valid and invalid values with field_attach_validate().
-    $entity = field_test_create_entity();
+    $entity = entity_create('entity_test', array());
     $langcode = LANGUAGE_NOT_SPECIFIED;
     for ($i = 0; $i <= $max_length + 2; $i++) {
-      $entity->{$this->field['field_name']}[$langcode][0]['value'] = str_repeat('x', $i);
+      $entity->{$this->field['field_name']}->value = str_repeat('x', $i);
       try {
-        field_attach_validate($entity);
+        field_attach_validate($entity->getBCEntity());
         $this->assertTrue($i <= $max_length, "Length $i does not cause validation error when max_length is $max_length");
       }
       catch (FieldValidationException $e) {
@@ -99,14 +99,14 @@ function testTextfieldWidgets() {
    */
   function _testTextfieldWidgets($field_type, $widget_type) {
     // Setup a field and instance
-    $entity_type = 'test_entity';
+    $entity_type = 'entity_test';
     $this->field_name = drupal_strtolower($this->randomName());
     $this->field = array('field_name' => $this->field_name, 'type' => $field_type);
     field_create_field($this->field);
     $this->instance = array(
       'field_name' => $this->field_name,
-      'entity_type' => 'test_entity',
-      'bundle' => 'test_bundle',
+      'entity_type' => 'entity_test',
+      'bundle' => 'entity_test',
       'label' => $this->randomName() . '_label',
       'settings' => array(
         'text_processing' => TRUE,
@@ -119,14 +119,14 @@ function _testTextfieldWidgets($field_type, $widget_type) {
       ),
     );
     field_create_instance($this->instance);
-    entity_get_display('test_entity', 'test_bundle', 'full')
+    entity_get_display('entity_test', 'entity_test', 'full')
       ->setComponent($this->field_name)
       ->save();
 
     $langcode = LANGUAGE_NOT_SPECIFIED;
 
     // Display creation form.
-    $this->drupalGet('test-entity/add/test_bundle');
+    $this->drupalGet('entity_test/add');
     $this->assertFieldByName("{$this->field_name}[$langcode][0][value]", '', 'Widget is displayed');
     $this->assertNoFieldByName("{$this->field_name}[$langcode][0][format]", '1', 'Format selector is not displayed');
     $this->assertRaw(format_string('placeholder="A placeholder on !widget_type"', array('!widget_type' => $widget_type)));
@@ -134,18 +134,20 @@ function _testTextfieldWidgets($field_type, $widget_type) {
     // Submit with some value.
     $value = $this->randomName();
     $edit = array(
+      'user_id' => 1,
+      'name' => $this->randomName(),
       "{$this->field_name}[$langcode][0][value]" => $value,
     );
     $this->drupalPost(NULL, $edit, t('Save'));
-    preg_match('|test-entity/manage/(\d+)/edit|', $this->url, $match);
+    preg_match('|entity_test/manage/(\d+)/edit|', $this->url, $match);
     $id = $match[1];
-    $this->assertRaw(t('test_entity @id has been created.', array('@id' => $id)), 'Entity was created');
+    $this->assertText(t('entity_test @id has been created.', array('@id' => $id)), 'Entity was created');
 
     // Display the entity.
-    $entity = field_test_entity_test_load($id);
+    $entity = entity_load('entity_test', $id);
     $display = entity_get_display($entity->entityType(), $entity->bundle(), 'full');
-    $entity->content = field_attach_view($entity, $display);
-    $this->content = drupal_render($entity->content);
+    $entity->content = field_attach_view($entity->getBCEntity(), $display);
+    $this->drupalSetContent(drupal_render($entity->content));
     $this->assertText($value, 'Filtered tags are not displayed');
   }
 
@@ -162,14 +164,13 @@ function testTextfieldWidgetsFormatted() {
    */
   function _testTextfieldWidgetsFormatted($field_type, $widget_type) {
     // Setup a field and instance
-    $entity_type = 'test_entity';
     $this->field_name = drupal_strtolower($this->randomName());
     $this->field = array('field_name' => $this->field_name, 'type' => $field_type);
     field_create_field($this->field);
     $this->instance = array(
       'field_name' => $this->field_name,
-      'entity_type' => 'test_entity',
-      'bundle' => 'test_bundle',
+      'entity_type' => 'entity_test',
+      'bundle' => 'entity_test',
       'label' => $this->randomName() . '_label',
       'settings' => array(
         'text_processing' => TRUE,
@@ -179,7 +180,7 @@ function _testTextfieldWidgetsFormatted($field_type, $widget_type) {
       ),
     );
     field_create_instance($this->instance);
-    entity_get_display('test_entity', 'test_bundle', 'full')
+    entity_get_display('entity_test', 'entity_test', 'full')
       ->setComponent($this->field_name)
       ->save();
 
@@ -196,24 +197,26 @@ function _testTextfieldWidgetsFormatted($field_type, $widget_type) {
 
     // Display the creation form. Since the user only has access to one format,
     // no format selector will be displayed.
-    $this->drupalGet('test-entity/add/test_bundle');
+    $this->drupalGet('entity_test/add');
     $this->assertFieldByName("{$this->field_name}[$langcode][0][value]", '', 'Widget is displayed');
     $this->assertNoFieldByName("{$this->field_name}[$langcode][0][format]", '', 'Format selector is not displayed');
 
     // Submit with data that should be filtered.
     $value = '<em>' . $this->randomName() . '</em>';
     $edit = array(
+      'user_id' => 1,
+      'name' => $this->randomName(),
       "{$this->field_name}[$langcode][0][value]" => $value,
     );
     $this->drupalPost(NULL, $edit, t('Save'));
-    preg_match('|test-entity/manage/(\d+)/edit|', $this->url, $match);
+    preg_match('|entity_test/manage/(\d+)/edit|', $this->url, $match);
     $id = $match[1];
-    $this->assertRaw(t('test_entity @id has been created.', array('@id' => $id)), 'Entity was created');
+    $this->assertText(t('entity_test @id has been created.', array('@id' => $id)), 'Entity was created');
 
     // Display the entity.
-    $entity = field_test_entity_test_load($id);
+    $entity = entity_load('entity_test', $id);
     $display = entity_get_display($entity->entityType(), $entity->bundle(), 'full');
-    $entity->content = field_attach_view($entity, $display);
+    $entity->content = field_attach_view($entity->getBCEntity(), $display);
     $this->content = drupal_render($entity->content);
     $this->assertNoRaw($value, 'HTML tags are not displayed.');
     $this->assertRaw(check_plain($value), 'Escaped HTML is displayed correctly.');
@@ -239,22 +242,24 @@ function _testTextfieldWidgetsFormatted($field_type, $widget_type) {
 
     // Display edition form.
     // We should now have a 'text format' selector.
-    $this->drupalGet('test-entity/manage/' . $id . '/edit');
+    $this->drupalGet('entity_test/manage/' . $id . '/edit');
     $this->assertFieldByName("{$this->field_name}[$langcode][0][value]", NULL, 'Widget is displayed');
     $this->assertFieldByName("{$this->field_name}[$langcode][0][format]", NULL, 'Format selector is displayed');
 
     // Edit and change the text format to the new one that was created.
     $edit = array(
+      'user_id' => 1,
+      'name' => $this->randomName(),
       "{$this->field_name}[$langcode][0][format]" => $format_id,
     );
     $this->drupalPost(NULL, $edit, t('Save'));
-    $this->assertRaw(t('test_entity @id has been updated.', array('@id' => $id)), 'Entity was updated');
+    $this->assertText(t('entity_test @id has been updated.', array('@id' => $id)), 'Entity was updated');
 
     // Display the entity.
-    $this->container->get('plugin.manager.entity')->getStorageController('test_entity')->resetCache(array($id));
-    $entity = field_test_entity_test_load($id);
+    $this->container->get('plugin.manager.entity')->getStorageController('entity_test')->resetCache(array($id));
+    $entity = entity_load('entity_test', $id);
     $display = entity_get_display($entity->entityType(), $entity->bundle(), 'full');
-    $entity->content = field_attach_view($entity, $display);
+    $entity->content = field_attach_view($entity->getBCEntity(), $display);
     $this->content = drupal_render($entity->content);
     $this->assertRaw($value, 'Value is displayed unfiltered');
   }
