Index: modules/node/node.test
===================================================================
RCS file: /cvs/drupal/drupal/modules/node/node.test,v
retrieving revision 1.104
diff -u -p -r1.104 node.test
--- modules/node/node.test	9 Dec 2010 08:01:56 -0000	1.104
+++ modules/node/node.test	13 Dec 2010 08:30:10 -0000
@@ -1220,6 +1220,54 @@ class NodeTypeTestCase extends DrupalWeb
     $this->drupalGet('node/add/bar');
     $this->assertNoRaw('Body', t('Body field was not found.'));
   }
+
+  /**
+   * Test that node_types_rebuild() correctly handles the 'disabled' flag.
+   */
+  function testNodeTypeStatus() {
+    // Enable all core node modules, and all types should be active.
+    module_enable(array('blog', 'book', 'poll'), FALSE);
+    node_types_rebuild();
+    $types = node_type_get_types();
+    foreach (array('blog', 'book', 'poll', 'article', 'page') as $type) {
+      $this->assertTrue(isset($types[$type]), t('%type is found in node types.', array('%type' => $type)));
+      $this->assertTrue(isset($types[$type]->disabled) && empty($types[$type]->disabled), t('%type type is enabled.', array('%type' => $type)));
+    }
+
+    // Disable poll module and the respective type should be marked as disabled.
+    module_disable(array('poll'), FALSE);
+    node_types_rebuild();
+    $types = node_type_get_types();
+    $this->assertTrue(!empty($types['poll']->disabled), t("Poll module's node type disabled."));
+    $this->assertTrue(isset($types['blog']) && empty($types['blog']->disabled), t("Blog module's node type still active."));
+
+    // Disable blog module and the respective type should be marked as disabled.
+    module_disable(array('blog'), FALSE);
+    node_types_rebuild();
+    $types = node_type_get_types();
+    $this->assertTrue(!empty($types['blog']->disabled), t("Blog module's node type disabled."));
+    $this->assertTrue(!empty($types['poll']->disabled), t("Poll module's node type still disabled."));
+
+    // Disable book module and the respective type should still be active, since
+    // it is not provided by hook_node_info().
+    module_disable(array('book'), FALSE);
+    node_types_rebuild();
+    $types = node_type_get_types();
+    $this->assertTrue(isset($types['book']) && empty($types['book']->disabled), t("Book module's node type disabled."));
+    $this->assertTrue(!empty($types['blog']->disabled), t("Blog module's node type still disabled."));
+    $this->assertTrue(!empty($types['poll']->disabled), t("Poll module's node type still disabled."));
+    $this->assertTrue(isset($types['article']) && empty($types['article']->disabled), t("Article node type still active."));
+    $this->assertTrue(isset($types['page']) && empty($types['page']->disabled), t("Basic page node type still active."));
+
+    // Re-enabe the modules and verify that the types are active again.
+    module_enable(array('blog', 'book', 'poll'), FALSE);
+    node_types_rebuild();
+    $types = node_type_get_types();
+    foreach (array('blog', 'book', 'poll', 'article', 'page') as $type) {
+      $this->assertTrue(isset($types[$type]), t('%type is found in node types.', array('%type' => $type)));
+      $this->assertTrue(isset($types[$type]->disabled) && empty($types[$type]->disabled), t('%type type is enabled.', array('%type' => $type)));
+    }
+  }
 }
 
 /**
