diff --git a/tests/submission.test b/tests/submission.test
index 8aa32d7..c638a32 100644
--- a/tests/submission.test
+++ b/tests/submission.test
@@ -43,6 +43,9 @@ class WebformSubmissionTestCase extends WebformTestCase {
     $this->drupalLogout();
   }
 
+  /**
+   * Test a submission that uses default values, and check database integrity.
+   */
   function testWebformSubmissionDefault() {
     $this->drupalLogin($this->webform_users['admin']);
     $this->webformReset();
@@ -51,6 +54,38 @@ class WebformSubmissionTestCase extends WebformTestCase {
   }
 
   /**
+   * Test that required fields with no default value can't be submitted as-is.
+   */
+  function testWebformSubmissionRequiredComponents() {
+    $this->drupalLogin($this->webform_users['admin']);
+    $this->webformReset();
+
+    // Create the Webform test node, and set all components to be mandatory
+    // with no default value.
+    $node = $this->testWebformForm();
+    $node = node_load($node->nid);
+    foreach ($node->webform['components'] as &$component) {
+      $component['value'] = '';
+      $component['mandatory'] = '1';
+    }
+    node_save($node);
+
+    // Submit the webform with no data. We should get a message that all the
+    // components are required. (The exceptions are hidden fields, which can't
+    // be made mandatory, and date fields, which default to the current date
+    // when no default value is provided; therefore, we don't expect a message
+    // for those.)
+    $this->drupalPost('node/' . $node->nid, array(), 'Submit', array(), array(), 'webform-client-form-' . $node->nid);
+    foreach ($node->webform['components'] as $component) {
+      if ($component['type'] != 'hidden' && $component['type'] != 'date') {
+        $this->assertText(t('!name field is required.', array('!name' => $component['name'])));
+      }
+    }
+
+    $this->drupalLogout();
+  }
+
+  /**
    * Execute the submission test.
    *
    * @param $value_type
@@ -69,7 +104,7 @@ class WebformSubmissionTestCase extends WebformTestCase {
     $this->assertText($node->body, t('Webform node created and accessible at !url', array('!url' => 'node/' . $node->nid)), t('Webform'));
 
     // Submit our test data.
-    $this->drupalPost(NULL, $submission_values, 'Submit');
+    $this->drupalPost(NULL, $submission_values, 'Submit', array(), array(), 'webform-client-form-' . $node->nid);
 
     // Confirm that the submission has been created.
     $this->assertText($node->webform['confirmation'], t('Confirmation message "@confirmation" received.', array('@confirmation' => $node->webform['confirmation'])), t('Webform'));
diff --git a/tests/webform.test b/tests/webform.test
index 1b92feb..a1e6eff 100644
--- a/tests/webform.test
+++ b/tests/webform.test
@@ -111,8 +111,8 @@ class WebformTestCase extends DrupalWebTestCase {
           'value' => '19 Nov 1978',
           'extra' => array(
             'timezone' => 'site',
-            'year_start' => '1950',
-            'year_end' => '2020',
+            'start_date' => '-100 years',
+            'end_date' => '+2 years',
           ),
           'mandatory' => '0',
           'email' => '1',
@@ -275,7 +275,7 @@ class WebformTestCase extends DrupalWebTestCase {
       'select_zero' => array(
         'component' => array(
           'form_key' => 'select_zero',
-          'name' => 'Select',
+          'name' => 'Select zero',
           'type' => 'select',
           'value' => '0',
           'extra' => array(
@@ -294,6 +294,50 @@ class WebformTestCase extends DrupalWebTestCase {
         'database values' => array('0'),
         'database default values' => array('0'),
       ),
+      'select_no_default' => array(
+        'component' => array(
+          'form_key' => 'select_no_default',
+          'name' => 'Select no default',
+          'type' => 'select',
+          'value' => '',
+          'extra' => array(
+            'description' => '<p>Description here</p>',
+            'items' => "one|one\ntwo|two\nthree|three\nfour|four\nfive|five\nsix|six",
+            'aslist' => 1,
+            'email' => 0,
+          ),
+          'mandatory' => '0',
+          'email' => '1',
+          'pid' => '0',
+          'weight' => '-15',
+          'page_num' => 1,
+        ),
+        'sample values' => 'two',
+        'database values' => array('two'),
+        'database default values' => array(''),
+      ),
+      'select_no_default_zero' => array(
+        'component' => array(
+          'form_key' => 'select_no_default_zero',
+          'name' => 'Select no default zero',
+          'type' => 'select',
+          'value' => '',
+          'extra' => array(
+            'description' => '<p>Tests saving zero as a value.</p>',
+            'items' => "0|zero\n1|one\n2|two",
+            'aslist' => 1,
+            'email' => 0,
+          ),
+          'mandatory' => '0',
+          'email' => '1',
+          'pid' => '0',
+          'weight' => '-15',
+          'page_num' => 1,
+        ),
+        'sample values' => '0',
+        'database values' => array('0'),
+        'database default values' => array(''),
+      ),
       'select_optgroup' => array(
         'component' => array(
           'form_key' => 'select_optgroup',
@@ -369,8 +413,8 @@ class WebformTestCase extends DrupalWebTestCase {
           'value' => 'Nov 19 1978',
           'extra' => array(
             'timezone' => 'site',
-            'year_start' => '1900',
-            'year_end' => '2050',
+            'start_date' => '-100 years',
+            'end_date' => '+2 years',
             'year_textfield' => 1,
           ),
           'mandatory' => '1',
@@ -603,7 +647,7 @@ class WebformTestCase extends DrupalWebTestCase {
    * Utility function to print out the current page being tested.
    */
   function webformPrintPage() {
-    exit($this->_browser->_page->getRaw());
+    $this->verbose($this->drupalGetContent());
   }
 }
 
