diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d7_field.yml b/core/modules/migrate_drupal/config/install/migrate.migration.d7_field.yml
new file mode 100755
index 0000000..61e1033
--- /dev/null
+++ b/core/modules/migrate_drupal/config/install/migrate.migration.d7_field.yml
@@ -0,0 +1,43 @@
+id: d7_field
+label: Drupal 7 field configuration
+migration_tags:
+  - Drupal 7
+source:
+  plugin: d7_field
+  constants:
+    status: true
+    langcode: und
+process:
+  entity_type: entity_type
+  status: 'constants/status'
+  langcode: 'constants/langcode'
+  field_name: field_name
+  type:
+    plugin: static_map
+    source:
+      - type
+    map:
+      date: datetime
+      datestamp: datetime
+      datetime: datetime
+      email: email
+      file: file
+      image: image
+      link_field: link
+      list_boolean: boolean
+      list_integer: list_integer
+      list_text: list_string
+      number_integer: integer
+      number_decimal: decimal
+      number_float: float
+      phone: telephone
+      taxonomy_term_reference: entity_reference
+      text: text
+      text_long: text_long
+      text_with_summary: text_with_summary
+  translatable: translatable
+  cardinality: cardinality
+  settings:
+    plugin: d7_field_settings
+destination:
+  plugin: entity:field_storage_config
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d7_field_instance.yml b/core/modules/migrate_drupal/config/install/migrate.migration.d7_field_instance.yml
new file mode 100755
index 0000000..54c1ca3
--- /dev/null
+++ b/core/modules/migrate_drupal/config/install/migrate.migration.d7_field_instance.yml
@@ -0,0 +1,32 @@
+id: d7_field_instance
+migration_tags:
+  - Drupal 7
+source:
+  plugin: d7_field_instance
+  constants:
+    status: true
+process:
+  entity_type: entity_type
+  field_name: field_name
+  bundle: bundle
+  label: label
+  description: description
+  required: required
+  status: 'constants/status'
+  settings:
+    plugin: d7_field_instance_settings
+    source:
+      - instance_settings
+      - widget_settings
+
+  default_value_function: ''
+  default_value:
+    plugin: d7_field_instance_defaults
+    source:
+      - default_value
+      - widget_settings
+destination:
+  plugin: entity:field_config
+migration_dependencies:
+  required:
+    - d7_field
diff --git a/core/modules/migrate_drupal/config/schema/migrate_drupal.source.schema.yml b/core/modules/migrate_drupal/config/schema/migrate_drupal.source.schema.yml
index 56ba960..a1630c1 100644
--- a/core/modules/migrate_drupal/config/schema/migrate_drupal.source.schema.yml
+++ b/core/modules/migrate_drupal/config/schema/migrate_drupal.source.schema.yml
@@ -275,6 +275,22 @@ migrate.source.d6_user_picture_instance:
       type: migrate_entity_constant
       label: 'Constants'
 
+migrate.source.d7_field:
+  type: migrate_source_sql
+  label: 'Drupal 7 field'
+  mapping:
+    constants:
+      type: migrate_entity_constant
+      label: 'Constants'
+
+migrate.source.d7_field_instance:
+  type: migrate_source_sql
+  label: 'Drupal 7 field instance'
+  mapping:
+    constants:
+      type: migrate_entity_constant
+      label: 'Constants'
+
 migrate_entity_constant:
   type: mapping
   mapping:
@@ -369,3 +385,6 @@ migrate_entity_constant:
     auto_create:
       type: boolean
       label: 'Entity reference selection setting: Auto-create new entities'
