diff --git a/microdata.info b/microdata.info
old mode 100644
new mode 100755
index 1befcd1..3de39f5
--- a/microdata.info
+++ b/microdata.info
@@ -6,3 +6,5 @@ dependencies[] = ctools
 dependencies[] = entity
 files[] = microdata.features.inc
 files[] = microdata.test
+; Integration tests for contrib modules.
+files[] = modules/email/email.test
diff --git a/modules/email/email.test b/modules/email/email.test
new file mode 100644
index 0000000..ad284ad
--- /dev/null
+++ b/modules/email/email.test
@@ -0,0 +1,131 @@
+<?php
+
+/**
+ * @file
+ * Tests for Email module.
+ */
+
+
+/**
+ * Test Email module microdata placement.
+ *
+ * The Email module is enhanced with microdata in the case when the email field
+ * formatter type is set to 'email_default' and 'email_plan'. In the cases where
+ * the field formatter type is 'email_contact' and 'email_spamspan', there
+ * should be no microdata. This class tests for both of these cases.
+ */
+class EmailTestCase extends MicrodataFieldTestCase {
+
+  /**
+   * Sets the display information for the tests
+   */
+  public static function getInfo() {
+    return array(
+      'name' => 'Microdata markup - email field',
+      'description' => 'Microdata field test for the email module.',
+      'group' => 'Microdata Field Integration',
+    );
+  }
+
+  /**
+   * Implements DrupalWebTestCase::setUp().
+   */
+  public function setUp() {
+    $this->fieldFormatterTypesMicrodata = array(
+      'email_default',
+      'email_plain',
+    );
+    $this->fieldFormatterTypesNoMicrodata = array(
+      'email_contact',
+      'email_spamspan',
+    );
+    $this->fieldFormatterTypes = array_merge($this->fieldFormatterTypesMicrodata, $this->fieldFormatterTypesNoMicrodata);
+
+    parent::setUp(array(
+      'email',
+      'spamspan',
+    ));
+  }
+
+  /**
+   * Implements MicrodataFieldTestCase::getFields().
+   */
+  protected function getFields() {
+    // Create fields for the field collection and for the field group.
+    $fields = array();
+    foreach ($this->fieldFormatterTypes as $type) {
+      $fields[] = array(
+        'field_name' => $type,
+        'type' => 'email',
+      );
+    }
+    return $fields;
+  }
+
+  /**
+   * Implements MicrodataFieldTestCase::getInstances().
+   */
+  protected function getInstances() {
+    // Create instances for the field collection and for the field group.
+    $instances = array();
+    foreach ($this->fieldFormatterTypes as $type) {
+      $instances[] = array(
+        'field_name' => $type,
+        'entity_type' => $this->entityType,
+        'bundle' => $this->bundleType,
+        'display' => array(
+          'default' => array(
+            'label' => 'hidden',
+            'type' => $type,
+          ),
+        ),
+      );
+    }
+    return $instances;
+  }
+
+  /**
+   * Implements MicrodataFieldTestCase::getMapping().
+   */
+  protected function getMapping() {
+    foreach ($this->fieldFormatterTypes as $type) {
+      $mapping[$this->entityType][$this->bundleType][$type] = array(
+        '#itemprop' => array($type),
+      );
+    }
+    return $mapping;
+  }
+
+  /**
+   * Tests whether microdata is correctly outputted, depending
+   * on the field formatter type.
+   */
+  public function testMarkup() {
+    $text = "example@test.org";
+
+    $node = $this->drupalCreateNode(array('type' => $this->bundleType, 'promote' => 1));
+    foreach ($this->fieldFormatterTypes as $type) {
+      $edit["{$type}[und][0][email]"] = $text;
+    }
+    $this->drupalPost('node/' . $node->nid . '/edit', $edit, t('Save'));
+
+    // Get the microdata result for the page.
+    $md = $this->parseMicrodata();
+
+    // Get the entity as a microdata item.
+    $item = $md->items[0];
+
+    // Test fields enriched with microdata.
+    foreach ($this->fieldFormatterTypesMicrodata as $type) {
+      $text_itemprop = $type;
+      $this->assertEqual($text, $item->properties[$text_itemprop][0], "Itemprop is placed on $type");
+    }
+
+    // Test fields without microdata.
+    foreach ($this->fieldFormatterTypesNoMicrodata as $type) {
+      $text_itemprop = $type;
+      $this->assertTrue(empty($item->properties[$text_itemprop][0]), "There is no microdata available for $type");
+    }
+  }
+
+}