+    status:
+      type: boolean
+      label: 'Status'
diff --git a/core/modules/migrate_drupal/src/Plugin/migrate/process/d7/FieldInstanceDefaults.php b/core/modules/migrate_drupal/src/Plugin/migrate/process/d7/FieldInstanceDefaults.php
new file mode 100755
index 0000000..38121d1
--- /dev/null
+++ b/core/modules/migrate_drupal/src/Plugin/migrate/process/d7/FieldInstanceDefaults.php
@@ -0,0 +1,42 @@
+<?php
+
+/**
+ * @file
+ * Contains Drupal\migrate_drupal\Plugin\migrate\d7\FieldInstanceDefaults
+ */
+
+namespace Drupal\migrate_drupal\Plugin\migrate\Process\d7;
+
+use Drupal\migrate\MigrateExecutableInterface;
+use Drupal\migrate\ProcessPluginBase;
+use Drupal\migrate\Row;
+
+/**
+ * @MigrateProcessPlugin(
+ *   id = "d7_field_instance_defaults"
+ * )
+ */
+class FieldInstanceDefaults extends ProcessPluginBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function transform($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) {
+    list($default_value, $widget_settings) = $value;
+    $widget_type = $widget_settings['type'];
+
+    $default = array();
+
+    foreach ($default_value as $item) {
+      switch ($widget_type) {
+        // @todo Add here special conversion, if case
+
+        default:
+          $default[] = $item;
+      }
+    }
+
+    return $default;
+  }
+
+}
diff --git a/core/modules/migrate_drupal/src/Plugin/migrate/process/d7/FieldInstanceSettings.php b/core/modules/migrate_drupal/src/Plugin/migrate/process/d7/FieldInstanceSettings.php
new file mode 100755
index 0000000..6eb262a
--- /dev/null
+++ b/core/modules/migrate_drupal/src/Plugin/migrate/process/d7/FieldInstanceSettings.php
@@ -0,0 +1,55 @@
+<?php
+
+/**
+ * @file
+ * Contains Drupal\migrate_drupal\Plugin\migrate\d7\FieldInstanceSettings
+ */
+
+namespace Drupal\migrate_drupal\Plugin\migrate\Process\d7;
+
+use Drupal\migrate\MigrateExecutableInterface;
+use Drupal\migrate\ProcessPluginBase;
+use Drupal\migrate\Row;
+
+/**
+ * @MigrateProcessPlugin(
+ *   id = "d7_field_instance_settings"
+ * )
+ */
+class FieldInstanceSettings extends ProcessPluginBase {
+
+  /**
+   * {@inheritdoc}
+   *
+   * Set the field instance defaults.
+   */
+  public function transform($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) {
+    list($instance_settings, $widget_settings) = $value;
+    $widget_type = $widget_settings['type'];
+
+    $settings = array();
+    switch ($widget_type) {
+      case 'image_image':
+        $settings = $instance_settings;
+        $settings['default_image'] = array(
+          // 'fid' => $instance_settings['default_image'],
+          'alt' => '',
+          'title' => '',
+          'width' => NULL,
+          'height' => NULL,
+          'uuid' => '',
+        );
+        break;
+
+      default:
+        $settings = $instance_settings;
+    }
+
+    // Remove 'user_register_form'.
+    // @see https://drupal.org/node/2049485'
+    unset($settings['user_register_form']);
+
+    return $settings;
+  }
+
+}
diff --git a/core/modules/migrate_drupal/src/Plugin/migrate/process/d7/FieldSettings.php b/core/modules/migrate_drupal/src/Plugin/migrate/process/d7/FieldSettings.php
new file mode 100755
index 0000000..6aae9bb
--- /dev/null
+++ b/core/modules/migrate_drupal/src/Plugin/migrate/process/d7/FieldSettings.php
@@ -0,0 +1,38 @@
+<?php
+
+/**
+ * @file
+ * Contains Drupal\migrate_drupal\Plugin\migrate\d7\FieldSettings
+ */
+
+namespace Drupal\migrate_drupal\Plugin\migrate\Process\d7;
+
+use Drupal\migrate\MigrateExecutableInterface;
+use Drupal\migrate\ProcessPluginBase;
+use Drupal\migrate\Row;
+
+/**
+ * @MigrateProcessPlugin(
+ *   id = "d7_field_settings"
+ * )
+ */
+class FieldSettings extends ProcessPluginBase {
+
+  protected $pluginManager;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function transform($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) {
+    $value = $row->getSourceProperty('settings');
+
+    if ($row->getSourceProperty('type') == 'image' && !is_array($value['default_image'])) {
+      $value['default_image'] = array(
+        'uuid' => '',
+      );
+    }
+
+    return $value;
+  }
+
+}
diff --git a/core/modules/migrate_drupal/src/Plugin/migrate/source/d7/Field.php b/core/modules/migrate_drupal/src/Plugin/migrate/source/d7/Field.php
new file mode 100755
index 0000000..edc6b6f
--- /dev/null
+++ b/core/modules/migrate_drupal/src/Plugin/migrate/source/d7/Field.php
@@ -0,0 +1,99 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\migrate\Plugin\migrate\source\d6\Field.
+ */
+
+namespace Drupal\migrate_drupal\Plugin\migrate\source\d7;
+
+use Drupal\migrate\Row;
+use Drupal\migrate_drupal\Plugin\migrate\source\DrupalSqlBase;
+
+/**
+ * Drupal 7 field source from database.
+ *
+ * This source class doesn't really work for anything but the Drupal 8
+ * migration because it returns only active fields, one per entity type and
+ * field name.
+ *
+ * @MigrateSource(
+ *   id = "d7_field"
+ * )
+ */
+class Field extends DrupalSqlBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function query() {
+    $query = $this->select('field_config', 'fc')
+      ->fields('fc', array(
+        'field_name',
+        'type',
+        'module',
+        'storage_type',
+        'storage_module',
+        'locked',
+        'data',
+        'cardinality',
+        'translatable',
+      ))
+      ->fields('fci', array(
+        'entity_type',
+      ))
+      ->condition('fc.active', 1)
+      ->condition('fc.deleted', 0)
+      ->condition('fc.storage_active', 1);
+    $query->join('field_config_instance', 'fci', 'fc.id = fci.field_id');
+    $query->orderBy('fc.field_name');
+
+    return $query;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function fields() {
+    return array(
+      'field_name' => $this->t('The name of this field.'),
+      'type' => $this->t('The type of this field.'),
+      'module' => $this->t('The module that implements the field type.') ,
+      'storage' => $this->t('The field stoerage.'),
+      'locked' => $this->t( 'Locked'),
+      'cardinality' => $this->t('Cardinality'),
+      'translatable' => $this->t('translatable'),
+    );
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function prepareRow(Row $row, $keep = TRUE) {
+    // The logic is from field_read_fields() in Drupal 7.
+    $field = unserialize($row->getSourceProperty('data'));
+    $field['field_name'] = $row->getSourceProperty('field_name');
+    $field['type'] = $row->getSourceProperty('type');
+    $field['module'] = $row->getSourceProperty('module');
+    $field['storage']['type'] = $row->getSourceProperty('storage_type');
+    $field['storage']['module'] = $row->getSourceProperty('storage_module');
+    $field['locked'] = $row->getSourceProperty('locked');
+    $field['cardinality'] = $row->getSourceProperty('cardinality');
+    $field['translatable'] = $row->getSourceProperty('translatable');
+    foreach ($field as $key => $data) {
+      $row->setSourceProperty($key, $data);
+    }
+    return parent::prepareRow($row);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getIds() {
+    $ids['field_name']['type'] = 'string';
+    $ids['field_name']['alias'] = 'fc';
+    $ids['entity_type']['type'] = 'string';
+    $ids['entity_type']['alias'] = 'fci';
+    return $ids;
+  }
+}
diff --git a/core/modules/migrate_drupal/src/Plugin/migrate/source/d7/FieldInstance.php b/core/modules/migrate_drupal/src/Plugin/migrate/source/d7/FieldInstance.php
new file mode 100755
index 0000000..0eab585
--- /dev/null
+++ b/core/modules/migrate_drupal/src/Plugin/migrate/source/d7/FieldInstance.php
@@ -0,0 +1,107 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\migrate\Plugin\migrate\source\d7\FieldInstance.
+ */
+
+namespace Drupal\migrate_drupal\Plugin\migrate\source\d7;
+
+use Drupal\migrate\Row;
+use Drupal\migrate_drupal\Plugin\migrate\source\DrupalSqlBase;
+
+/**
+ * Drupal 7 field instances source from database.
+ *
+ * @MigrateSource(
+ *   id = "d7_field_instance",
+ * )
+ */
+class FieldInstance extends DrupalSqlBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function query() {
+    $query = $this->select('field_config_instance', 'fci')
+      ->fields('fci', array('field_name', 'entity_type', 'bundle', 'data'))
+      ->condition('fci.deleted', 0)
+      ->condition('fc.active', 1)
+      ->condition('fc.deleted', 0)
+      ->condition('fc.storage_active', 1);
+    $query->innerJoin('field_config', 'fc', 'fci.field_id = fc.id');
+
+    return $query;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function fields() {
+    return array(
+      'field_name' => $this->t('The machine name of field.'),
+      'entity_type' => $this->t('The entity type.'),
+      'bundle' => $this->t('The entity bundle.'),
+      'default_value' => $this->t('Default value'),
+      'instance_settings' => $this->t('Field instance settings.'),
+      'widget_settings' => $this->t('Widget settings.'),
+      'display_settings' => $this->t('Display settings.'),
+
+      /*
+      'weight' => $this->t('Weight.'),
+      'label' => $this->t('A name to show.'),
+      'widget_type' => $this->t('Widget type.'),
+      'description' => $this->t('A description of field.'),
+      'widget_module' => $this->t('Module that implements widget.'),
+      'widget_active' => $this->t('Status of widget'),
+      'module' => $this->t('The module that provides the field.'),
+      */
+
+    );
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function prepareRow(Row $row, $keep = TRUE) {
+    $data = unserialize($row->getSourceProperty('data'));
+
+    $row->setSourceProperty('label', $data['label']);
+    $row->setSourceProperty('description', $data['description']);
+    $row->setSourceProperty('required', $data['required']);
+
+    $default_value = !empty($data['default_value']) ? $data['default_value'] : array();
+    if ($data['widget']['type'] == 'email_textfield' && $default_value) {
+      $default_value[0]['value'] = $default_value[0]['email'];
+      unset($default_value[0]['email']);
+    }
+    $row->setSourceProperty('default_value', $default_value);
+
+    // Settings.
+    $row->setSourceProperty('instance_settings', $data['settings']);
+    $row->setSourceProperty('widget_settings', $data['widget']);
+    $row->setSourceProperty('display_settings', $data['display']);
+
+    return parent::prepareRow($row);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getIds() {
+    return array(
+      'entity_type' => array(
+        'type' => 'string',
+        'alias' => 'fci',
+      ),
+      'bundle' => array(
+        'type' => 'string',
+        'alias' => 'fci',
+      ),
+      'field_name' => array(
+        'type' => 'string',
+        'alias' => 'fci',
+      ),
+    );
+  }
+}
diff --git a/core/modules/migrate_drupal/src/Tests/d7/MigrateFieldInstanceTest.php b/core/modules/migrate_drupal/src/Tests/d7/MigrateFieldInstanceTest.php
new file mode 100644
index 0000000..b14eb08
--- /dev/null
+++ b/core/modules/migrate_drupal/src/Tests/d7/MigrateFieldInstanceTest.php
@@ -0,0 +1,137 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\migrate_drupal\Tests\d7\MigrateFieldInstanceTest.
+ */
+
+namespace Drupal\migrate_drupal\Tests\d7;
+
+use Drupal\field\Entity\FieldConfig;
+use Drupal\field\FieldConfigInterface;
+use Drupal\migrate\MigrateExecutable;
+
+/**
+ * Migrates Drupal 7 field instances.
+ *
+ * @group migrate_drupal 7.x
+ * @dumpFile d7/FieldConfig.php
+ * @dumpFile d7/FieldConfigInstance.php
+ * @migration d7_field
+ * @migration d7_field_instance
+ */
+class MigrateFieldInstanceTest extends MigrateDrupal7TestBase {
+
+  /**
+   * The modules to be enabled during the test.
+   *
+   * @var array
+   */
+  static $modules = array(
+    'comment',
+    'datetime',
+    'entity_reference',
+    'file',
+    'image',
+    'link',
+    'node',
+    'system',
+    'taxonomy',
+    'telephone',
+    'text',
+  );
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+
+    $this->installConfig(static::$modules);
+
+    // Load database dumps to provide source data.
+    $dumps = array(
+      $this->getDumpDirectory() . '/FieldConfig.php',
+      $this->getDumpDirectory() . '/FieldConfigInstance.php',
+    );
+    $this->loadDumps($dumps);
+
+    $this->createType('page');
+    $this->createType('article');
+    $this->createType('blog');
+    $this->createType('book');
+    $this->createType('forum');
+    $this->createType('test_content_type');
+
+    $migration = entity_load('migration', 'd7_field');
+    $executable = new MigrateExecutable($migration, $this);
+    $executable->import();
+
+    $migration = entity_load('migration', 'd7_field_instance');
+    $executable = new MigrateExecutable($migration, $this);
+    $executable->import();
+  }
+
+  private function createType($id) {
+    entity_create('node_type', array(
+      'type' => $id,
+      'label' => $this->randomString(),
+    ))->save();
+
+    entity_create('comment_type', array(
+      'id' => 'comment_node_' . $id,
+      'label' => $this->randomString(),
+      'target_entity_type_id' => 'node',
+    ))->save();
+  }
+
+  private function assertEntity($id, $expected_label, $expected_field_type, $is_required) {
+    list ($expected_entity_type, $expected_bundle, $expected_name) = explode('.', $id);
+
+    /** @var \Drupal\field\FieldConfigInterface $field */
+    $field = FieldConfig::load($id);
+    $this->assertTrue($field instanceof FieldConfigInterface);
+    $this->assertIdentical($expected_label, $field->label());
+    $this->assertIdentical($expected_field_type, $field->getType());
+    $this->assertIdentical($expected_entity_type, $field->getTargetEntityTypeId());
+    $this->assertIdentical($expected_bundle, $field->getTargetBundle());
+    $this->assertIdentical($expected_name, $field->getName());
+    $this->assertEqual($is_required, $field->isRequired());
+    $this->assertIdentical($expected_entity_type . '.' . $expected_name, $field->getFieldStorageDefinition()->id());
+  }
+
+  public function testFieldInstances() {
+    $this->assertEntity('comment.comment_node_page.comment_body', 'Comment', 'text_long', TRUE);
+    $this->assertEntity('node.page.body', 'Body', 'text_with_summary', FALSE);
+    $this->assertEntity('comment.comment_node_article.comment_body', 'Comment', 'text_long', TRUE);
+    $this->assertEntity('node.article.body', 'Body', 'text_with_summary', FALSE);
+    $this->assertEntity('node.article.field_tags', 'Tags', 'entity_reference', FALSE);
+    $this->assertEntity('node.article.field_image', 'Image', 'image', FALSE);
+    $this->assertEntity('comment.comment_node_blog.comment_body', 'Comment', 'text_long', TRUE);
+    $this->assertEntity('node.blog.body', 'Body', 'text_with_summary', FALSE);
+    $this->assertEntity('comment.comment_node_book.comment_body', 'Comment', 'text_long', TRUE);
+    $this->assertEntity('node.book.body', 'Body', 'text_with_summary', FALSE);
+    $this->assertEntity('node.forum.taxonomy_forums', 'Forums', 'entity_reference', TRUE);
+    $this->assertEntity('comment.comment_node_forum.comment_body', 'Comment', 'text_long', TRUE);
+    $this->assertEntity('node.forum.body', 'Body', 'text_with_summary', FALSE);
+    $this->assertEntity('comment.comment_node_test_content_type.comment_body', 'Comment', 'text_long', TRUE);
+    $this->assertEntity('node.test_content_type.field_boolean', 'Boolean', 'boolean', FALSE);
+    $this->assertEntity('node.test_content_type.field_email', 'Email', 'email', FALSE);
+    $this->assertEntity('node.test_content_type.field_phone', 'Phone', 'telephone', TRUE);
+    $this->assertEntity('node.test_content_type.field_date', 'Date', 'datetime', FALSE);
+    $this->assertEntity('node.test_content_type.field_date_with_end_time', 'Date With End Time', 'datetime', FALSE);
+    $this->assertEntity('node.test_content_type.field_file', 'File', 'file', FALSE);
+    $this->assertEntity('node.test_content_type.field_float', 'Float', 'float', FALSE);
+    $this->assertEntity('node.test_content_type.field_images', 'Images', 'image', TRUE);
+    $this->assertEntity('node.test_content_type.field_integer', 'Integer', 'integer', TRUE);
+    $this->assertEntity('node.test_content_type.field_link', 'Link', 'link', FALSE);
+    $this->assertEntity('node.test_content_type.field_text_list', 'Text List', 'list_string', FALSE);
+    $this->assertEntity('node.test_content_type.field_integer_list', 'Integer List', 'list_integer', FALSE);
+    $this->assertEntity('node.test_content_type.field_long_text', 'Long text', 'text_with_summary', FALSE);
+    $this->assertEntity('node.test_content_type.field_term_reference', 'Term Reference', 'entity_reference', FALSE);
+    $this->assertEntity('node.test_content_type.field_text', 'Text', 'text', FALSE);
+    $this->assertEntity('comment.comment_node_test_content_type.field_integer', 'Integer', 'integer', FALSE);
+    $this->assertEntity('user.user.field_file', 'File', 'file', FALSE);
+  }
+
+}
diff --git a/core/modules/migrate_drupal/src/Tests/d7/MigrateFieldTest.php b/core/modules/migrate_drupal/src/Tests/d7/MigrateFieldTest.php
new file mode 100644
index 0000000..126e238
--- /dev/null
+++ b/core/modules/migrate_drupal/src/Tests/d7/MigrateFieldTest.php
@@ -0,0 +1,110 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\migrate_drupal\Tests\d7\MigrateFieldTest.
+ */
+
+namespace Drupal\migrate_drupal\Tests\d7;
+
+use Drupal\field\Entity\FieldStorageConfig;
+use Drupal\field\FieldStorageConfigInterface;
+use Drupal\migrate\MigrateExecutable;
+
+/**
+ * Migrates Drupal 7 fields.
+ *
+ * @group migrate_drupal 7.x
+ * @dumpFile d7/FieldConfig.php
+ * @dumpFile d7/FieldConfigInstance.php
+ * @migration d7_field
+ */
+class MigrateFieldTest extends MigrateDrupal7TestBase {
+
+  /**
+   * The modules to be enabled during the test.
+   *
+   * @var array
+   */
+  static $modules = array(
+    'comment',
+    'datetime',
+    'entity_reference',
+    'file',
+    'image',
+    'link',
+    'node',
+    'system',
+    'taxonomy',
+    'telephone',
+    'text',
+  );
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+
+    $this->installConfig(static::$modules);
+
+    // Load database dumps to provide source data.
+    $dumps = array(
+      $this->getDumpDirectory() . '/FieldConfig.php',
+      $this->getDumpDirectory() . '/FieldConfigInstance.php',
+    );
+    $this->loadDumps($dumps);
+
+    $migration = entity_load('migration', 'd7_field');
+    $executable = new MigrateExecutable($migration, $this);
+    $executable->import();
+  }
+
+  private function assertEntity($id, $expected_type, $expected_translatable, $expected_cardinality) {
+    list ($expected_entity_type, $expected_name) = explode('.', $id);
+
+    /** @var \Drupal\field\FieldStorageConfigInterface $field */
+    $field = FieldStorageConfig::load($id);
+    $this->assertTrue($field instanceof FieldStorageConfigInterface);
+    $this->assertIdentical($expected_name, $field->getName());
+    $this->assertIdentical($expected_type, $field->getType());
+    // FieldStorageConfig::$translatable is TRUE by default, so it is useful
+    // to test for FALSE here.
+    $this->assertEqual($expected_translatable, $field->isTranslatable());
+    $this->assertIdentical($expected_entity_type, $field->getTargetEntityTypeId());
+
+    if ($expected_cardinality === 1) {
+      $this->assertFalse($field->isMultiple());
+    }
+    else {
+      $this->assertTrue($field->isMultiple());
+    }
+    $this->assertIdentical($expected_cardinality, $field->getCardinality());
+  }
+
+  public function testFields() {
+    $this->assertEntity('node.body', 'text_with_summary', FALSE, 1);
+    $this->assertEntity('node.field_long_text', 'text_with_summary', FALSE, 1);
+    $this->assertEntity('comment.comment_body', 'text_long', FALSE, 1);
+    $this->assertEntity('node.field_file', 'file', FALSE, 1);
+    $this->assertEntity('user.field_file', 'file', FALSE, 1);
+    $this->assertEntity('node.field_float', 'float', FALSE, 1);
+    $this->assertEntity('node.field_image', 'image', FALSE, 1);
+    $this->assertEntity('node.field_images', 'image', FALSE, 1);
+    $this->assertEntity('node.field_integer', 'integer', FALSE, 1);
+    $this->assertEntity('comment.field_integer', 'integer', FALSE, 1);
+    $this->assertEntity('node.field_integer_list', 'list_integer', FALSE, 1);
+    $this->assertEntity('node.field_link', 'link', FALSE, 1);
+    $this->assertEntity('node.field_tags', 'entity_reference', FALSE, -1);
+    $this->assertEntity('node.field_term_reference', 'entity_reference', FALSE, 1);
+    $this->assertEntity('node.taxonomy_forums', 'entity_reference', FALSE, 1);
+    $this->assertEntity('node.field_text', 'text', FALSE, 1);
+    $this->assertEntity('node.field_text_list', 'list_string', FALSE, 3);
+    $this->assertEntity('node.field_boolean', 'boolean', FALSE, 1);
+    $this->assertEntity('node.field_email', 'email', FALSE, -1);
+    $this->assertEntity('node.field_phone', 'telephone', FALSE, 1);
+    $this->assertEntity('node.field_date', 'datetime', FALSE, 1);
+    $this->assertEntity('node.field_date_with_end_time', 'datetime', FALSE, 1);
+  }
+
+}
